Spade

Mini Shell

Directory:~$ /home/lmsyaran/public_html/joomla5/components/com_newsfeeds/src/Model/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/public_html/joomla5/components/com_newsfeeds/src/Model/NewsfeedModel.php

<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_newsfeeds
 *
 * @copyright   (C) 2006 Open Source Matters, Inc.
<https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

namespace Joomla\Component\Newsfeeds\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\ItemModel;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects

/**
 * Newsfeeds Component Newsfeed Model
 *
 * @since  1.5
 */
class NewsfeedModel extends ItemModel
{
    /**
     * Model context string.
     *
     * @var     string
     * @since   1.6
     */
    protected $_context = 'com_newsfeeds.newsfeed';

    /**
     * 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()
    {
        $app = Factory::getApplication();

        // Load state from the request.
        $pk = $app->getInput()->getInt('id');
        $this->setState('newsfeed.id', $pk);

        $offset = $app->getInput()->get('limitstart', 0,
'uint');
        $this->setState('list.offset', $offset);

        // Load the parameters.
        $params = $app->getParams();
        $this->setState('params', $params);

        $user = $this->getCurrentUser();

        if ((!$user->authorise('core.edit.state',
'com_newsfeeds')) &&
(!$user->authorise('core.edit', 'com_newsfeeds'))) {
            $this->setState('filter.published', 1);
            $this->setState('filter.archived', 2);
        }
    }

    /**
     * Method to get newsfeed data.
     *
     * @param   integer  $pk  The id of the newsfeed.
     *
     * @return  mixed  Menu item data object on success, false on failure.
     *
     * @since   1.6
     */
    public function &getItem($pk = null)
    {
        $pk = (int) $pk ?: (int)
$this->getState('newsfeed.id');

        if ($this->_item === null) {
            $this->_item = [];
        }

        if (!isset($this->_item[$pk])) {
            try {
                $db    = $this->getDatabase();
                $query = $db->getQuery(true)
                    ->select(
                        [
                            $this->getState('item.select',
$db->quoteName('a') . '.*'),
                            $db->quoteName('c.title',
'category_title'),
                            $db->quoteName('c.alias',
'category_alias'),
                            $db->quoteName('c.access',
'category_access'),
                            $db->quoteName('u.name',
'author'),
                            $db->quoteName('parent.title',
'parent_title'),
                            $db->quoteName('parent.id',
'parent_id'),
                            $db->quoteName('parent.path',
'parent_route'),
                            $db->quoteName('parent.alias',
'parent_alias'),
                        ]
                    )
                    ->from($db->quoteName('#__newsfeeds',
'a'))
                    ->join('LEFT',
$db->quoteName('#__categories', 'c'),
$db->quoteName('c.id') . ' = ' .
$db->quoteName('a.catid'))
                    ->join('LEFT',
$db->quoteName('#__users', 'u'),
$db->quoteName('u.id') . ' = ' .
$db->quoteName('a.created_by'))
                    ->join('LEFT',
$db->quoteName('#__categories', 'parent'),
$db->quoteName('parent.id') . ' = ' .
$db->quoteName('c.parent_id'))
                    ->where($db->quoteName('a.id') . '
= :id')
                    ->bind(':id', $pk,
ParameterType::INTEGER);

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

                if (is_numeric($published)) {
                    // Filter by start and end dates.
                    $nowDate = Factory::getDate()->toSql();

                    $published = (int) $published;
                    $archived  = (int) $archived;

                    $query->extendWhere(
                        'AND',
                        [
                            $db->quoteName('a.published') .
' = :published1',
                            $db->quoteName('a.published') .
' = :archived1',
                        ],
                        'OR'
                    )
                        ->extendWhere(
                            'AND',
                            [
                                $db->quoteName('a.publish_up')
. ' IS NULL',
                                $db->quoteName('a.publish_up')
. ' <= :nowDate1',
                            ],
                            'OR'
                        )
                        ->extendWhere(
                            'AND',
                            [
                               
$db->quoteName('a.publish_down') . ' IS NULL',
                               
$db->quoteName('a.publish_down') . ' >=
:nowDate2',
                            ],
                            'OR'
                        )
                        ->extendWhere(
                            'AND',
                            [
                                $db->quoteName('c.published')
. ' = :published2',
                                $db->quoteName('c.published')
. ' = :archived2',
                            ],
                            'OR'
                        )
                        ->bind([':published1',
':published2'], $published, ParameterType::INTEGER)
                        ->bind([':archived1',
':archived2'], $archived, ParameterType::INTEGER)
                        ->bind([':nowDate1',
':nowDate2'], $nowDate);
                }

                $db->setQuery($query);

                $data = $db->loadObject();

                if ($data === null) {
                    throw new
\Exception(Text::_('COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND'), 404);
                }

                // Check for published state if filter set.

                if ((is_numeric($published) || is_numeric($archived))
&& $data->published != $published && $data->published
!= $archived) {
                    throw new
\Exception(Text::_('COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND'), 404);
                }

                // Convert parameter fields to objects.
                $registry     = new Registry($data->params);
                $data->params = clone
$this->getState('params');
                $data->params->merge($registry);

                $data->metadata = new Registry($data->metadata);

                // Compute access permissions.

                if ($access =
$this->getState('filter.access')) {
                    // If the access filter has been set, we already know
this user can view.
                    $data->params->set('access-view',
true);
                } else {
                    // If no access filter is set, the layout takes some
responsibility for display of limited information.
                    $user   = $this->getCurrentUser();
                    $groups = $user->getAuthorisedViewLevels();
                    $data->params->set('access-view',
\in_array($data->access, $groups) &&
\in_array($data->category_access, $groups));
                }

                $this->_item[$pk] = $data;
            } catch (\Exception $e) {
                $this->setError($e);
                $this->_item[$pk] = false;
            }
        }

        return $this->_item[$pk];
    }

    /**
     * Increment the hit counter for the newsfeed.
     *
     * @param   int  $pk  Optional primary key of the item to increment.
     *
     * @return  boolean  True if successful; false otherwise and internal
error set.
     *
     * @since   3.0
     */
    public function hit($pk = 0)
    {
        $input    = Factory::getApplication()->getInput();
        $hitcount = $input->getInt('hitcount', 1);

        if ($hitcount) {
            $pk = (!empty($pk)) ? $pk : (int)
$this->getState('newsfeed.id');

            $table = $this->getTable('Newsfeed',
'Administrator');
            $table->hit($pk);
        }

        return true;
    }
}