/administrator/components/com_menus/models/menutype.php
https://github.com/MaBelleEcole/Main · PHP · 280 lines · 180 code · 35 blank · 65 comment · 24 complexity · 54ae825fdd8b2ea2e0bf7dbdda04ea99 MD5 · raw file
- <?php
- /**
- * @version $Id: menutype.php 14401 2010-01-26 14:10:00Z louis $
- * @package Joomla
- * @subpackage Menus
- * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
- * @license GNU/GPL, see LICENSE.php
- * Joomla! is free software. This version may have been modified pursuant to the
- * GNU General Public License, and as distributed it includes or is derivative
- * of works licensed under the GNU General Public License or other free or open
- * source software licenses. See COPYRIGHT.php for copyright notices and
- * details.
- */
- // Check to ensure this file is included in Joomla!
- defined('_JEXEC') or die( 'Restricted access' );
- jimport( 'joomla.application.component.model' );
- /**
- * @package Joomla
- * @subpackage Menus
- */
- class MenusModelMenutype extends JModel
- {
- var $_modelName = 'menutype';
- /** @var object JTable object */
- var $_table = null;
- /**
- * Returns the internal table object
- * @return JTable
- */
- function &getTable()
- {
- if ($this->_table == null) {
- $this->_table = & JTable::getInstance('menuTypes');
- if ($id = JRequest::getVar('id', false, '', 'int')) {
- $this->_table->load($id);
- }
- }
- return $this->_table;
- }
- /**
- * Get a list of the menu records associated with the type
- *
- * @param string The menu type
- * @return array An array of records as objects
- */
- function getMenus()
- {
- global $mainframe;
- $menus= array();
- $db = &$this->getDBO();
- // Preselect some aggregate data
- // Query to get published menu item counts
- $query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .
- ' FROM #__menu AS a' .
- ' WHERE a.published = 1' .
- ' GROUP BY a.menutype';
- $db->setQuery( $query );
- $published = $db->loadObjectList( 'menutype' );
- // Query to get unpublished menu item counts
- $query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .
- ' FROM #__menu AS a' .
- ' WHERE a.published = 0' .
- ' GROUP BY a.menutype';
- $db->setQuery( $query );
- $unpublished = $db->loadObjectList( 'menutype' );
- // Query to get trash menu item counts
- $query = 'SELECT a.menutype, COUNT( a.menutype ) AS num' .
- ' FROM #__menu AS a' .
- ' WHERE a.published = -2' .
- ' GROUP BY a.menutype';
- $db->setQuery( $query );
- $trash = $db->loadObjectList( 'menutype' );
- $limit = $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );
- $limitstart = $mainframe->getUserStateFromRequest( 'com_menus.limitstart', 'limitstart', 0, 'int' );
- $query = 'SELECT a.*, SUM(b.home) AS home' .
- ' FROM #__menu_types AS a' .
- ' LEFT JOIN #__menu AS b ON b.menutype = a.menutype' .
- ' GROUP BY a.id';
- $db->setQuery( $query, $limitstart, $limit );
- $menuTypes = $db->loadObjectList();
- $total = count( $menuTypes );
- $i = 0;
- for ($i = 0; $i < $total; $i++) {
- $row = &$menuTypes[$i];
- // query to get number of modules for menutype
- $query = 'SELECT count( id )' .
- ' FROM #__modules' .
- ' WHERE module = "mod_mainmenu"' .
- ' AND params LIKE '.$db->Quote('%menutype='.$row->menutype.'%');
- $db->setQuery( $query );
- $modules = $db->loadResult();
- if ( !$modules ) {
- $modules = '-';
- }
- $row->modules = $modules;
- $row->published = @$published[$row->menutype]->num ? $published[$row->menutype]->num : '-' ;
- $row->unpublished = @$unpublished[$row->menutype]->num ? $unpublished[$row->menutype]->num : '-';
- $row->trash = @$trash[$row->menutype]->num ? $trash[$row->menutype]->num : '-';
- $menus[] = $row;
- }
- return $menus;
- }
- /**
- * Get a list of the menu records associated with the type
- *
- * @param string The menu type
- * @return array An array of records as objects
- */
- function getPagination()
- {
- global $mainframe;
- $menutypes = MenusHelper::getMenuTypeList();
- $total = count( $menutypes );
- $limit = $mainframe->getUserStateFromRequest( 'global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int' );
- $limitstart = $mainframe->getUserStateFromRequest( 'com_menus.limitstart', 'limitstart', 0, 'int' );
- jimport('joomla.html.pagination');
- $pagination = new JPagination( $total, $limitstart, $limit );
- return $pagination;
- }
- /**
- * Get a list of the menu records associated with the type
- * @param string The menu type
- * @return array An array of records as objects
- */
- function getMenuItems()
- {
- $table = & $this->getTable();
- if ($table->menutype == '') {
- $table->menutype = JRequest::getString('menutype');
- }
- $db = &$this->getDBO();
- $query = 'SELECT a.name, a.id' .
- ' FROM #__menu AS a' .
- ' WHERE a.menutype = ' . $db->Quote( $table->menutype ) .
- ' ORDER BY a.name';
- $db->setQuery( $query );
- $result = $db->loadObjectList();
- return $result;
- }
- /**
- * Get a list of the menu records associated with the type
- * @param string The menu type
- * @return array An array of records as objects
- */
- function getModules( $type='' )
- {
- if ($type == '') {
- $type = $this->_table->menutype;
- }
- $db = &$this->getDBO();
- $query = 'SELECT id, title, params' .
- ' FROM #__modules' .
- ' WHERE module = "mod_mainmenu"' .
- ' AND params LIKE ' . $db->Quote( '%menutype=' . $type . '%' );
- $db->setQuery( $query );
- $temp = $db->loadObjectList();
- $result = array();
- $n = count( $temp );
- for ($i = 0; $i < $n; $i++)
- {
- $params = new JParameter( $temp[$i]->params );
- if ($params->get( 'menutype' ) == $type) {
- $result[] = $temp[$i];
- }
- }
- return $result;
- }
- /**
- * Checks if the menu can be deleted
- * @param string The menu type
- * @return boolean
- */
- function canDelete( $type='' )
- {
- if ($type == '') {
- $type = $this->_table->menutype;
- }
- if ($type == 'mainmenu') {
- $this->setError( JText::_( 'WARNDELMAINMENU' ) );
- return false;
- }
- return true;
- }
- /**
- * Deletes menu type and associations
- * @param string The id of the menu type
- * @return boolean
- */
- function delete( $id = 0 )
- {
- $table = &$this->getTable();
- if ($id != 0) {
- $table->load( $id );
- }
- $db = &$this->getDBO();
- // Delete Associations
- if (!$this->deleteByType( $table->menutype )) {
- $this->setError( $this->getError() );
- return false;
- }
- // TODO: Should invoke JModuleModel::delete to delete the actual module
- $moduleTable= &JTable::getInstance( 'module');
- $items = &$this->getModules( $table->menutype );
- $modulesIds = array();
- foreach ($items as $item)
- {
- if (!$moduleTable->delete( $item->id )) {
- $this->setError( $moduleTable->getErrorMsg() );
- return false;
- }
- $modulesIds[] = (int) $item->id;
- }
- if (count( $modulesIds )) {
- $query = 'DELETE FROM #__modules_menu' .
- ' WHERE menuid = '.implode( ' OR moduleid = ', $modulesIds );
- $db->setQuery( $query );
- if (!$db->query()) {
- $this->setError( $menuTable->getErrorMsg() );
- return false;
- }
- }
- $result = $table->delete();
- return $result;
- }
- /**
- * Delete menu items by type
- */
- function deleteByType( $type = '' )
- {
- if (!$type) {
- return false;
- }
- $db = &$this->getDBO();
- $query = 'DELETE FROM #__menu' .
- ' WHERE menutype = '.$db->Quote( $type );
- $db->setQuery( $query );
- if (!$db->query()) {
- $this->setError( $menuTable->getErrorMsg() );
- return false;
- }
-
- // clean cache
- MenusHelper::cleanCache();
-
- return true;
- }
- }