primo commit
This commit is contained in:
		
							
								
								
									
										276
									
								
								components/com_jem/models/day.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								components/com_jem/models/day.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,276 @@ | ||||
| <?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; | ||||
| 	} | ||||
| } | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user