function created_by_alias() { if ($this->_created_by_alias != "") { return $this->_created_by_alias; } else { $creator = JEVHelper::getUser($this->_created_by); return $creator->name; } }
/** * 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; } }
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 }
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; }
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; }
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; } }
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 }
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(); }