prepare("DELETE FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu"); $dbr->bindParam(':menu', $_REQUEST['delete'], PDO::PARAM_STR); $dbr->execute(); if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus'); exit; } else { $template->assign('menu', htmlspecialchars($_REQUEST['delete'])); $action = 'delete'; } } if(isset($_GET['set_default'])) { $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['settings_table']." SET value=:value WHERE name='default_menu'"); $dbr->bindValue(':value', trim($_GET['set_default']), PDO::PARAM_STR); $dbr->execute(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus'); exit; } if(isset($_POST['new_menu_name'])) { $dbr = Database::$content->prepare("SELECT COUNT(*) FROM ".Database::$db_settings['menu_table']." WHERE lower(menu)=:menu"); $dbr->bindValue(':menu', trim(strtolower($_POST['new_menu_name'])), PDO::PARAM_STR); $dbr->execute(); if($dbr->fetchColumn() > 0) { $errors[] = 'menu_already_exists'; $action = 'new'; } elseif(!preg_match('/^[a-zA-Z0-9_\-]+$/', $_POST['new_menu_name'])) { $errors[] = 'error_menu_spec_chars'; $action = 'new'; } else { header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$_POST['new_menu_name']); exit; } } if(isset($_POST['new_menu_item'])) { $dbr = Database::$content->prepare("SELECT sequence FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu ORDER BY sequence DESC LIMIT 1"); $dbr->bindValue(':menu', trim($_POST['menu']), PDO::PARAM_STR); $dbr->execute(); $data = $dbr->fetch(); if(!isset($data['sequence'])) { $new_sequence = 1; } else { $new_sequence = $data['sequence']+1; } $dbr = Database::$content->prepare("INSERT INTO ".Database::$db_settings['menu_table']." (menu,sequence,name,title,link,section,accesskey) VALUES (:menu,:sequence,:name,:title,:link,:section,:accesskey)"); $dbr->bindValue(':menu', trim($_POST['menu']), PDO::PARAM_STR); $dbr->bindValue(':sequence', $new_sequence, PDO::PARAM_INT); $dbr->bindValue(':name', trim($_POST['name']), PDO::PARAM_STR); $dbr->bindValue(':title', trim($_POST['title']), PDO::PARAM_STR); $dbr->bindValue(':link', trim($_POST['link']), PDO::PARAM_STR); $dbr->bindValue(':section', trim($_POST['section']), PDO::PARAM_STR); $dbr->bindValue(':accesskey', trim($_POST['accesskey']), PDO::PARAM_STR); $dbr->execute(); if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$_POST['menu']); exit; } if(isset($_POST['edit_item'])) { $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['menu_table']." SET name=:name, title=:title, link=:link, section=:section, accesskey=:accesskey WHERE id=:id"); $dbr->bindValue(':name', trim($_POST['name']), PDO::PARAM_STR); $dbr->bindValue(':title', trim($_POST['title']), PDO::PARAM_STR); $dbr->bindValue(':link', trim($_POST['link']), PDO::PARAM_STR); $dbr->bindValue(':section', trim($_POST['section']), PDO::PARAM_STR); $dbr->bindValue(':accesskey', trim($_POST['accesskey']), PDO::PARAM_STR); $dbr->bindParam(':id', $_POST['edit_item'], PDO::PARAM_INT); $dbr->execute(); if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$_POST['menu']); exit; } if(isset($_GET['action'])) $action = $_GET['action']; if(isset($_POST['action'])) $action = $_POST['action']; if(empty($action)) $action='show_menus'; if(isset($_GET['move_up'])) { $dbr = Database::$content->prepare("SELECT menu, sequence FROM ".Database::$db_settings['menu_table']." WHERE id=:id LIMIT 1"); $dbr->bindParam(':id', $_GET['move_up'], PDO::PARAM_INT); $dbr->execute(); $data = $dbr->fetch(); if(isset($data['sequence']) && $data['sequence'] > 1) { Database::$content->beginTransaction(); $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['menu_table']." SET sequence=:new_sequence WHERE menu=:menu AND sequence=:sequence"); $dbr->bindParam(':menu', $data['menu'], PDO::PARAM_STR); $dbr->bindValue(':new_sequence', 0, PDO::PARAM_INT); $dbr->bindValue(':sequence', $data['sequence']-1, PDO::PARAM_INT); $dbr->execute(); $dbr->bindValue(':new_sequence', $data['sequence']-1, PDO::PARAM_INT); $dbr->bindValue(':sequence', $data['sequence'], PDO::PARAM_INT); $dbr->execute(); $dbr->bindValue(':new_sequence', $data['sequence'], PDO::PARAM_INT); $dbr->bindValue(':sequence', 0, PDO::PARAM_INT); $dbr->execute(); Database::$content->commit(); } if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$data['menu']); exit; } if(isset($_GET['move_down'])) { $dbr = Database::$content->prepare("SELECT menu, sequence FROM ".Database::$db_settings['menu_table']." WHERE id=:id LIMIT 1"); $dbr->bindParam(':id', $_GET['move_down'], PDO::PARAM_INT); $dbr->execute(); $data = $dbr->fetch(); if(isset($data['sequence'])) { $dbr = Database::$content->prepare("SELECT sequence FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu ORDER BY sequence DESC LIMIT 1"); $dbr->bindParam(':menu', $data['menu'], PDO::PARAM_STR); $dbr->execute(); $last = $dbr->fetchColumn(); if($data['sequence'] < $last) { Database::$content->beginTransaction(); $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['menu_table']." SET sequence=:new_sequence WHERE menu=:menu AND sequence=:sequence"); $dbr->bindParam(':menu', $data['menu'], PDO::PARAM_STR); $dbr->bindValue(':new_sequence', 0, PDO::PARAM_INT); $dbr->bindValue(':sequence', $data['sequence']+1, PDO::PARAM_INT); $dbr->execute(); $dbr->bindValue(':new_sequence', $data['sequence']+1, PDO::PARAM_INT); $dbr->bindValue(':sequence', $data['sequence'], PDO::PARAM_INT); $dbr->execute(); $dbr->bindValue(':new_sequence', $data['sequence'], PDO::PARAM_INT); $dbr->bindValue(':sequence', 0, PDO::PARAM_INT); $dbr->execute(); Database::$content->commit(); } if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$data['menu']); exit; } } if(isset($_REQUEST['reorder_items']) && isset($_REQUEST['item'])) { $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['menu_table']." SET sequence=:sequence WHERE id=:id"); $dbr->bindParam(':id', $id, PDO::PARAM_INT); $dbr->bindParam(':sequence', $sequence, PDO::PARAM_INT); Database::$content->beginTransaction(); $sequence = 1; foreach($_REQUEST['item'] as $id) { $dbr->execute(); ++$sequence; } Database::$content->commit(); if(isset($cache) && $cache->autoClear) $cache->clear(); exit; } // first actions: switch ($action) { case 'delete_menu_item': { // get menu: $dbr = Database::$content->prepare("SELECT menu FROM ".Database::$db_settings['menu_table']." WHERE id=:id LIMIT 1"); $dbr->bindParam(':id', $_GET['id'], PDO::PARAM_INT); $dbr->execute(); $menu = $dbr->fetchColumn(); // delete menu item: $dbr = Database::$content->prepare("DELETE FROM ".Database::$db_settings['menu_table']." WHERE id=:id"); $dbr->bindParam(':id', $_GET['id'], PDO::PARAM_INT); $dbr->execute(); // reorder items: $dbr = Database::$content->prepare("SELECT id FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu ORDER BY sequence ASC"); $dbr->bindParam(':menu', $menu, PDO::PARAM_STR); $dbr->execute(); while($data = $dbr->fetch()) { $ids[] = $data['id']; } if(isset($ids)) { $new_sequence = 1; Database::$content->beginTransaction(); $dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['menu_table']." SET sequence=:sequence WHERE id=:id"); $dbr->bindParam(':sequence', $new_sequence, PDO::PARAM_INT); $dbr->bindParam(':id', $id, PDO::PARAM_INT); foreach($ids as $id) { $dbr->execute(); ++$new_sequence; } Database::$content->commit(); } if(isset($cache) && $cache->autoClear) $cache->clear(); header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=menus&edit='.$menu); exit; } break; } // second actions: switch ($action) { case 'show_menus': $menu_result = Database::$content->query("SELECT DISTINCT menu FROM ".Database::$db_settings['menu_table']." ORDER BY menu ASC"); while($menu_data = $menu_result->fetch()) { $menus[] = $menu_data['menu']; } if(isset($menus)) { $template->assign('menus', $menus); } $template->assign('subtitle', Localization::$lang['menus']); $template->assign('subtemplate', 'menus.inc.tpl'); break; case 'edit': $template->assign('menu', htmlspecialchars($_GET['edit'])); $dbr = Database::$content->prepare("SELECT id, name, sequence, title, link, section, accesskey FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu ORDER BY sequence ASC"); $dbr->bindValue(':menu', trim($_GET['edit']), PDO::PARAM_STR); $dbr->execute(); $i=0; while($data = $dbr->fetch()) { $items[$i]['id'] = intval($data['id']); $items[$i]['name'] = htmlspecialchars($data['name']); #$items[$i]['sequence'] = $data['sequence']; $items[$i]['title'] = htmlspecialchars($data['title']); $items[$i]['link'] = htmlspecialchars($data['link']); $items[$i]['section'] = htmlspecialchars($data['section']); $items[$i]['accesskey'] = htmlspecialchars($data['accesskey']); ++$i; } if(isset($items)) { $template->assign('items', $items); } $template->assign('subtitle', Localization::$lang['menus']); $template->assign('subtemplate', 'menus_edit.inc.tpl'); break; case 'edit_menu_item'; $dbr = Database::$content->prepare("SELECT menu FROM ".Database::$db_settings['menu_table']." WHERE id=:id LIMIT 1"); $dbr->bindParam(':id', $_GET['id'], PDO::PARAM_INT); $dbr->execute(); $menu_data = $dbr->fetch(); if(isset($menu_data['menu'])) { $dbr = Database::$content->prepare("SELECT id, name, sequence, title, link, section, accesskey FROM ".Database::$db_settings['menu_table']." WHERE menu=:menu ORDER BY sequence ASC"); $dbr->bindParam(':menu', $menu_data['menu'], PDO::PARAM_STR); $dbr->execute(); $i=0; while($data = $dbr->fetch()) { $items[$i]['id'] = intval($data['id']); $items[$i]['name'] = htmlspecialchars($data['name']); $items[$i]['title'] = htmlspecialchars($data['title']); $items[$i]['link'] = htmlspecialchars($data['link']); $items[$i]['section'] = htmlspecialchars($data['section']); $items[$i]['accesskey'] = htmlspecialchars($data['accesskey']); ++$i; } if(isset($items)) { $template->assign('items', $items); } $template->assign('menu', htmlspecialchars($menu_data['menu'])); $template->assign('edit_item', intval($_GET['id'])); $template->assign('subtitle', Localization::$lang['menus']); $template->assign('subtemplate', 'menus_edit.inc.tpl'); } break; case 'delete': $template->assign('subtemplate', 'menus_delete.inc.tpl'); break; case 'new': if(isset($errors)) { $template->assign('errors', $errors); } if(isset($_POST['new_menu_name'])) { $template->assign('new_menu_name', htmlspecialchars($_POST['new_menu_name'])); } $template->assign('subtemplate', 'menus_new.inc.tpl'); break; } }