Exemplo n.º 1
0
 function created_by_alias()
 {
     if ($this->_created_by_alias != "") {
         return $this->_created_by_alias;
     } else {
         $creator = JEVHelper::getUser($this->_created_by);
         return $creator->name;
     }
 }
Exemplo n.º 2
0
 /**
  * Returns contact details or user details as fall back
  *
  * @param int id		key of user
  * @param string attrib	Requested attribute of the user object
  * @return mixed row	Attribute or row object
  */
 public static function getContact($id, $attrib = 'Object')
 {
     $db = JFactory::getDBO();
     static $rows = array();
     if ($id <= 0) {
         return null;
     }
     if (!isset($rows[$id])) {
         $user = JFactory::getUser();
         $rows[$id] = null;
         $query = "SELECT ju.id, ju.name, ju.username, ju.sendEmail, ju.email, cd.name as contactname, " . ' CASE WHEN CHAR_LENGTH(cd.alias) THEN CONCAT_WS(\':\', cd.id, cd.alias) ELSE cd.id END as slug, ' . ' CASE WHEN CHAR_LENGTH(cat.alias) THEN CONCAT_WS(\':\', cat.id, cat.alias) ELSE cat.id END AS catslug ' . " \n FROM #__users AS ju" . "\n LEFT JOIN #__contact_details AS cd ON cd.user_id = ju.id " . "\n LEFT JOIN #__categories AS cat ON cat.id = cd.catid " . "\n WHERE block ='0'" . "\n AND cd.published =1 " . "\n AND cd.access  " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . JEVHelper::getAid($user)) . "\n AND cat.access  " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . JEVHelper::getAid($user)) . "\n AND ju.id = " . $id;
         $db->setQuery($query);
         $rows[$id] = $db->loadObject();
         if (is_null($rows[$id])) {
             // if the user has been deleted then try to suppress the warning
             // this causes a problem in Joomla 2.5.1 on some servers
             if (version_compare(JVERSION, '2.5', '>=')) {
                 $rows[$id] = JEVHelper::getUser($id);
             } else {
                 $handlers = JError::getErrorHandling(2);
                 JError::setErrorHandling(2, "ignore");
                 $rows[$id] = JEVHelper::getUser($id);
                 foreach ($handlers as $handler) {
                     if (!is_array($handler)) {
                         JError::setErrorHandling(2, $handler);
                     }
                 }
                 if ($rows[$id]) {
                     $error = JError::getError(true);
                 }
             }
         }
     }
     if ($attrib == 'Object') {
         return $rows[$id];
     } elseif (isset($rows[$id]->{$attrib})) {
         return $rows[$id]->{$attrib};
     } else {
         return null;
     }
 }
Exemplo n.º 3
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher = JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() && $dayEvent->getUnixStartDate() == $dayEvent->getUnixEndDate() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : IS_WIN ? ' @%I:%M%p' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '%a %b %d' . $time_fmt;
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 if ($this->modparams->get("ignorefiltermodule", 0)) {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink() . "&filter_reset=1");
                 } else {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 }
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'categoryimage':
             $catobj = $dayEvent->getCategoryImage();
             $content .= $catobj;
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'duration':
             $timedelta = $dayEvent->noendtime() || $dayEvent->alldayevent() ? "" : $dayEvent->getUnixEndTime() - $dayEvent->getUnixStartTime();
             if ($timedelta == "") {
                 break;
             }
             $fieldval = isset($dateParm) && $dateParm != '' ? $dateParm : JText::_("JEV_DURATION_FORMAT");
             $shownsign = false;
             // whole days!
             if (stripos($fieldval, "%wd") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 if ($timedelta > 3610) {
                     //if more than 1 hour and 10 seconds over a day then round up the day output
                     $days += 1;
                 }
                 $fieldval = str_ireplace("%wd", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 /*
                  if ($timedelta>3610){
                  //if more than 1 hour and 10 seconds over a day then round up the day output
                  $days +=1;
                  }
                 */
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $eventPassed = !($timedelta >= 0);
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%nopast") !== false) {
                 if (!$eventPassed) {
                     $fieldval = str_ireplace("%nopast", "", $fieldval);
                 } else {
                     $fieldval = JText::_('JEV_EVENT_FINISHED');
                 }
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             // limit to 2 because we may be using joomla content plugins
                             $subparts = explode("}", $part, 2);
                             if (strpos($subparts[0], "#") > 0) {
                                 $formattedparts = explode("#", $subparts[0]);
                                 $subparts[0] = $formattedparts[0];
                             } else {
                                 $formattedparts = array($subparts[0], "%s", "");
                             }
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 if ($temp != "") {
                                     $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                 } else {
                                     if (isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                     }
                                 }
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     if ($temp != "") {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                     } else {
                                         if (isset($formattedparts[2])) {
                                             $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                         }
                                     }
                                 } else {
                                     $matchedByPlugin = false;
                                     $layout = "list";
                                     static $fieldNameArrays = array();
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             if (!isset($fieldNameArrays[$classname])) {
                                                 $fieldNameArrays[$classname] = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             }
                                             if (isset($fieldNameArrays[$classname]["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArrays[$classname]["values"])) {
                                                     $matchedByPlugin = true;
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $temp = call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                         if ($temp != "") {
                                                             $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                                         } else {
                                                             if (isset($formattedparts[2])) {
                                                                 $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     if (!$matchedByPlugin) {
                                         // Layout editor code
                                         include_once JEV_PATH . "/views/default/helpers/defaultloadedfromtemplate.php";
                                         ob_start();
                                         // false at the end to stop it running through the plugins
                                         $part = "{{Dummy Label:" . implode("#", $formattedparts) . "}}";
                                         DefaultLoadedFromTemplate(false, false, $dayEvent, 0, $part, false);
                                         $newpart = ob_get_clean();
                                         if ($newpart != $part) {
                                             $tempstr .= $newpart;
                                             $matchedByPlugin = true;
                                         }
                                     }
                                     // none of the plugins has replaced the output so we now replace the blank formatted part!
                                     if (!$matchedByPlugin && isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", "", $formattedparts[2]);
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
Exemplo n.º 4
0
 function creatorName($show = "both")
 {
     if (!isset($this->_creatorname)) {
         if ($show == "both") {
             $user = JEVHelper::getUser($this->_created_by);
             if ($user->id > 0) {
                 $this->_creatorname = $user->username . "(" . $user->name . ")";
             } else {
                 if (isset($this->_anonname)) {
                     $this->_creatorname = $this->_anonname . "<br/>(" . $this->_anonemail . ")";
                 } else {
                     $this->_creatorname = "";
                 }
             }
         } else {
             if ($show == "name") {
                 $user = JEVHelper::getUser($this->_created_by);
                 if ($user->id > 0) {
                     $this->_creatorname = $user->name;
                 } else {
                     if (isset($this->_anonname)) {
                         $this->_creatorname = $this->_anonname . "<br/>(" . $this->_anonemail . ")";
                     } else {
                         $this->_creatorname = "";
                     }
                 }
             } else {
                 if ($show == "username") {
                     $user = JEVHelper::getUser($this->_created_by);
                     if ($user->id > 0) {
                         $this->_creatorname = " . {$user->username} . ";
                     } else {
                         if (isset($this->_anonname)) {
                             $this->_creatorname = $this->_anonname . "<br/>(" . $this->_anonemail . ")";
                         } else {
                             $this->_creatorname = "";
                         }
                     }
                 }
             }
         }
     }
     return $this->_creatorname;
 }
Exemplo n.º 5
0
 function listLatestIcalEvents($startdate, $enddate, $limit = 10, $noRepeats = 0, $multidayTreatment = 0)
 {
     //list($usec, $sec) = explode(" ", microtime());
     //$starttime = (float) $usec + (float) $sec;
     $userid = JRequest::getVar('jev_userid', "0");
     if ($userid == "0") {
         $user = JFactory::getUser();
     } else {
         $user = JEVHelper::getUser($userid);
     }
     $lang = JFactory::getLanguage();
     $langtag = $lang->getTag();
     if (strpos($startdate, "-") === false) {
         $startdate = JevDate::strftime('%Y-%m-%d 00:00:00', $startdate);
         $enddate = JevDate::strftime('%Y-%m-%d 23:59:59', $enddate);
     }
     // Use alternative data source
     $rows = array();
     $skipJEvents = false;
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('fetchListLatestIcalEvents', array(&$skipJEvents, &$rows, $startdate, $enddate, $limit, $noRepeats, $multidayTreatment));
     if ($skipJEvents) {
         return $rows;
     }
     // process the new plugins
     // get extra data and conditionality from plugins
     $extrawhere = array();
     $extrajoin = array();
     $rptwhere = array();
     $extrafields = "";
     // must have comma prefix
     $extratables = "";
     // must have comma prefix
     $needsgroup = false;
     $filterarray = array("published", "justmine", "category", "search", "repeating");
     // If there are extra filters from the module then apply them now
     $reg = JFactory::getConfig();
     $modparams = $reg->get("jev.modparams", false);
     if ($modparams && $modparams->get("extrafilters", false)) {
         $filterarray = array_merge($filterarray, explode(",", $modparams->get("extrafilters", false)));
     }
     $filters = jevFilterProcessing::getInstance($filterarray);
     $filters->setWhereJoin($extrawhere, $extrajoin);
     $needsgroup = $filters->needsGroupBy();
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('onListIcalEvents', array(&$extrafields, &$extratables, &$extrawhere, &$extrajoin, &$needsgroup, &$rptwhere));
     //list ($usec, $sec) = explode(" ", microtime());
     //$time_end = (float) $usec + (float) $sec;
     //echo  "post onListIcalEvents= ".round($time_end - $starttime, 4)."<br/>";
     // What if join multiplies the rows?
     // Useful MySQL link http://forums.mysql.com/read.php?10,228378,228492#msg-228492
     // concat with group
     // http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/
     // did any of the plugins adjust the range of dateds allowed eg. timelimit plugin - is so then we need to use this information otherwise we  get problems
     $regex = "#(rpt.endrepeat>='[0-9:\\- ]*' AND rpt.startrepeat<='[0-9:\\- ]*')#";
     foreach ($extrawhere as $exwhere) {
         if (preg_match($regex, $exwhere)) {
             $rptwhere[] = str_replace("rpt.", "rpt2.", $exwhere);
         }
     }
     $rptwhere = count($rptwhere) ? ' AND ' . implode(' AND ', $rptwhere) : '';
     $catwhere = "\n WHERE ev.catid IN(" . $this->accessibleCategoryList(JEVHelper::getAid($user)) . ")";
     $params = JComponentHelper::getParams("com_jevents");
     if ($params->get("multicategory", 0)) {
         $extrajoin[] = "\n #__jevents_catmap as catmap ON catmap.evid = rpt.eventid";
         $extrajoin[] = "\n #__categories AS catmapcat ON catmap.catid = catmapcat.id";
         $extrafields .= ", GROUP_CONCAT(DISTINCT catmap.catid SEPARATOR ',') as catids";
         $extrawhere[] = " catmapcat.access  IN (" . JEVHelper::getAid($user) . ")";
         $extrawhere[] = " catmap.catid IN(" . $this->accessibleCategoryList() . ")";
         $needsgroup = true;
         $catwhere = "\n WHERE 1 ";
     }
     $extrajoin = count($extrajoin) ? " \n LEFT JOIN " . implode(" \n LEFT JOIN ", $extrajoin) : '';
     $extrawhere = count($extrawhere) ? ' AND ' . implode(' AND ', $extrawhere) : '';
     // get the event ids first - split into 2 queries to pick up the ones after now and the ones before
     $t_datenow = JEVHelper::getNow();
     $t_datenowSQL = $t_datenow->toSql();
     // multiday condition
     if ($multidayTreatment == 3) {
         // We only show events once regardless of multiday setting of event so we allow them all through here!
         $multiday = "";
         $multiday2 = "";
         $multiday3 = "";
     } else {
         if ($multidayTreatment == 2) {
             // We only show events on their first day only regardless of multiday setting of event so we allow them all through here!
             $multiday = "";
             $multiday2 = "";
             $multiday3 = "";
         } else {
             if ($multidayTreatment == 1) {
                 // We only show events on all days regardless of multiday setting of event so we allow them all through here!
                 $multiday = "";
                 $multiday2 = "";
                 $multiday3 = "";
             } else {
                 // We only show events on their first day if they are not to be shown on multiple days so also add this condition
                 // i.e. the event settings are used
                 // This is the true version of these conditions
                 //$multiday = "\n AND ((rpt.startrepeat >= '$startdate' AND det.multiday=0) OR  det.multiday=1)";
                 //$multiday2 = "\n AND ((rpt.startrepeat <= '$startdate' AND det.multiday=0) OR  det.multiday=1)";
                 // BUT this is logically equivalent and appears much faster  on some databases
                 $multiday = "\n AND (rpt.startrepeat >= '{$startdate}' OR  det.multiday=1)";
                 $multiday2 = "\n AND (rpt.startrepeat <= '{$startdate}'OR  det.multiday=1)";
                 $multiday3 = "AND det.multiday=1";
             }
         }
     }
     if ($noRepeats) {
         // Display a repeating event ONCE we group by event id selecting the most appropriate repeat for each one
         // Find the ones after now (only if not past only)
         $rows1 = array();
         if ($enddate >= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) != 1) {
             $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$t_datenowSQL}' AND rpt.startrepeat <= '{$enddate}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n AND rpt.startrepeat=(\n\t\t\t\tSELECT MIN(startrepeat) FROM #__jevents_repetition as rpt2\n\t\t\t\tWHERE rpt2.eventid=rpt.eventid\n\t\t\t\tAND  (\n\t\t\t\t\t(rpt2.startrepeat >= '{$t_datenowSQL}' AND rpt2.startrepeat <= '{$enddate}')\n\t\t\t\t\tOR (rpt2.startrepeat <= '{$t_datenowSQL}' AND rpt2.endrepeat  > '{$t_datenowSQL}'  {$multiday3})\n\t\t\t\t\t)\n\t\t\t\t{$rptwhere}\n\t\t\t) \n\t\t\tGROUP BY ev.ev_id\n\t\t\tORDER BY rpt.startrepeat";
             // This limit will always be enough
             $query .= " LIMIT " . $limit;
             $cache = JFactory::getCache(JEV_COM_COMPONENT);
             $rows1 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
         }
         // Before now (only if not past only == future events)
         $rows2 = array();
         if ($startdate <= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) < 2) {
             // note the order is the ones nearest today
             $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n AND rpt.startrepeat=(\n\t\t\t\t\tSELECT MAX(startrepeat) FROM #__jevents_repetition as rpt2\n\t\t\t\t\t WHERE rpt2.eventid=rpt.eventid\n\t\t\t\t\tAND rpt2.startrepeat <= '{$t_datenowSQL}' AND rpt2.startrepeat >= '{$startdate}'\n\t\t\t\t\t{$rptwhere}\n\t\t\t\t)\n\t\t\t\tGROUP BY ev.ev_id\n\t\t\t\tORDER BY rpt.startrepeat desc";
             // This limit will always be enough
             $query .= " LIMIT " . $limit;
             $cache = JFactory::getCache(JEV_COM_COMPONENT);
             $rows2 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
         }
         $rows3 = array();
         if ($multidayTreatment != 2 && $multidayTreatment != 3) {
             // Mutli day events
             $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday2 . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n AND rpt.startrepeat <= '{$t_datenowSQL}' AND rpt.endrepeat >= '{$t_datenowSQL}'" . " \n GROUP BY ev.ev_id\n\t\t\t\t\t\tORDER BY rpt.startrepeat";
             // This limit will always be enough
             $query .= " LIMIT " . $limit;
             $cache = JFactory::getCache(JEV_COM_COMPONENT);
             $rows3 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
         }
         // ensure specific event is not used more than once
         $events = array();
         $rows = array();
         // future events
         foreach ($rows1 as $val) {
             if (!in_array($val->ev_id(), $events)) {
                 //echo $val->_startrepeat." ".$val->ev_id()." ".$val->title()."<br/>";
                 $events[] = $val->ev_id();
                 $rows[] = $val;
             }
         }
         // straddling multi-day event
         foreach ($rows3 as $val) {
             if (!in_array($val->ev_id(), $events)) {
                 //echo $val->_startrepeat." ".$val->ev_id()." ".$val->title()."<br/>";
                 $events[] = $val->ev_id();
                 $rows[] = $val;
             }
         }
         // past events
         foreach ($rows2 as $val) {
             if (!in_array($val->ev_id(), $events)) {
                 //echo $val->_startrepeat." ".$val->ev_id()." ".$val->title()."<br/>";
                 $events[] = $val->ev_id();
                 $rows[] = $val;
             }
         }
         //echo "count rows ".count($rows1)." ".count($rows2)." ".count($rows3)." ".count($rows)."<br/>";
         unset($rows1);
         unset($rows2);
         unset($rows3);
     } else {
         //list ($usec, $sec) = explode(" ", microtime());
         //$time_end = (float) $usec + (float) $sec;
         //echo  "pre version= ".round($time_end - $starttime, 4)."<br/>";
         $version = JRequest::getCmd("version", "old");
         if ($version == "new") {
             // new approach that gets the IDs first
             // Display a repeating event for EACH repeat
             // We therefore fetch 3 sets of possible repeats if necessary i.e. not over the limit!
             // Find the ones after now (only if not past only)
             $ids1 = array();
             if ($enddate >= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) != 1) {
                 $query = "SELECT DISTINCT rpt.rp_id" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$t_datenowSQL}' AND rpt.startrepeat <= '{$enddate}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.rp_id\n\t\t\t\t\t\tORDER BY rpt.startrepeat ASC";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 // TODO cache this!
                 $db = JFactory::getDbo();
                 $db->setQuery($query);
                 $ids1 = $db->loadColumn();
             }
             // Before now (only if not past only == future events)
             $ids2 = array();
             if ($startdate <= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) < 2) {
                 // note the order is the ones nearest today
                 $query = "SELECT  DISTINCT rpt.rp_id" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.rp_id\n\t\t\t\t\t\t\tORDER BY rpt.startrepeat desc";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 // TODO cache this!
                 $db = JFactory::getDbo();
                 $db->setQuery($query);
                 $ids2 = $db->loadColumn();
             }
             $ids3 = array();
             if ($multidayTreatment != 2 && $multidayTreatment != 3) {
                 // Mutli day events
                 $query = "SELECT  DISTINCT rpt.rp_id" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday2 . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.rp_id\n\t\t\t\t\t\t\tORDER BY rpt.startrepeat asc";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 // TODO cache this!
                 $db = JFactory::getDbo();
                 $db->setQuery($query);
                 $ids3 = $db->loadColumn();
             }
             //list ($usec, $sec) = explode(" ", microtime());
             //$time_end = (float) $usec + (float) $sec;
             //echo  "after ids = ".round($time_end - $starttime, 4)."<br/>";
             $ids = array_merge($ids1, $ids2, $ids3);
             if (count($ids) == 0) {
                 $rows = array();
             } else {
                 $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . " \n WHERE rpt.rp_id IN (" . implode(",", $ids) . ")" . "\n GROUP BY rpt.rp_id";
                 // This limit will always be enough
                 //$query .= " LIMIT " . $limit;
                 $cache = JFactory::getCache(JEV_COM_COMPONENT);
                 $rows = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
             }
             //list ($usec, $sec) = explode(" ", microtime());
             //$time_end = (float) $usec + (float) $sec;
             //echo  "after rows = ".round($time_end - $starttime, 4)."<br/>";
         } else {
             // Display a repeating event for EACH repeat
             // We therefore fetch 3 sets of possible repeats if necessary i.e. not over the limit!
             // Find the ones after now (only if not past only)
             $rows1 = array();
             if ($enddate >= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) != 1) {
                 $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$t_datenowSQL}' AND rpt.startrepeat <= '{$enddate}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.startrepeat , rpt.rp_id\n\t\t\t\t\t\tORDER BY rpt.startrepeat ASC";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 $cache = JFactory::getCache(JEV_COM_COMPONENT);
                 $rows1 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
             }
             // Before now (only if not past only == future events)
             $rows2 = array();
             if ($startdate <= $t_datenowSQL && $modparams && $modparams->get("pastonly", 0) < 2) {
                 // note the order is the ones nearest today
                 $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.startrepeat , rpt.rp_id\n\t\t\t\t\t\t\tORDER BY rpt.startrepeat desc";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 $cache = JFactory::getCache(JEV_COM_COMPONENT);
                 $rows2 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
             }
             $rows3 = array();
             if ($multidayTreatment != 2 && $multidayTreatment != 3) {
                 // Mutli day events
                 $query = "SELECT rpt.*, ev.*, rr.*, det.*, ev.state as published, ev.created as created {$extrafields}" . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_repetition as rpt" . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid " . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = rpt.eventid" . $extrajoin . $catwhere . "\n AND rpt.endrepeat >= '{$startdate}' AND rpt.startrepeat <= '{$t_datenowSQL}'" . $multiday2 . $extrawhere . "\n AND ev.access  IN (" . JEVHelper::getAid($user) . ")" . "  AND icsf.state=1 " . "\n AND icsf.access  IN (" . JEVHelper::getAid($user) . ")" . "\n GROUP BY rpt.startrepeat , rpt.rp_id\n\t\t\t\t\t\t\tORDER BY rpt.startrepeat asc";
                 // This limit will always be enough
                 $query .= " LIMIT " . $limit;
                 $cache = JFactory::getCache(JEV_COM_COMPONENT);
                 $rows3 = $cache->call(array($this, '_cachedlistIcalEvents'), $query, $langtag);
             }
             // ensure specific repeat is not used more than once
             $repeats = array();
             $rows = array();
             // future events
             foreach ($rows1 as $val) {
                 if (!in_array($val->rp_id(), $repeats)) {
                     $repeats[] = $val->rp_id();
                     $rows[] = $val;
                 }
             }
             // straddling multi-day event
             foreach ($rows3 as $val) {
                 if (!in_array($val->rp_id(), $repeats)) {
                     $repeats[] = $val->rp_id();
                     $rows[] = $val;
                 }
             }
             // past events
             foreach ($rows2 as $val) {
                 if (!in_array($val->rp_id(), $repeats)) {
                     $repeats[] = $val->rp_id();
                     $rows[] = $val;
                 }
             }
             //echo "count rows ".count($rows1)." ".count($rows2)." ".count($rows3)." ".count($rows)."<br/>";
             unset($rows1);
             unset($rows2);
             unset($rows3);
         }
     }
     //echo "count rows = ".count($rows)."<Br/>";
     JEventsDBModel::translateEvents($rows);
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('onDisplayCustomFieldsMultiRowUncached', array(&$rows));
     //list ($usec, $sec) = explode(" ", microtime());
     //$time_end = (float) $usec + (float) $sec;
     //echo  "listLatestIcalEvents  = ".round($time_end - $starttime, 4)."<br/>";
     return $rows;
 }
Exemplo n.º 6
0
 function getEventData($rpid, $jevtype, $year, $month, $day, $uid = "")
 {
     $data = array();
     $pop = intval(JRequest::getVar('pop', 0));
     $Itemid = JEVHelper::getItemid();
     $db = JFactory::getDBO();
     $user = JFactory::getUser();
     $cfg = JEVConfig::getInstance();
     $row = $this->queryModel->listEventsById($rpid, 1, $jevtype);
     // include unpublished events for publishers and above
     // if the event is not published then make sure the user can edit or publish it or created it before allowing it to be seen!
     if ($row && $row->published() != 1) {
         if ($user->id != $row->created_by() && !JEVHelper::canEditEvent($row) && !JEVHelper::canPublishEvent($row) && !JEVHelper::isAdminUser($user)) {
             $row = null;
         }
     }
     $num_row = count($row);
     // No matching rows - use uid as alternative
     if ($num_row == 0 && JString::strlen($uid) > 0) {
         $rpid = $this->queryModel->findMatchingRepeat($uid, $year, $month, $day);
         if (isset($rpid) && $rpid > 0) {
             $row = $this->queryModel->listEventsById($rpid, 1, $jevtype);
             // include unpublished events for publishers and above
             if ($row && !$row->published()) {
                 if ($user->id != $row->created_by() && !JEVHelper::canEditEvent($row) && !JEVHelper::canPublishEvent($row) && !JEVHelper::isAdminUser($user)) {
                     $row = null;
                 }
             }
             $num_row = count($row);
         }
     }
     if ($num_row) {
         // process the new plugins
         $dispatcher = JEventDispatcher::getInstance();
         $dispatcher->trigger('onGetEventData', array(&$row));
         $params = new JRegistry(null);
         $row->contactlink = JEventsHTML::getUserMailtoLink($row->id(), $row->created_by(), false, $row);
         $event_up = new JEventDate($row->publish_up());
         $row->start_date = JEventsHTML::getDateFormat($event_up->year, $event_up->month, $event_up->day, 0);
         $row->start_time = JEVHelper::getTime($row->getUnixStartTime());
         $event_down = new JEventDate($row->publish_down());
         $row->stop_date = JEventsHTML::getDateFormat($event_down->year, $event_down->month, $event_down->day, 0);
         $row->stop_time = JEVHelper::getTime($row->getUnixEndTime());
         $row->stop_time_midnightFix = $row->stop_time;
         $row->stop_date_midnightFix = $row->stop_date;
         if ($event_down->second == 59) {
             $row->stop_time_midnightFix = JEVHelper::getTime($row->getUnixEndTime() + 1);
             $row->stop_date_midnightFix = JEventsHTML::getDateFormat($event_down->year, $event_down->month, $event_down->day + 1, 0);
         }
         // *******************
         // ** This cloaking should be done by mambot/Joomla function
         // *******************
         // Parse http and  wrap in <a> tag
         // trigger content plugin
         JPluginHelper::importPlugin('content');
         $pattern = '[a-zA-Z0-9&?_.,=%\\-\\/]';
         // Addresse
         if (!is_numeric($row->location())) {
             // don't convert address that already has a link tag
             if (strpos($row->location(), '<a href=') === false) {
                 $row->location(preg_replace('#(http://)(' . $pattern . '*)#i', '<a href="\\1\\2">\\1\\2</a>', $row->location()));
             }
             $tmprow = new stdClass();
             $tmprow->text = $row->location();
             $dispatcher = JEventDispatcher::getInstance();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$tmprow, &$params, 0));
             $row->location($tmprow->text);
         }
         //Contact
         if (strpos($row->contact_info(), '<a href=') === false) {
             $row->contact_info(preg_replace('#(http://)(' . $pattern . '*)#i', '<a href="\\1\\2">\\1\\2</a>', $row->contact_info()));
         }
         $tmprow = new stdClass();
         $tmprow->text = $row->contact_info();
         $dispatcher->trigger('onContentPrepare', array('com_jevents', &$tmprow, &$params, 0));
         $row->contact_info($tmprow->text);
         //Extra
         if (strpos($row->extra_info(), '<a href=') === false) {
             $row->extra_info(preg_replace('#(http://)(' . $pattern . '*)#i', '<a href="\\1\\2">\\1\\2</a>', $row->extra_info()));
         }
         //$row->extra_info(eregi_replace('[^(href=|href="|href=\')](((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)','\\1', $row->extra_info()));
         $tmprow = new stdClass();
         $tmprow->text = $row->extra_info();
         $dispatcher->trigger('onContentPrepare', array('com_jevents', &$tmprow, &$params, 0));
         $row->extra_info($tmprow->text);
         $mask = JFactory::getApplication()->getCfg('hideAuthor') ? MASK_HIDEAUTHOR : 0;
         $mask |= JFactory::getApplication()->getCfg('hideCreateDate') ? MASK_HIDECREATEDATE : 0;
         $mask |= JFactory::getApplication()->getCfg('hideModifyDate') ? MASK_HIDEMODIFYDATE : 0;
         $mask |= JFactory::getApplication()->getCfg('hidePdf') ? MASK_HIDEPDF : 0;
         $mask |= JFactory::getApplication()->getCfg('hidePrint') ? MASK_HIDEPRINT : 0;
         $mask |= JFactory::getApplication()->getCfg('hideEmail') ? MASK_HIDEEMAIL : 0;
         //$mask |= JFactory::getApplication()->getCfg( 'vote' ) ? MASK_VOTES : 0;
         $mask |= JFactory::getApplication()->getCfg('vote') ? MASK_VOTES | MASK_VOTEFORM : 0;
         $mask |= $pop ? MASK_POPUP | MASK_IMAGES | MASK_BACKTOLIST : 0;
         // Do main mambot processing here
         // process bots
         //$row->text      = $row->content;
         $params->set("image", 1);
         $row->text = $row->content();
         $dispatcher->trigger('onContentPrepare', array('com_jevents', &$row, &$params, 0));
         $row->content($row->text);
         $data['row'] = $row;
         $data['mask'] = $mask;
         $row->updateHits();
         return $data;
     } else {
         // Do we have to be logged in to see this event?
         // If we set the access user for ical export (as an example) then use this user id for access checks!
         $user = isset($this->accessuser) ? JEVHelper::getUser($this->accessuser) : JFactory::getUser();
         if ($user->id == 0) {
             $db = JFactory::getDBO();
             $query = "SELECT ev.*" . "\n FROM #__jevents_vevent as ev " . "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . "\n WHERE rpt.rp_id = '{$rpid}'";
             $db->setQuery($query);
             $row2 = $db->loadObject();
             // need to be logged in to see this event?
             if ($row2 && (version_compare(JVERSION, '1.6.0', '>=') ? !in_array($row2->access, JEVHelper::getAid($user, 'array')) : JEVHelper::getAid($user) < $row2->access)) {
                 $uri = JURI::getInstance();
                 $link = $uri->toString();
                 $comuser = version_compare(JVERSION, '1.6.0', '>=') ? "com_users" : "com_user";
                 $link = 'index.php?option=' . $comuser . '&view=login&return=' . base64_encode($link);
                 $link = JRoute::_($link);
                 JFactory::getApplication()->redirect($link, JText::_('JEV_LOGIN_TO_VIEWEVENT'));
                 return null;
             }
         }
         // See if a plugin can find our missing event - maybe on another menu item
         JPluginHelper::importPlugin('jevents');
         $dispatcher = JEventDispatcher::getInstance();
         $dispatcher->trigger('onMissingEvent', array(&$row, $rpid, $jevtype, $year, $month, $day, $uid));
         return null;
     }
 }
Exemplo n.º 7
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher =& JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '<span class="eventDay">%a</span>  <span class="eventDate">%d<span class="eventMonth">%b</span></span>';
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             } else {
                 $dispatcher->trigger('onPrepareContent', array(&$dayEvent, &$this->modparams, 0), true);
             }
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             $subparts = explode("}", $part);
                             //$part = str_replace("}","",$part);
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 $tempstr .= $temp;
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     $tempstr .= $temp;
                                 } else {
                                     $layout = "list";
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             $fieldNameArray = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             if (isset($fieldNameArray["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArray["values"])) {
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $tempstr .= call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
Exemplo n.º 8
0
 public static function notifyAuthorPublished($event)
 {
     JLoader::register('JEventsCategory', JEV_ADMINPATH . "/libraries/categoryClass.php");
     $db = JFactory::getDBO();
     $cat = new JEventsCategory($db);
     $cat->load($event->catid());
     $adminuser = $cat->getAdminUser();
     $adminEmail = $adminuser->email;
     $adminName = $adminuser->name;
     $config = new JConfig();
     $sitename = $config->sitename;
     $subject = JText::sprintf('JEV_NOTIFY_AUTHOR_SUBJECT', $sitename);
     $Itemid = JEVHelper::getItemid();
     // reload the event to get the reptition ids
     $evid = intval($event->ev_id());
     $dataModel = new JEventsDataModel("JEventsAdminDBModel");
     $queryModel = new JEventsDBModel($dataModel);
     $testevent = $queryModel->getEventById($evid, 1, "icaldb");
     // attach anonymous creator etc.
     JPluginHelper::importPlugin('jevents');
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('onDisplayCustomFields', array(&$event));
     $rp_id = $testevent->rp_id();
     list($year, $month, $day) = JEVHelper::getYMD();
     $uri = JURI::getInstance(JURI::base());
     if (JFactory::getApplication()->isAdmin()) {
         $root = $uri->toString(array('scheme', 'host', 'port', 'path'));
         $root = str_replace("/administrator", "", $root);
         $detaillink = '<a href="' . $root . 'index.php?option=' . JEV_COM_COMPONENT . '&task=icalrepeat.detail&rp_id=' . $evid . '&rp_id=' . $rp_id . '&Itemid=' . $Itemid . "&year={$year}&month={$month}&day={$day}" . '">' . $event->title() . '</a>' . "\n";
     } else {
         $root = $uri->toString(array('scheme', 'host', 'port'));
         $detaillink = '<a href="' . $root . JRoute::_('index.php?option=' . JEV_COM_COMPONENT . '&task=icalrepeat.detail&rp_id=' . $evid . '&rp_id=' . $rp_id . '&Itemid=' . $Itemid . "&year={$year}&month={$month}&day={$day}") . '">' . $event->title() . '</a>' . "\n";
     }
     $content = sprintf(JText::_('JEV_NOTIFY_AUTHOR_Message'), $detaillink, $sitename);
     $authorname = "";
     $authoremail = "";
     if ($event->created_by() > 0) {
         $author = JEVHelper::getUser($event->created_by());
         if (!$author) {
             return;
         }
         $authorname = $author->name;
         $authoremail = $author->email;
     } else {
         if (isset($event->authoremail) && $event->authoremail != "") {
             $authorname = $event->authorname;
             $authoremail = $event->authoremail;
         }
     }
     if ($authoremail == "") {
         return;
     }
     // mail function
     $mail = JFactory::getMailer();
     $mail->setSender(array(0 => $adminEmail, 1 => $adminName));
     $mail->addRecipient($authoremail);
     $mail->setSubject($subject);
     $mail->setBody($content);
     $mail->IsHTML(true);
     $mail->send();
 }