277 lines
8.1 KiB
PHP
277 lines
8.1 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\Language\Text;
|
|
|
|
require_once __DIR__ . '/eventslist.php';
|
|
|
|
/**
|
|
* Model-Day
|
|
*/
|
|
class JemModelDay extends JemModelEventslist
|
|
{
|
|
protected $_date = null;
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
$rawday = Factory::getApplication()->input->getInt('id', null);
|
|
$this->setDate($rawday);
|
|
}
|
|
|
|
/**
|
|
* Method to set the date
|
|
*
|
|
* @access public
|
|
* @param string
|
|
*/
|
|
public function setDate($date)
|
|
{
|
|
$app = Factory::getApplication();
|
|
|
|
# Get the params of the active menu item
|
|
$params = $app->getParams('com_jem');
|
|
|
|
# 0 means we have a direct request from a menuitem and without any params (eg: calendar module)
|
|
if ($date == 0) {
|
|
$dayoffset = $params->get('days');
|
|
$timestamp = mktime(0, 0, 0, date("m"), date("d") + $dayoffset, date("Y"));
|
|
$date = date('Y-m-d', $timestamp);
|
|
|
|
# a valid date has 8 characters (ymd)
|
|
} elseif (strlen($date) == 8) {
|
|
$year = substr($date, 0, -4);
|
|
$month = substr($date, 4, -2);
|
|
$day = substr($date, 6);
|
|
|
|
//check if date is valid
|
|
if (checkdate($month, $day, $year)) {
|
|
$date = $year.'-'.$month.'-'.$day;
|
|
} else {
|
|
//date isn't valid raise notice and use current date
|
|
$date = date('Ymd');
|
|
Factory::getApplication()->enqueueMessage(Text::_('COM_JEM_INVALID_DATE_REQUESTED_USING_CURRENT'), 'notice');
|
|
}
|
|
} else {
|
|
//date isn't valid raise notice and use current date
|
|
$date = date('Ymd');
|
|
Factory::getApplication()->enqueueMessage(Text::_('COM_JEM_INVALID_DATE_REQUESTED_USING_CURRENT'), 'notice');
|
|
}
|
|
|
|
$this->_date = $date;
|
|
}
|
|
|
|
/**
|
|
* Return date
|
|
*/
|
|
public function getDay()
|
|
{
|
|
return $this->_date;
|
|
}
|
|
|
|
/**
|
|
* Method to auto-populate the model state.
|
|
*/
|
|
protected function populateState($ordering = null, $direction = null)
|
|
{
|
|
# parent::populateState($ordering, $direction);
|
|
|
|
$app = Factory::getApplication();
|
|
$jemsettings = JemHelper::config();
|
|
$itemid = $app->input->getInt('id', 0) . ':' . $app->input->getInt('Itemid', 0);
|
|
$params = $app->getParams();
|
|
$task = $app->input->getCmd('task', '');
|
|
$requestVenueId = $app->input->getInt('locid', 0);
|
|
$requestCategoryId = $app->input->getInt('catid', 0);
|
|
$item = $app->input->getInt('Itemid', 0);
|
|
|
|
$locid = $app->getUserState('com_jem.venuecal.locid'.$item);
|
|
if ($locid) {
|
|
$this->setState('filter.filter_locid', $locid);
|
|
}
|
|
|
|
// maybe list of venue ids from calendar module
|
|
$locids = explode(',', $app->input->getString('locids', ''));
|
|
foreach ($locids as $id) {
|
|
if ((int)$id > 0) {
|
|
$venues[] = (int)$id;
|
|
}
|
|
}
|
|
if (!empty($venues)) {
|
|
$this->setState('filter.venue_id', $venues);
|
|
$this->setState('filter.venue_id.include', true);
|
|
}
|
|
|
|
$cal_category_catid = $app->getUserState('com_jem.categorycal.catid'.$item);
|
|
if ($cal_category_catid) {
|
|
$this->setState('filter.req_catid', $cal_category_catid);
|
|
}
|
|
|
|
// maybe list of venue ids from calendar module
|
|
$catids = explode(',', $app->input->getString('catids', ''));
|
|
foreach ($catids as $id) {
|
|
if ((int)$id > 1) { // don't accept 'root'
|
|
$cats[] = (int)$id;
|
|
}
|
|
}
|
|
if (!empty($cats)) {
|
|
$this->setState('filter.category_id', $cats);
|
|
$this->setState('filter.category_id.include', true);
|
|
}
|
|
################################
|
|
## EXCLUDE/INCLUDE CATEGORIES ##
|
|
################################
|
|
|
|
$catswitch = $params->get('categoryswitch', '');
|
|
|
|
# set included categories
|
|
if ($catswitch) {
|
|
$included_cats = trim($params->get('categoryswitchcats', ''));
|
|
if ($included_cats) {
|
|
$included_cats = explode(",", $included_cats);
|
|
$this->setState('filter.category_id', $included_cats);
|
|
$this->setState('filter.category_id.include', true);
|
|
}
|
|
}
|
|
|
|
# set excluded categories
|
|
if (!$catswitch) {
|
|
$excluded_cats = trim($params->get('categoryswitchcats', ''));
|
|
if ($excluded_cats) {
|
|
$excluded_cats = explode(",", $excluded_cats);
|
|
$this->setState('filter.category_id', $excluded_cats);
|
|
$this->setState('filter.category_id.include', false);
|
|
}
|
|
}
|
|
|
|
// maybe top category is given by calendar view
|
|
$top_category = $app->input->getInt('topcat', 0);
|
|
if ($top_category > 0) { // accept 'root'
|
|
$children = JemCategories::getChilds($top_category);
|
|
if (count($children)) {
|
|
$where = 'rel.catid IN ('. implode(',', $children) .')';
|
|
$this->setState('filter.category_top', $where);
|
|
}
|
|
}
|
|
|
|
# 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.day.'.$itemid.'.limitstart', 0);
|
|
}
|
|
|
|
$limit = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.limit', 'limit', $jemsettings->display_num, 'int');
|
|
$this->setState('list.limit', $limit);
|
|
|
|
$limitstart = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.limitstart', 'limitstart', 0, 'int');
|
|
$limitstart = $limit ? (int)(floor($limitstart / $limit) * $limit) : 0;
|
|
$this->setState('list.start', $limitstart);
|
|
|
|
# Search
|
|
$search = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.filter_search', 'filter_search', '', 'string');
|
|
$this->setState('filter.filter_search', $search);
|
|
|
|
# FilterType
|
|
$filtertype = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.filter_type', 'filter_type', 0, 'int');
|
|
$this->setState('filter.filter_type', $filtertype);
|
|
|
|
# filter_order
|
|
$orderCol = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.filter_order', 'filter_order', 'a.dates', 'cmd');
|
|
$this->setState('filter.filter_ordering', $orderCol);
|
|
|
|
# filter_direction
|
|
$listOrder = $app->getUserStateFromRequest('com_jem.day.'.$itemid.'.filter_order_Dir', 'filter_order_Dir', 'ASC', 'word');
|
|
$this->setState('filter.filter_direction', $listOrder);
|
|
|
|
$defaultOrder = ($task == 'archive') ? 'DESC' : 'ASC';
|
|
if ($orderCol == 'a.dates') {
|
|
$orderby = array('a.dates ' . $listOrder, 'a.times ' . $listOrder, 'a.created ' . $listOrder);
|
|
} else {
|
|
$orderby = array($orderCol . ' ' . $listOrder,
|
|
'a.dates ' . $defaultOrder, 'a.times ' . $defaultOrder, 'a.created ' . $defaultOrder);
|
|
}
|
|
$this->setState('filter.orderby', $orderby);
|
|
|
|
# params
|
|
$this->setState('params', $params);
|
|
|
|
# published
|
|
/// @todo bring given pub together with eventslist's unpub calculation (_populatePublishState())
|
|
$pub = explode(',', $app->input->getString('pub', ''));
|
|
$published = array();
|
|
// sanitize remote data
|
|
foreach ($pub as $val) {
|
|
if (((int)$val >= 1) && ((int)$val <= 2)) {
|
|
$published[] = (int)$val;
|
|
}
|
|
}
|
|
// default to 'published'
|
|
if (empty($published)) {
|
|
//$published[] = 1;
|
|
$this->_populatePublishState($task);
|
|
} else {
|
|
$this->setState('filter.published', $published);
|
|
}
|
|
|
|
# request venue-id
|
|
if ($requestVenueId) {
|
|
$this->setState('filter.req_venid', $requestVenueId);
|
|
}
|
|
|
|
# request cat-id
|
|
if ($requestCategoryId) {
|
|
$this->setState('filter.req_catid', $requestCategoryId);
|
|
}
|
|
|
|
# groupby
|
|
$this->setState('filter.groupby', array('a.id'));
|
|
}
|
|
|
|
/**
|
|
* Method to get a list of events.
|
|
*/
|
|
public function getItems()
|
|
{
|
|
$items = parent::getItems();
|
|
|
|
if ($items) {
|
|
return $items;
|
|
}
|
|
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* @return JDatabaseQuery
|
|
*/
|
|
protected function getListQuery()
|
|
{
|
|
// Create a new query object.
|
|
$query = parent::getListQuery();
|
|
|
|
$requestVenueId = $this->getState('filter.req_venid');
|
|
if ($requestVenueId){
|
|
$query->where(' a.locid = '.$this->_db->quote($requestVenueId));
|
|
}
|
|
|
|
// Second is to only select events of the specified day
|
|
$query->where('('.$this->_db->quote($this->_date).' BETWEEN (a.dates) AND (IF (a.enddates >= a.dates, a.enddates, a.dates)) OR '.$this->_db->quote($this->_date).' = a.dates)');
|
|
|
|
return $query;
|
|
}
|
|
}
|
|
?>
|