getUserStateFromRequest($this->context . '.filter.form_type', 'filter_form_type'); $this->setState('filter.form_type', $filter_form_type); $filter_start_date = $this->getUserStateFromRequest($this->context . '.filter.start_date', 'filter_start_date'); $this->setState('filter.start_date', $filter_start_date); $filter_end_date = $this->getUserStateFromRequest($this->context . '.filter.end_date', 'filter_end_date'); $this->setState('filter.end_date', $filter_end_date); // Load the parameters. $params = ComponentHelper::getParams('com_jem'); $this->setState('params', $params); // List state information. parent::populateState('a.first_name', 'asc'); } /** * Build an SQL query to load the Events data. * * @return JDatabaseQuery */ protected function getListQuery() { // Retrieve variables $jinput = Factory::getApplication()->input; $startdate = $jinput->get('dates', '', 'string'); $enddate = $jinput->get('enddates', '', 'string'); $cats = $jinput->get('cid', array(), 'array'); // Create a new query object. $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.*'); $query->from('#__jem_events AS a'); $query->join('LEFT', '#__jem_cats_event_relations AS rel ON rel.itemid = a.id'); $query->join('LEFT', '#__jem_categories AS c ON c.id = rel.catid'); // check if startdate and/or enddate are set. if (!empty($startdate)) { // note: open date is always after $startdate $query->where('((a.dates IS NULL) OR (DATEDIFF(IF (a.enddates IS NOT NULL, a.enddates, a.dates), ' . $db->quote($startdate) . ') >= 0))'); } if (!empty($enddate)) { // note: open date is before $enddate as long as $enddate is not before today $query->where('(((a.dates IS NULL) AND (DATEDIFF(CURDATE(), ' . $db->quote($enddate) . ') <= 0)) OR (DATEDIFF(a.dates, ' . $db->quote($enddate) . ') <= 0))'); } // check if specific category's have been selected if (! empty($cats)) { \Joomla\Utilities\ArrayHelper::toInteger($cats); $query->where(' c.id IN (' . implode(',', $cats) . ')'); } // Group the query $query->group('a.id'); return $query; } /** * Returns a CSV file with Events data * * @return boolean */ public function getCsv() { $this->populateState(); $jinput = Factory::getApplication()->input; $includecategories = $jinput->get('categorycolumn', 0, 'int'); $db = Factory::getContainer()->get('DatabaseDriver'); $jemconfig = JemConfig::getInstance()->toRegistry(); $separator = $jemconfig->get('csv_separator', ';'); $delimiter = $jemconfig->get('csv_delimiter', '"'); $csv_bom = $jemconfig->get('csv_bom', '1'); $csv = fopen('php://output', 'w'); if ($csv_bom ==1 ) { //add BOM to fix UTF-8 in Excel fputs($csv, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); } if ($includecategories == 1) { $events = array_keys($db->getTableColumns('#__jem_events')); $categories = array(); $categories[] = "categories"; $header = array_merge($events, $categories); fputcsv($csv, $header, $separator, $delimiter); $query = $this->getListQuery(); $items = $this->_getList($query); foreach ($items as $item) { $item->categories = $this->getCatEvent($item->id); } } else { $header = array_keys($db->getTableColumns('#__jem_events')); fputcsv($csv, $header, $separator, $delimiter); $query = $this->getListQuery(); $items = $this->_getList($query); } foreach ($items as $lines) { fputcsv($csv, (array) $lines, $separator, $delimiter); } return fclose($csv); } /** * Build an SQL query to load the Categories data. * * @return JDatabaseQuery */ protected function getListQuerycats() { // Create a new query object. $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.*'); $query->from('#__jem_categories AS a'); return $query; } /** * Returns a CSV file with Categories data * * @return boolean */ public function getCsvcats() { $this->populateState(); $jemconfig = JemConfig::getInstance()->toRegistry(); $separator = $jemconfig->get('csv_separator', ';'); $delimiter = $jemconfig->get('csv_delimiter', '"'); $csv_bom = $jemconfig->get('csv_bom', '1'); $csv = fopen('php://output', 'w'); if ($csv_bom ==1 ) { //add BOM to fix UTF-8 in Excel fputs($csv, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); } $db = Factory::getContainer()->get('DatabaseDriver'); $header = array_keys($db->getTableColumns('#__jem_categories')); fputcsv($csv, $header, $separator, $delimiter); $db->setQuery($this->getListQuerycats()); $items = $db->loadObjectList(); foreach ($items as $lines) { fputcsv($csv, (array) $lines, $separator, $delimiter); } return fclose($csv); } /** * Build an SQL query to load the Venues data. * * @return JDatabaseQuery */ protected function getListQueryvenues() { // Create a new query object. $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.*'); $query->from('#__jem_venues AS a'); return $query; } /** * Returns a CSV file with Venues data * @return boolean */ public function getCsvvenues() { $this->populateState(); $jemconfig = JemConfig::getInstance()->toRegistry(); $separator = $jemconfig->get('csv_separator', ';'); $delimiter = $jemconfig->get('csv_delimiter', '"'); $csv_bom = $jemconfig->get('csv_bom', '1'); $csv = fopen('php://output', 'w'); if ($csv_bom ==1 ) { //add BOM to fix UTF-8 in Excel fputs($csv, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); } $db = Factory::getContainer()->get('DatabaseDriver'); $header = array_keys($db->getTableColumns('#__jem_venues')); fputcsv($csv, $header, $separator, $delimiter); $db->setQuery($this->getListQueryvenues()); $items = $db->loadObjectList(); foreach ($items as $lines) { fputcsv($csv, (array) $lines, $separator, $delimiter); } return fclose($csv); } /** * Build an SQL query to load the Cats/Events data. * * @return JDatabaseQuery */ protected function getListQuerycatsevents() { // Create a new query object. $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('a.*'); $query->from('#__jem_cats_event_relations AS a'); return $query; } /** * Returns a CSV file with Cats/Events data * @return boolean */ public function getCsvcatsevents() { $this->populateState(); $jemconfig = JemConfig::getInstance()->toRegistry(); $separator = $jemconfig->get('csv_separator', ';'); $delimiter = $jemconfig->get('csv_delimiter', '"'); $csv_bom = $jemconfig->get('csv_bom', '1'); $csv = fopen('php://output', 'w'); if ($csv_bom ==1 ) { //add BOM to fix UTF-8 in Excel fputs($csv, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) )); } $db = Factory::getContainer()->get('DatabaseDriver'); $header = array_keys($db->getTableColumns('#__jem_cats_event_relations')); fputcsv($csv, $header, $separator, $delimiter); $db->setQuery($this->getListQuerycatsevents()); $items = $db->loadObjectList(); foreach ($items as $lines) { fputcsv($csv, (array) $lines, $separator, $delimiter); } return fclose($csv); } /** * logic to get the categories */ public function getCategories() { // @todo alter function $db = Factory::getContainer()->get('DatabaseDriver'); $where = ' WHERE c.published = 1'; $query = 'SELECT c.* FROM #__jem_categories AS c' . $where . ' ORDER BY parent_id, c.lft'; // Check for a database error. // if ($db->getErrorNum()){ // Factory::getApplication()->enqueueMessage($db->getErrorMsg(), 'notice'); // } try { $db->setQuery($query); $mitems = $db->loadObjectList(); } catch (RuntimeException $e) { Factory::getApplication()->enqueueMessage($e->getMessage(), 'notice'); } if (!$mitems) { $children = array(); $mitems = array(); $parentid = 0; } else { $children = array(); // First pass - collect children foreach ($mitems as $v) { $pt = $v->parent_id; $list = isset($children[$pt]) ? $children[$pt] : array(); array_push($list, $v); $children[$pt] = $list; } // list childs of "root" which has no parent and normally id 1 $parentid = intval(isset($children[0][0]->id) ? $children[0][0]->id : 1); } //get list of the items $list = JemCategories::treerecurse($parentid, '', array(), $children, 9999, 0, 0); return $list; } /** * Get Category IDs for a specific event. * * @param int $id event id * @return string|boolean Comma separated list of ids on success or false otherwise. */ public function getCatEvent($id) { // Create a new query object. $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // Select the required fields from the table. $query->select('catid'); $query->from('#__jem_cats_event_relations'); $query->where('itemid = ' . $db->quote($id)); $db->setQuery($query); $catidlist = $db->loadObjectList(); if (is_array($catidlist) && count($catidlist)) { $catidarray = array(); foreach ($catidlist as $obj) { $catidarray[] = $obj->catid; } $catids = implode(',', $catidarray); } else { $catids = false; } return $catids; } }