329 lines
8.3 KiB
PHP
329 lines
8.3 KiB
PHP
<?php
|
|
/**
|
|
* @package JEM
|
|
* @copyright (C) 2013-2024 joomlaeventmanager.net
|
|
* @copyright (C) 2005-2009 Christoph Lukes
|
|
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\Filter\InputFilter;
|
|
Use Joomla\Utilities\ArrayHelper;
|
|
use Joomla\Registry\Registry;
|
|
|
|
require_once __DIR__ . '/eventslist.php';
|
|
|
|
/**
|
|
* Model: Category
|
|
*
|
|
* \todo Remove all the collected stuff copied from somewhere but unused/useless.
|
|
*/
|
|
class JemModelCategory extends JemModelEventslist
|
|
{
|
|
protected $_id = null;
|
|
//protected $_data = null;
|
|
//protected $_childs = null;
|
|
//protected $_category = null;
|
|
//protected $_pagination= null;
|
|
protected $_item = null;
|
|
//protected $_articles = null;
|
|
//protected $_siblings = null;
|
|
protected $_children = null;
|
|
protected $_parent = null;
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$app = Factory::getApplication();
|
|
// Get the parameters of the active menu item
|
|
$params = $app->getParams();
|
|
|
|
$id = $app->input->getInt('id', 0);
|
|
if (empty($id)) {
|
|
$id = $params->get('id', 1);
|
|
}
|
|
|
|
$this->setId((int)$id);
|
|
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Set Date
|
|
*/
|
|
public function setdate($date)
|
|
{
|
|
$this->_date = $date;
|
|
}
|
|
|
|
/**
|
|
* Method to set the category id
|
|
*/
|
|
public function setId($id)
|
|
{
|
|
// Set new category ID and wipe data
|
|
$this->_id = $id;
|
|
$this->_item = null;
|
|
//$this->_data = null;
|
|
}
|
|
|
|
/**
|
|
* set limit
|
|
* @param int value
|
|
*/
|
|
public function setLimit($value)
|
|
{
|
|
$this->setState('list.limit', (int) $value);
|
|
}
|
|
|
|
/**
|
|
* set limitstart
|
|
* @param int value
|
|
*/
|
|
public function setLimitStart($value)
|
|
{
|
|
$this->setState('list.start', (int) $value);
|
|
}
|
|
|
|
/**
|
|
* Method to auto-populate the model state.
|
|
*/
|
|
protected function populateState($ordering = null, $direction = null)
|
|
{
|
|
// Initiliase variables.
|
|
$app = Factory::getApplication('site');
|
|
$jemsettings = JemHelper::config();
|
|
$task = $app->input->getCmd('task','');
|
|
$format = $app->input->getCmd('format',false);
|
|
$pk = $app->input->getInt('id', 0);
|
|
$itemid = $pk . ':' . $app->input->getInt('Itemid', 0);
|
|
|
|
$this->setState('category.id', $pk);
|
|
$this->setState('filter.req_catid', $pk);
|
|
|
|
// Load the parameters. Merge Global and Menu Item params into new object
|
|
$params = $app->getParams();
|
|
$menuParams = new Registry;
|
|
|
|
if ($menu = $app->getMenu()->getActive()) {
|
|
// $menu_params = $menu->getParams();
|
|
// $menuParams->loadString($menu->params);
|
|
$menuParams->loadString($menu->getParams());
|
|
}
|
|
|
|
$mergedParams = clone $menuParams;
|
|
$mergedParams->merge($params);
|
|
|
|
$this->setState('params', $mergedParams);
|
|
|
|
# limit/start
|
|
|
|
/* in J! 3.3.6 limitstart is removed from request - but we need it! */
|
|
if ($app->input->getInt('limitstart', null) === null) {
|
|
$app->setUserState('com_jem.category.'.$itemid.'.limitstart', 0);
|
|
}
|
|
|
|
if (empty($format) || ($format == 'html')) {
|
|
$limit = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.limit', 'limit', $jemsettings->display_num, 'int');
|
|
$this->setState('list.limit', $limit);
|
|
|
|
$limitstart = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.limitstart', 'limitstart', 0, 'int');
|
|
// correct start value if required
|
|
$limitstart = $limit ? (int)(floor($limitstart / $limit) * $limit) : 0;
|
|
$this->setState('list.start', $limitstart);
|
|
}
|
|
|
|
# Search - variables
|
|
$search = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.filter_search', 'filter_search', '', 'string');
|
|
$this->setState('filter.filter_search', $search);
|
|
|
|
$month = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.filter_month', 'filter_month', '', 'string');
|
|
$this->setState('filter.filter_month', $month);
|
|
|
|
$filtertype = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.filter_type', 'filter_type', 0, 'int');
|
|
$this->setState('filter.filter_type', $filtertype);
|
|
|
|
# show open date events
|
|
# (there is no menu item option yet so show all events)
|
|
$this->setState('filter.opendates', 1);
|
|
|
|
# publish state
|
|
$this->_populatePublishState($task);
|
|
|
|
###########
|
|
## ORDER ##
|
|
###########
|
|
|
|
$filter_order = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.filter_order', 'filter_order', 'a.dates', 'cmd');
|
|
$filter_order_DirDefault = 'ASC';
|
|
// Reverse default order for dates in archive mode
|
|
if($task == 'archive' && $filter_order == 'a.dates') {
|
|
$filter_order_DirDefault = 'DESC';
|
|
}
|
|
$filter_order_Dir = $app->getUserStateFromRequest('com_jem.category.'.$itemid.'.filter_order_Dir', 'filter_order_Dir', $filter_order_DirDefault, 'word');
|
|
$filter_order = InputFilter::getInstance()->clean($filter_order, 'cmd');
|
|
$filter_order_Dir = InputFilter::getInstance()->clean($filter_order_Dir, 'word');
|
|
|
|
$default_order_Dir = ($task == 'archive') ? 'DESC' : 'ASC';
|
|
if ($filter_order == 'a.dates') {
|
|
$orderby = array('a.dates ' . $filter_order_Dir, 'a.times ' . $filter_order_Dir, 'a.created ' . $filter_order_Dir);
|
|
} else {
|
|
$orderby = array($filter_order . ' ' . $filter_order_Dir,
|
|
'a.dates ' . $default_order_Dir, 'a.times ' . $default_order_Dir, 'a.created ' . $default_order_Dir);
|
|
}
|
|
|
|
$this->setState('filter.orderby',$orderby);
|
|
}
|
|
|
|
/**
|
|
* Get the events in the category
|
|
*/
|
|
public function getItems()
|
|
{
|
|
//$params = clone $this->getState('params');
|
|
$items = parent::getItems();
|
|
|
|
if ($items) {
|
|
return $items;
|
|
}
|
|
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* Method to get category data for the current category
|
|
*/
|
|
public function getCategory()
|
|
{
|
|
if (!is_object($this->_item)) {
|
|
$options = array();
|
|
|
|
if (isset($this->state->params)) {
|
|
$params = $this->state->params;
|
|
$options['countItems'] = ($params->get('show_cat_num_articles', 1) || !$params->get('show_empty_categories_cat', 0)) ? 1 : 0;
|
|
}
|
|
else {
|
|
$options['countItems'] = 0;
|
|
}
|
|
|
|
$where_pub = $this->_getPublishWhere('i');
|
|
if (!empty($where_pub)) {
|
|
$options['published_where'] = '(' . implode(' OR ', $where_pub) . ')';
|
|
} else {
|
|
// something wrong - fallback to published events
|
|
$options['published_where'] = 'i.published = 1';
|
|
}
|
|
|
|
$catId = $this->getState('category.id', 'root');
|
|
$categories = new JemCategories($catId, $options);
|
|
$this->_item = $categories->get($catId);
|
|
|
|
// Compute selected asset permissions.
|
|
if (is_object($this->_item)) { // a JemCategoryNode object
|
|
$user = JemFactory::getUser();
|
|
$asset = 'com_jem.category.'.$this->_item->id;
|
|
|
|
// Check general create permission.
|
|
if ($user->authorise('core.create', $asset)) {
|
|
$this->_item->getParams()->set('access-create', true);
|
|
}
|
|
|
|
$this->_children = $this->_item->getChildren();
|
|
|
|
$this->_parent = $this->_item->getParent();
|
|
if (empty($this->_parent)) {
|
|
$this->_parent = false;
|
|
}
|
|
|
|
$this->_rightsibling = $this->_item->getSibling();
|
|
$this->_leftsibling = $this->_item->getSibling(false);
|
|
}
|
|
else {
|
|
$this->_children = false;
|
|
$this->_parent = false;
|
|
}
|
|
}
|
|
|
|
return $this->_item;
|
|
}
|
|
|
|
/**
|
|
* @return JDatabaseQuery
|
|
*/
|
|
protected function getListQuery()
|
|
{
|
|
//$params = $this->state->params;
|
|
//$jinput = Factory::getApplication()->input;
|
|
//$task = $jinput->getCmd('task','','cmd');
|
|
|
|
// Create a new query object.
|
|
$query = parent::getListQuery();
|
|
|
|
// here we can extend the query of the Eventslist model
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Get the parent categorie.
|
|
*/
|
|
public function getParent()
|
|
{
|
|
if (!is_object($this->_item)) {
|
|
$this->getCategory();
|
|
}
|
|
|
|
return $this->_parent;
|
|
}
|
|
|
|
/**
|
|
* Get the left sibling (adjacent) categories.
|
|
*/
|
|
public function &getLeftSibling()
|
|
{
|
|
if (!is_object($this->_item)) {
|
|
$this->getCategory();
|
|
}
|
|
|
|
return $this->_leftsibling;
|
|
}
|
|
|
|
/**
|
|
* Get the right sibling (adjacent) categories.
|
|
*/
|
|
public function &getRightSibling()
|
|
{
|
|
if (!is_object($this->_item)) {
|
|
$this->getCategory();
|
|
}
|
|
|
|
return $this->_rightsibling;
|
|
}
|
|
|
|
/**
|
|
* Get the child categories.
|
|
*/
|
|
public function &getChildren()
|
|
{
|
|
if (!is_object($this->_item)) {
|
|
$this->getCategory();
|
|
}
|
|
|
|
// Order subcategories
|
|
if ($this->_children) {
|
|
if (sizeof($this->_children)) {
|
|
$params = $this->getState()->get('params');
|
|
if ($params->get('orderby_pri') == 'alpha' || $params->get('orderby_pri') == 'ralpha') {
|
|
ArrayHelper::sortObjects($this->_children, 'title', ($params->get('orderby_pri') == 'alpha') ? 1 : -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->_children;
|
|
}
|
|
}
|
|
?>
|