?? controller.php
字號:
<?php/** * @version $Id: controller.php 11633 2009-02-19 23:59:09Z willebil $ * @package Joomla * @subpackage Content * @copyright Copyright (C) 2005 - 2008 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.controller');/** * Content Component Controller * * @package Joomla * @subpackage Content * @since 1.5 */class ContentController extends JController{ /** * Articles element */ function element() { $model = &$this->getModel( 'element' ); $view = &$this->getView( 'element'); $view->setModel( $model, true ); $view->display(); } /** * Compiles a list of installed or defined modules * @param database A database connector object */ function viewContent() { global $mainframe; // Initialize variables $db =& JFactory::getDBO(); $filter = null; // Get some variables from the request $sectionid = JRequest::getVar( 'sectionid', -1, '', 'int' ); $redirect = $sectionid; $option = JRequest::getCmd( 'option' ); $context = 'com_content.viewcontent'; $filter_order = $mainframe->getUserStateFromRequest( $context.'filter_order', 'filter_order', '', 'cmd' ); $filter_order_Dir = $mainframe->getUserStateFromRequest( $context.'filter_order_Dir', 'filter_order_Dir', '', 'word' ); $filter_state = $mainframe->getUserStateFromRequest( $context.'filter_state', 'filter_state', '', 'word' ); $catid = $mainframe->getUserStateFromRequest( $context.'catid', 'catid', 0, 'int' ); $filter_authorid = $mainframe->getUserStateFromRequest( $context.'filter_authorid', 'filter_authorid', 0, 'int' ); $filter_sectionid = $mainframe->getUserStateFromRequest( $context.'filter_sectionid', 'filter_sectionid', -1, 'int' ); $search = $mainframe->getUserStateFromRequest( $context.'search', 'search', '', 'string' ); $search = JString::strtolower($search); $limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int'); $limitstart = $mainframe->getUserStateFromRequest($context.'limitstart', 'limitstart', 0, 'int'); // In case limit has been changed, adjust limitstart accordingly $limitstart = ( $limit != 0 ? (floor($limitstart / $limit) * $limit) : 0 ); //$where[] = "c.state >= 0"; $where[] = 'c.state != -2'; if (!$filter_order) { $filter_order = 'section_name'; } if ($filter_order == 'c.ordering') { $order = ' ORDER BY section_name, cc.title, c.ordering '. $filter_order_Dir; } else { $order = ' ORDER BY '. $filter_order .' '. $filter_order_Dir .', section_name, cc.title, c.ordering'; } $all = 1; if ($filter_sectionid >= 0) { $filter = ' WHERE cc.section = '. (int) $filter_sectionid; } $section->title = 'All Articles'; $section->id = 0; /* * Add the filter specific information to the where clause */ // Section filter if ($filter_sectionid >= 0) { $where[] = 'c.sectionid = ' . (int) $filter_sectionid; } // Category filter if ($catid > 0) { $where[] = 'c.catid = ' . (int) $catid; } // Author filter if ($filter_authorid > 0) { $where[] = 'c.created_by = ' . (int) $filter_authorid; } // Content state filter if ($filter_state) { if ($filter_state == 'P') { $where[] = 'c.state = 1'; } else { if ($filter_state == 'U') { $where[] = 'c.state = 0'; } else if ($filter_state == 'A') { $where[] = 'c.state = -1'; } else { $where[] = 'c.state != -2'; } } } // Keyword filter if ($search) { $where[] = '(LOWER( c.title ) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false ) . ' OR c.id = ' . (int) $search . ')'; } // Build the where clause of the content record query $where = (count($where) ? ' WHERE '.implode(' AND ', $where) : ''); // Get the total number of records $query = 'SELECT COUNT(*)' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . $where; $db->setQuery($query); $total = $db->loadResult(); // Create the pagination object jimport('joomla.html.pagination'); $pagination = new JPagination($total, $limitstart, $limit); // Get the articles $query = 'SELECT c.*, g.name AS groupname, cc.title AS name, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__groups AS g ON g.id = c.access' . ' LEFT JOIN #__users AS u ON u.id = c.checked_out' . ' LEFT JOIN #__users AS v ON v.id = c.created_by' . ' LEFT JOIN #__content_frontpage AS f ON f.content_id = c.id' . $where . $order; $db->setQuery($query, $pagination->limitstart, $pagination->limit); $rows = $db->loadObjectList(); // If there is a database query error, throw a HTTP 500 and exit if ($db->getErrorNum()) { JError::raiseError( 500, $db->stderr() ); return false; } // get list of categories for dropdown filter $query = 'SELECT cc.id AS value, cc.title AS text, section' . ' FROM #__categories AS cc' . ' INNER JOIN #__sections AS s ON s.id = cc.section ' . $filter . ' ORDER BY s.ordering, cc.ordering'; $lists['catid'] = ContentHelper::filterCategory($query, $catid); // get list of sections for dropdown filter $javascript = 'onchange="document.adminForm.submit();"'; $lists['sectionid'] = JHTML::_('list.section', 'filter_sectionid', $filter_sectionid, $javascript); // get list of Authors for dropdown filter $query = 'SELECT c.created_by, u.name' . ' FROM #__content AS c' . ' INNER JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__users AS u ON u.id = c.created_by' . ' WHERE c.state <> -1' . ' AND c.state <> -2' . ' GROUP BY u.name' . ' ORDER BY u.name'; $authors[] = JHTML::_('select.option', '0', '- '.JText::_('Select Author').' -', 'created_by', 'name'); $db->setQuery($query); $authors = array_merge($authors, $db->loadObjectList()); $lists['authorid'] = JHTML::_('select.genericlist', $authors, 'filter_authorid', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'created_by', 'name', $filter_authorid); // state filter $lists['state'] = JHTML::_('grid.state', $filter_state, 'Published', 'Unpublished', 'Archived'); // table ordering $lists['order_Dir'] = $filter_order_Dir; $lists['order'] = $filter_order; // search filter $lists['search'] = $search; ContentView::showContent($rows, $lists, $pagination, $redirect); } /** * Shows a list of archived articles * @param int The section id */ function viewArchive() { global $mainframe; // Initialize variables $db =& JFactory::getDBO(); $sectionid = JRequest::getVar( 'sectionid', 0, '', 'int' ); $option = JRequest::getCmd( 'option' ); $filter_order = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.filter_order", 'filter_order', 'sectname', 'cmd'); $filter_order_Dir = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.filter_order_Dir", 'filter_order_Dir', '', 'word'); $catid = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.catid", 'catid', 0, 'int'); $limit = $mainframe->getUserStateFromRequest('global.list.limit', 'limit', $mainframe->getCfg('list_limit'), 'int'); $limitstart = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.limitstart", 'limitstart', 0, 'int'); $filter_authorid = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.filter_authorid", 'filter_authorid', 0, 'int'); $filter_sectionid = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.filter_sectionid", 'filter_sectionid', 0, 'int'); $search = $mainframe->getUserStateFromRequest("$option.$sectionid.viewarchive.search", 'search', '', 'string'); $search = JString::strtolower($search); $redirect = $sectionid; // A section id of zero means view all articles [all sections] if ($sectionid == 0) { $where = array ('c.state = -1', 'c.catid = cc.id', 'cc.section = s.id', 's.scope = "content"'); $filter = ' , #__sections AS s WHERE s.id = c.section'; $all = 1; } else { //We are viewing a specific section $where = array ('c.state = -1', 'c.catid = cc.id', 'cc.section = s.id', 's.scope = "content"', 'c.sectionid= '.(int) $sectionid); $filter = ' WHERE section = '.$db->Quote($sectionid); $all = NULL; } // Section filter if ($filter_sectionid > 0) { $where[] = 'c.sectionid = ' . (int) $filter_sectionid; } // Author filter if ($filter_authorid > 0) { $where[] = 'c.created_by = ' . (int) $filter_authorid; } // Category filter if ($catid > 0) { $where[] = 'c.catid = ' . (int) $catid; } // Keyword filter if ($search) { $where[] = 'LOWER( c.title ) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false ); } // TODO: Sanitise $filter_order $filter_order_Dir = ($filter_order_Dir == 'ASC' ? 'ASC' : 'DESC'); $orderby = ' ORDER BY '. $filter_order .' '. $filter_order_Dir .', sectname, cc.name, c.ordering'; $where = (count($where) ? ' WHERE '.implode(' AND ', $where) : ''); // get the total number of records $query = 'SELECT COUNT(*)' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . $where; $db->setQuery($query); $total = $db->loadResult(); jimport('joomla.html.pagination'); $pagination = new JPagination($total, $limitstart, $limit); $query = 'SELECT c.*, g.name AS groupname, cc.name, v.name AS author, s.title AS sectname' . ' FROM #__content AS c' . ' LEFT JOIN #__categories AS cc ON cc.id = c.catid' . ' LEFT JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__groups AS g ON g.id = c.access' . ' LEFT JOIN #__users AS v ON v.id = c.created_by' . $where . $orderby; $db->setQuery($query, $pagination->limitstart, $pagination->limit); $rows = $db->loadObjectList(); // If there is a database query error, throw a HTTP 500 and exit if ($db->getErrorNum()) { JError::raiseError( 500, $db->stderr() ); return false; } // get list of categories for dropdown filter $query = 'SELECT c.id AS value, c.title AS text' . ' FROM #__categories AS c' . $filter . ' ORDER BY c.ordering'; $lists['catid'] = ContentHelper::filterCategory($query, $catid); // get list of sections for dropdown filter $javascript = 'onchange="document.adminForm.submit();"'; $lists['sectionid'] = JAdminMenus::SelectSection('filter_sectionid', $filter_sectionid, $javascript); $section = & JTable::getInstance('section'); $section->load($sectionid); // get list of Authors for dropdown filter $query = 'SELECT c.created_by, u.name' . ' FROM #__content AS c' . ' INNER JOIN #__sections AS s ON s.id = c.sectionid' . ' LEFT JOIN #__users AS u ON u.id = c.created_by' . ' WHERE c.state = -1' . ' GROUP BY u.name' . ' ORDER BY u.name'; $db->setQuery($query); $authors[] = JHTML::_('select.option', '0', '- '.JText::_('Select Author').' -', 'created_by', 'name'); $authors = array_merge($authors, $db->loadObjectList()); $lists['authorid'] = JHTML::_('select.genericlist', $authors, 'filter_authorid', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'created_by', 'name', $filter_authorid); // table ordering $lists['order_Dir'] = $filter_order_Dir; $lists['order'] = $filter_order; // search filter $lists['search'] = $search; ContentView::showArchive($rows, $section, $lists, $pagination, $option, $all, $redirect); } /** * Compiles information to add or edit the record * * @param database A database connector object * @param integer The unique id of the record to edit (0 if new) * @param integer The id of the content section */ function editContent($edit) { global $mainframe; // Initialize variables $db = & JFactory::getDBO(); $user = & JFactory::getUser(); $cid = JRequest::getVar( 'cid', array(0), '', 'array' ); JArrayHelper::toInteger($cid, array(0)); $id = JRequest::getVar( 'id', $cid[0], '', 'int' ); $option = JRequest::getCmd( 'option' ); $nullDate = $db->getNullDate(); $contentSection = ''; $sectionid = 0; // Create and load the content table row $row = & JTable::getInstance('content'); if($edit) $row->load($id); if ($id) { $sectionid = $row->sectionid; if ($row->state < 0) { $mainframe->redirect('index.php?option=com_content', JText::_('You cannot edit an archived item')); } } // A sectionid of zero means grab from all sections if ($sectionid == 0) { $where = ' WHERE section NOT LIKE "%com_%"'; } else { // Grab from the specific section $where = ' WHERE section = '. $db->Quote( $sectionid ); } /* * If the item is checked out we cannot edit it... unless it was checked * out by the current user. */ if ( JTable::isCheckedOut($user->get ('id'), $row->checked_out )) { $msg = JText::sprintf('DESCBEINGEDITTED', JText::_('The item'), $row->title); $mainframe->redirect('index.php?option=com_content', $msg); } if ($id) { $row->checkout($user->get('id')); if (trim($row->images)) { $row->images = explode("\n", $row->images); } else { $row->images = array (); } $query = 'SELECT name' . ' FROM #__users'. ' WHERE id = '. (int) $row->created_by; $db->setQuery($query); $row->creator = $db->loadResult(); // test to reduce unneeded query if ($row->created_by == $row->modified_by) { $row->modifier = $row->creator; } else { $query = 'SELECT name' . ' FROM #__users' . ' WHERE id = '. (int) $row->modified_by; $db->setQuery($query); $row->modifier = $db->loadResult(); } $query = 'SELECT COUNT(content_id)' . ' FROM #__content_frontpage' . ' WHERE content_id = '. (int) $row->id; $db->setQuery($query); $row->frontpage = $db->loadResult(); if (!$row->frontpage) { $row->frontpage = 0; } } else { if (!$sectionid && JRequest::getInt('filter_sectionid')) { $sectionid =JRequest::getInt('filter_sectionid'); } if (JRequest::getInt('catid')) { $row->catid = JRequest::getInt('catid'); $category = & JTable::getInstance('category'); $category->load($row->catid); $sectionid = $category->section; } else { $row->catid = NULL; } $createdate =& JFactory::getDate(); $row->sectionid = $sectionid; $row->version = 0; $row->state = 1; $row->ordering = 0; $row->images = array (); $row->publish_up = $createdate->toUnix(); $row->publish_down = JText::_('Never'); $row->creator = ''; $row->created = $createdate->toUnix(); $row->modified = $nullDate; $row->modifier = ''; $row->frontpage = 0; } $javascript = "onchange=\"changeDynaList( 'catid', sectioncategories, document.adminForm.sectionid.options[document.adminForm.sectionid.selectedIndex].value, 0, 0);\""; $query = 'SELECT s.id, s.title' . ' FROM #__sections AS s' . ' ORDER BY s.ordering'; $db->setQuery($query); $sections[] = JHTML::_('select.option', '-1', '- '.JText::_('Select Section').' -', 'id', 'title'); $sections[] = JHTML::_('select.option', '0', JText::_('Uncategorized'), 'id', 'title'); $sections = array_merge($sections, $db->loadObjectList()); $lists['sectionid'] = JHTML::_('select.genericlist', $sections, 'sectionid', 'class="inputbox" size="1" '.$javascript, 'id', 'title', intval($row->sectionid)); foreach ($sections as $section) { $section_list[] = (int) $section->id; // get the type name - which is a special category if ($row->sectionid) { if ($section->id == $row->sectionid) { $contentSection = $section->title; } } else { if ($section->id == $sectionid) { $contentSection = $section->title; } } } $sectioncategories = array (); $sectioncategories[-1] = array (); $sectioncategories[-1][] = JHTML::_('select.option', '-1', JText::_( 'Select Category' ), 'id', 'title'); $section_list = implode('\', \'', $section_list); $query = 'SELECT id, title, section' . ' FROM #__categories' . ' WHERE section IN ( \''.$section_list.'\' )' . ' ORDER BY ordering';
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -