input->getInt('a_id', 0); $this->setState('event.id', $pk); $fromId = $app->input->getInt('from_id', 0); $this->setState('event.from_id', $fromId); $catid = $app->input->getInt('catid', 0); $this->setState('event.catid', $catid); $locid = $app->input->getInt('locid', 0); $this->setState('event.locid', $locid); $date = $app->input->getCmd('date', ''); $this->setState('event.date', $date); $return = $app->input->get('return', '', 'base64'); $this->setState('return_page', base64_decode($return)); // Load the parameters. $params = $app->getParams(); $this->setState('params', $params); $this->setState('layout', $app->input->getCmd('layout', '')); } /** * Method to get event data. * * @param integer The id of the event. * * @return mixed item data object on success, false on failure. */ public function getItem($itemId = null) { $jemsettings = JemHelper::config(); // Initialise variables. $itemId = (int) (!empty($itemId)) ? $itemId : $this->getState('event.id'); $doCopy = false; if (!$itemId && $this->getState('event.from_id')) { $itemId = $this->getState('event.from_id'); $doCopy = true; } // 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, 'stdClass'); if ($doCopy) { $value->id = 0; $value->author_ip = ''; $value->created = ''; $value->created_by = ''; $value->created_by_alias = ''; $value->modified = ''; $value->modified_by = ''; $value->version = ''; $value->hits = ''; $value->recurrence_type = 0; $value->recurrence_first_id = 0; $value->recurrence_counter = 0; } // Backup current recurrence values if ($value->id) { $value->recurr_bak = new stdClass; foreach (get_object_vars($value) as $k => $v) { if (strncmp('recurrence_', $k, 11) === 0) { $value->recurr_bak->$k = $v; } } } // Convert attrib field to Registry. $registry = new Registry(); $registry->loadString($value->attribs ?? '{}'); $globalregistry = JemHelper::globalattribs(); $value->params = clone $globalregistry; $value->params->merge($registry); // Compute selected asset permissions. $user = JemFactory::getUser(); //$userId = $user->get('id'); //$asset = 'com_jem.event.' . $value->id; //$asset = 'com_jem'; $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); $query->select(array('count(id)')); $query->from('#__jem_register'); $query->where(array('event = ' . $db->quote($value->id), 'waiting = 0', 'status = 1')); $db->setQuery($query); $res = $db->loadResult(); $value->booked = (int)$res; if (!empty($value->maxplaces)) { $value->avplaces = $value->maxplaces - $value->booked; } // Get attachments - but not on copied events $files = JemAttachment::getAttachments('event' . $value->id); $value->attachments = $files; // Preset values on new events if (!$itemId) { $catid = (int) $this->getState('event.catid'); $locid = (int) $this->getState('event.locid'); $date = $this->getState('event.date'); // ??? if (empty($value->catid) && !empty($catid)) { $value->catid = $catid; } if (empty($value->locid) && !empty($locid)) { $value->locid = $locid; } if (empty($value->dates) && JemHelper::isValidDate($date)) { $value->dates = $date; } } // Check edit permission. $value->params->set('access-edit', $user->can('edit', 'event', $value->id, $value->created_by)); // Check edit state permission. if (!$itemId && ($catId = (int) $this->getState('event.catid'))) { // New item. $cats = array($catId); } else { // Existing item (or no category) $cats = false; } $value->params->set('access-change', $user->can('publish', 'event', $value->id, $value->created_by, $cats)); $value->author_ip = $jemsettings->storeip ? JemHelper::retrieveIP() : false; $value->articletext = $value->introtext; if (!empty($value->fulltext)) { $value->articletext .= '
' . $value->fulltext; } return $value; } protected function loadForm($name, $source = null, $options = array(), $clear = false, $xpath = false) { // JForm::addFieldPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/fields'); return parent::loadForm($name, $source, $options, $clear, $xpath); } /** * Get the return URL. * * @return string return URL. */ public function getReturnPage() { return base64_encode($this->getState('return_page')); } ############ ## VENUES ## ############ /** * Get venues-data */ public function getVenues() { $query = $this->buildQueryVenues(); $pagination = $this->getVenuesPagination(); $rows = $this->_getList($query, $pagination->limitstart, $pagination->limit); return $rows; } /** * venues-query */ protected function buildQueryVenues() { $app = Factory::getApplication(); $params = JemHelper::globalattribs(); $filter_order = $app->getUserStateFromRequest('com_jem.selectvenue.filter_order', 'filter_order', 'l.venue', 'cmd'); $filter_order_Dir = $app->getUserStateFromRequest('com_jem.selectvenue.filter_order_Dir', 'filter_order_Dir', 'ASC', 'word'); $filter_order = InputFilter::getinstance()->clean($filter_order, 'cmd'); $filter_order_Dir = InputFilter::getinstance()->clean($filter_order_Dir, 'word'); $filter_type = $app->getUserStateFromRequest('com_jem.selectvenue.filter_type', 'filter_type', 0, 'int'); $search = $app->getUserStateFromRequest('com_jem.selectvenue.filter_search', 'filter_search', '', 'string'); $search = $this->_db->escape(trim(\Joomla\String\StringHelper::strtolower($search))); // Query $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); $query->select(array('l.id','l.state','l.city','l.country','l.published','l.venue','l.ordering')); $query->from('#__jem_venues as l'); // where $where = array(); $where[] = 'l.published = 1'; /* something to search for? (we like to search for "0" too) */ if ($search || ($search === "0")) { switch ($filter_type) { case 1: /* Search venues */ $where[] = 'LOWER(l.venue) LIKE "%' . $search . '%"'; break; case 2: // Search city $where[] = 'LOWER(l.city) LIKE "%' . $search . '%"'; break; case 3: // Search state $where[] = 'LOWER(l.state) LIKE "%' . $search . '%"'; } } if ($params->get('global_show_ownedvenuesonly')) { $user = JemFactory::getUser(); $userid = $user->get('id'); $where[] = ' created_by = ' . (int) $userid; } $query->where($where); if (strtoupper($filter_order_Dir) !== 'DESC') { $filter_order_Dir = 'ASC'; } // ordering if ($filter_order && $filter_order_Dir) { $orderby = $filter_order . ' ' . $filter_order_Dir; } else { $orderby = array('l.venue ASC','l.ordering ASC'); } $query->order($orderby); return $query; } /** * venues-Pagination **/ public function getVenuesPagination() { $jemsettings = JemHelper::config(); $app = Factory::getApplication(); $limit = $app->getUserStateFromRequest('com_jem.selectvenue.limit', 'limit', $jemsettings->display_num, 'int'); $limitstart = $app->input->getInt('limitstart', 0); // correct start value if required $limitstart = $limit ? (int)(floor($limitstart / $limit) * $limit) : 0; $query = $this->buildQueryVenues(); $total = $this->_getListCount($query); // Create the pagination object $pagination = new Pagination($total, $limitstart, $limit); return $pagination; } ############## ## CONTACTS ## ############## /** * Get contacts-data */ public function getContacts() { $query = $this->buildQueryContacts(); $pagination = $this->getContactsPagination(); $rows = $this->_getList($query, $pagination->limitstart, $pagination->limit); return $rows; } /** * contacts-Pagination **/ public function getContactsPagination() { $jemsettings = JemHelper::config(); $app = Factory::getApplication(); $limit = $app->getUserStateFromRequest('com_jem.selectcontact.limit', 'limit', $jemsettings->display_num, 'int'); $limitstart = $app->input->getInt('limitstart', 0); // correct start value if required $limitstart = $limit ? (int)(floor($limitstart / $limit) * $limit) : 0; $query = $this->buildQueryContacts(); $total = $this->_getListCount($query); // Create the pagination object $pagination = new Pagination($total, $limitstart, $limit); return $pagination; } /** * contacts-query */ protected function buildQueryContacts() { $app = Factory::getApplication(); $jemsettings = JemHelper::config(); $filter_order = $app->getUserStateFromRequest('com_jem.selectcontact.filter_order', 'filter_order', 'con.ordering', 'cmd'); $filter_order_Dir = $app->getUserStateFromRequest('com_jem.selectcontact.filter_order_Dir', 'filter_order_Dir', '', 'word'); $filter_order = InputFilter::getinstance()->clean($filter_order, 'cmd'); $filter_order_Dir = InputFilter::getinstance()->clean($filter_order_Dir, 'word'); $filter_type = $app->getUserStateFromRequest('com_jem.selectcontact.filter_type', 'filter_type', 0, 'int'); $search = $app->getUserStateFromRequest('com_jem.selectcontact.filter_search', 'filter_search', '', 'string'); $search = $this->_db->escape(trim(\Joomla\String\StringHelper::strtolower($search))); // Query $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); $query->select(array('con.*')); $query->from('#__contact_details As con'); // where $where = array(); $where[] = 'con.published = 1'; /* something to search for? (we like to search for "0" too) */ if ($search || ($search === "0")) { switch ($filter_type) { case 1: /* Search name */ $where[] = ' LOWER(con.name) LIKE \'%' . $search . '%\' '; break; case 2: /* Search address (not supported yet, privacy) */ //$where[] = ' LOWER(con.address) LIKE \'%' . $search . '%\' '; break; case 3: // Search city $where[] = ' LOWER(con.suburb) LIKE \'%' . $search . '%\' '; break; case 4: // Search state $where[] = ' LOWER(con.state) LIKE \'%' . $search . '%\' '; break; } } $query->where($where); // ordering // ensure it's a valid order direction (asc, desc or empty) if (!empty($filter_order_Dir) && strtoupper($filter_order_Dir) !== 'DESC') { $filter_order_Dir = 'ASC'; } if ($filter_order != '') { $orderby = $filter_order . ' ' . $filter_order_Dir; if ($filter_order != 'con.name') { $orderby = array($orderby, 'con.name'); // in case of city or state we should have a useful second ordering } } else { $orderby = 'con.name'; } $query->order($orderby); return $query; } ########### ## USERS ## ########### /** * Get users data */ public function getUsers() { $query = $this->buildQueryUsers(); $pagination = $this->getUsersPagination(); $rows = $this->_getList($query, $pagination->limitstart, $pagination->limit); // Add registration status if available $itemId = (int)$this->getState('event.id'); $db = Factory::getContainer()->get('DatabaseDriver'); $qry = $db->getQuery(true); // #__jem_register (id, event, uid, waiting, status, comment) $qry->select(array('reg.uid, reg.status, reg.waiting, reg.places')); $qry->from('#__jem_register As reg'); $qry->where('reg.event = ' . $itemId); $db->setQuery($qry); $regs = $db->loadObjectList('uid'); // JemHelper::addLogEntry((string)$qry . "\n" . print_r($regs, true), __METHOD__); foreach ($rows AS &$row) { if (array_key_exists($row->id, $regs)) { $row->status = $regs[$row->id]->status; $row->places = $regs[$row->id]->places; if ($row->status == 1 && $regs[$row->id]->waiting) { ++$row->status; } } else { $row->status = -99; $row->places = 0; } } return $rows; } /** * users-Pagination **/ public function getUsersPagination() { $jemsettings = JemHelper::config(); $app = Factory::getApplication(); $limit = 0;//$app->getUserStateFromRequest('com_jem.selectusers.limit', 'limit', $jemsettings->display_num, 'int'); $limitstart = 0;//$app->input->getInt('limitstart', 0); // correct start value if required $limitstart = $limit ? (int)(floor($limitstart / $limit) * $limit) : 0; $query = $this->buildQueryUsers(); $total = $this->_getListCount($query); // Create the pagination object $pagination = new Pagination($total, $limitstart, $limit); return $pagination; } /** * users-query */ protected function buildQueryUsers() { $app = Factory::getApplication(); $jemsettings = JemHelper::config(); // no filters, hard-coded $filter_order = 'usr.name'; $filter_order_Dir = ''; $filter_type = ''; $search = ''; // Query $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); $query->select(array('usr.id, usr.name')); $query->from('#__users As usr'); // where $where = array(); $where[] = 'usr.block = 0'; $where[] = 'NOT usr.activation > 0'; /* something to search for? (we like to search for "0" too) */ if ($search || ($search === "0")) { switch ($filter_type) { case 1: /* Search name */ $where[] = ' LOWER(usr.name) LIKE \'%' . $search . '%\' '; break; } } $query->where($where); // ordering // ensure it's a valid order direction (asc, desc or empty) if (!empty($filter_order_Dir) && strtoupper($filter_order_Dir) !== 'DESC') { $filter_order_Dir = 'ASC'; } if ($filter_order != '') { $orderby = $filter_order . ' ' . $filter_order_Dir; if ($filter_order != 'usr.name') { $orderby = array($orderby, 'usr.name'); // in case of (???) we should have a useful second ordering } } else { $orderby = 'usr.name ' . $filter_order_Dir; } $query->order($orderby); return $query; } /** * Get list of invited users. */ public function getInvitedUsers() { $itemId = (int)$this->getState('event.id'); $db = Factory::getContainer()->get('DatabaseDriver'); $query = $db->getQuery(true); // #__jem_register (id, event, uid, waiting, status, comment) $query->select(array('reg.uid')); $query->from('#__jem_register As reg'); $query->where('reg.event = ' . $itemId); $query->where('reg.status = 0'); $db->setQuery($query); $regs = $db->loadColumn(); // JemHelper::addLogEntry((string)$query . "\n" . implode(',', $regs), __METHOD__); return $regs; } }