bludit/bl-kernel/admin/views/new-content.php

490 lines
16 KiB
PHP
Raw Normal View History

<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
2018-10-17 22:35:30 +02:00
<?php
2018-11-02 00:34:42 +01:00
// Start form
2018-10-17 22:35:30 +02:00
echo Bootstrap::formOpen(array(
'id'=>'jsform',
'class'=>'d-flex flex-column h-100'
));
// Token CSRF
echo Bootstrap::formInputHidden(array(
'name'=>'tokenCSRF',
'value'=>$security->getTokenCSRF()
));
// Parent
echo Bootstrap::formInputHidden(array(
'name'=>'parent',
'value'=>''
));
// UUID
// The UUID is generated in the controller
echo Bootstrap::formInputHidden(array(
'name'=>'uuid',
'value'=>$uuid
));
// Type = published, draft, sticky, static
echo Bootstrap::formInputHidden(array(
'name'=>'type',
'value'=>'published'
));
// Cover image
echo Bootstrap::formInputHidden(array(
'name'=>'coverImage',
'value'=>''
));
// Content
echo Bootstrap::formInputHidden(array(
'name'=>'content',
'value'=>''
));
?>
<!-- TOOLBAR -->
2019-09-09 20:34:50 +02:00
<div id="jseditorToolbar" class="mb-1">
<div id="jseditorToolbarRight" class="btn-group btn-group-sm float-right" role="group" aria-label="Toolbar right">
<button type="button" class="btn btn-light" id="jsmediaManagerOpenModal" data-toggle="modal" data-target="#jsmediaManagerModal"><span class="fa fa-image"></span> <?php $L->p('Images') ?></button>
<button type="button" class="btn btn-light" id="jsoptionsSidebar" style="z-index:30"><span class="fa fa-cog"></span> <?php $L->p('Options') ?></button>
</div>
<div id="jseditorToolbarLeft">
<button id="jsbuttonSave" type="button" class="btn btn-sm btn-primary" ><?php $L->p('Save') ?></button>
<button id="jsbuttonPreview" type="button" class="btn btn-sm btn-secondary"><?php $L->p('Preview') ?></button>
<span id="jsbuttonSwitch" data-switch="publish" class="ml-2 text-secondary switch-button"><i class="fa fa-square switch-icon-publish"></i> <?php $L->p('Publish') ?></span>
2018-10-17 22:35:30 +02:00
</div>
</div>
2018-10-30 16:12:44 +01:00
<script>
2018-10-17 22:35:30 +02:00
$(document).ready(function() {
2018-10-30 16:12:44 +01:00
$("#jsoptionsSidebar").on("click", function() {
$("#jseditorSidebar").toggle();
$("#jsshadow").toggle();
2018-10-17 22:35:30 +02:00
});
2018-07-07 12:04:34 +02:00
2018-10-30 16:12:44 +01:00
$("#jsshadow").on("click", function() {
$("#jseditorSidebar").toggle();
$("#jsshadow").toggle();
2018-10-17 22:35:30 +02:00
});
});
2018-10-30 16:12:44 +01:00
</script>
<!-- SIDEBAR OPTIONS -->
<div id="jseditorSidebar">
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-link active show" id="nav-general-tab" data-toggle="tab" href="#nav-general" role="tab" aria-controls="general"><?php $L->p('General') ?></a>
<a class="nav-link" id="nav-advanced-tab" data-toggle="tab" href="#nav-advanced" role="tab" aria-controls="advanced"><?php $L->p('Advanced') ?></a>
2019-09-03 18:35:30 +02:00
<?php if (!empty($site->customFields())): ?>
2019-09-02 18:24:34 +02:00
<a class="nav-link" id="nav-custom-tab" data-toggle="tab" href="#nav-custom" role="tab" aria-controls="custom"><?php $L->p('Custom') ?></a>
<?php endif ?>
2018-10-30 16:12:44 +01:00
<a class="nav-link" id="nav-seo-tab" data-toggle="tab" href="#nav-seo" role="tab" aria-controls="seo"><?php $L->p('SEO') ?></a>
2018-07-07 12:04:34 +02:00
</div>
2018-10-30 16:12:44 +01:00
</nav>
2018-10-30 22:26:29 +01:00
<div class="tab-content pr-3 pl-3 pb-3">
2018-10-30 16:12:44 +01:00
<div id="nav-general" class="tab-pane fade show active" role="tabpanel" aria-labelledby="general-tab">
<?php
// Category
echo Bootstrap::formSelectBlock(array(
'name'=>'category',
'label'=>$L->g('Category'),
'selected'=>'',
'class'=>'',
'emptyOption'=>'- '.$L->g('Uncategorized').' -',
'options'=>$categories->getKeyNameArray()
));
2018-10-17 22:35:30 +02:00
2018-10-30 16:12:44 +01:00
// Description
echo Bootstrap::formTextareaBlock(array(
'name'=>'description',
'label'=>$L->g('Description'),
'selected'=>'',
'class'=>'',
'value'=>'',
'rows'=>5,
2018-10-30 16:12:44 +01:00
'placeholder'=>$L->get('this-field-can-help-describe-the-content')
));
?>
<!-- Cover Image -->
<label class="mt-4 mb-2 pb-2 border-bottom text-uppercase w-100"><?php $L->p('Cover Image') ?></label>
<div>
2019-03-07 16:13:47 +01:00
<img id="jscoverImagePreview" class="mx-auto d-block w-100" alt="Cover image preview" src="<?php echo HTML_PATH_CORE_IMG ?>default.svg" />
2018-10-17 22:35:30 +02:00
</div>
2018-10-30 16:12:44 +01:00
<div class="mt-2 text-center">
<button type="button" id="jsbuttonSelectCoverImage" class="btn btn-primary btn-sm"><?php echo $L->g('Select cover image') ?></button>
<button type="button" id="jsbuttonRemoveCoverImage" class="btn btn-secondary btn-sm"><?php echo $L->g('Remove cover image') ?></button>
2018-07-07 12:04:34 +02:00
</div>
2018-10-30 16:12:44 +01:00
<script>
$(document).ready(function() {
$("#jscoverImagePreview").on("click", function() {
openMediaManager();
});
$("#jsbuttonSelectCoverImage").on("click", function() {
openMediaManager();
});
$("#jsbuttonRemoveCoverImage").on("click", function() {
$("#jscoverImage").val('');
2019-03-07 16:13:47 +01:00
$("#jscoverImagePreview").attr('src', HTML_PATH_CORE_IMG+'default.svg');
2018-10-30 16:12:44 +01:00
});
});
</script>
2018-07-07 12:04:34 +02:00
</div>
2018-10-30 16:12:44 +01:00
<div id="nav-advanced" class="tab-pane fade" role="tabpanel" aria-labelledby="advanced-tab">
<?php
2018-10-17 22:35:30 +02:00
// Date
2018-10-30 16:12:44 +01:00
echo Bootstrap::formInputTextBlock(array(
2018-10-17 22:35:30 +02:00
'name'=>'date',
'label'=>$L->g('Date'),
'placeholder'=>'',
'value'=>Date::current(DB_DATE_FORMAT),
'tip'=>$L->g('date-format-format')
));
// Type
2018-10-30 16:12:44 +01:00
echo Bootstrap::formSelectBlock(array(
2019-01-04 14:18:40 +01:00
'name'=>'typeSelector',
2018-10-17 22:35:30 +02:00
'label'=>$L->g('Type'),
'selected'=>'',
'options'=>array(
'published'=>'- '.$L->g('Default').' -',
2018-10-17 22:35:30 +02:00
'sticky'=>$L->g('Sticky'),
'static'=>$L->g('Static')
),
'tip'=>''
));
2018-10-30 16:12:44 +01:00
// Position
echo Bootstrap::formInputTextBlock(array(
'name'=>'position',
'label'=>$L->g('Position'),
'tip'=>$L->g('Field used when ordering content by position'),
'value'=>$pages->nextPositionNumber()
));
// Tags
echo Bootstrap::formInputTextBlock(array(
'name'=>'tags',
'label'=>$L->g('Tags'),
'placeholder'=>'',
'tip'=>$L->g('Write the tags separated by comma')
));
2018-10-17 22:35:30 +02:00
// Parent
2018-10-30 16:12:44 +01:00
echo Bootstrap::formInputTextBlock(array(
2018-10-17 22:35:30 +02:00
'name'=>'parentTMP',
'label'=>$L->g('Parent'),
'placeholder'=>'',
'tip'=>$L->g('Start typing a page title to see a list of suggestions.'),
'value'=>''
));
// Template
2018-10-30 16:12:44 +01:00
echo Bootstrap::formInputTextBlock(array(
2018-10-17 22:35:30 +02:00
'name'=>'template',
'label'=>$L->g('Template'),
'placeholder'=>'',
'value'=>'',
'tip'=>$L->g('Write a template name to filter the page in the theme and change the style of the page.')
));
2018-10-30 16:12:44 +01:00
echo Bootstrap::formInputTextBlock(array(
'name'=>'externalCoverImage',
'label'=>$L->g('External cover image'),
'placeholder'=>"https://",
'value'=>'',
'tip'=>$L->g('Set a cover image from external URL, such as a CDN or some server dedicated for images.')
));
// Username
echo Bootstrap::formInputTextBlock(array(
'name'=>'',
'label'=>$L->g('Author'),
2018-10-17 22:35:30 +02:00
'placeholder'=>'',
2018-10-30 16:12:44 +01:00
'value'=>$login->username(),
'tip'=>'',
'disabled'=>true
2018-10-17 22:35:30 +02:00
));
2018-10-30 16:12:44 +01:00
?>
<script>
$(document).ready(function() {
// Changes in External cover image input
$("#jsexternalCoverImage").change(function() {
$("#jscoverImage").val( $(this).val() );
});
2018-10-17 22:35:30 +02:00
2018-10-30 16:12:44 +01:00
// Generate slug when the user type the title
$("#jstitle").keyup(function() {
var text = $(this).val();
var parent = $("#jsparent").val();
var currentKey = "";
var ajax = new bluditAjax();
var callBack = $("#jsslug");
ajax.generateSlug(text, parent, currentKey, callBack);
});
2018-10-17 22:35:30 +02:00
2018-10-30 16:12:44 +01:00
// Datepicker
$("#jsdate").datetimepicker({format:DB_DATE_FORMAT});
// Parent autocomplete
var parentsXHR;
var parentsList; // Keep the parent list returned to get the key by the title page
$("#jsparentTMP").autoComplete({
minChars: 1,
source: function(term, response) {
// Prevent call inmediatly another ajax request
try { parentsXHR.abort(); } catch(e){}
// Get the list of parent pages by title (term)
parentsXHR = $.getJSON(HTML_PATH_ADMIN_ROOT+"ajax/get-parents", {query: term},
function(data) {
parentsList = data;
term = term.toLowerCase();
var matches = [];
for (var title in data) {
if (~title.toLowerCase().indexOf(term))
matches.push(title);
}
response(matches);
});
},
onSelect: function(event, term, item) {
// parentsList = array( pageTitle => pageKey )
var parentKey = parentsList[sanitizeHTML(term)];
2018-10-30 16:12:44 +01:00
$("#jsparent").attr("value", parentKey);
}
});
});
</script>
</div>
2019-09-03 18:35:30 +02:00
<?php if (!empty($site->customFields())): ?>
2019-09-02 18:24:34 +02:00
<div id="nav-custom" class="tab-pane fade" role="tabpanel" aria-labelledby="custom-tab">
<?php
2019-09-03 18:35:30 +02:00
$customFields = $site->customFields();
2019-09-09 20:34:50 +02:00
foreach ($customFields as $field=>$options) {
if ( !isset($options['position']) ) {
if ($options['type']=="string") {
echo Bootstrap::formInputTextBlock(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'value'=>(isset($options['default'])?$options['default']:''),
'tip'=>(isset($options['tip'])?$options['tip']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:'')
));
} elseif ($options['type']=="bool") {
echo Bootstrap::formCheckbox(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
'checked'=>(isset($options['checked'])?true:false),
'labelForCheckbox'=>(isset($options['tip'])?$options['tip']:'')
));
}
2019-09-02 18:24:34 +02:00
}
}
?>
</div>
<?php endif ?>
2018-10-30 16:12:44 +01:00
<div id="nav-seo" class="tab-pane fade" role="tabpanel" aria-labelledby="seo-tab">
<?php
2018-10-17 22:35:30 +02:00
// Friendly URL
2018-10-30 16:12:44 +01:00
echo Bootstrap::formInputTextBlock(array(
2018-10-17 22:35:30 +02:00
'name'=>'slug',
'tip'=>$L->g('URL associated with the content'),
'label'=>$L->g('Friendly URL'),
'placeholder'=>$L->g('Leave empty for autocomplete by Bludit.')
));
2018-10-30 16:12:44 +01:00
// Robots
2018-10-17 22:35:30 +02:00
echo Bootstrap::formCheckbox(array(
'name'=>'noindex',
'label'=>'Robots',
'labelForCheckbox'=>$L->g('apply-code-noindex-code-to-this-page'),
'placeholder'=>'',
'checked'=>false,
'tip'=>$L->g('This tells search engines not to show this page in their search results.')
));
2018-10-30 16:12:44 +01:00
// Robots
2018-10-17 22:35:30 +02:00
echo Bootstrap::formCheckbox(array(
'name'=>'nofollow',
'label'=>'',
'labelForCheckbox'=>$L->g('apply-code-nofollow-code-to-this-page'),
'placeholder'=>'',
'checked'=>false,
'tip'=>$L->g('This tells search engines not to follow links on this page.')
));
2018-10-30 16:12:44 +01:00
// Robots
2018-10-17 22:35:30 +02:00
echo Bootstrap::formCheckbox(array(
'name'=>'noarchive',
'label'=>'',
'labelForCheckbox'=>$L->g('apply-code-noarchive-code-to-this-page'),
'placeholder'=>'',
'checked'=>false,
'tip'=>$L->g('This tells search engines not to save a cached copy of this page.')
));
?>
</div>
</div>
2018-10-30 16:12:44 +01:00
</div>
2018-10-17 22:35:30 +02:00
2019-09-09 20:34:50 +02:00
<!-- Custom fields: TOP -->
<?php
$customFields = $site->customFields();
foreach ($customFields as $field=>$options) {
if ( isset($options['position']) && ($options['position']=='top') ) {
if ($options['type']=="string") {
echo Bootstrap::formInputTextBlock(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'value'=>(isset($options['default'])?$options['default']:''),
'tip'=>(isset($options['tip'])?$options['tip']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
'class'=>'mb-2',
'labelClass'=>'mb-2 pb-2 border-bottom text-uppercase w-100'
));
} elseif ($options['type']=="bool") {
echo Bootstrap::formCheckbox(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
'checked'=>(isset($options['checked'])?true:false),
'labelForCheckbox'=>(isset($options['tip'])?$options['tip']:''),
'class'=>'mb-2',
'labelClass'=>'mb-2 pb-2 border-bottom text-uppercase w-100'
));
}
}
}
?>
2018-10-30 16:12:44 +01:00
<!-- Title -->
2019-09-09 20:34:50 +02:00
<div id="jseditorTitle" class="form-group mb-1">
2018-10-30 16:12:44 +01:00
<input id="jstitle" name="title" type="text" class="form-control form-control-lg rounded-0" value="" placeholder="<?php $L->p('Enter title') ?>">
2018-10-17 22:35:30 +02:00
</div>
2018-10-30 16:12:44 +01:00
<!-- Editor -->
<textarea id="jseditor" class="editable h-100 mb-1"></textarea>
2018-10-30 16:12:44 +01:00
2019-09-09 20:34:50 +02:00
<!-- Custom fields: BOTTOM -->
<?php
$customFields = $site->customFields();
foreach ($customFields as $field=>$options) {
if ( isset($options['position']) && ($options['position']=='bottom') ) {
if ($options['type']=="string") {
echo Bootstrap::formInputTextBlock(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'value'=>(isset($options['default'])?$options['default']:''),
'tip'=>(isset($options['tip'])?$options['tip']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
'class'=>'mt-2',
'labelClass'=>'mb-2 pb-2 border-bottom text-uppercase w-100'
));
} elseif ($options['type']=="bool") {
echo Bootstrap::formCheckbox(array(
'name'=>'custom['.$field.']',
'label'=>(isset($options['label'])?$options['label']:''),
'placeholder'=>(isset($options['placeholder'])?$options['placeholder']:''),
'checked'=>(isset($options['checked'])?true:false),
'labelForCheckbox'=>(isset($options['tip'])?$options['tip']:''),
'class'=>'mt-2',
'labelClass'=>'mb-2 pb-2 border-bottom text-uppercase w-100'
));
}
}
}
?>
</form>
2015-05-05 03:00:01 +02:00
2018-07-10 18:37:46 +02:00
<!-- Modal for Media Manager -->
<?php include(PATH_ADMIN_THEMES.'booty/html/media.php'); ?>
2015-05-05 03:00:01 +02:00
<script>
$(document).ready(function() {
2017-01-10 17:43:38 +01:00
// Define function if they doesn't exist
// This helps if the user doesn't activate any plugin as editor
if (typeof editorGetContent != "function") {
window.editorGetContent = function(){
return $("#jseditor").val();
};
}
if (typeof editorInsertMedia != "function") {
window.editorInsertMedia = function(filename){
$("#jseditor").val($('#jseditor').val()+'<img src="'+filename+'" alt="">');
};
}
// Button switch
$("#jsbuttonSwitch").on("click", function() {
if ($(this).data("switch")=="publish") {
$(this).html('<i class="fa fa-square switch-icon-draft"></i> <?php $L->p('Draft') ?>');
$(this).data("switch", "draft");
} else {
$(this).html('<i class="fa fa-square switch-icon-publish"></i> <?php $L->p('Publish') ?>');
$(this).data("switch", "publish");
}
});
// Button preview
$("#jsbuttonPreview").on("click", function() {
var uuid = $("#jsuuid").val();
var title = $("#jstitle").val();
var content = editorGetContent();
2019-05-10 11:35:23 +02:00
bluditAjax.saveAsDraft(uuid, title, content).then(function(data) {
window.open("<?php echo DOMAIN_PAGES.'autosave-'.$uuid.'?preview='.md5('autosave-'.$uuid) ?>", "_blank");
});
});
2019-01-04 14:18:40 +01:00
// Button Save
2018-10-17 22:35:30 +02:00
$("#jsbuttonSave").on("click", function() {
// If the switch is setted to "published", get the value from the selector
if ($("#jsbuttonSwitch").data("switch")=="publish") {
var value = $("#jstypeSelector option:selected").val();
$("#jstype").val(value);
} else {
$("#jstype").val("draft");
2019-01-04 14:18:40 +01:00
}
2018-05-08 23:25:18 +02:00
2018-10-17 22:35:30 +02:00
// Get the content
$("#jscontent").val( editorGetContent() );
2018-10-17 22:35:30 +02:00
// Submit the form
$("#jsform").submit();
2018-05-08 00:15:40 +02:00
});
2018-10-21 15:00:15 +02:00
// Autosave
var currentContent = editorGetContent();
2018-05-08 00:15:40 +02:00
setInterval(function() {
var uuid = $("#jsuuid").val();
2019-05-10 11:35:23 +02:00
var title = $("#jstitle").val() + "[<?php $L->p('Autosave') ?>]";
2018-05-08 00:15:40 +02:00
var content = editorGetContent();
2019-05-10 11:35:23 +02:00
// Autosave when content has at least 100 characters
if (content.length<100) {
return false;
}
// Autosave only when the user change the content
if (currentContent!=content) {
currentContent = content;
2019-05-10 11:35:23 +02:00
bluditAjax.saveAsDraft(uuid, title, content).then(function(data) {
if (data.status==0) {
2019-05-10 11:35:23 +02:00
showAlert("<?php $L->p('Autosave') ?>");
}
});
}
2018-07-07 12:04:34 +02:00
},1000*60*AUTOSAVE_INTERVAL);
2018-05-08 00:15:40 +02:00
2015-05-05 03:00:01 +02:00
});
</script>