📄 controller.php
字号:
<?php
/**
* @version $Id: controller.php 8445 2007-08-18 21:03:25Z hackwar $
* @package Joomla
* @subpackage Content
* @copyright Copyright (C) 2005 - 2007 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();
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');
//$where[] = "c.state >= 0";
$where[] = 'c.state != -2';
if (!$filter_order) {
$filter_order = 'section_name';
}
$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( "%$search%" ) .
' 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('%'.$search.'%');
}
// 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()
{
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');
$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 ();
}
$row->publish_down = ContentController::_validateDate($row->publish_down);
$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;
}
jimport('joomla.utilities.date');
$createdate = new JDate();
$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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -