/** * Method to get the events * * @access public * @return array */ public static function getList(&$params) { mb_internal_encoding('UTF-8'); $db = JFactory::getDBO(); $user = JemFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); # Retrieve Eventslist model for the data $model = JModelLegacy::getInstance('Eventslist', 'JemModel', array('ignore_request' => true)); # Set params for the model # has to go before the getItems function $model->setState('params', $params); # filter published # 0: unpublished # 1: published # 2: archived # -2: trashed # type: # 0: upcoming (not started) - dates,times > now+offset # 1: unfinished (not ended) - enddates,endtimes > now+offset # 2: archived - no limit, but from now back to the past # 3: running (today) - enddates,endtimes > today+offset AND dates,times < tomorrow+offset # 4: featured - ? (same as upcoming yet) $type = (int)$params->get('type'); $offset_hours = (int)$params->get('offset_hours', 0); $max_title_length = (int)$params->get('cuttitle', '25'); # clean parameter data $catids = JemHelper::getValidIds($params->get('catid')); $venids = JemHelper::getValidIds($params->get('venid')); $eventids = JemHelper::getValidIds($params->get('eventid')); $stateloc = $params->get('stateloc'); $stateloc_mode = $params->get('stateloc_mode', 0); # Open date support $opendates = empty($eventids) ? 0 : 1; // allow open dates if limited to specific events $model->setState('filter.opendates', $opendates); # all upcoming or unfinished events if (($type == 0) || ($type == 1)) { $offset_minutes = $offset_hours * 60; $model->setState('filter.published',1); $model->setState('filter.orderby',array('a.dates ASC','a.times ASC')); $cal_from = "(a.dates IS NULL OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'00:00:00'))) > $offset_minutes) "; $cal_from .= ($type == 1) ? " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > $offset_minutes)) " : ") "; } # archived events only elseif ($type == 2) { $model->setState('filter.published',2); $model->setState('filter.orderby',array('a.dates DESC','a.times DESC')); $cal_from = ""; } # currently running events only (today + offset is inbetween start and end date of event) elseif ($type == 3) { $offset_days = (int)round($offset_hours / 24); $model->setState('filter.published',1); $model->setState('filter.orderby',array('a.dates ASC','a.times ASC')); $cal_from = " ((DATEDIFF(a.dates, CURDATE()) <= $offset_days) AND (DATEDIFF(IFNULL(a.enddates,a.dates), CURDATE()) >= $offset_days))"; } # featured elseif ($type == 4) { $offset_minutes = $offset_hours * 60; $model->setState('filter.featured',1); $model->setState('filter.orderby',array('a.dates ASC','a.times ASC')); $cal_from = "((TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'00:00:00'))) > $offset_minutes) "; $cal_from .= " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > $offset_minutes)) "; } $model->setState('filter.calendar_from',$cal_from); $model->setState('filter.groupby','a.id'); # filter category's if ($catids) { $model->setState('filter.category_id', $catids); $model->setState('filter.category_id.include', true); } # filter venue's if ($venids) { $model->setState('filter.venue_id', $venids); $model->setState('filter.venue_id.include', true); } # filter event id's if ($eventids) { $model->setState('filter.event_id', $eventids); $model->setState('filter.event_id.include', true); } # filter venue's state/province if ($stateloc) { $model->setState('filter.venue_state', $stateloc); $model->setState('filter.venue_state.mode', $stateloc_mode); // 0: exact, 1: partial } # count $count = $params->get('count', '2'); $model->setState('list.limit', $count); if ($params->get('use_modal', 0)) { JHtml::_('behavior.modal', 'a.flyermodal'); } # date/time $dateFormat = $params->get('formatdate', ''); $timeFormat = $params->get('formattime', ''); $addSuffix = empty($timeFormat); // if we use component's default time format we can also add corresponding suffix # Retrieve the available Events $events = $model->getItems(); $color = $params->get('color'); $fallback_color = $params->get('fallbackcolor', '#EEEEEE'); # Loop through the result rows and prepare data $lists = array(); $i = 0; foreach ($events as $row) { # create thumbnails if needed and receive imagedata $dimage = $row->datimage ? JEMImage::flyercreator($row->datimage, 'event') : null; $limage = $row->locimage ? JEMImage::flyercreator($row->locimage, 'venue') : null; ################# ## DEFINE LIST ## ################# $lists[$i] = new stdClass(); # check view access if (in_array($row->access, $levels)) { # We know that user has the privilege to view the event $lists[$i]->link = JRoute::_(JEMHelperRoute::getEventRoute($row->slug)); $lists[$i]->linkText = JText::_('MOD_JEM_TEASER_READMORE'); } else { $lists[$i]->link = JRoute::_('index.php?option=com_users&view=login'); $lists[$i]->linkText = JText::_('MOD_JEM_TEASER_READMORE_REGISTER'); } # cut titel $fulltitle = htmlspecialchars($row->title, ENT_COMPAT, 'UTF-8'); if (mb_strlen($fulltitle) > $max_title_length) { $title = mb_substr($fulltitle, 0, $max_title_length) . '...'; } else { $title = $fulltitle; } $lists[$i]->title = $title; $lists[$i]->fulltitle = $fulltitle; $lists[$i]->venue = htmlspecialchars($row->venue, ENT_COMPAT, 'UTF-8'); $lists[$i]->catname = implode(", ", JemOutput::getCategoryList($row->categories, $params->get('linkcategory', 1))); $lists[$i]->state = htmlspecialchars($row->state, ENT_COMPAT, 'UTF-8'); $lists[$i]->city = htmlspecialchars($row->city, ENT_COMPAT, 'UTF-8'); $lists[$i]->eventlink = $params->get('linkevent', 1) ? JRoute::_(JEMHelperRoute::getEventRoute($row->slug)) : ''; $lists[$i]->venuelink = $params->get('linkvenue', 1) ? JRoute::_(JEMHelperRoute::getVenueRoute($row->venueslug)) : ''; # time/date static $formats = array('year' => 'Y', 'month' => 'F', 'day' => 'j', 'weekday' => 'l'); static $defaults = array('year' => ' ', 'month' => '', 'day' => '?', 'weekday' => ''); $lists[$i]->day = modJEMteaserHelper::_format_day($row, $params); $tmpdate = empty($row->dates) ? $defaults : self::_format_date_fields($row->dates, $formats); $lists[$i]->dayname = $tmpdate['weekday']; // keep them for backward compatibility $lists[$i]->daynum = $tmpdate['day']; $lists[$i]->month = $tmpdate['month']; $lists[$i]->year = $tmpdate['year']; $lists[$i]->startdate = $tmpdate; $lists[$i]->enddate = empty($row->enddates) ? $defaults : self::_format_date_fields($row->enddates, $formats); list($lists[$i]->date, $lists[$i]->time) = self::_format_date_time($row, $params->get('datemethod', 1), $dateFormat, $timeFormat, $addSuffix); $lists[$i]->dateinfo = JEMOutput::formatDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $dateFormat, $timeFormat, $addSuffix); if ($dimage == null) { $lists[$i]->eventimage = JUri::base(true).'/media/system/images/blank.png'; $lists[$i]->eventimageorig = JUri::base(true).'/media/system/images/blank.png'; } else { $lists[$i]->eventimage = JUri::base(true).'/'.$dimage['thumb']; $lists[$i]->eventimageorig = JUri::base(true).'/'.$dimage['original']; } if ($limage == null) { $lists[$i]->venueimage = JUri::base(true).'/media/system/images/blank.png'; $lists[$i]->venueimageorig = JUri::base(true).'/media/system/images/blank.png'; } else { $lists[$i]->venueimage = JUri::base(true).'/'.$limage['thumb']; $lists[$i]->venueimageorig = JUri::base(true).'/'.$limage['original']; } $length = $params->get('descriptionlength'); $length2 = 1; $etc = '...'; $etc2 = JText::_('MOD_JEM_TEASER_NO_DESCRIPTION'); //append <br /> tags on line breaking tags so they can be stripped below $description = preg_replace("'<(hr[^/>]*?/|/(div|h[1-6]|li|p|tr))>'si", "$0<br />", $row->introtext); //strip html tags but leave <br /> tags $description = strip_tags($description, "<br>"); //switch <br /> tags to space character if ($params->get('br') == 0) { $description = str_replace('<br />',' ', $description); } // if (strlen($description) > $length) { $length -= strlen($etc); $description = preg_replace('/\s+?(\S+)?$/', '', substr($description, 0, $length+1)); $lists[$i]->eventdescription = substr($description, 0, $length).$etc; } elseif (strlen($description) < $length2) { $length -= strlen($etc2); $description = preg_replace('/\s+?(\S+)?$/', '', substr($description, 0, $length+1)); $lists[$i]->eventdescription = substr($description, 0, $length).$etc2; } else { $lists[$i]->eventdescription = $description; } $lists[$i]->readmore = strlen(trim($row->fulltext)); $lists[$i]->colorclass = $color; if (($color == 'category') && !empty($row->categories)) { $colors = array(); foreach ($row->categories as $category) { if (!empty($category->color)) { $colors[$category->color] = $category->color; } } $lists[$i]->color = (count($colors) == 1) ? array_pop($colors) : $fallback_color; } $i++; } // foreach ($events as $row) return $lists; }
public static function getdays ($greq_year, $greq_month, &$params) { $db = JFactory::getDBO(); # Retrieve Eventslist model for the data $model = JModelLegacy::getInstance('Eventslist', 'JemModel', array('ignore_request' => true)); # Set params for the model //$app = JFactory::getApplication(); //$appParams = $app->getParams('com_jem'); $model->setState('params', $params); $user = JemFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); $settings = JemHelper::globalattribs(); $catids = JemHelper::getValidIds($params->get('catid')); $venids = JemHelper::getValidIds($params->get('venid')); $StraightToDetails = $params->get('StraightToDetails', '1'); $DisplayCat = $params->get('DisplayCat', '0'); $DisplayVenue = $params->get('DisplayVenue', '0'); $ArchivedEvents = $params->get('ArchivedEvents', '0'); $CurrentEvents = $params->get('CurrentEvents', '1'); $FixItemID = $params->get('FixItemID', '0'); $defaultItemid = $settings->get('default_Itemid',''); $daylinkparams = ''; // collects additional params for link to day view # filter category's if ($catids) { $model->setState('filter.category_id',$catids); $model->setState('filter.category_id.include',true); $daylinkparams .= '&catids=' . implode(',', $catids); } # filter venue's if ($venids) { $model->setState('filter.venue_id',$venids); $model->setState('filter.venue_id.include',true); $daylinkparams .= '&locids=' . implode(',', $venids); } # filter published # 0: unpublished # 1: published # 2: archived # -2: trashed if ($CurrentEvents && $ArchivedEvents) { $model->setState('filter.published',array(1,2)); $daylinkparams .= '&pub=1,2'; } else { if ($CurrentEvents == 1) { $model->setState('filter.published',1); $daylinkparams .= '&pub=1'; } # filter archived if ($ArchivedEvents == 1) { $model->setState('filter.published',2); $daylinkparams .= '&pub=2'; } } $model->setState('filter.groupby','a.id'); # Retrieve the available Items $events = $model->getItems(); # create an array to catch days $days = array(); foreach ($events as $index => $event) { # adding categories $nr = count($event->categories); $catname = ''; $ix = 0; # walk through categories assigned to an event foreach($event->categories AS $category) { $catname .= htmlspecialchars($category->catname); $ix++; if ($ix != $nr) { $catname .= ', '; } } // Cope with no end date set i.e. set it to same as start date if (is_null($event->enddates)) { $eyear = $event->created_year; $emonth = $event->created_month; $eday = $event->created_day; } else { list($eyear, $emonth, $eday) = explode('-', $event->enddates); } // The two cases for roll over the year end with an event that goes across the year boundary. if ($greq_year < $eyear) { $emonth = $emonth + 12; } if ($event->created_year < $greq_year) { $event->created_month = $event->created_month - 12; } if (($greq_year >= $event->created_year) && ($greq_year <= $eyear) && ($greq_month >= $event->created_month) && ($greq_month <= $emonth)) { // Set end day for current month if ($emonth > $greq_month) { $emonth = $greq_month; // $eday = cal_days_in_month(CAL_GREGORIAN, $greq_month,$greq_year); $eday = date('t', mktime(0, 0, 0, $greq_month, 1, $greq_year)); } // Set start day for current month if ($event->created_month < $greq_month) { $event->created_month = $greq_month; $event->created_day = 1; } $stod = 1; for ($count = $event->created_day; $count <= $eday; $count++) { $uxdate = mktime(0, 0, 0, $greq_month, $count, $greq_year); $tdate = strftime('%Y%m%d',$uxdate);// Toni change Joomla 1.5 // $created_day = $count; // $tt = $days[$count][1]; // if (strlen($tt) == 0) if (empty($days[$count][1])) { $title = htmlspecialchars($event->title); if ($DisplayCat == 1) { $title = $title . ' (' . $catname . ')'; } if ($DisplayVenue == 1) { if (isset($event->venue)) { $title = $title . ' @' . htmlspecialchars($event->venue); } } $stod = 1; } else { $tt = $days[$count][1]; $title = $tt . '+%+%+' . htmlspecialchars($event->title); if ($DisplayCat == 1) { $title = $title . ' (' . $catname . ')'; } if ($DisplayVenue == 1) { if (isset($event->venue)) { $title = $title . ' @' . htmlspecialchars($event->venue); } } $stod = 0; } if (($StraightToDetails == 1) and ($stod == 1)) { if ($FixItemID == 0) { $link = JRoute::_(JEMHelperRoute::getEventRoute($event->slug)); } else { //Create the link - copied from Jroute $evlink = JEMHelperRoute::getEventRoute($event->slug).'&Itemid='.$FixItemID; $link = JRoute::_($evlink); } } else { // @todo fix the getroute link if ($FixItemID == 0) { if ($defaultItemid) { $evlink = 'index.php?option=com_jem&view=day&id='. $tdate . $daylinkparams . '&Itemid='.$defaultItemid; } else { $evlink = 'index.php?option=com_jem&view=day&id='. $tdate . $daylinkparams; } $link = JRoute::_($evlink); //$link = JEMHelperRoute::getRoute($tdate, 'day'); } else { //Create the link - copied from Jroute $evlink = 'index.php?option=com_jem&view=day&id='. $tdate . $daylinkparams .'&Itemid='.$FixItemID; $link = JRoute::_($evlink); } } $days[$count] = array($link,$title); } } // End of Toni modification # check if the item-categories is empty, if so the user has no access to that event at all. if (empty($event->categories)) { unset ($events[$index]); } } // end foreach return $days; }
/** * Method to get the events * * @access public * @return array */ public static function getList(&$params) { mb_internal_encoding('UTF-8'); $db = JFactory::getDBO(); $user = JFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); # Retrieve Eventslist model for the data $model = JModelLegacy::getInstance('Eventslist', 'JemModel', array('ignore_request' => true)); # Set params for the model # has to go before the getItems function $model->setState('params', $params); # filter published # 0: unpublished # 1: published # 2: archived # -2: trashed $type = (int) $params->get('type'); $offset_hours = (int) $params->get('offset_hours', 0); $max_title_length = (int) $params->get('cuttitle', '25'); # clean parameter data $catids = JemHelper::getValidIds($params->get('catid')); $venids = JemHelper::getValidIds($params->get('venid')); # all upcoming or unfinished events if ($type == 0 || $type == 1) { $offset_minutes = $offset_hours * 60; $model->setState('filter.published', 1); $model->setState('filter.orderby', array('a.dates ASC', 'a.times ASC')); $cal_from = "((TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'23:59:59'))) > {$offset_minutes}) "; $cal_from .= $type == 1 ? " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > {$offset_minutes})) " : ") "; } elseif ($type == 2) { $model->setState('filter.published', 2); $model->setState('filter.orderby', array('a.dates DESC', 'a.times DESC')); $cal_from = ""; } elseif ($type == 3) { $offset_days = (int) round($offset_hours / 24); $model->setState('filter.published', 1); $model->setState('filter.orderby', array('a.dates ASC', 'a.times ASC')); $cal_from = " ((DATEDIFF(a.dates, CURDATE()) <= {$offset_days}) AND (DATEDIFF(IFNULL(a.enddates,a.dates), CURDATE()) >= {$offset_days}))"; } $model->setState('filter.calendar_from', $cal_from); $model->setState('filter.groupby', 'a.id'); # filter category's if ($catids) { $model->setState('filter.category_id', $catids); $model->setState('filter.category_id.include', true); } # filter venue's if ($venids) { $model->setState('filter.venue_id', $venids); $model->setState('filter.venue_id.include', true); } # count $count = $params->get('count', '2'); $model->setState('list.limit', $count); if ($params->get('use_modal', 0)) { JHtml::_('behavior.modal', 'a.flyermodal'); } # date/time $dateFormat = $params->get('formatdate', ''); $timeFormat = $params->get('formattime', ''); $addSuffix = empty($timeFormat); // if we use component's default time format we can also add corresponding suffix # Retrieve the available Events $events = $model->getItems(); # Loop through the result rows and prepare data $lists = array(); $i = 0; foreach ($events as $row) { # create thumbnails if needed and receive imagedata $dimage = $row->datimage ? JEMImage::flyercreator($row->datimage, 'event') : null; $limage = $row->locimage ? JEMImage::flyercreator($row->locimage, 'venue') : null; ################# ## DEFINE LIST ## ################# $lists[$i] = new stdClass(); # cut titel $fulltitle = htmlspecialchars($row->title, ENT_COMPAT, 'UTF-8'); if (mb_strlen($fulltitle) > $max_title_length) { $title = mb_substr($fulltitle, 0, $max_title_length) . '...'; } else { $title = $fulltitle; } ## Also trim venue name to same as title $fullvenuename = htmlspecialchars($row->venue, ENT_COMPAT, 'UTF-8'); if (mb_strlen($fullvenuename) > $max_title_length) { $venue = mb_substr($fullvenuename, 0, $max_title_length) . '...'; } else { $venue = $fullvenuename; } $lists[$i]->title = $title; $lists[$i]->fulltitle = $fulltitle; $lists[$i]->venue = $venue; $lists[$i]->fullvenue = $fullvenuename; $lists[$i]->catname = implode(", ", JemOutput::getCategoryList($row->categories, $params->get('linkcategory', 1))); $lists[$i]->state = htmlspecialchars($row->state, ENT_COMPAT, 'UTF-8'); $lists[$i]->city = htmlspecialchars($row->city, ENT_COMPAT, 'UTF-8'); $lists[$i]->eventlink = $params->get('linkevent', 1) ? JRoute::_(JEMHelperRoute::getEventRoute($row->slug)) : ''; $lists[$i]->venuelink = $params->get('linkvenue', 1) ? JRoute::_(JEMHelperRoute::getVenueRoute($row->venueslug)) : ''; # time/date list($lists[$i]->date, $lists[$i]->time) = self::_format_date_time($row, $params->get('datemethod', 1), $dateFormat, $timeFormat, $addSuffix); $lists[$i]->dateinfo = JEMOutput::formatDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $dateFormat, $timeFormat, $addSuffix); if ($dimage == null) { $lists[$i]->eventimage = JUri::base(true) . '/media/system/images/blank.png'; $lists[$i]->eventimageorig = JUri::base(true) . '/media/system/images/blank.png'; } else { $lists[$i]->eventimage = JUri::base(true) . '/' . $dimage['thumb']; $lists[$i]->eventimageorig = JUri::base(true) . '/' . $dimage['original']; } if ($limage == null) { $lists[$i]->venueimage = JUri::base(true) . '/media/system/images/blank.png'; $lists[$i]->venueimageorig = JUri::base(true) . '/media/system/images/blank.png'; } else { $lists[$i]->venueimage = JUri::base(true) . '/' . $limage['thumb']; $lists[$i]->venueimageorig = JUri::base(true) . '/' . $limage['original']; } $lists[$i]->eventdescription = strip_tags($row->fulltext); $lists[$i]->venuedescription = strip_tags($row->locdescription); $i++; } // foreach ($events as $row) return $lists; }
/** * Method to get the events * * @access public * @return array */ public static function getList(&$params) { mb_internal_encoding('UTF-8'); $db = JFactory::getDBO(); $user = JFactory::getUser(); $levels = $user->getAuthorisedViewLevels(); $settings = JemHelper::config(); // Use (short) format saved in module settings or in component settings or format in language file otherwise $dateFormat = $params->get('formatdate', ''); if (empty($dateFormat)) { // on empty format long format will be used but we need short format if (isset($settings->formatShortDate) && $settings->formatShortDate) { $dateFormat = $settings->formatShortDate; } else { $dateFormat = JText::_('COM_JEM_FORMAT_SHORT_DATE'); } } $timeFormat = $params->get('formattime', ''); $addSuffix = false; if (empty($timeFormat)) { // on empty format component's format will be used, so also use component's time suffix $addSuffix = true; } # Retrieve Eventslist model for the data $model = JModelLegacy::getInstance('Eventslist', 'JemModel', array('ignore_request' => true)); # Set params for the model # has to go before the getItems function $model->setState('params', $params); # filter published # 0: unpublished # 1: published # 2: archived # -2: trashed $type = $params->get('type'); # All events $cal_from = ""; // TODO: Add parameter to specify start and end dates for showing events // (used for schools league) // All events, default order if ($type == 3) { $cal_from = ""; } elseif ($type == 2) { $model->setState('filter.published', 2); $model->setState('filter.orderby', array('a.dates DESC', 'a.times DESC')); $cal_from = ""; } else { $model->setState('filter.published', 1); $model->setState('filter.orderby', array('a.dates ASC', 'a.times ASC')); $offset_minutes = 60 * $params->get('offset_hours', 0); $cal_from = "((TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(a.dates,' ',IFNULL(a.times,'00:00:00'))) > {$offset_minutes}) "; $cal_from .= $type == 1 ? " OR (TIMESTAMPDIFF(MINUTE, NOW(), CONCAT(IFNULL(a.enddates,a.dates),' ',IFNULL(a.endtimes,'23:59:59'))) > {$offset_minutes})) " : ") "; } $model->setState('filter.calendar_from', $cal_from); $model->setState('filter.groupby', 'a.id'); # filter category's $catids = JemHelper::getValidIds($params->get('catid')); if ($catids) { $model->setState('filter.category_id', $catids); $model->setState('filter.category_id.include', true); } # filter venue's $venids = JemHelper::getValidIds($params->get('venid')); if ($venids) { $model->setState('filter.venue_id', $venids); $model->setState('filter.venue_id.include', true); } # count $count = $params->get('count', '2'); $model->setState('list.limit', $count); # Retrieve the available Events $events = $model->getItems(); # Loop through the result rows and prepare data $i = 0; $lists = array(); foreach ($events as $row) { //cut titel $length = mb_strlen($row->title); if ($length > $params->get('cuttitle', '18')) { $row->title = mb_substr($row->title, 0, $params->get('cuttitle', '18')); $row->title = $row->title . '...'; } $lists[$i] = new stdClass(); $lists[$i]->link = JRoute::_(JemHelperRoute::getEventRoute($row->slug)); # time/date list($lists[$i]->date, $lists[$i]->time) = self::_format_date_time($row, $params->get('datemethod', 1), $dateFormat, $timeFormat, $addSuffix); $lists[$i]->dateinfo = JEMOutput::formatDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $dateFormat, $timeFormat, $addSuffix); $lists[$i]->dateinfo = JemOutput::formatDateTime($row->dates, $row->times, $row->enddates, $row->endtimes, $dateFormat, $timeFormat, $addSuffix); $lists[$i]->text = $params->get('showtitloc', 0) ? $row->title : htmlspecialchars($row->venue, ENT_COMPAT, 'UTF-8'); $lists[$i]->city = htmlspecialchars($row->city, ENT_COMPAT, 'UTF-8'); $lists[$i]->venueurl = !empty($row->venueslug) ? JRoute::_(JEMHelperRoute::getVenueRoute($row->venueslug)) : null; $i++; } return $lists; }