mirror of https://github.com/Mowie/Mowie
Nav-App fixes and improvements
* Inserted Logging * Added Installer * Enabled external links as nav entries * Fix: Pages can't be their own parent * Fix: Top table row can't be moved
This commit is contained in:
parent
97bd63177e
commit
b365dc88ed
|
@ -79,14 +79,27 @@ if(is_loggedin())
|
|||
{
|
||||
if (is_numeric(intval($_POST['page'])) && is_numeric(intval($_POST['parent'])) && is_string(strval($_POST['title'])))
|
||||
{
|
||||
$db->setCol('nav_nav');
|
||||
$db->data['title'] = $_POST['title'];
|
||||
$db->data['page'] = $_POST['page'];
|
||||
$db->data['parent'] = $_POST['parent'];
|
||||
$success = $db->insert();
|
||||
$pageval = $_POST['page'];
|
||||
$send_ready = true;
|
||||
if($_POST['external'] !== ''){
|
||||
if (filter_var($_POST['external'], FILTER_VALIDATE_URL) === false) {
|
||||
$send_ready = false;
|
||||
echo 'url_invalid';
|
||||
}
|
||||
} $pageval = 0;
|
||||
|
||||
//Stream Message
|
||||
stream_message('{user} created a nav entry ({extra})', 3, $_POST['page']);
|
||||
if($send_ready)
|
||||
{
|
||||
$db->setCol('nav_nav');
|
||||
$db->data['title'] = $_POST['title'];
|
||||
$db->data['page'] = $pageval;
|
||||
$db->data['external'] = $_POST['external'];
|
||||
$db->data['parent'] = $_POST['parent'];
|
||||
$success = $db->insert();
|
||||
|
||||
//Stream Message
|
||||
stream_message('{user} created a nav entry ({extra})', 3, $_POST['page']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +110,7 @@ if(is_loggedin())
|
|||
{
|
||||
if(isset($_POST['id'], $_POST['parent']))
|
||||
{
|
||||
if (is_numeric(intval($_POST['id'])) && is_numeric(intval($_POST['parent'])))
|
||||
if (is_numeric(intval($_POST['id'])) && is_numeric(intval($_POST['parent'])) && $_POST['parent'] != $_POST['id'])
|
||||
{
|
||||
$db->setCol('nav_nav');
|
||||
$db->data['parent'] = $_POST['parent'];
|
||||
|
|
|
@ -4,8 +4,8 @@ $GLOBALS['lang']->set('Navigation', 'nav_title', 'de');
|
|||
$GLOBALS['lang']->set('Navigation', 'nav_title', 'en');
|
||||
|
||||
$_CONF['app_name'] = 'Navigation';
|
||||
$_CONF['app_build'] = 1;
|
||||
$_CONF['app_version'] = 'v0.9 Beta';
|
||||
$_CONF['app_build'] = 2;
|
||||
$_CONF['app_version'] = 'v0.91 Beta';
|
||||
$_CONF['base_file'] = 'nav.php';
|
||||
$_CONF['type'] = 'static';
|
||||
|
||||
|
|
|
@ -11,27 +11,36 @@ foreach ($db->data as $page)
|
|||
$pages .= '<option value="' . $page['id'] . '">' . $page['title'] . '</option>';
|
||||
}
|
||||
|
||||
//Get all parents and build a dropdown list
|
||||
$parents = '<option value="0">--</option>';
|
||||
$db->setCol('nav_nav');
|
||||
$db->get();
|
||||
$parentdata = $db->data;
|
||||
foreach ($parentdata as $parent)
|
||||
function getParents($exclude = null)
|
||||
{
|
||||
//If we don't have a parent from the Nav itself, take the page's title
|
||||
if ($parent['title'] === '')
|
||||
global $db;
|
||||
//Get all parents and build a dropdown list
|
||||
$parents = '<option value="0">--</option>';
|
||||
$db->setCol('nav_nav');
|
||||
$db->get(null, null, 'nav_order');
|
||||
$parentdata = $db->data;
|
||||
foreach ($parentdata as $parent)
|
||||
{
|
||||
$db->setCol('simplePages_pages');
|
||||
$db->data['id'] = $parent['page'];
|
||||
$db->get();
|
||||
if (isset($db->data[0]))
|
||||
if((isset($exclude) && $parent['id'] !== $exclude) || !isset($exclude))
|
||||
{
|
||||
$parents .= '<option value="' . $parent['id'] . '">' . $db->data[0]['title'] . '</option>';
|
||||
//If we don't have a parent from the Nav itself, take the page's title
|
||||
if ($parent['title'] === '')
|
||||
{
|
||||
$db->setCol('simplePages_pages');
|
||||
$db->data['id'] = $parent['page'];
|
||||
$db->get();
|
||||
if (isset($db->data[0]))
|
||||
{
|
||||
$parents .= '<option value="' . $parent['id'] . '">' . $db->data[0]['title'] . '</option>';
|
||||
}
|
||||
} else
|
||||
{
|
||||
$parents .= '<option value="' . $parent['id'] . '">' . $parent['title'] . '</option>';
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
$parents .= '<option value="' . $parent['id'] . '">' . $parent['title'] . '</option>';
|
||||
}
|
||||
|
||||
return $parents;
|
||||
}
|
||||
|
||||
//Show
|
||||
|
@ -55,6 +64,7 @@ function buildNav($nav, $lvl = 0)
|
|||
$title = $site['title'];
|
||||
if ($title == '') $title = $db->data[0]['title'];
|
||||
|
||||
//Display Level
|
||||
echo '<div class="col"><i class="fa fa-bars" aria-hidden="true" style="color: #ccc;"></i> ';
|
||||
for ($i = 1; $i <= $lvl; $i++)
|
||||
{
|
||||
|
@ -64,8 +74,21 @@ function buildNav($nav, $lvl = 0)
|
|||
$title = $site['title'];
|
||||
if ($title == '') $title = $db->data[0]['title'];
|
||||
|
||||
echo $title . '</div><div class="col"><a href="../SimplePages/backend/edit.php?id=' . $site['page'] . '"><i class="fa fa-pencil" aria-hidden="true"></i> ' . $db->data[0]['title'] . '</a></div>
|
||||
<div class="col"><select id="parentChange_' . $site['id'] . '" data-nav-id="' . $site['id'] . '" onchange="update(\'' . $site['id'] . '\')">' . str_replace('value="' . $site['parent'] . '"', 'value="' . $site['parent'] . '" selected', $GLOBALS['parents']) . '</select></div>
|
||||
echo $title . '</div><div class="col">';
|
||||
|
||||
//Don't show edit-link if the entry is external
|
||||
if($site['external'] === '')
|
||||
{
|
||||
echo '<a href="../SimplePages/backend/edit.php?id=' . $site['page'] . '"><i class="fa fa-pencil" aria-hidden="true"></i> ' . $db->data[0]['title'] . '</a>';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo substr($site['external'], 0, 30);
|
||||
if(strlen($site['external']) > 30) echo '...';
|
||||
}
|
||||
|
||||
echo '</div>
|
||||
<div class="col"><select id="parentChange_' . $site['id'] . '" data-nav-id="' . $site['id'] . '" onchange="update(\'' . $site['id'] . '\')">' . str_replace('value="' . $site['parent'] . '"', 'value="' . $site['parent'] . '" selected', getParents($site['id'])) . '</select></div>
|
||||
<div class="col"><a onclick="del(' . $site['id'] . ');" class="del" title="' . $GLOBALS['lang']->get('nav_delete') . '"><i class="fa fa-trash-o" aria-hidden="true"></i></a></div>';
|
||||
|
||||
echo "</div>\n";
|
||||
|
@ -83,11 +106,6 @@ function buildNav($nav, $lvl = 0)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
* * mglkt zum "neuzuweisen" der Parents -> Dropdown
|
||||
*/
|
||||
|
||||
if (hasPerm('edit_nav'))
|
||||
{
|
||||
?>
|
||||
|
@ -97,7 +115,7 @@ if (hasPerm('edit_nav'))
|
|||
aria-hidden="true"></i> <?php echo $lang->get('nav_create'); ?>
|
||||
</a></p>
|
||||
<div id="sortable" class="pseudo-table">
|
||||
<div class="row top" id="top">
|
||||
<div class="row top" id="top notSort">
|
||||
<div class="col"><?php echo $lang->get('nav_pageTitle') ?></div>
|
||||
<div class="col"><?php echo $lang->get('nav_page') ?></div>
|
||||
<div class="col"><?php echo $lang->get('nav_parent') ?></div>
|
||||
|
@ -117,7 +135,7 @@ if (hasPerm('edit_nav'))
|
|||
<script src="js/nav.js"></script>
|
||||
<script>
|
||||
//Create Dropdowns
|
||||
var parents = '<?php echo $parents;?>';
|
||||
var parents = '<?php echo getParents();?>';
|
||||
var pages = '<?php echo $pages;?>';
|
||||
//Make Language Strings available in JS
|
||||
var lang = {
|
||||
|
@ -131,6 +149,7 @@ if (hasPerm('edit_nav'))
|
|||
nav_deleted_fail: '<?php echo $lang->get('nav_deleted_fail') ?>',
|
||||
nav_create: '<?php echo $lang->get('nav_create') ?>',
|
||||
nav_create_title: '<?php echo $lang->get('nav_create_title') ?>',
|
||||
nav_create_title_noptoption: '<?php echo $lang->get('nav_create_title_noptoption') ?>',
|
||||
nav_create_page: '<?php echo $lang->get('nav_create_page') ?>',
|
||||
nav_create_parents: '<?php echo $lang->get('nav_create_parents') ?>',
|
||||
nav_create_create: '<?php echo $lang->get('nav_create_create') ?>',
|
||||
|
@ -139,7 +158,11 @@ if (hasPerm('edit_nav'))
|
|||
nav_create_fail: '<?php echo $lang->get('nav_create_fail') ?>',
|
||||
nav_update_success: '<?php echo $lang->get('nav_update_success') ?>',
|
||||
nav_update_fail: '<?php echo $lang->get('nav_update_fail') ?>',
|
||||
not_found: '<?php echo $lang->get('404_not_found') ?>'
|
||||
not_found: '<?php echo $lang->get('404_not_found') ?>',
|
||||
nav_create_external_url_invalid: '<?php echo $lang->get('nav_create_external_url_invalid') ?>',
|
||||
nav_create_external_needs_title: '<?php echo $lang->get('nav_create_external_needs_title') ?>',
|
||||
nav_create_external: '<?php echo $lang->get('nav_create_external') ?>',
|
||||
nav_create_external_input: '<?php echo $lang->get('nav_create_external_input') ?>'
|
||||
};
|
||||
</script>
|
||||
<?php
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
if(isset($_POST['submit']))
|
||||
{
|
||||
if($db->query('CREATE TABLE `' . $_POST['db_prefix'] . 'nav_nav` (
|
||||
`id` int(11) NOT NULL,
|
||||
`title` text CHARACTER SET latin1 NOT NULL,
|
||||
`page` int(11) NOT NULL,
|
||||
`parent` int(11) NOT NULL,
|
||||
`nav_order` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `' . $_POST['db_prefix'] . 'nav_nav`
|
||||
ADD PRIMARY KEY (`id`);
|
||||
|
||||
ALTER TABLE `' . $_POST['db_prefix'] . 'nav_nav`
|
||||
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
|
||||
'))
|
||||
{
|
||||
echo msg('success', 'Navigation was installed successfully.');
|
||||
}
|
||||
else
|
||||
{
|
||||
echo msg('fail', 'An error occured while installing Navigation.');
|
||||
exit;
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ $(function () {
|
|||
$("#sortable").sortable({
|
||||
axis: "y",
|
||||
cursor: "move",
|
||||
items: 'div:not(.top).row',
|
||||
placeholder: "sortable-placeholder",
|
||||
over: function (event, ui) {
|
||||
console.log(event, ui)
|
||||
|
@ -37,7 +38,6 @@ $(function () {
|
|||
});
|
||||
}
|
||||
});
|
||||
$("#sortable").disableSelection();
|
||||
});
|
||||
|
||||
//Delete
|
||||
|
@ -77,41 +77,63 @@ function del(id) {
|
|||
|
||||
//Create menuitem
|
||||
function createItem() {
|
||||
$('#extra').html('<div class="overlay" style="display:none;"><div class="window window-confirm"><div class="head">' + lang.nav_create + '<a onclick="closeW();" class="closeMsg"><i class="fa fa-close"></i></a></div><div id="content"><p><input type="text" name="nav_title" id="nav_title" placeholder="' + lang.nav_create_title + '"/></p><p>' + lang.nav_create_page + ': <select name="nav_page" id="nav_page">' + pages + '</select></p><p>' + lang.nav_create_parents + ': <select name="nav_parent" id="nav_parent">' + parents + '</select></p><p><a class="button" id="createConfirm"><i class="fa fa-plus"></i> ' + lang.nav_create_create + '</a><a onclick="closeW();" class="button btn_del">' + lang.nav_create_abort + '</a></p></div></div></div>');
|
||||
$('#extra').html('<div class="overlay" style="display:none;"><div class="window window-confirm"><div class="head">' + lang.nav_create + '<a onclick="closeW();" class="closeMsg"><i class="fa fa-close"></i></a></div><div id="content"><p><input type="text" name="nav_title" id="nav_title" placeholder="' + lang.nav_create_title + '"/></p><p>' + lang.nav_create_page + ' <input type="checkbox" id="externalCheck"/><label for="externalCheck"><i></i>' + lang.nav_create_external + ' </label> <select name="nav_page" id="nav_page">' + pages + '</select><input type="text" name="nav_external" id="nav_external" style="display: none;" placeholder="' + lang.nav_create_external_input + '"/></p><p>' + lang.nav_create_parents + ': <select name="nav_parent" id="nav_parent">' + parents + '</select></p><p><a class="button" id="createConfirm"><i class="fa fa-plus"></i> ' + lang.nav_create_create + '</a><a onclick="closeW();" class="button btn_del">' + lang.nav_create_abort + '</a></p></div></div></div>');
|
||||
$(".overlay").fadeIn(250);
|
||||
|
||||
//Check for checked
|
||||
$('#externalCheck').change(function () {
|
||||
if (this.checked) {
|
||||
$('#nav_page').hide();
|
||||
$('#nav_external').show().focus();
|
||||
$('#nav_title').attr('placeholder', lang.nav_create_title_noptoption);
|
||||
} else {
|
||||
$('#nav_page').show();
|
||||
$('#nav_external').hide();
|
||||
$('#nav_title').attr('placeholder', lang.nav_create_title);
|
||||
}
|
||||
});
|
||||
|
||||
//Send
|
||||
$('#createConfirm').click(function () {
|
||||
closeW();
|
||||
$.ajax({
|
||||
url: 'action.php?create',
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
data: 'title=' + $('#nav_title').val() + '&page=' + $('#nav_page').val() + '&parent=' + $('#nav_parent').val(),
|
||||
success: function (result) { // On success, display a message...
|
||||
if (result == 'success') {
|
||||
showMsg(lang.nav_create_success);
|
||||
} else {
|
||||
|
||||
var external = $('#nav_external').val();
|
||||
var sendReady = true;
|
||||
if ($('#externalCheck').is(':checked')) {
|
||||
if ($('#nav_title').val() == '') {
|
||||
sendReady = false;
|
||||
showMsg(lang.nav_create_external_needs_title);
|
||||
}
|
||||
}
|
||||
|
||||
//Send
|
||||
if (sendReady) {
|
||||
$.ajax({
|
||||
url: 'action.php?create',
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
data: 'title=' + $('#nav_title').val() + '&page=' + $('#nav_page').val() + '&parent=' + $('#nav_parent').val() + '&external=' + external,
|
||||
success: function (result) { // On success, display a message...
|
||||
if (result == 'success') {
|
||||
showMsg(lang.nav_create_success);
|
||||
reloadNav();//...and reload the content. We do this to display everything properly including their childs
|
||||
} else if(result == 'url_invalid') {
|
||||
showMsg(lang.nav_create_external_url_invalid);
|
||||
$('#nav_external').focus();
|
||||
} else {
|
||||
showMsg(lang.nav_create_fail);
|
||||
reloadNav();//...and reload the content. We do this to display everything properly including their childs
|
||||
}
|
||||
|
||||
$('.spinner-container').hide(); //Hide the Loader
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
showMsg(lang.nav_create_fail);
|
||||
}
|
||||
|
||||
//...and reload the content. We do this to display everything including their childs
|
||||
reloadNav();
|
||||
|
||||
$('.spinner-container').hide(); //Hide the Loader
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
showMsg(lang.nav_create_fail);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//Update
|
||||
/*$('#parentChange').on('change', function() {
|
||||
console.log('faa');
|
||||
console.log(this.dataset);
|
||||
});*/
|
||||
|
||||
function update(id) {
|
||||
var newParent = $('#parentChange_' + id).val();
|
||||
|
||||
|
@ -154,14 +176,15 @@ function reloadNav() {
|
|||
|
||||
//Close Window
|
||||
function closeW() {
|
||||
console.log('close');
|
||||
$(".overlay").fadeOut(200);
|
||||
setTimeout(function () {
|
||||
$('#extra').html('');
|
||||
}, 300);
|
||||
}
|
||||
|
||||
window.onclick = function(event) {
|
||||
if(event.target.parentElement != null) {
|
||||
window.onclick = function (event) {
|
||||
if (event.target.parentElement != null) {
|
||||
if (event.target.parentElement.id == 'extra') {
|
||||
closeW();
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ $lang['__Lang__'] = 'German (Deutsch)';
|
|||
$lang['__LangCode__'] = 'de';
|
||||
$lang['__Countrycode__'] = 'de_DE';
|
||||
|
||||
$lang['nav_needs_SimplePages'] = 'Diese App braucht SimplePages, um zu funktionieren.';
|
||||
$lang['nav_id'] = 'ID';
|
||||
$lang['nav_pageTitle'] = 'Titel';
|
||||
$lang['nav_page'] = 'Seite';
|
||||
|
@ -28,6 +27,7 @@ $lang['nav_delete_confirm_yes'] = 'Löschen!';
|
|||
$lang['nav_delete_confirm_abort'] = 'Abbrechen';
|
||||
$lang['nav_create'] = 'Neuen Menüeintrag erstellen';
|
||||
$lang['nav_create_title'] = 'Titel (Optional)';
|
||||
$lang['nav_create_title_noptoption'] = 'Titel';
|
||||
$lang['nav_create_create'] = 'Erstellen';
|
||||
$lang['nav_create_abort'] = 'Abbrechen';
|
||||
$lang['nav_create_parents'] = 'Übergeordnet';
|
||||
|
@ -36,6 +36,10 @@ $lang['nav_create_success'] = 'Der neue Menüeintrag wurde erfolgreich angelegt.
|
|||
$lang['nav_create_fail'] = 'Beim Anlegen des neuen Menüeintrags trat ein Fehler auf.';
|
||||
$lang['nav_update_success'] = 'Der Menüeintrag wurde erfolgreich geändert.';
|
||||
$lang['nav_update_fail'] = 'Beim Ändern des Menüeintrags trat ein Fehler auf.';
|
||||
$lang['nav_create_external'] = 'Extern';
|
||||
$lang['nav_create_external_input'] = 'Externe URL';
|
||||
$lang['nav_create_external_needs_title'] = 'Bitte geben Sie einen Titel an, wenn sie einen Externen Menüeinrag anlegen.';
|
||||
$lang['nav_create_external_url_invalid'] = 'Die angegebene URL ist ungültig.';
|
||||
|
||||
//Stream
|
||||
$lang['nav_stream_edited'] = '{user} hat einen Menüeintrag geändert ({extra})';
|
||||
|
|
|
@ -11,7 +11,6 @@ $lang['__Lang__'] = 'English (English)';
|
|||
$lang['__LangCode__'] = 'en';
|
||||
$lang['__Countrycode__'] = 'en';
|
||||
|
||||
$lang['nav_needs_SimplePages'] = 'This App needs SimplePages to work.';
|
||||
$lang['nav_id'] = 'ID';
|
||||
$lang['nav_pageTitle'] = 'Title';
|
||||
$lang['nav_page'] = 'Page';
|
||||
|
@ -28,6 +27,7 @@ $lang['nav_delete_confirm_yes'] = 'Delete!';
|
|||
$lang['nav_delete_confirm_abort'] = 'Cancel';
|
||||
$lang['nav_create'] = 'Create a new item';
|
||||
$lang['nav_create_title'] = 'Title (Optional)';
|
||||
$lang['nav_create_title_noptoption'] = 'Title';
|
||||
$lang['nav_create_create'] = 'Create';
|
||||
$lang['nav_create_abort'] = 'Cancel';
|
||||
$lang['nav_create_parents'] = 'Child of';
|
||||
|
@ -36,6 +36,10 @@ $lang['nav_create_success'] = 'The new item was successfully created.';
|
|||
$lang['nav_create_fail'] = 'An error occured while saving the new item.';
|
||||
$lang['nav_update_success'] = 'The item was successfully updated.';
|
||||
$lang['nav_update_fail'] = 'An error occured while updating the item.';
|
||||
$lang['nav_create_external'] = 'External';
|
||||
$lang['nav_create_external_input'] = 'External URL';
|
||||
$lang['nav_create_external_needs_title'] = 'Please provide a title when creating an external nav entry.';
|
||||
$lang['nav_create_external_url_invalid'] = 'The provided URL is invalid.';
|
||||
|
||||
//Stream
|
||||
$lang['nav_stream_edited'] = '{user} edited a nav entry ({extra})';
|
||||
|
|
|
@ -9,16 +9,23 @@ function buildNav($nav)
|
|||
{
|
||||
//Get the Page URL
|
||||
$pageUrl = '#';
|
||||
$db->setCol('simplePages_pages');
|
||||
$db->data['id'] = $site['page'];
|
||||
$db->get();
|
||||
if(!empty($db->data)) $pageUrl = $db->data[0]['alias'];
|
||||
if ($site['external'] === '')
|
||||
{
|
||||
$db->setCol('simplePages_pages');
|
||||
$db->data['id'] = $site['page'];
|
||||
$db->get();
|
||||
if (!empty($db->data)) $pageUrl = $GLOBALS['MCONF']['web_uri'].$db->data[0]['alias'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$pageUrl = $site['external'];
|
||||
}
|
||||
|
||||
//Get the page title
|
||||
$title = $site['title'];
|
||||
if($title == '') $title = $db->data[0]['title'];
|
||||
|
||||
$navTree .= '<li><a href="'.$GLOBALS['MCONF']['web_uri'].$pageUrl.'">'.$title.'</a>';
|
||||
$navTree .= '<li><a href="'.$pageUrl.'">'.$title.'</a>';
|
||||
|
||||
//Look for childs
|
||||
$db->setCol('nav_nav');
|
||||
|
|
Loading…
Reference in New Issue