Autosave function
This commit is contained in:
parent
c06295a41f
commit
eb6966723d
|
@ -26,4 +26,4 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// Title of the page
|
// Title of the page
|
||||||
$layout['title'] .= ' - '.$Language->g('New content');
|
$layout['title'] = $Language->g('New content').' - '.$layout['title'];
|
|
@ -3,6 +3,18 @@ html {
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
ALERT
|
||||||
|
*/
|
||||||
|
#alert {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
right: 0px;
|
||||||
|
padding: 16px 90px;
|
||||||
|
border-radius: 0px;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SIDEBAR
|
SIDEBAR
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!-- Alert -->
|
||||||
|
<script>
|
||||||
|
function showAlert(text) {
|
||||||
|
$("#alert").html(text);
|
||||||
|
$("#alert").slideDown().delay(3500).slideUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
<?php if (Alert::defined()): ?>
|
||||||
|
setTimeout(function(){ showAlert("<?php echo Alert::get() ?>") }, 500);
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
$(window).click(function() {
|
||||||
|
$("#alert").hide();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="alert" class="alert <?php echo (Alert::status()==ALERT_STATUS_FAIL)?'alert-danger':'alert-success' ?>"></div>
|
|
@ -3,9 +3,11 @@
|
||||||
$listOfFiles = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS, '*', '*', $GLOBALS['BLUDIT_MEDIA_MANAGER_SORT_BY_DATE'], false);
|
$listOfFiles = Filesystem::listFiles(PATH_UPLOADS_THUMBNAILS, '*', '*', $GLOBALS['BLUDIT_MEDIA_MANAGER_SORT_BY_DATE'], false);
|
||||||
$listOfFilesByPage = array_chunk($listOfFiles, $GLOBALS['BLUDIT_MEDIA_MANAGER_AMOUNT_OF_FILES']);
|
$listOfFilesByPage = array_chunk($listOfFiles, $GLOBALS['BLUDIT_MEDIA_MANAGER_AMOUNT_OF_FILES']);
|
||||||
$preLoadFiles = array();
|
$preLoadFiles = array();
|
||||||
|
if (!empty($listOfFilesByPage[0])) {
|
||||||
foreach ($listOfFilesByPage[0] as $file) {
|
foreach ($listOfFilesByPage[0] as $file) {
|
||||||
array_push($preLoadFiles, basename($file));
|
array_push($preLoadFiles, basename($file));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Amount of pages for the paginator
|
// Amount of pages for the paginator
|
||||||
$amountOfPages = count($listOfFilesByPage);
|
$amountOfPages = count($listOfFilesByPage);
|
||||||
?>
|
?>
|
||||||
|
@ -42,7 +44,7 @@ $amountOfPages = count($listOfFilesByPage);
|
||||||
<h3 class="mt-4 mb-3">Manage</h3>
|
<h3 class="mt-4 mb-3">Manage</h3>
|
||||||
|
|
||||||
<!-- Table for list files -->
|
<!-- Table for list files -->
|
||||||
<table id="jsbluditMediaTable" class="table"></table>
|
<table id="jsbluditMediaTable" class="table">There are not images.</table>
|
||||||
|
|
||||||
<!-- Paginator -->
|
<!-- Paginator -->
|
||||||
<nav>
|
<nav>
|
||||||
|
@ -90,7 +92,7 @@ function displayFiles(files) {
|
||||||
'<td class="information">'+
|
'<td class="information">'+
|
||||||
'<div>'+filename+'</div>'+
|
'<div>'+filename+'</div>'+
|
||||||
'<div>'+
|
'<div>'+
|
||||||
'<button onClick="insertMedia(\''+filename+'\'); closeMediaManager();" type="button" class="btn btn-link p-0 mr-2">Insert</button>'+
|
'<button onClick="editorInsertMedia(\''+filename+'\'); closeMediaManager();" type="button" class="btn btn-link p-0 mr-2">Insert</button>'+
|
||||||
'<button onClick="deleteMedia(\''+filename+'\')" type="button" class="btn btn-link p-0 mr-2">Delete</button>'+
|
'<button onClick="deleteMedia(\''+filename+'\')" type="button" class="btn btn-link p-0 mr-2">Delete</button>'+
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'</td>'+
|
'</td>'+
|
||||||
|
|
|
@ -28,6 +28,13 @@
|
||||||
));
|
));
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<!-- Javascript -->
|
||||||
|
<?php
|
||||||
|
echo '<script>';
|
||||||
|
include(PATH_CORE_JS.'bludit-ajax.php');
|
||||||
|
echo '</script>';
|
||||||
|
?>
|
||||||
|
|
||||||
<!-- Plugins -->
|
<!-- Plugins -->
|
||||||
<?php Theme::plugins('adminHead') ?>
|
<?php Theme::plugins('adminHead') ?>
|
||||||
</head>
|
</head>
|
||||||
|
@ -37,7 +44,10 @@
|
||||||
<?php Theme::plugins('adminBodyBegin') ?>
|
<?php Theme::plugins('adminBodyBegin') ?>
|
||||||
|
|
||||||
<!-- Javascript variables generated by PHP -->
|
<!-- Javascript variables generated by PHP -->
|
||||||
<?php include(PATH_JS.'variables.php') ?>
|
<?php include(PATH_CORE_JS.'variables.php') ?>
|
||||||
|
|
||||||
|
<!-- Alert -->
|
||||||
|
<?php include('html/alert.php'); ?>
|
||||||
|
|
||||||
<!-- TOPBAR -->
|
<!-- TOPBAR -->
|
||||||
<?php include('html/topbar.php'); ?>
|
<?php include('html/topbar.php'); ?>
|
||||||
|
|
|
@ -10,9 +10,12 @@
|
||||||
<a class="nav-link " id="options-tab" data-toggle="tab" href="#options" role="tab" aria-controls="options" aria-selected="false">Options</a>
|
<a class="nav-link " id="options-tab" data-toggle="tab" href="#options" role="tab" aria-controls="options" aria-selected="false">Options</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<form class="tab-content mt-3" id="dynamicTabContent">
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
echo Bootstrap::formOpen(array(
|
||||||
|
'id'=>'jsform',
|
||||||
|
'class'=>'tab-content mt-4'
|
||||||
|
));
|
||||||
|
|
||||||
// Token CSRF
|
// Token CSRF
|
||||||
echo Bootstrap::formInputHidden(array(
|
echo Bootstrap::formInputHidden(array(
|
||||||
'name'=>'tokenCSRF',
|
'name'=>'tokenCSRF',
|
||||||
|
@ -25,6 +28,12 @@
|
||||||
'value'=>$page->parent()
|
'value'=>$page->parent()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// UUID
|
||||||
|
echo Bootstrap::formInputHidden(array(
|
||||||
|
'name'=>'uuid',
|
||||||
|
'value'=>$dbPages->generateUUID()
|
||||||
|
));
|
||||||
|
|
||||||
// Status = published, draft, sticky, static
|
// Status = published, draft, sticky, static
|
||||||
echo Bootstrap::formInputHidden(array(
|
echo Bootstrap::formInputHidden(array(
|
||||||
'name'=>'status',
|
'name'=>'status',
|
||||||
|
@ -56,9 +65,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group mt-2">
|
<div class="form-group mt-2">
|
||||||
<button type="button" class="btn btn-primary">Save</button>
|
<button type="submit" class="btn btn-primary">Save</button>
|
||||||
<button type="button" class="btn" id="jssaveAsDraft">Save as draft</button>
|
<button type="button" class="btn" id="jssaveAsDraft">Save as draft</button>
|
||||||
<button type="button" class="btn">Cancel</button>
|
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn"><?php echo $L->g('Cancel') ?></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -109,18 +118,15 @@
|
||||||
echo Bootstrap::formSelect(array(
|
echo Bootstrap::formSelect(array(
|
||||||
'name'=>'category',
|
'name'=>'category',
|
||||||
'label'=>'Category',
|
'label'=>'Category',
|
||||||
'selected'=>'',
|
'selected'=>$page->categoryKey(),
|
||||||
'options'=>array(
|
'options'=>$dbCategories->getKeyNameArray()
|
||||||
''=>'- Uncategorized -',
|
|
||||||
'music'=>'Music',
|
|
||||||
'videos'=>'Videos'
|
|
||||||
)
|
|
||||||
));
|
));
|
||||||
|
|
||||||
// Tags
|
// Tags
|
||||||
echo Bootstrap::formInputText(array(
|
echo Bootstrap::formInputText(array(
|
||||||
'name'=>'tags',
|
'name'=>'tags',
|
||||||
'label'=>'Tags',
|
'label'=>'Tags',
|
||||||
|
'value'=>$page->tags(),
|
||||||
'placeholder'=>'Tags separeted by comma'
|
'placeholder'=>'Tags separeted by comma'
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -129,7 +135,8 @@
|
||||||
'name'=>'description',
|
'name'=>'description',
|
||||||
'label'=>'Description',
|
'label'=>'Description',
|
||||||
'placeholder'=>'Small description about the content',
|
'placeholder'=>'Small description about the content',
|
||||||
'rows'=>'4'
|
'rows'=>'4',
|
||||||
|
'value'=>$page->description()
|
||||||
));
|
));
|
||||||
|
|
||||||
echo Bootstrap::formTitle(array('title'=>'Advanced'));
|
echo Bootstrap::formTitle(array('title'=>'Advanced'));
|
||||||
|
@ -146,7 +153,7 @@
|
||||||
echo Bootstrap::formSelect(array(
|
echo Bootstrap::formSelect(array(
|
||||||
'name'=>'type',
|
'name'=>'type',
|
||||||
'label'=>'Type',
|
'label'=>'Type',
|
||||||
'selected'=>'',
|
'selected'=>$page->status(),
|
||||||
'options'=>array(
|
'options'=>array(
|
||||||
''=>'- Default -',
|
''=>'- Default -',
|
||||||
'sticky'=>'Sticky',
|
'sticky'=>'Sticky',
|
||||||
|
@ -158,7 +165,8 @@
|
||||||
echo Bootstrap::formInputText(array(
|
echo Bootstrap::formInputText(array(
|
||||||
'name'=>'parentTMP',
|
'name'=>'parentTMP',
|
||||||
'label'=>'Parent',
|
'label'=>'Parent',
|
||||||
'placeholder'=>'Start writing the title of the page parent'
|
'placeholder'=>'Start writing the title of the page parent',
|
||||||
|
'value'=>($page->parent()?$page->parentMethod('title'):'')
|
||||||
));
|
));
|
||||||
|
|
||||||
// Position
|
// Position
|
||||||
|
@ -173,6 +181,7 @@
|
||||||
echo Bootstrap::formInputText(array(
|
echo Bootstrap::formInputText(array(
|
||||||
'name'=>'slug',
|
'name'=>'slug',
|
||||||
'label'=>'Friendly URL',
|
'label'=>'Friendly URL',
|
||||||
|
'value'=>$page->slug(),
|
||||||
'placeholder'=>'Leave empty for automaticly complete'
|
'placeholder'=>'Leave empty for automaticly complete'
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -180,7 +189,8 @@
|
||||||
echo Bootstrap::formInputText(array(
|
echo Bootstrap::formInputText(array(
|
||||||
'name'=>'template',
|
'name'=>'template',
|
||||||
'label'=>'Template',
|
'label'=>'Template',
|
||||||
'placeholder'=>''
|
'placeholder'=>'',
|
||||||
|
'value'=>$page->template()
|
||||||
));
|
));
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@ -202,6 +212,18 @@ $(document).ready(function() {
|
||||||
$("#jsstatus").val(status);
|
$("#jsstatus").val(status);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Autosave
|
||||||
|
setInterval(
|
||||||
|
function() {
|
||||||
|
var uuid = $("#jsuuid").val();
|
||||||
|
var title = $("#jstitle").val();
|
||||||
|
var content = $("#jscontent").val();
|
||||||
|
var ajax = new bluditAjax()
|
||||||
|
ajax.autosave(uuid, title, content);
|
||||||
|
},
|
||||||
|
10*1000
|
||||||
|
);
|
||||||
|
|
||||||
// Template autocomplete
|
// Template autocomplete
|
||||||
$('input[name="template"]').autoComplete({
|
$('input[name="template"]').autoComplete({
|
||||||
minChars: 2,
|
minChars: 2,
|
||||||
|
|
|
@ -10,9 +10,12 @@
|
||||||
<a class="nav-link " id="options-tab" data-toggle="tab" href="#options" role="tab" aria-controls="options" aria-selected="false">Options</a>
|
<a class="nav-link " id="options-tab" data-toggle="tab" href="#options" role="tab" aria-controls="options" aria-selected="false">Options</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<form class="tab-content mt-3" id="dynamicTabContent">
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
echo Bootstrap::formOpen(array(
|
||||||
|
'id'=>'jsform',
|
||||||
|
'class'=>'tab-content mt-4'
|
||||||
|
));
|
||||||
|
|
||||||
// Token CSRF
|
// Token CSRF
|
||||||
echo Bootstrap::formInputHidden(array(
|
echo Bootstrap::formInputHidden(array(
|
||||||
'name'=>'tokenCSRF',
|
'name'=>'tokenCSRF',
|
||||||
|
@ -25,6 +28,12 @@
|
||||||
'value'=>''
|
'value'=>''
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// UUID
|
||||||
|
echo Bootstrap::formInputHidden(array(
|
||||||
|
'name'=>'uuid',
|
||||||
|
'value'=>$dbPages->generateUUID()
|
||||||
|
));
|
||||||
|
|
||||||
// Status = published, draft, sticky, static
|
// Status = published, draft, sticky, static
|
||||||
echo Bootstrap::formInputHidden(array(
|
echo Bootstrap::formInputHidden(array(
|
||||||
'name'=>'status',
|
'name'=>'status',
|
||||||
|
@ -50,9 +59,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group mt-2">
|
<div class="form-group mt-2">
|
||||||
<button type="button" class="btn btn-primary">Save</button>
|
<button type="submit" class="btn btn-primary">Save</button>
|
||||||
<button type="button" class="btn" id="jssaveAsDraft">Save as draft</button>
|
<button type="button" class="btn" id="jssaveAsDraft">Save as draft</button>
|
||||||
<button type="button" class="btn">Cancel</button>
|
<a href="<?php echo HTML_PATH_ADMIN_ROOT ?>dashboard" class="btn"><?php echo $L->g('Cancel') ?></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -97,11 +106,7 @@
|
||||||
'name'=>'category',
|
'name'=>'category',
|
||||||
'label'=>'Category',
|
'label'=>'Category',
|
||||||
'selected'=>'',
|
'selected'=>'',
|
||||||
'options'=>array(
|
'options'=>$dbCategories->getKeyNameArray()
|
||||||
''=>'- Uncategorized -',
|
|
||||||
'music'=>'Music',
|
|
||||||
'videos'=>'Videos'
|
|
||||||
)
|
|
||||||
));
|
));
|
||||||
|
|
||||||
// Tags
|
// Tags
|
||||||
|
@ -125,7 +130,8 @@
|
||||||
echo Bootstrap::formInputText(array(
|
echo Bootstrap::formInputText(array(
|
||||||
'name'=>'date',
|
'name'=>'date',
|
||||||
'label'=>'Date',
|
'label'=>'Date',
|
||||||
'placeholder'=>'YYYY-MM-DD hh:mm:ss'
|
'placeholder'=>'YYYY-MM-DD hh:mm:ss',
|
||||||
|
'value'=>Date::current(DB_DATE_FORMAT)
|
||||||
));
|
));
|
||||||
|
|
||||||
// Type
|
// Type
|
||||||
|
@ -178,15 +184,36 @@ $(document).ready(function() {
|
||||||
// Button Save as draft
|
// Button Save as draft
|
||||||
$("#jssaveAsDraft").on("click", function() {
|
$("#jssaveAsDraft").on("click", function() {
|
||||||
$("#jsstatus").val("draft");
|
$("#jsstatus").val("draft");
|
||||||
$("#dynamicTabContent").submit();
|
$("#jsform").submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Type selector modiefied the status
|
// Type selector modified the status hidden field
|
||||||
$("#jstype").on("change", function() {
|
$("#jstype").on("change", function() {
|
||||||
var status = $("#jstype option:selected").val();
|
var status = $("#jstype option:selected").val();
|
||||||
$("#jsstatus").val(status);
|
$("#jsstatus").val(status);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 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();
|
||||||
|
ajax.generateSlug(text, parent, currentKey, $("#jsslug"));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Autosave interval
|
||||||
|
setInterval(function() {
|
||||||
|
var uuid = $("#jsuuid").val();
|
||||||
|
var title = $("#jstitle").val();
|
||||||
|
var content = editorGetContent();
|
||||||
|
var ajax = new bluditAjax();
|
||||||
|
// showAlert is the function to display an alert defined in alert.php
|
||||||
|
ajax.autosave(uuid, title, content, showAlert);
|
||||||
|
},
|
||||||
|
10*1000
|
||||||
|
);
|
||||||
|
|
||||||
// Template autocomplete
|
// Template autocomplete
|
||||||
$('input[name="template"]').autoComplete({
|
$('input[name="template"]').autoComplete({
|
||||||
minChars: 2,
|
minChars: 2,
|
||||||
|
|
|
@ -22,7 +22,7 @@ echo Bootstrap::pageTitle(array('title'=>$L->g('Settings'), 'icon'=>'cog'));
|
||||||
<?php
|
<?php
|
||||||
echo Bootstrap::formOpen(array(
|
echo Bootstrap::formOpen(array(
|
||||||
'id'=>'dynamicTabContent',
|
'id'=>'dynamicTabContent',
|
||||||
'class'=>'tab-content mt-4',
|
'class'=>'tab-content mt-4'
|
||||||
));
|
));
|
||||||
|
|
||||||
// Token CSRF
|
// Token CSRF
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php defined('BLUDIT') or die('Bludit CMS.');
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
|
||||||
|
// $_POST
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// (string) $_POST['title']
|
||||||
|
$title = isset($_POST['title']) ? $_POST['title'] : false;
|
||||||
|
// (string) $_POST['content']
|
||||||
|
$content = isset($_POST['content']) ? $_POST['content'] : false;
|
||||||
|
// (string) $_POST['uuid']
|
||||||
|
$uuid = isset($_POST['uuid']) ? $_POST['uuid'] : false;
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Check UUID
|
||||||
|
if (empty($uuid)) {
|
||||||
|
exit (json_encode(array(
|
||||||
|
'status'=>1,
|
||||||
|
'message'=>'Autosave fail. UUID not defined.'
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check content length to create the autosave page
|
||||||
|
if (Text::length($content)<100) {
|
||||||
|
exit (json_encode(array(
|
||||||
|
'status'=>1,
|
||||||
|
'message'=>'Autosave not completed. The content length is less than 100 characters.'
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
$autosaveUUID = 'autosave-'.$uuid;
|
||||||
|
$page = array(
|
||||||
|
'uuid'=>$autosaveUUID,
|
||||||
|
'key'=>$autosaveUUID,
|
||||||
|
'slug'=>$autosaveUUID,
|
||||||
|
'title'=>$title.' [ Autosave ] ',
|
||||||
|
'content'=>$content,
|
||||||
|
'status'=>'draft'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Get the page key by the UUID
|
||||||
|
$pageKey = $dbPages->getByUUID($autosaveUUID);
|
||||||
|
|
||||||
|
// if pageKey is empty means the autosave page doesn't exist
|
||||||
|
if (empty($pageKey)) {
|
||||||
|
createPage($page);
|
||||||
|
} else {
|
||||||
|
editPage($page);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit (json_encode(array(
|
||||||
|
'status'=>0,
|
||||||
|
'message'=>'Autosave successfully.',
|
||||||
|
'uuid'=>$autosaveUUID
|
||||||
|
)));
|
||||||
|
|
||||||
|
?>
|
|
@ -23,6 +23,9 @@ if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) )
|
||||||
$_COOKIE = array_map('stripslashes', $_COOKIE);
|
$_COOKIE = array_map('stripslashes', $_COOKIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Boot plugins rules
|
||||||
|
include(PATH_RULES.'60.plugins.php');
|
||||||
|
|
||||||
// --- AJAX ---
|
// --- AJAX ---
|
||||||
if ($layout['slug']==='ajax') {
|
if ($layout['slug']==='ajax') {
|
||||||
if ($Login->isLogged()) {
|
if ($Login->isLogged()) {
|
||||||
|
@ -34,12 +37,12 @@ if ($layout['slug']==='ajax') {
|
||||||
include(PATH_AJAX.$layout['parameters'].'.php');
|
include(PATH_AJAX.$layout['parameters'].'.php');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
// --- ADMIN AREA ---
|
// --- ADMIN AREA ---
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Boot rules
|
// Boot rules
|
||||||
include(PATH_RULES.'60.plugins.php');
|
|
||||||
include(PATH_RULES.'69.pages.php');
|
include(PATH_RULES.'69.pages.php');
|
||||||
include(PATH_RULES.'99.header.php');
|
include(PATH_RULES.'99.header.php');
|
||||||
include(PATH_RULES.'99.paginator.php');
|
include(PATH_RULES.'99.paginator.php');
|
||||||
|
|
|
@ -31,8 +31,7 @@ define('PATH_ABSTRACT', PATH_KERNEL.'abstract'.DS);
|
||||||
define('PATH_RULES', PATH_KERNEL.'boot'.DS.'rules'.DS);
|
define('PATH_RULES', PATH_KERNEL.'boot'.DS.'rules'.DS);
|
||||||
define('PATH_HELPERS', PATH_KERNEL.'helpers'.DS);
|
define('PATH_HELPERS', PATH_KERNEL.'helpers'.DS);
|
||||||
define('PATH_AJAX', PATH_KERNEL.'ajax'.DS);
|
define('PATH_AJAX', PATH_KERNEL.'ajax'.DS);
|
||||||
define('PATH_JS', PATH_KERNEL.'js'.DS);
|
define('PATH_CORE_JS', PATH_KERNEL.'js'.DS);
|
||||||
define('PATH_CSS', PATH_KERNEL.'css'.DS);
|
|
||||||
|
|
||||||
define('PATH_PAGES', PATH_CONTENT.'pages'.DS);
|
define('PATH_PAGES', PATH_CONTENT.'pages'.DS);
|
||||||
define('PATH_DATABASES', PATH_CONTENT.'databases'.DS);
|
define('PATH_DATABASES', PATH_CONTENT.'databases'.DS);
|
||||||
|
|
|
@ -77,7 +77,9 @@ class dbPages extends dbJSON
|
||||||
$key = $this->generateKey($args['slug'], $args['parent']);
|
$key = $this->generateKey($args['slug'], $args['parent']);
|
||||||
|
|
||||||
// Generate UUID
|
// Generate UUID
|
||||||
|
if (empty($args['uuid'])) {
|
||||||
$args['uuid'] = $this->generateUUID();
|
$args['uuid'] = $this->generateUUID();
|
||||||
|
}
|
||||||
|
|
||||||
// Validate date
|
// Validate date
|
||||||
if (!Valid::date($args['date'], DB_DATE_FORMAT)) {
|
if (!Valid::date($args['date'], DB_DATE_FORMAT)) {
|
||||||
|
@ -535,10 +537,31 @@ class dbPages extends dbJSON
|
||||||
return $a['date']<$b['date'];
|
return $a['date']<$b['date'];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function generateUUID() {
|
function generateUUID() {
|
||||||
return md5( uniqid().time() );
|
return md5( uniqid().time() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the UUID of a page, by the page key
|
||||||
|
function getUUID($key)
|
||||||
|
{
|
||||||
|
if ($this->exists($key)) {
|
||||||
|
return $this->db[$key]['uuid'];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the page key by the uuid
|
||||||
|
function getByUUID($uuid)
|
||||||
|
{
|
||||||
|
foreach ($this->db as $key=>$value) {
|
||||||
|
if ($value['uuid']==$uuid) {
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Returns string without HTML tags and truncated
|
// Returns string without HTML tags and truncated
|
||||||
private function generateSlug($text, $truncateLength=60) {
|
private function generateSlug($text, $truncateLength=60) {
|
||||||
$tmpslug = Text::removeHTMLTags($text);
|
$tmpslug = Text::removeHTMLTags($text);
|
||||||
|
|
|
@ -394,6 +394,12 @@ function createPage($args) {
|
||||||
global $syslog;
|
global $syslog;
|
||||||
global $Language;
|
global $Language;
|
||||||
|
|
||||||
|
// Check if the autosave page exists for this new page and delete it
|
||||||
|
$pageKey = $dbPages->getByUUID('autosave-'.$args['uuid']);
|
||||||
|
if (!empty($pageKey)) {
|
||||||
|
deletePage($pageKey);
|
||||||
|
}
|
||||||
|
|
||||||
// The user is always the one loggued
|
// The user is always the one loggued
|
||||||
$args['username'] = Session::get('username');
|
$args['username'] = Session::get('username');
|
||||||
if ( empty($args['username']) ) {
|
if ( empty($args['username']) ) {
|
||||||
|
@ -441,6 +447,12 @@ function editPage($args) {
|
||||||
global $dbPages;
|
global $dbPages;
|
||||||
global $syslog;
|
global $syslog;
|
||||||
|
|
||||||
|
// Check if the autosave page exists for this new page and delete it
|
||||||
|
$pageKey = $dbPages->getByUUID('autosave-'.$args['uuid']);
|
||||||
|
if (!empty($pageKey)) {
|
||||||
|
deletePage($pageKey);
|
||||||
|
}
|
||||||
|
|
||||||
// Check the key is not empty
|
// Check the key is not empty
|
||||||
if (empty($args['key'])) {
|
if (empty($args['key'])) {
|
||||||
Log::set('Function editPage()'.LOG_SEP.'Empty key.');
|
Log::set('Function editPage()'.LOG_SEP.'Empty key.');
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
class bluditAjax {
|
||||||
|
|
||||||
|
autosave(uuid, title, content, callBack) {
|
||||||
|
var ajaxRequest;
|
||||||
|
if (ajaxRequest) {
|
||||||
|
ajaxRequest.abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (content.length<100) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ajaxRequest = $.ajax({
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
tokenCSRF: tokenCSRF, // token from env variables
|
||||||
|
uuid: uuid,
|
||||||
|
title: title,
|
||||||
|
content: content
|
||||||
|
},
|
||||||
|
url: "<?php echo HTML_PATH_ADMIN_ROOT ?>ajax/save-as-draft"
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.done(function (response, textStatus, jqXHR) {
|
||||||
|
console.log("Bludit AJAX: autosave(): done handler");
|
||||||
|
callBack("Autosave success");
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
|
||||||
|
console.log("Bludit AJAX: autosave(): fail handler");
|
||||||
|
callBack("Autosave failure");
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.always(function () {
|
||||||
|
console.log("Bludit AJAX: autosave(): always handler");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
generateSlug(text, parentKey, currentKey, callBack) {
|
||||||
|
var ajaxRequest;
|
||||||
|
if (ajaxRequest) {
|
||||||
|
ajaxRequest.abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
ajaxRequest = $.ajax({
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
tokenCSRF: tokenCSRF,
|
||||||
|
text: text,
|
||||||
|
parentKey: parentKey,
|
||||||
|
currentKey: currentKey
|
||||||
|
},
|
||||||
|
url: "<?php echo HTML_PATH_ADMIN_ROOT.'ajax/generate-slug' ?>"
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.done(function (response, textStatus, jqXHR) {
|
||||||
|
console.log("Bludit AJAX: generateSlug(): done handler");
|
||||||
|
callBack.val(response["slug"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown) {
|
||||||
|
console.log("Bludit AJAX: generateSlug(): fail handler");
|
||||||
|
});
|
||||||
|
|
||||||
|
ajaxRequest.always(function () {
|
||||||
|
console.log("Bludit AJAX: generateSlug(): always handler");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,40 @@
|
||||||
|
|
||||||
var ajaxRequest;
|
var ajaxRequest;
|
||||||
|
|
||||||
|
function autosave(title, content) {
|
||||||
|
var ajaxRequest;
|
||||||
|
|
||||||
|
if(ajaxRequest) {
|
||||||
|
ajaxRequest.abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
ajaxRequest = $.ajax({
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
tokenCSRF: tokenCSRF, // token from env variables
|
||||||
|
title: title,
|
||||||
|
content: content
|
||||||
|
},
|
||||||
|
url: "<?php echo HTML_PATH_ADMIN_ROOT.'ajax/save-as-draft' ?>"
|
||||||
|
});
|
||||||
|
|
||||||
|
// Callback handler that will be called on success
|
||||||
|
ajaxRequest.done(function (response, textStatus, jqXHR){
|
||||||
|
console.log("Autosave done.");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Callback handler that will be called on failure
|
||||||
|
ajaxRequest.fail(function (jqXHR, textStatus, errorThrown){
|
||||||
|
console.log("Autosave error on ajax call.");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Callback handler that will be called regardless
|
||||||
|
// if the request failed or succeeded
|
||||||
|
ajaxRequest.always(function () {
|
||||||
|
console.log("Autosave always.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function generateSlug(text, parentKey, currentKey, writeResponse) {
|
function generateSlug(text, parentKey, currentKey, writeResponse) {
|
||||||
if(ajaxRequest) {
|
if(ajaxRequest) {
|
||||||
ajaxRequest.abort();
|
ajaxRequest.abort();
|
||||||
|
|
|
@ -277,7 +277,7 @@ class Page {
|
||||||
return $this->getValue('description');
|
return $this->getValue('description');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the tags
|
// Returns the tags separated by comma
|
||||||
// (boolean) $returnsArray, TRUE to get the tags as an array, FALSE to get the tags separeted by comma
|
// (boolean) $returnsArray, TRUE to get the tags as an array, FALSE to get the tags separeted by comma
|
||||||
public function tags($returnsArray=false)
|
public function tags($returnsArray=false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,7 +32,7 @@ $script = <<<EOF
|
||||||
var quill;
|
var quill;
|
||||||
|
|
||||||
// Function required for Media Manager to insert a file on the editor
|
// Function required for Media Manager to insert a file on the editor
|
||||||
function insertMedia(filename) {
|
function editorInsertMedia(filename) {
|
||||||
var Delta = Quill.import("delta");
|
var Delta = Quill.import("delta");
|
||||||
quill.updateContents(new Delta()
|
quill.updateContents(new Delta()
|
||||||
.retain(quill.getSelection().index)
|
.retain(quill.getSelection().index)
|
||||||
|
@ -40,6 +40,12 @@ function insertMedia(filename) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function required for Autosave function
|
||||||
|
// Returns the content of the editor
|
||||||
|
function editorGetContent() {
|
||||||
|
return quill.container.firstChild.innerHTML;
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
quill = new Quill("#jscontent", {
|
quill = new Quill("#jscontent", {
|
||||||
|
|
Loading…
Reference in New Issue