📄 admin.menumanager.php
字号:
<?php/*** @version $Id: admin.menumanager.php,v 1.11 2005/01/07 16:25:40 stingrey Exp $* @package Mambo* @subpackage Menus* @copyright (C) 2000 - 2005 Miro International Pty Ltd* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL* Mambo is Free Software*//** ensure this file is being included by a parent file */defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );// ensure user has access to this functionif (!$acl->acl_check( 'administration', 'manage', 'users', $my->usertype, 'components', 'com_menumanager' )) { mosRedirect( 'index2.php', _NOT_AUTH );}require_once( $mainframe->getPath( 'admin_html' ) );$menu = mosGetParam( $_GET, 'menu', '' );$task = mosGetParam( $_REQUEST, 'task', array(0) );$type = mosGetParam( $_POST, 'type', '' );$cid = mosGetParam( $_POST, 'cid', '' );switch ($task) { case 'new': editMenu( $option, '' ); break; case 'edit': if ( !$menu ) { $menu = $cid[0]; } editMenu( $option, $menu ); break; case 'savemenu': saveMenu(); break; case 'deleteconfirm': deleteconfirm( $option, $cid[0] ); break; case 'deletemenu': deleteMenu( $option, $cid, $type ); break; case 'copyconfirm': copyConfirm( $option, $cid[0] ); break; case 'copymenu': copyMenu( $option, $cid, $type ); break; case 'cancel': cancelMenu( $option ); break; default: showMenu( $option ); break;}/*** Compiles a list of menumanager items*/function showMenu( $option ) { global $database, $mainframe, $mosConfig_list_limit; $limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit ); $limitstart = $mainframe->getUserStateFromRequest( "view{". $option ."}limitstart", 'limitstart', 0 ); $menuTypes = mosAdminMenus::menutypes(); $total = count( $menuTypes ); $i = 0; foreach ( $menuTypes as $a ) { $menus[$i]->type = $a; // query to get number of modules for menutype $query = "SELECT count( id )" . "\n FROM #__modules" . "\n WHERE module = 'mod_mainmenu'" . "\n AND params LIKE '%$a%'" ; $database->setQuery( $query ); $modules = $database->loadResult(); if ( !$modules ) { $modules = '-'; } $menus[$i]->modules = $modules; $i++; } // Query to get published menu item counts $query = "SELECT a.menutype, count( a.menutype ) as num" . "\n FROM #__menu AS a" . "\n WHERE a.published = 1" . "\n GROUP BY a.menutype" . "\n ORDER BY a.menutype" ; $database->setQuery( $query ); $published = $database->loadObjectList(); // Query to get unpublished menu item counts $query = "SELECT a.menutype, count( a.menutype ) as num" . "\n FROM #__menu AS a" . "\n WHERE a.published = 0" . "\n GROUP BY a.menutype" . "\n ORDER BY a.menutype" ; $database->setQuery( $query ); $unpublished = $database->loadObjectList(); // Query to get trash menu item counts $query = "SELECT a.menutype, count( a.menutype ) as num" . "\n FROM #__menu AS a" . "\n WHERE a.published = -2" . "\n GROUP BY a.menutype" . "\n ORDER BY a.menutype" ; $database->setQuery( $query ); $trash = $database->loadObjectList(); for( $i = 0; $i < $total; $i++ ) { // adds published count foreach ( $published as $count ) { if ( $menus[$i]->type == $count->menutype ) { $menus[$i]->published = $count->num; } } if ( @!$menus[$i]->published ) { $menus[$i]->published = '-'; } // adds unpublished count foreach ( $unpublished as $count ) { if ( $menus[$i]->type == $count->menutype ) { $menus[$i]->unpublished = $count->num; } } if ( @!$menus[$i]->unpublished ) { $menus[$i]->unpublished = '-'; } // adds trash count foreach ( $trash as $count ) { if ( $menus[$i]->type == $count->menutype ) { $menus[$i]->trash = $count->num; } } if ( @!$menus[$i]->trash ) { $menus[$i]->trash = '-'; } } require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' ); $pageNav = new mosPageNav( $total, $limitstart, $limit ); HTML_menumanager::show( $option, $menus, $pageNav );}/*** Edits a mod_mainmenu module** @param option options for the edit mode* @param cid menu id*/function editMenu( $option, $menu ) { global $database; if( $menu ) { $row->menutype = $menu; } else { $row = new mosModule( $database ); // setting default values $row->menutype = ''; $row->iscore = 0; $row->published = 0; $row->position = 'left'; $row->module = 'mod_mainmenu'; } HTML_menumanager::edit( $row, $option );}/*** Creates a new mod_mainmenu module, which makes the menu visible* this is a workaround until a new dedicated table for menu management can be created*/function saveMenu() { global $database, $adminLanguage; $menutype = mosGetParam( $_POST, 'menutype', '' ); $old_menutype = mosGetParam( $_POST, 'old_menutype', '' ); $new = mosGetParam( $_POST, 'new', 1 ); // block to stop renaming of 'mainmenu' menutype if ( $old_menutype == 'mainmenu' ) { if ( $menutype <> 'mainmenu' ) { echo "<script> alert('$adminLanguage->A_COMP_MENU_RENAME_WARNING'); window.history.go(-1); </script>\n"; exit; } } // check for unique menutype for new menus $query = "SELECT params" . "\n FROM #__modules" . "\n WHERE module = 'mod_mainmenu'" ; $database->setQuery( $query ); $menus = $database->loadResultArray(); foreach ( $menus as $menu ) { $params = mosParseParams( $menu ); if ( $params->menutype == $menutype ) { echo "<script> alert('$adminLanguage->A_COMP_MENU_EXISTS_WARNING'); window.history.go(-1); </script>\n"; exit; } } switch ( $new ) { case 1: // create a new module for the new menu $row = new mosModule( $database ); $row->bind( $_POST ); $row->params = 'menutype='. $menutype; // check then store data in db if (!$row->check()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } if (!$row->store()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } $row->checkin(); $row->updateOrder( "position='". $row->position ."'" ); // module assigned to show on All pages by default // ToDO: Changed to become a mambo db-object $query = "INSERT INTO #__modules_menu VALUES ( $row->id, 0 )"; $database->setQuery( $query ); if ( !$database->query() ) { echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n"; exit(); } $msg = $adminLanguage->A_COMP_MENU_CREATED . ' [ '. $menutype .' ]'; break; default: // change menutype being of all mod_mainmenu modules calling old menutype $query = "SELECT id" . "\n FROM #__modules" . "\n WHERE module = 'mod_mainmenu'" . "\n AND params LIKE '%$old_menutype%'" ; $database->setQuery( $query ); $modules = $database->loadResultArray(); foreach ( $modules as $module ) { $row = new mosModule( $database ); $row->load( $module ); $save = 0; $params = mosParseParams( $row->params ); if ( $params->menutype == $old_menutype ) { $params->menutype = $menutype; $save = 1; } // save changes to module 'menutype' param if ( $save ) { $txt = array(); foreach ( $params as $k=>$v) { $txt[] = "$k=$v"; } $row->params = implode( "\n", $txt ); // check then store data in db if ( !$row->check() ) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } if ( !$row->store() ) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } $row->checkin(); } } // change menutype of all menuitems using old menutype if ( $menutype <> $old_menutype ) { $query = "UPDATE #__menu SET menutype = '$menutype' WHERE menutype = '$old_menutype'"; $database->setQuery( $query ); $database->query(); } $msg = $adminLanguage->A_COMP_MENU_UPDATED; break; } mosRedirect( 'index2.php?option=com_menumanager', $msg );}/*** Compiles a list of the items you have selected to permanently delte*/function deleteConfirm( $option, $type ) { global $database; if ( $type == 'mainmenu' ) { echo "<script> alert('You cannot delete the \'mainmenu\' menu as it is core menu'); window.history.go(-1); </script>\n"; exit(); } // list of menu items to delete $query = "SELECT a.name, a.id" . "\n FROM #__menu AS a" . "\n WHERE ( a.menutype IN ( '$type' ) )" . "\n ORDER BY a.name" ; $database->setQuery( $query ); $items = $database->loadObjectList(); // list of modules to delete $query = "SELECT id" . "\n FROM #__modules" . "\n WHERE module = 'mod_mainmenu'" . "\n AND params LIKE '%$type%'" ; $database->setQuery( $query ); $mods = $database->loadResultArray(); foreach ( $mods as $module ) { $row = new mosModule( $database ); $row->load( $module ); $params = mosParseParams( $row->params ); if ( $params->menutype == $type ) { $mid[] = $module; } } @$mids = implode( ',', $mid ); $query = "SELECT id, title" . "\n FROM #__modules" . "\n WHERE id IN ( $mids )" ; $database->setQuery( $query ); @$modules = $database->loadObjectList(); HTML_menumanager::showDelete( $option, $type, $items, $modules );}/*** Deletes menu items(s) you have selected*/function deleteMenu( $option, $cid, $type ) { global $database, $adminLanguage; if ( $type == 'mainmenu' ) { echo "<script> alert('You cannot delete the \'mainmenu\' menu as it is core menu'); window.history.go(-1); </script>\n"; exit(); } $mids = mosGetParam( $_POST, 'mids', 0 ); if ( is_array( $mids ) ) { $mids = implode( ',', $mids ); } // delete menu items $query = "DELETE FROM #__menu" . "\n WHERE ( id IN ( $mids ) )" ; $database->setQuery( $query ); if ( !$database->query() ) { echo "<script> alert('". $database->getErrorMsg() ."');</script>\n"; exit; } if ( is_array( $cid ) ) { $cids = implode( ',', $cid ); } else { $cids = $cid; } // checks whether any modules to delete if ( $cids ) { // delete modules $database->setQuery( "DELETE FROM #__modules WHERE id IN ( $cids )" ); if ( !$database->query() ) { echo "<script> alert('". $database->getErrorMsg() ."'); window.history.go(-1); </script>\n"; exit; } // delete all module entires in mos_modules_menu $database->setQuery( "DELETE FROM #__modules_menu WHERE moduleid IN ( ". $cids ." )" ); if ( !$database->query() ) { echo "<script> alert('". $database->getErrorMsg() ."');</script>\n"; exit; } // reorder modules after deletion $mod = new mosModule( $database ); $mod->ordering = 0; $mod->updateOrder( "position='left'" ); $mod->updateOrder( "position='right'" ); } $msg = $adminLanguage->A_COMP_MENU_DETECTED; mosRedirect( 'index2.php?option=' . $option, $msg );}/*** Compiles a list of the items you have selected to Copy*/function copyConfirm( $option, $type ) { global $database; // Content Items query $query = "SELECT a.name, a.id" . "\n FROM #__menu AS a" . "\n WHERE ( a.menutype IN ( '". $type ."' ) )" . "\n ORDER BY a.name" ; $database->setQuery( $query ); $items = $database->loadObjectList(); HTML_menumanager::showCopy( $option, $type, $items );}/*** Copies a complete menu, all its items and creates a new module, using the name speified*/function copyMenu( $option, $cid, $type ) { global $database, $adminLanguage; $menu_name = mosGetParam( $_POST, 'menu_name', 'New Menu' ); $module_name = mosGetParam( $_POST, 'module_name', 'New Module' ); // check for unique menutype for new menu copy $query = "SELECT params" . "\n FROM #__modules" . "\n WHERE module = 'mod_mainmenu'" ; $database->setQuery( $query ); $menus = $database->loadResultArray(); foreach ( $menus as $menu ) { $params = mosParseParams( $menu ); if ( $params->menutype == $menu_name ) { echo "<script> alert('$adminLanguage->A_COMP_MENU_EXISTS_WARNING'); window.history.go(-1); </script>\n"; exit; } } // copy the menu items $mids = mosGetParam( $_POST, 'mids', '' ); $total = count( $mids ); $copy = new mosMenu( $database ); $original = new mosMenu( $database ); sort( $mids ); $a_ids = array(); foreach( $mids as $mid ) { $original->load( $mid ); $copy = $original; $copy->id = NULL; $copy->parent = $a_ids[$original->parent]; $copy->menutype = $menu_name; if ( !$copy->check() ) { echo "<script> alert('".$copy->getError()."'); window.history.go(-1); </script>\n"; exit(); } if ( !$copy->store() ) { echo "<script> alert('".$copy->getError()."'); window.history.go(-1); </script>\n"; exit(); } $a_ids[$original->id] = $copy->id; } // create the module copy $row = new mosModule( $database ); $row->load( 0 ); $row->title = $module_name; $row->iscore = 0; $row->published = 1; $row->position = 'left'; $row->module = 'mod_mainmenu'; $row->params = 'menutype='. $menu_name; if (!$row->check()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } if (!$row->store()) { echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n"; exit(); } $row->checkin(); $row->updateOrder( "position='". $row->position ."'" ); // module assigned to show on All pages by default // ToDO: Changed to become a mambo db-object $query = "INSERT INTO #__modules_menu VALUES ( $row->id, 0 )"; $database->setQuery( $query ); if ( !$database->query() ) { echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n"; exit(); } $msg = $adminLanguage->A_COMP_MENU_COPY_OF ." `". $type ."` ". $adminLanguage->A_COMP_MENU_CONSIST ." ". $total ." ". $adminLanguage->A_COMP_ITEMS; mosRedirect( 'index2.php?option=' . $option, $msg );}/*** Cancels an edit operation* @param option options for the operation*/function cancelMenu( $option ) { mosRedirect( 'index2.php?option=' . $option . '&task=view' );}?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -