function Defaultgetstartenddates($view) { $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $startdate = JRequest::getString("startdate", ""); $enddate = JRequest::getString("enddate", ""); if ($startdate == "") { if ($params->get("relative", "rel") == "abs") { $startdate = $params->get("absstart", ""); list($startyear, $startmonth, $startday) = explode("-", $startdate); } else { if ($params->get("relative", "rel") == "strtotime") { $value = $params->get("strstart", ""); $value = new JevDate(JevDate::strtotime($value)); $startdate = $value->toFormat("%Y-%m-%d"); } else { $value = $params->get("relstart", ""); $value = str_replace(",", " ", $value); $value = str_replace("y", "year", $value); $value = str_replace("d", "day", $value); $value = str_replace("w", "week", $value); $value = str_replace("m", "month", $value); $value = new JevDate($value); $startdate = $value->toFormat("%Y-%m-%d"); } } } if ($enddate == "") { if ($params->get("relative", "rel") == "abs") { $enddate = $params->get("absend", ""); } else { if ($params->get("relative", "rel") == "strtotime") { $value = $params->get("strend", ""); $value = new JevDate(JevDate::strtotime($value)); $enddate = $value->toFormat("%Y-%m-%d"); } else { $value = $params->get("relend", ""); $value = str_replace(",", " ", $value); $value = str_replace("y", "year", $value); $value = str_replace("d", "day", $value); $value = str_replace("w", "week", $value); $value = str_replace("m", "month", $value); $value = new JevDate($value); $enddate = $value->toFormat("%Y-%m-%d"); } } } if ($enddate < $startdate) { // default to 1 year when input dates are not valid! $value = new JevDate($startdate); $value->add(new DateInterval('P1Y')); $enddate = $value->toFormat("%Y-%m-%d"); } return array($startdate, $enddate); }
function eventOnDate($testDate, $multidayTreatment = 0) { if (!isset($this->_startday)) { $this->_startday = JevDate::mktime(0, 0, 0, $this->mup(), $this->dup(), $this->yup()); $this->_endday = JevDate::mktime(0, 0, 0, $this->mdn(), $this->ddn(), $this->ydn()); // if ends on midnight then testing day should ignore the second day since no one wants this event to show if ($this->hdn() + $this->mindn() + $this->sdn() == 0 && $this->_startday != $this->_endday) { $this->_endday -= 86400; } } if ($this->_startday <= $testDate && $this->_endday >= $testDate) { // if only show on first day if ($multidayTreatment == 2 && $testDate >= $this->_startday + 86400) { return false; } // don't show multiday suppressed events after the first day if multiday is not true if ($multidayTreatment == 0) { if (!$this->_multiday && $testDate >= $this->_startday + 86400) { return false; } } return true; } else { return false; } }
function DefaultdateFormattedDateRange($view) { $params = JComponentHelper::getParams(JEV_COM_COMPONENT); if ($params->get("daterangeformat", "") == "") { $return = JEventsHTML::getDateFormat($view->startyear, $view->startmonth, $view->startday, 1) . " - " . JEventsHTML::getDateFormat($view->endyear, $view->endmonth, $view->endday, 1); } else { $return = $params->get("daterangeformat", ""); $startmatches = array(); preg_match_all('|{START(.*?)}|', $return, $startmatches); if (count($startmatches) == 2 && count($startmatches[1]) == 1) { $replace = str_replace(array("(", ")"), "", $startmatches[1][0]); $datestp = JevDate::mktime(0, 0, 0, $view->startmonth, $view->startday, $view->startyear); $replace = JEV_CommonFunctions::jev_strftime($replace, $datestp); $return = str_replace($startmatches[0][0], $replace, $return); } $endmatches = array(); preg_match_all('|{END(.*?)}|', $return, $endmatches); if (count($endmatches) == 2 && count($endmatches[1]) == 1) { $replace = str_replace(array("(", ")"), "", $endmatches[1][0]); $datestp = JevDate::mktime(0, 0, 0, $view->endmonth, $view->endday, $view->endyear); $replace = JEV_CommonFunctions::jev_strftime($replace, $datestp); $return = str_replace($endmatches[0][0], $replace, $return); } //$return = $params->get("daterangeformat", ""); } return $return; }
function getAdjacentYear($year, $month, $day, $direction = 1) { $d1 = JevDate::mktime(0, 0, 0, $month, $day, $year + $direction); $day = JevDate::strftime("%d", $d1); $year = JevDate::strftime("%Y", $d1); $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $cfg = JEVConfig::getInstance(); if (method_exists("JEVHelper", "getMinYear")) { $earliestyear = JEVHelper::getMinYear(); $latestyear = JEVHelper::getMaxYear(); } else { $earliestyear = $params->get("com_earliestyear", 1970); $latestyear = $params->get("com_latestyear", 2150); } if ($year > $latestyear || $year < $earliestyear) { return false; } $month = JevDate::strftime("%m", $d1); $task = JRequest::getString('jevtask'); $Itemid = JEVHelper::getItemid(); if (isset($Itemid)) { $item = "&Itemid={$Itemid}"; } else { $item = ""; } return JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&task={$task}{$item}&year={$year}&month={$month}&day={$day}"); }
function listevents($tpl = null) { JEVHelper::componentStylesheet($this); $params =& JComponentHelper::getParams(JEV_COM_COMPONENT); $value = trim($params->get("relstart", "")); if ($value != "") { $value = str_replace(",", " ", $value); $value = str_replace("y", "year", $value); $value = str_replace("d", "day", $value); $value = str_replace("w", "week", $value); $value = str_replace("m", "month", $value); $value = new JevDate($value); $startdate = $value->toFormat("%Y-%m-%d"); list($startyear, $startmonth, $startday) = explode("-", $startdate); } else { $startyear = $params->get("com_earliestyear", 2008); $startdate = $startyear . "-01-01"; $startmonth = 1; $startday = 1; } if ($value != "") { $value = trim($params->get("relend", "")); $value = str_replace(",", " ", $value); $value = str_replace("y", "year", $value); $value = str_replace("d", "day", $value); $value = str_replace("w", "week", $value); $value = str_replace("m", "month", $value); $value = new JevDate($value); $enddate = $value->toFormat("%Y-%m-%d"); list($endyear, $endmonth, $endday) = explode("-", $enddate); } else { $endyear = $params->get("com_latestyear", 2020); $enddate = $endyear . "-12-31"; $endmonth = 12; $endday = 31; } $this->assign("startdate", $startdate); $this->assign("startyear", $startyear); $this->assign("startmonth", $startmonth); $this->assign("startday", $startday); $this->assign("enddate", $enddate); $this->assign("endyear", $endyear); $this->assign("endmonth", $endmonth); $this->assign("endday", $endday); // Note that using a $limit value of -1 the limit is ignored in the query $this->assign("data", $this->datamodel->getRangeData($startdate, $enddate, $this->limit, $this->limitstart)); }
/** * override store function to force rrule to save too! * * @param unknown_type $updateNulls */ function store($updateNulls = false) { $date = JevDate::getDate(); $this->modified = $date->toMySQL(); if (parent::store($updateNulls)) { // I also need to store custom data $dispatcher = JDispatcher::getInstance(); // just incase we don't have jevents plugins registered yet JPluginHelper::importPlugin("jevents"); $res = $dispatcher->trigger('onStoreCustomDetails', array(&$this)); } else { JError::raiseError(321, "Problem saving event " . $this->_db->getErrorMsg()); } return $this->evdet_id; }
function _createFilter($prefix = "") { if (!$this->filterField) { return ""; } // first time visit if (isset($this->filter_values[2]) && $this->filter_values[2] == 0) { $this->filter_values = array(); $this->filter_values[0] = 1; // default scenario is only events starting after 2 weeeks ago $fulldate = date('Y-m-d H:i:s', JevDate::strtotime("-2 weeks")); $this->filter_values[1] = substr($fulldate, 0, 10); $this->filter_values[2] = 1; return $this->dmap . ".startrepeat>='{$fulldate}'"; } else { if ($this->filter_values[0] == 0) { $this->filter_values[1] = ""; $this->_date = $this->filter_values[1]; } else { if ($this->filter_values[0] == -1 && $this->filter_values[1] == "") { $fulldate = date('Y-m-d H:i:s', JevDate::strtotime("+2 weeks")); $this->filter_values[1] = substr($fulldate, 0, 10); $this->_date = $this->filter_values[1]; } else { if ($this->filter_values[0] == 1 && $this->filter_values[1] == "") { $fulldate = date('Y-m-d H:i:s', JevDate::strtotime("-2 weeks")); $this->filter_values[1] = substr($fulldate, 0, 10); $this->_date = $this->filter_values[1]; } } } } $filter = ""; if ($this->_date != "" && $this->_onorbefore != 0) { $date = JevDate::strtotime($this->_date); $fulldate = date('Y-m-d H:i:s', $date); if ($this->_onorbefore > 0) { $date = $this->dmap . ".startrepeat>='{$fulldate}'"; } else { $date = $this->dmap . ".startrepeat<'{$fulldate}'"; } } else { $date = ""; } $filter = $date; return $filter; }
function editICalendar($icsid, $catid, $access = 0, $state = 1, $label = "") { $db =& JFactory::getDBO(); $temp = new iCalICSFile($db); $temp->_setup($icsid, $catid, $access, $state); $temp->filename = "_from_scratch_"; $temp->icaltype = 2; $temp->label = empty($label) ? 'Scratch-' . md5(JevDate::mktime()) : $label; $temp->srcURL = ""; $rawText = <<<RAWTEXT BEGIN:VCALENDAR PRODID:-//JEvents Project//JEvents Calendar 1.5.0//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:{$label} X-WR-TIMEZONE:Europe/London BEGIN:VTIMEZONE TZID:Europe/London X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZOFFSETFROM:+0000 TZOFFSETTO:+0100 TZNAME:BST DTSTART:19700329T010000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU END:DAYLIGHT BEGIN:STANDARD TZOFFSETFROM:+0100 TZOFFSETTO:+0000 TZNAME:GMT DTSTART:19701025T020000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU END:STANDARD END:VTIMEZONE END:VCALENDAR \t\t RAWTEXT; $temp->_icalInfo =& JEVHelper::iCalInstance("", $rawText); return $temp; }
function getAdjacentYear($year, $month, $day, $direction = 1) { $d1 = JevDate::mktime(0, 0, 0, $month, $day, $year + $direction); $day = JevDate::strftime("%d", $d1); $year = JevDate::strftime("%Y", $d1); $cfg =& JEVConfig::getInstance(); $earliestyear = $cfg->get('com_earliestyear'); $latestyear = $cfg->get('com_latestyear'); if ($year > $latestyear || $year < $earliestyear) { return false; } $month = JevDate::strftime("%m", $d1); $task = JRequest::getString('jevtask'); $Itemid = JEVHelper::getItemid(); if (isset($Itemid)) { $item = "&Itemid={$Itemid}"; } else { $item = ""; } return JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&task={$task}{$item}&year={$year}&month={$month}&day={$day}"); }
static function getEventStringArray($row) { $urlString['title'] = urlencode($row->title()); $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $tz = $params->get("icaltimezonelive", ""); if ($tz) { $urlString['dates'] = JevDate::strftime("%Y%m%dT%H%M%S", $row->getUnixStartTime()) . "/" . JevDate::strftime("%Y%m%dT%H%M%S", $row->getUnixEndTime()) . "&ctz=" . $tz; } else { $urlString['dates'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixStartTime()) . "/" . JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixEndTime()); } $urlString['st'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixStartTime()); $urlString['et'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixEndTime()); $urlString['duration'] = (int) $row->getUnixEndTime() - (int) $row->getUnixStartTime(); $urlString['location'] = urlencode(isset($row->_locationaddress) ? $row->_locationaddress : $row->location()); $urlString['sitename'] = urlencode(JFactory::getApplication()->get('sitename')); $urlString['siteurl'] = urlencode(JUri::root()); $urlString['rawdetails'] = urlencode($row->get('description')); $urlString['details'] = strip_tags($row->get('description')); if (JString::strlen($urlString['details']) > 100) { $urlString['details'] = JString::substr($urlString['details'], 0, 100) . ' ...'; } $urlString['details'] = urlencode($urlString['details']); return $urlString; }
/** * Gets the date in a specific format * * Returns a string formatted according to the given format. Month and weekday names and * other language dependent strings respect the current locale * * @deprecated Deprecated since 1.6, use JDate::format() instead. * * @param string The date format specification string (see {@link PHP_MANUAL#JevDate::strftime}) * @param boolean True to return the date string in the local time zone, false to return it in GMT. * @return string The date as a formatted string. * @since 1.5 */ public function toFormat($format = '%Y-%m-%d %H:%M:%S', $local = false) { // do not reset the timezone !! - this is needed for the weekdays // Set time zone to GMT as JevDate::strftime formats according locale setting. // date_default_timezone_set('GMT'); // Generate the timestamp. $time = (int) parent::format('U', true); // this requires php 5.3! //$time = $this->getTimeStamp(); // If the returned time should be local add the GMT offset. if ($local) { $time += $this->getOffsetFromGMT(); } // Manually modify the month and day strings in the format. if (strpos($format, '%a') !== false) { $format = str_replace('%a', $this->dayToString(date('w', $time), true), $format); } if (strpos($format, '%A') !== false) { $format = str_replace('%A', $this->dayToString(date('w', $time)), $format); } if (strpos($format, '%b') !== false) { $format = str_replace('%b', $this->monthToString(date('n', $time), true), $format); } if (strpos($format, '%B') !== false) { $format = str_replace('%B', $this->monthToString(date('n', $time)), $format); } // Generate the formatted string. $date = JevDate::strftime($format, $time); // reset the timezone !! date_default_timezone_set(self::$stz->getName()); return $date; }
function generateRRule($array) { //static $weekdayMap=array("SU"=>0,"MO"=>1,"TU"=>2,"WE"=>3,"TH"=>4,"FR"=>5,"SA"=>6); static $weekdayReverseMap = array("SU", "MO", "TU", "WE", "TH", "FR", "SA"); $interval = JArrayHelper::getValue($array, "rinterval", 1); $freq = JArrayHelper::getValue($array, "freq", "NONE"); if ($freq != "NONE") { $rrule = array(); $rrule["FREQ"] = $freq; $countuntil = JArrayHelper::getValue($array, "countuntil", "count"); if ($countuntil == "count") { $count = intval(JArrayHelper::getValue($array, "count", 1)); if ($count <= 0) { $count = 1; } $rrule["COUNT"] = $count; } else { $publish_down = JArrayHelper::getValue($array, "publish_down", "2006-12-12"); $until = JArrayHelper::getValue($array, "until", $publish_down); $rrule["UNTIL"] = JevDate::strtotime($until . " 00:00:00"); } $rrule["INTERVAL"] = $interval; } $whichby = JArrayHelper::getValue($array, "whichby", "bd"); switch ($whichby) { case "byd": $byd_direction = JArrayHelper::getValue($array, "byd_direction", "off") == "off" ? "+" : "-"; $byyearday = JArrayHelper::getValue($array, "byyearday", ""); $rrule["BYYEARDAY"] = $byd_direction . $byyearday; break; case "bm": $bm_direction = JArrayHelper::getValue($array, "bm_direction", "off") == "off" ? "+" : "-"; $bymonth = JArrayHelper::getValue($array, "bymonth", ""); $rrule["BYMONTH"] = $bymonth; break; case "bwn": $bwn_direction = JArrayHelper::getValue($array, "bwn_direction", "off") == "off" ? "+" : "-"; $byweekno = JArrayHelper::getValue($array, "byweekno", ""); $rrule["BYWEEKNO"] = $bwn_direction . $byweekno; break; case "bmd": $bmd_direction = JArrayHelper::getValue($array, "bmd_direction", "off") == "off" ? "+" : "-"; $bymonthday = JArrayHelper::getValue($array, "bymonthday", ""); $rrule["BYMONTHDAY"] = $bmd_direction . $bymonthday; break; case "bd": $bd_direction = JArrayHelper::getValue($array, "bd_direction", "off") == "off" ? "+" : "-"; $weekdays = JArrayHelper::getValue($array, "weekdays", array()); $weeknums = JArrayHelper::getValue($array, "weeknums", array()); $byday = ""; if (count($weeknums) == 0) { // special case for weekly repeats which don't specify eeek of a month foreach ($weekdays as $wd) { if (strlen($byday) > 0) { $byday .= ","; } $byday .= $weekdayReverseMap[$wd]; } } foreach ($weeknums as $week) { foreach ($weekdays as $wd) { if (strlen($byday) > 0) { $byday .= ","; } $byday .= $bd_direction . $week . $weekdayReverseMap[$wd]; } } $rrule["BYDAY"] = $byday; break; } return $rrule; }
</div> </div> <div class="jev_clear"></div> <div id='jev_maincal' class='jev_listview'> <?php $num_events = count($data['rows']); $chdate = ""; if ($num_events > 0) { $hasevents = true; for ($r = 0; $r < $num_events; $r++) { $row = $data['rows'][$r]; $event_day_month_year = $row->dup() . $row->mup() . $row->yup(); // Ensure we reflect multiday setting if (!$row->eventOnDate(JevDate::mktime(0, 0, 0, $row->mup(), $row->dup(), $row->yup()))) { continue; } $date = JEventsHTML::getDateFormat($row->yup(), $row->mup(), $row->dup(), 1); ?> <div class="jev_listrow"> <ul class='ev_ul'> <?php $listyle = 'style="border-color:' . $row->bgcolor() . ';"'; echo "<li class='ev_td_li' {$listyle}>\n"; if (!$this->loadedFromTemplate('icalevent.list_row', $row, 0)) { $this->viewEventRowNEW($row); echo " :: "; $this->viewEventCatRowNEW($row); }
function getAjaxCal($modid = 0, $month, $year) { // capture module id so that we can use it for ajax type navigation if ($modid != 0) { $this->_modid = $modid; } $user =& JFactory::getUser(); $db =& JFactory::getDBO(); static $isloaded_css = false; // this will get the viewname based on which classes have been implemented $cfg =& JEVConfig::getInstance(); $viewname = ucfirst($cfg->get('com_calViewName', "default")); $cfg =& JEVConfig::getInstance(); // get array $day_name = JEVHelper::getWeekdayLetter(null, 1); $day_name[0] = '<span class="sunday">' . $day_name[0] . '</span>'; $day_name[6] = '<span class="saturday">' . $day_name[6] . '</span>'; $content = ""; $mod = ""; if (isset($this->_modid) && $this->_modid > 0) { $mod = 'id="modid_' . $this->_modid . '" '; $content .= "<span id='testspan" . $this->_modid . "' style='display:none'></span>\n"; } $temptime = JevDate::mktime(12, 0, 0, $month, 15, $year); //$content .= $this->_displayCalendarMod($temptime,$this->com_starday, JText::_('JEV_THIS_MONTH'),$day_name, false); $thisDayOfMonth = date("j", $temptime); $daysLeftInMonth = date("t", $temptime) - date("j", $temptime) + 1; // calculate month offset from first of month $first_of_current_month = JevDate::strtotime(date('Y-m-01', $temptime)); $base_year = date("Y", $temptime); $base_month = date("m", $temptime); $basefirst_of_month = JevDate::mktime(0, 0, 0, $base_month, 1, $base_year); if ($this->disp_lastMonth && (!$this->disp_lastMonthDays || $thisDayOfMonth <= $this->disp_lastMonthDays)) { $content .= $this->_displayCalendarMod(JevDate::strtotime("-1 month", $first_of_current_month), $this->com_starday, JText::_('JEV_LAST_MONTH'), $day_name, $this->disp_lastMonth == 2, $first_of_current_month); } $content .= $this->_displayCalendarMod($temptime, $this->com_starday, JText::_('JEV_THIS_MONTH'), $day_name, false, $first_of_current_month); if ($this->disp_nextMonth && (!$this->disp_nextMonthDays || $daysLeftInMonth <= $this->disp_nextMonthDays)) { $content .= $this->_displayCalendarMod(JevDate::strtotime("+1 month", $first_of_current_month), $this->com_starday, JText::_('JEV_NEXT_MONTH'), $day_name, $this->disp_nextMonth == 2, $first_of_current_month); } return $content; }
/** * Support all JevDate::strftime() parameter for Window systems * * @param string $format * @param int $timestamp * @return string formated string */ function jev_strftime($format = '', $timestamp = null) { if (!$timestamp) { $timestamp = time(); } // Replace names by own translation to get rid of improper os system library if (strpos($format, '%a') !== false) { $format = str_replace('%a', JEVHelper::getShortDayName(date('w', $timestamp)), $format); } if (strpos($format, '%A') !== false) { $format = str_replace('%A', JEVHelper::getDayName(date('w', $timestamp)), $format); } if (strpos($format, '%b') !== false) { $format = str_replace('%b', JEVHelper::getShortMonthName(date('n', $timestamp)), $format); } if (strpos($format, '%B') !== false) { $format = str_replace('%B', JEVHelper::getMonthName(date('n', $timestamp)), $format); } if (JUtility::isWinOS()) { if (!class_exists('JEV_CompatWin')) { require_once dirname(__FILE__) . '/compatwin.php'; } return JEV_CompatWin::win_strftime($format, $timestamp); } else { return JevDate::strftime($format, $timestamp); } }
function edit() { // get the view $this->view =& $this->getView("icalevent", "html"); $cid = JRequest::getVar('cid', array(0)); JArrayHelper::toInteger($cid); if (is_array($cid) && count($cid) > 0) { $id = $cid[0]; } else { $id = 0; } // front end passes the id as evid if ($id == 0) { $id = JRequest::getInt("evid", 0); } if (!JEVHelper::isEventCreator()) { JError::raiseError(403, JText::_('ALERTNOTAUTH')); } $repeatId = 0; $db = JFactory::getDBO(); // iCal agid uses GUID or UUID as identifier if ($id > 0) { if ($repeatId == 0) { // this version gives us a repeat not an event so //$row = $this->queryModel->getEventById($id, true, "icaldb"); $vevent = $this->dataModel->queryModel->getVEventById($id); if (!$vevent) { $Itemid = JRequest::getInt("Itemid"); JFactory::getApplication()->redirect(JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&Itemid={$Itemid}", false), JText::_("JEV_SORRY_UPDATED")); } $row = new jIcalEventDB($vevent); $row->fixDtstart(); } else { $row = $this->queryModel->listEventsById($repeatId, true, "icaldb"); } if (!JEVHelper::canEditEvent($row)) { JError::raiseError(403, JText::_('ALERTNOTAUTH')); } } else { $vevent = new iCalEvent($db); $vevent->set("freq", "DAILY"); $vevent->set("description", ""); $vevent->set("summary", ""); list($year, $month, $day) = JEVHelper::getYMD(); $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $defaultstarttime = $params->get("defaultstarttime", "08:00"); $defaultendtime = $params->get("defaultendtime", "17:00"); list($starthour, $startmin) = explode(":", $defaultstarttime); list($endhour, $endmin) = explode(":", $defaultendtime); $vevent->set("dtstart", JevDate::mktime($starthour, $startmin, 0, $month, $day, $year)); $vevent->set("dtend", JevDate::mktime($endhour, $endmin, 0, $month, $day, $year)); $row = new jIcalEventDB($vevent); // TODO - move this to class!! // populate with meaningful initial values $row->starttime($defaultstarttime); $row->endtime($defaultendtime); } /* $db =& JFactory::getDBO(); // get list of groups $query = "SELECT id AS value, name AS text" . "\n FROM #__groups" . "\n ORDER BY id" ; $db->setQuery( $query ); $groups = $db->loadObjectList(); // build the html select list $glist = JHTML::_('select.genericlist', $groups, 'access', 'class="inputbox" size="1"', 'value', 'text', intval( $row->access() ) ); */ $glist = JEventsHTML::buildAccessSelect(intval($row->access()), 'class="inputbox" size="1"'); // get all the raw native calendars $nativeCals = $this->dataModel->queryModel->getNativeIcalendars(); // Strip this list down based on user permissions $jevuser =& JEVHelper::getAuthorisedUser(); if ($jevuser && $jevuser->calendars != "" && $jevuser->calendars != "all") { $cals = array_keys($nativeCals); $allowedcals = explode("|", $jevuser->calendars); foreach ($cals as $calid) { if (!in_array($calid, $allowedcals)) { unset($nativeCals[$calid]); } } } // Are we allowed to edit events within a URL based iCal $params = JComponentHelper::getParams(JEV_COM_COMPONENT); if ($params->get("allowedit", 0) && $row->icsid() > 0) { $calsql = 'SELECT * FROM #__jevents_icsfile WHERE ics_id=' . intval($row->icsid()); $db->setQuery($calsql); $cal = $db->loadObject(); if ($cal && $cal->icaltype == 0) { $nativeCals[$cal->ics_id] = $cal; $this->view->assign("offerlock", 1); } } $excats = "0"; if ($jevuser && $jevuser->categories != "" && $jevuser->categories != "all") { // Find which categories to exclude if (JVersion::isCompatible("1.6.0")) { $catsql = 'SELECT id FROM #__categories WHERE id NOT IN (' . str_replace("|", ",", $jevuser->categories) . ') AND extension="com_jevents"'; } else { $catsql = 'SELECT id FROM #__categories WHERE id NOT IN (' . str_replace("|", ",", $jevuser->categories) . ') AND section="com_jevents"'; } $db->setQuery($catsql); $excats = implode(",", $db->loadResultArray()); } // only offer a choice of native calendars if it exists! if (count($nativeCals) > 1) { $icalList = array(); $icalList[] = JHTML::_('select.option', '0', JText::_('JEV_EVENT_CHOOSE_ICAL'), 'ics_id', 'label'); $icalList = array_merge($icalList, $nativeCals); $clist = JHTML::_('select.genericlist', $icalList, 'ics_id', " onchange='preselectCategory(this);'", 'ics_id', 'label', $row->icsid()); $this->view->assign('clistChoice', true); $this->view->assign('defaultCat', 0); } else { if (count($nativeCals) == 0 || !is_array($nativeCals)) { JError::raiseWarning(870, JText::_('INVALID_CALENDAR_STRUCTURE')); } $icsid = $row->icsid() > 0 ? $row->icsid() : current($nativeCals)->ics_id; $clist = '<input type="hidden" name="ics_id" value="' . $icsid . '" />'; $this->view->assign('clistChoice', false); $params = JComponentHelper::getParams(JEV_COM_COMPONENT); if ($params->get("defaultcat", false)) { $this->view->assign('defaultCat', current($nativeCals)->catid); } else { $this->view->assign('defaultCat', 0); } } // Set the layout $this->view->setLayout('edit'); $this->view->assign('editCopy', $this->editCopy); $this->view->assign('id', $id); $this->view->assign('row', $row); $this->view->assign('excats', $excats); $this->view->assign('nativeCals', $nativeCals); $this->view->assign('clist', $clist); $this->view->assign('repeatId', $repeatId); $this->view->assign('glist', $glist); // only those who can publish globally can set priority field if (JEVHelper::isEventPublisher(true)) { $list = array(); for ($i = 0; $i < 10; $i++) { $list[] = JHTML::_('select.option', $i, $i, 'val', 'text'); } $priorities = JHTML::_('select.genericlist', $list, 'priority', "", 'val', 'text', $row->priority()); $this->view->assign('setPriority', true); $this->view->assign('priority', $priorities); } else { $this->view->assign('setPriority', false); } $this->view->assignRef('dataModel', $this->dataModel); // for Admin interface only $this->view->assign('with_unpublished_cat', JFactory::getApplication()->isAdmin()); $this->view->display(); }
function JEventsBuildRouteNew(&$query, $task) { $transtask = translatetask($task); $params = JComponentHelper::getParams("com_jevents"); // get a menu item based on Itemid or currently active $app = JFactory::getApplication(); $menu = $app->getMenu(); // we need a menu item. Either the one specified in the query, or the current active one if none specified if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); $menuItemGiven = false; } else { $menuItem = $menu->getItem($query['Itemid']); $menuItemGiven = true; } $cfg = JEVConfig::getInstance(); $segments = array(); if (count($query) == 2 && isset($query['Itemid']) && isset($query['option'])) { // special case where we do not need any information since its a menu item // as long as the task matches up! $menu = JFactory::getApplication()->getMenu(); $menuitem = $menu->getItem($query["Itemid"]); if (!is_null($menuitem) && (isset($menuitem->query["task"]) || isset($menuitem->query["view"]) && isset($menuitem->query["layout"]))) { if (isset($menuitem->query["task"]) && $task == $menuitem->query["task"]) { return $segments; } else { if (isset($menuitem->query["view"]) && isset($menuitem->query["layout"]) && $task == $menuitem->query["view"] . "." . $menuitem->query["layout"]) { return $segments; } else { $segments[] = $transtask; } } } } switch ($task) { case "year.listevents": case "month.calendar": case "week.listevents": case "day.listevents": case "cat.listevents": case "jevent.detail": case "icalevent.detail": case "icalrepeat.detail": case "search.form": case "search.results": case "admin.listevents": if (!in_array($transtask, $segments)) { $segments[] = $transtask; } $config = JFactory::getConfig(); $t_datenow = JEVHelper::getNow(); // if no date in the query then use TODAY not the calendar date $nowyear = JevDate::strftime('%Y', $t_datenow->toUnix(true)); $nowmonth = JevDate::strftime('%m', $t_datenow->toUnix(true)); $nowday = JevDate::strftime('%d', $t_datenow->toUnix(true)); if (isset($query['year'])) { $year = $query['year'] == "YYYYyyyy" ? "YYYYyyyy" : intval($query['year']); unset($query['year']); } else { $year = $nowyear; } if (isset($query['month'])) { $month = $query['month'] == "MMMMmmmm" ? "MMMMmmmm" : intval($query['month']); unset($query['month']); } else { $month = $nowmonth; } if (isset($query['day'])) { $day = intval($query['day']); unset($query['day']); } else { // if no date in the query then use TODAY not the calendar date $day = $nowday; } // for week data always go to the start of the week if ($task == "week.listevents" && is_int($month)) { $startday = $cfg->get('com_starday'); if (!$startday) { $startday = 0; } $date = mktime(5, 5, 5, $month, $day, $year); $currentday = strftime("%w", $date); if ($currentday > $startday) { $date -= ($currentday - $startday) * 86400; list($year, $month, $day) = explode("-", strftime("%Y-%m-%d", $date)); } else { if ($currentday < $startday) { $date -= (7 + $currentday - $startday) * 86400; list($year, $month, $day) = explode("-", strftime("%Y-%m-%d", $date)); } } } // only include the year in the date and list views if (in_array($task, array("year.listevents", "month.calendar", "week.listevents", "day.listevents"))) { $segments[] = $year; } // only include the month in the date and list views (excluding year) if (in_array($task, array("month.calendar", "week.listevents", "day.listevents"))) { $segments[] = $month; } // only include the day in the week and day views (excluding year and month) if (in_array($task, array("week.listevents", "day.listevents"))) { $segments[] = $day; } switch ($task) { case "jevent.detail": case "icalevent.detail": case "icalrepeat.detail": if (isset($query['jevtype'])) { unset($query['jevtype']); } if ($transtask != "") { if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } } break; default: break; } if (isset($query['catids']) && strlen($query['catids']) > 0) { $segments[] = $query['catids']; unset($query['catids']); } else { if ($transtask != "") { $segments[] = "-"; } } switch ($task) { case "icalrepeat.detail": if (isset($query['uid'])) { // Some remote UIDs have @ and other dodgy characters in them so encode them for safety //$segments[] = base64_encode($query['uid']); unset($query['uid']); } if (isset($query['title'])) { $segments[] = substr(JApplication::stringURLSafe($query['title']), 0, 150); unset($query['title']); } else { $segments[] = "-"; } if ($transtask == "") { if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } } break; default: break; } break; case "jevent.edit": case "icalevent.edit": case "icalevent.publish": case "icalevent.unpublish": case "icalevent.editcopy": case "icalrepeat.edit": case "jevent.delete": case "icalevent.delete": case "icalrepeat.delete": case "icalrepeat.deletefuture": $segments[] = $transtask; if (isset($query['jevtype'])) { unset($query['jevtype']); } if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } break; case "modlatest.rss": $segments[] = $transtask; // assume implicit feed document //unset($query['format']); // feed type if (isset($query['type'])) { $segments[] = $query['type']; unset($query['type']); } else { $segments[] = 'rss'; } // modid if (isset($query['modid'])) { $segments[] = $query['modid']; unset($query['modid']); } else { $segments[] = "0"; } break; case "icalrepeat.vcal": case "icalevent.vcal": $segments[] = $transtask; if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } if (isset($query['catids'])) { $segments[] = $query['catids']; unset($query['catids']); } else { $segments[] = "0"; } break; default: $segments[] = $transtask; $segments[] = "-"; break; } return $segments; }
function JEventsBuildRoute(&$query) { $cfg =& JEVConfig::getInstance(); $segments = array(); // sometimes the task is not set but view and layout are so tackle this! if (!isset($query['task']) && isset($query['view']) && isset($query['layout'])) { $query['task'] = $query['view'] . "." . $query['layout']; } // We don't need the view - its only used to manipulate parameters if (isset($query['view'])) { unset($query['view']); } if (isset($query['layout'])) { unset($query['layout']); } $task = false; $task = false; if (!isset($query['task'])) { if (isset($query["Itemid"])) { $menu =& JSite::getMenu(); $menuitem = $menu->getItem($query["Itemid"]); if (!is_null($menuitem) && isset($menuitem->query["task"])) { $task = $menuitem->query["task"]; return $segments; } else { if (!is_null($menuitem) && isset($menuitem->query["layout"]) && isset($menuitem->query["view"])) { $task = $menuitem->query["view"] . "." . $menuitem->query["layout"]; } } } if (!$task) { $task = 'month.calendar'; } } else { $task = $query['task']; unset($query['task']); } switch ($task) { case "year.listevents": case "month.calendar": case "week.listevents": case "day.listevents": case "cat.listevents": case "jevent.detail": case "icalevent.detail": case "icalrepeat.detail": case "search.form": case "search.results": case "admin.listevents": $segments[] = $task; $config =& JFactory::getConfig(); $t_datenow = JEVHelper::getNow(); // if no date in the query then use TODAY not the calendar date $nowyear = JevDate::strftime('%Y', $t_datenow->toUnix(true)); $nowmonth = JevDate::strftime('%m', $t_datenow->toUnix(true)); $nowday = JevDate::strftime('%d', $t_datenow->toUnix(true)); /* $year = intval( JRequest::getVar( 'year', $nowyear )); $month = intval( JRequest::getVar( 'month', $nowmonth )); $day = intval( JRequest::getVar( 'day', $nowday )); */ if (isset($query['year'])) { $segments[] = $query['year']; unset($query['year']); } else { // if no date in the query then use TODAY not the calendar date $segments[] = $nowyear; } if (isset($query['month'])) { $segments[] = $query['month']; unset($query['month']); } else { // if no date in the query then use TODAY not the calendar date $segments[] = $nowmonth; } if (isset($query['day'])) { $segments[] = $query['day']; unset($query['day']); } else { // if no date in the query then use TODAY not the calendar date $segments[] = $nowday; } switch ($task) { case "jevent.detail": case "icalevent.detail": case "icalrepeat.detail": if (isset($query['jevtype'])) { unset($query['jevtype']); } if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } /* // Can we drop the use of uid? if(isset($query['title'])) { $segments[] = JFilterOutput::stringURLSafe($query['title']); unset($query['title']); } else { $segments[] = "-"; } */ break; default: break; } if (isset($query['catids']) && strlen($query['catids']) > 0) { $segments[] = $query['catids']; unset($query['catids']); } else { $segments[] = "-"; } switch ($task) { case "icalrepeat.detail": if (isset($query['uid'])) { // Some remote UIDs have @ and other dodgy characters in them so encode them for safety //$segments[] = base64_encode($query['uid']); unset($query['uid']); } if (isset($query['title'])) { $segments[] = substr(JFilterOutput::stringURLSafe($query['title']), 0, 150); unset($query['title']); } else { $segments[] = "-"; } break; default: break; } break; case "jevent.edit": case "icalevent.edit": case "icalevent.publish": case "icalevent.unpublish": case "icalevent.editcopy": case "icalrepeat.edit": case "jevent.delete": case "icalevent.delete": case "icalrepeat.delete": case "icalrepeat.deletefuture": $segments[] = $task; if (isset($query['jevtype'])) { unset($query['jevtype']); } if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } break; case "modlatest.rss": $segments[] = $task; // assume implicit feed document //unset($query['format']); // feed type if (isset($query['type'])) { $segments[] = $query['type']; unset($query['type']); } else { $segments[] = 'rss'; } // modid if (isset($query['modid'])) { $segments[] = $query['modid']; unset($query['modid']); } else { $segments[] = "0"; } break; case "icalrepeat.vcal": case "icalevent.vcal": $segments[] = $task; if (isset($query['evid'])) { $segments[] = $query['evid']; unset($query['evid']); } else { $segments[] = "0"; } if (isset($query['catids'])) { $segments[] = $query['catids']; unset($query['catids']); } else { $segments[] = "0"; } break; default: $segments[] = $task; $segments[] = "-"; break; } return $segments; }
/** * Search method * * The sql must return the following fields that are used in a common display * routine: href, title, section, created, text, browsernav * @param string Target search string * @param string matching option, exact|any|all * @param string ordering option, newest|oldest|popular|alpha|category */ function onSearch($text, $phrase = '', $ordering = '', $areas = null) { $db = JFactory::getDBO(); $user = JFactory::getUser(); $groups = version_compare(JVERSION, '1.6.0', '>=') ? implode(',', $user->getAuthorisedViewLevels()) : false; $limit = version_compare(JVERSION, '1.6.0', '>=') ? $this->params->get('search_limit', 50) : $this->_params->def('search_limit', 50); $dateformat = version_compare(JVERSION, '1.6.0', ">=") ? $this->params->get('date_format', "%d %B %Y") : $this->_params->def('date_format', "%d %B %Y"); $allLanguages = $this->params->get('all_language_search', true); $limit = "\n LIMIT {$limit}"; $text = trim($text); if ($text == '') { return array(); } if (is_array($areas)) { $test = array_keys(plgSearchEventsSearchAreas()); if (!array_intersect($areas, array_keys(plgSearchEventsSearchAreas()))) { return array(); } } $params = JComponentHelper::getParams("com_jevents"); // See http://www.php.net/manual/en/timezones.php $tz = $params->get("icaltimezonelive", ""); if ($tz != "" && is_callable("date_default_timezone_set")) { $timezone = date_default_timezone_get(); date_default_timezone_set($tz); $this->jeventstimezone = $timezone; } $search_ical_attributes = array('det.summary', 'det.description', 'det.location', 'det.contact', 'det.extra_info'); // process the new plugins // get extra data and conditionality from plugins $extrawhere = array(); $extrajoin = array(); $needsgroup = false; $filterarray = array("published"); $dataModel = new JEventsDataModel(); $compparams = JComponentHelper::getParams("com_jevents"); if ($compparams->get("multicategory", 0)) { $catwhere = "\n AND catmap.catid IN(" . $dataModel->accessibleCategoryList(null, null, null, $allLanguages) . ")"; $catjoin = "\n LEFT JOIN #__jevents_catmap as catmap ON catmap.evid = rpt.eventid"; $catjoin .= "\n LEFT JOIN #__categories AS b ON catmap.catid = b.id"; } else { $catwhere = "\n AND ev.catid IN(" . $dataModel->accessibleCategoryList(null, null, null, $allLanguages) . ")"; $catjoin = "\n INNER JOIN #__categories AS b ON b.id = ev.catid"; } // 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(); JPluginHelper::importPlugin('jevents'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onListIcalEvents', array(&$extrafields, &$extratables, &$extrawhere, &$extrajoin, &$needsgroup)); $extrajoin = count($extrajoin) ? " \n LEFT JOIN " . implode(" \n LEFT JOIN ", $extrajoin) : ''; $extrawhere = count($extrawhere) ? ' AND ' . implode(' AND ', $extrawhere) : ''; $extrasearchfields = array(); $dispatcher->trigger('onSearchEvents', array(&$extrasearchfields, &$extrajoin, &$needsgroup)); $wheres = array(); $wheres_ical = array(); switch ($phrase) { case 'exact': $text = $db->Quote('%' . $db->escape($text, true) . '%', false); // ical $wheres2 = array(); foreach ($search_ical_attributes as $search_item) { $wheres2[] = "LOWER({$search_item}) LIKE " . $text; } $where_ical = '(' . implode(') OR (', $wheres2) . ')'; break; case 'all': case 'any': default: $words = explode(' ', $text); $text = $db->Quote('%' . $db->escape($text, true) . '%', false); // ical $wheres = array(); foreach ($words as $word) { $word = $db->Quote('%' . $db->escape($word) . '%', false); $wheres2 = array(); foreach ($search_ical_attributes as $search_item) { $wheres2[] = "LOWER({$search_item}) LIKE " . $word; } $wheres[] = implode(' OR ', $wheres2); } $where_ical = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $wheres) . ')'; break; } if (count($extrasearchfields) > 0) { $extraor = implode(" OR ", $extrasearchfields); $extraor = " OR " . $extraor; // replace the ### placeholder with the keyword // $text is already exscaped above $extraor = str_replace("###", $text, $extraor); $where_ical .= $extraor; } // some of the where statements may already be escaped $where_ical = str_replace("%'%'", "%'", $where_ical); $where_ical = str_replace("''", "'", $where_ical); $where_ical = str_replace("'%'%", "'%", $where_ical); $morder = ''; $morder_ical = ''; switch ($ordering) { case 'oldest': $order = 'a.created ASC'; $order_ical = 'det.created ASC'; break; case 'popular': $order = 'a.hits DESC'; $order_ical = 'det.created ASC'; // no hit field available break; case 'alpha': $order = 'a.title ASC'; $order_ical = 'det.summary ASC'; break; case 'category': $order = 'b.title ASC, a.title ASC'; $morder = 'a.title ASC'; $order_ical = 'b.title ASC, det.summary ASC'; $morder_ical = 'det.summary ASC'; break; case 'newest': default: $order = 'a.created DESC'; $order_ical = 'det.created DESC'; break; } $eventstitle = JText::_("Events Calendar"); // Now Search Icals $display2 = array(); foreach ($search_ical_attributes as $search_ical_attribute) { $display2[] = "{$search_ical_attribute}"; } $display = 'CONCAT(' . implode(", ' ', ", $display2) . ')'; $query = "SELECT det.evdet_id, det.summary as title," . "\n ev.created as created," . "\n {$display} as text," . "\n CONCAT('{$eventstitle}','/',det.summary) AS section," . "\n CONCAT('index.php?option=com_jevents&task=icalrepeat.detail&evid=',min(rpt.rp_id)) AS href," . "\n '2' AS browsernav ," . "\n rpt.startrepeat, rpt.rp_id " . "\n FROM (#__jevents_vevent as ev)" . "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . $catjoin . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id = ev.icsid" . $extrajoin . "\n WHERE ({$where_ical})" . "\n AND icsf.state = 1" . "\n AND icsf.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <= ' . $user->gid) . "\n AND ev.state = 1" . "\n AND ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <= ' . $user->gid) . "\n AND b.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <= ' . $user->gid) . "\n AND b.published = '1'" . $extrawhere . $catwhere . "\n GROUP BY det.evdet_id" . "\n ORDER BY " . ($morder_ical ? $morder_ical : $order_ical) . $limit; $db->setQuery($query); $list_ical = $db->loadObjectList('evdet_id'); jimport('joomla.utilities.date'); if ($list_ical) { foreach ($list_ical as $id => $item) { $user = JFactory::getUser(); $query = "SELECT ev.*, ev.state as published, rpt.*, rr.*, det.*, ev.created as created, ex_id, exception_type " . "\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_vevent as ev" . "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_exception as ex ON det.evdet_id = ex.eventdetail_id" . "\n WHERE ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <= ' . $user->gid) . "\n AND det.evdet_id = {$id}" . "\n ORDER BY rpt.startrepeat ASC limit 1"; $db->setQuery($query); $row = $db->loadObject(); if (!$row) { continue; } $event = new jIcalEventRepeat($row); // only get the next repeat IF its not an exception if (is_null($row->ex_id)) { $event = $event->getNextRepeat(); } $startdate = new JevDate(strtotime($event->_startrepeat)); $item->title = $item->title . " (" . $startdate->toFormat($dateformat) . ")"; $item->startrepeat = $event->_startrepeat; $myitemid = $this->params->get("target_itemid", 0); if ($myitemid == 0) { // I must find the itemid that allows this event to be shown $catidsOut = $modcatids = $catidList = $modparams = $showall = ""; // Use the plugin params to ensure menu item is picked up //$modparams = new JRegistry($this->_plugin->params); $modparams = new JRegistry(null); // pretend to have category restriction $modparams->set("catid0", $row->catid); $modparams->set("ignorecatfilter", 1); $myitemid = findAppropriateMenuID($catidsOut, $modcatids, $catidList, $modparams->toObject(), $showall); } $item->href = $event->viewDetailLink($event->yup(), $event->mup(), $event->dup(), false, $myitemid); $link = $item->href; $list_ical[$id] = $item; } } // Must reset the timezone back!! if ($tz && is_callable("date_default_timezone_set")) { date_default_timezone_set($timezone); } return $list_ical; }
function _deleteFuture() { $cid = JRequest::getVar('cid', array(0)); if (!is_array($cid)) { $cid = array(intval($cid)); } JArrayHelper::toInteger($cid); $db = JFactory::getDBO(); foreach ($cid as $id) { // I should be able to do this in one operation but that can come later $event = $this->queryModel->listEventsById(intval($id), 1, "icaldb"); if (!JEVHelper::canDeleteEvent($event)) { throw new Exception(JText::_('ALERTNOTAUTH'), 403); return false; } $query = "SELECT * FROM #__jevents_repetition WHERE rp_id={$id}"; $db->setQuery($query); $repeatdata = null; $repeatdata = $db->loadObject(); if (is_null($repeatdata)) { throw new Exception(JText::_('NO_SUCH_EVENT'), 4777); return; } $query = "SELECT detail_id FROM #__jevents_vevent WHERE ev_id={$repeatdata->eventid}"; $db->setQuery($query); $eventdetailid = $db->loadResult(); // Find detail ids for future repetitions that don't match the global event detail $query = "SELECT eventdetail_id FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "' AND eventdetail_id<>" . $eventdetailid; $db->setQuery($query); $detailids = $db->loadColumn(); // Find repeat ids future repetitions $query = "SELECT rp_id FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "'"; $db->setQuery($query); $rp_ids = $db->loadColumn(); foreach ($rp_ids as $rp_id) { // May want to send notification messages etc. $dispatcher = JDispatcher::getInstance(); // just incase we don't have jevents plugins registered yet JPluginHelper::importPlugin("jevents"); $res = $dispatcher->trigger('onDeleteEventRepeat', $rp_id); } // Change the underlying event repeat rule details !! $query = "SELECT * FROM #__jevents_rrule WHERE eventid={$repeatdata->eventid}"; $db->setQuery($query); $this->rrule = null; $this->rrule = $db->loadObject(); $this->rrule = iCalRRule::iCalRRuleFromDB(get_object_vars($this->rrule)); if (intval($this->rrule->until) > 0) { // Find latest matching repetition $query = "SELECT max(startrepeat) FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat<'" . $repeatdata->startrepeat . "'"; $db->setQuery($query); $lastrepeat = $db->loadResult(); $this->rrule->until = JevDate::strtotime($lastrepeat); } else { // Find latest matching repetition $query = "SELECT count(startrepeat) FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat<'" . $repeatdata->startrepeat . "'"; $db->setQuery($query); $countrepeat = $db->loadResult(); $this->rrule->count = $countrepeat; } $this->rrule->store(); if (!is_null($detailids) && count($detailids) > 0) { $query = "DELETE FROM #__jevents_vevdetail WHERE evdet_id IN (" . implode(",", $detailids) . ")"; $db->setQuery($query); $db->query(); // I also need to clean out associated custom data $dispatcher = JDispatcher::getInstance(); // just incase we don't have jevents plugins registered yet JPluginHelper::importPlugin("jevents"); $res = $dispatcher->trigger('onDeleteEventDetails', array(implode(",", $detailids))); } // setup exception data foreach ($rp_ids as $rp_id) { $query = "SELECT * FROM #__jevents_repetition WHERE rp_id={$rp_id}"; $db->setQuery($query); $data = null; $data = $db->loadObject(); $exception = iCalException::loadByRepeatId($rp_id); if (!$exception) { $exception = new iCalException($db); $exception->bind(get_object_vars($data)); } $exception->exception_type = 0; // deleted $exception->store(); } $query = "DELETE FROM #__jevents_repetition WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "'"; $db->setQuery($query); $db->query(); // Also clear out defunct exceptions $query = "DELETE FROM #__jevents_exception WHERE eventid=" . $repeatdata->eventid . " AND startrepeat>='" . $repeatdata->startrepeat . "' and exception_type=1 "; $db->setQuery($query); $db->query(); } }
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 }
public static function getDateFormat($year, $month, $day, $type) { // Transform to translation strings if (empty($year)) { $year = 0; } if (empty($month)) { $month = 0; } if (empty($day)) { $day = 1; } static $format_type; if (!isset($format_type)) { $cfg = JEVConfig::getInstance(); $format_type = $cfg->get('com_dateformat'); } $datestp = JevDate::mktime(0, 0, 0, $month, $day, $year); // if date format is from langauge file then do this first if ($format_type == 3 && is_numeric($type)) { return JEV_CommonFunctions::jev_strftime(JText::_("DATE_FORMAT_" . $type), $datestp); } switch ($type) { case '0': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%A %d %B %Y", $datestp); // Fr style : Monday 03 Juillet 2003 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%A, %B %d, %Y", $datestp); // Us style : Monday, July 03, 2003 } else { //return JevDate::strftime("%A, %e. %B %Y",$datestp); // %e not supported by windows return sprintf(JEV_CommonFunctions::jev_strftime("%A, %%s. %B %Y", $datestp), intval(JEV_CommonFunctions::jev_strftime('%d', $datestp))); // De style : Montag, 3. Juli 2003 } break; case '1': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%d %B %Y", $datestp); // Fr style : 23 Juillet 2003 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%B %d, %Y", $datestp); // Us style : July 23, 2003 } else { return JEV_CommonFunctions::jev_strftime("%d. %B %Y", $datestp); // De style : 23. Juli 2003 } break; case '2': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%d %B", $datestp); // Fr style : 23 Juillet } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%B %d", $datestp); // Us style : Juillet 23 } else { return JEV_CommonFunctions::jev_strftime("%d. %B", $datestp); // De style : 23. Juli } break; case '3': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%B %Y", $datestp); // Fr style : Juillet 2003 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%B, %Y", $datestp); // Us style : Juillet, 2003 } else { return JEV_CommonFunctions::jev_strftime("%B %Y", $datestp); // De style : Juli 2003 } break; case '4': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%d/%m/%Y", $datestp); // Fr style : 23/07/2003 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%m/%d/%Y", $datestp); // Us style : 07/23/2003 } else { return JEV_CommonFunctions::jev_strftime("%d.%m.%Y", $datestp); // De style : 23.07.2003 } break; case '5': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%d/%m", $datestp); // Fr style : 23/07 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%m/%d", $datestp); // Us style : 07/23 } else { return JEV_CommonFunctions::jev_strftime("%d.%m.", $datestp); // De style : 23.07. } break; case '6': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp); // Fr style : 07/2003 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp); // Us style : 07/2003 } else { return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp); // De style : 07/2003 } break; case '7': if ($format_type == 0) { return JEV_CommonFunctions::jev_strftime("%A, %d", $datestp); // Fr style : Monday 23 } elseif ($format_type == 1) { return JEV_CommonFunctions::jev_strftime("%A, %d", $datestp); // Us style : Monday, 23 } else { return JEV_CommonFunctions::jev_strftime("%A, %d.", $datestp); // De style : Montag, 23. } break; default: // in this case $type is a format! return JEV_CommonFunctions::jev_strftime($type, $datestp); break; } return $newdate; }
/** * iCal spec represents date in ISO 8601 format followed by "T" then the time * a "Z at the end means the time is UTC and not local time zone * * TODO make sure if time is UTC we take account of system time offset properly * */ function unixTime($ical_date, $tz = false) { jimport("joomla.utilities.date"); static $offset = null; if (is_null($offset)) { $config =& JFactory::getConfig(); $offset = $config->getValue('config.offset', 0); } if (!is_numeric($ical_date)) { $t = JevDate::strtotime($ical_date); if (JString::strpos($ical_date, "Z") > 0) { if (is_callable("date_default_timezone_set")) { $timezone = date_default_timezone_get(); // See http://www.php.net/manual/en/timezones.php $params = JComponentHelper::getParams(JEV_COM_COMPONENT); // server offset tiemzone if ($params->get("icaltimezone", "") != "") { date_default_timezone_set($params->get("icaltimezone", "")); } // server offset PARAMS $serveroffset1 = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600; // server offset SERVER date_default_timezone_set($timezone); $serveroffset2 = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600; $t = new JevDate($ical_date, $serveroffset1 - $serveroffset2); //$t = new JevDate($ical_date ); date_default_timezone_set($timezone); echo "icaldate = " . $ical_date . " imported date=" . $t->toMySQL() . "<br/>"; } else { // Summer Time adjustment list($y, $m, $d, $h, $min, $s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S', $t)); $dst = (JevDate::mktime($h, $min, $s, $m, $d, $y, 0) - JevDate::mktime($h, $min, $s, $m, $d, $y, -1)) / 3600; // server offset including DST $serveroffset = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600; $serveroffset += $dst; $t = new JevDate($ical_date, -($serveroffset + $offset)); } /* echo "<h3>SET TIMEZONE</h3>"; $timezone= date_default_timezone_get(); date_default_timezone_set('America/New_York'); $tempIcal = "20091020T163000Z"; echo $tempIcal."<br/>"; $temp = JevDate::strtotime($tempIcal); list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp)); echo "$y,$m,$d,$h,$min,$s<br/>"; $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600; $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600; echo " dst=".$dst." serverforoffset=".$so."<br/>"; $so += $dst; $t = new JevDate($tempIcal); echo $t->toMySQL()."<br><br/>"; $tempIcal = "20091029T163000Z"; echo $tempIcal."<br/>"; $temp = JevDate::strtotime($tempIcal); list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp)); echo "$y,$m,$d,$h,$min,$s<br/>"; $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600; $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600; echo " dst=".$dst." serverforoffset=".$so."<br/>"; $so += $dst; $t = new JevDate($tempIcal ); echo $t->toMySQL()."<br><br/>"; $tempIcal = "20091103T163000Z"; echo $tempIcal."<br/>"; $temp = JevDate::strtotime($tempIcal); list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp)); echo "$y,$m,$d,$h,$min,$s<br/>"; $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600; $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600; echo " dst=".$dst." serverforoffset=".$so."<br/>"; $so += $dst; $t = new JevDate($tempIcal); echo $t->toMySQL()."<br>"; */ } else { if ($tz != false && $tz != "") { // really should use the timezone of the inputted date $tz = new DateTimeZone($tz); $t = new JevDate($ical_date, $tz); echo "icaldate = " . $ical_date . " imported date=" . $t->toMySQL() . "<br/>"; } else { $compparams = JComponentHelper::getParams(JEV_COM_COMPONENT); $jtz = $compparams->get("icaltimezonelive", ""); if ($jtz) { $t = new JevDate($ical_date, $jtz); } else { $t = new JevDate($ical_date); } } } //$result = $t->toMySQL(); $result = $t->toUnix(); return $result; } $isUTC = false; if (JString::strpos($ical_date, "Z") !== false) { $isUTC = true; } // strip "T" and "Z" from the string $ical_date = str_replace('T', '', $ical_date); $ical_date = str_replace('Z', '', $ical_date); // split it out intyo YYYY MM DD HH MM SS preg_match("#([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})#", $ical_date, $date); list($temp, $y, $m, $d, $h, $min, $s) = $date; if (!$min) { $min = 0; } if (!$h) { $h = 0; } if (!$d) { $d = 0; } if (!$s) { $s = 0; } // Trap unix dated beofre 1970 $y = max($y, 1970); if ($isUTC) { $t = gmJevDate::mktime($h, $min, $s, $m, $d, $y) + 3600 * $offset; $result = JevDate::strtotime(gmdate('Y-m-d H:i:s', $t)); } else { $result = JevDate::mktime($h, $min, $s, $m, $d, $y); } // double check!! //list($y1,$m1,$d1,$h1,$min1,$s1)=explode(":",JevDate::strftime('%Y:%m:%d:%H:%M:%S',$result)); return $result; }
// UTC! // Change timezone to UTC $current_timezone = date_default_timezone_get(); date_default_timezone_set("UTC"); // Do not use JevDate version since this sets timezone to config value! $chstart = strftime("%Y%m%dT%H%M%SZ", $chstart); $chend = strftime("%Y%m%dT%H%M%SZ", $chend); $stamptime = strftime("%Y%m%dT%H%M%SZ", time()); $originalstart = strftime("%Y%m%dT%H%M%SZ", $originalstart); // Change back date_default_timezone_set($current_timezone); } else { $chstart = JevDate::strftime("%Y%m%dT%H%M%S", $chstart); $chend = JevDate::strftime("%Y%m%dT%H%M%S", $chend); $stamptime = JevDate::strftime("%Y%m%dT%H%M%S", time()); $originalstart = JevDate::strftime("%Y%m%dT%H%M%S", $originalstart); } $html .= "DTSTAMP{$tzid}:" . $stamptime . "\r\n"; $html .= "DTSTART{$tzid}:" . $chstart . "\r\n"; $html .= "DTEND{$tzid}:" . $chend . "\r\n"; $html .= "RECURRENCE-ID{$tzid}:" . $originalstart . "\r\n"; $html .= "SEQUENCE:" . $a->_sequence . "\r\n"; $html .= "TRANSP:OPAQUE\r\n"; $html .= "END:VEVENT\r\n"; } } } } $html .= "END:VCALENDAR"; // clear out any rubbish @ob_end_clean();
/** * Get week number according ISO 8601 * * @static * @param int $date date * @return int weeknumber */ function _getWeekNumberISO8601($date) { $thursday = JEV_CompatWin::_getThursdayOfWeek($date); $thursday_Y = JevDate::strftime('%Y', $thursday); $first_th = JEV_CompatWin::_getThursdayOfWeek(JevDate::strtotime($thursday_Y . '-01-04')); return (JevDate::strftime('%j', $thursday) - JevDate::strftime('%j', $first_th)) / 7 + 1; }
function _displayCalendarMod($time, $startday, $linkString, &$day_name, $monthMustHaveEvent = false, $basedate = false) { $db = JFactory::getDBO(); $cfg = JEVConfig::getInstance(); $compname = JEV_COM_COMPONENT; $cal_day = date("d", $time); //$cal_year=date("Y",$time); //$cal_month=date("m",$time); //list($cal_year,$cal_month,$cal_day) = JEVHelper::getYMD(); if (!$basedate) { $basedate = $time; } $base_year = date("Y", $basedate); $base_month = date("m", $basedate); $basefirst_of_month = JevDate::mktime(0, 0, 0, $base_month, 1, $base_year); $requestYear = JRequest::getInt("year", 0); $requestMonth = JRequest::getInt("month", 0); // special case when site link set the dates for the mini-calendar in the URL but not in the ajax request if ($requestMonth && $requestYear && JRequest::getString("task", "") != "modcal.ajax" && $this->modparams->get("minical_usedate", 0)) { $requestDay = JRequest::getInt("day", 1); $requestTime = JevDate::mktime(0, 0, 0, $requestMonth, $requestDay, $requestYear); if ($time - $basedate > 100000) { $requestTime = JevDate::strtotime("+1 month", $requestTime); } else { if ($time - $basedate < -100000) { $requestTime = JevDate::strtotime("-1 month", $requestTime); } } $cal_year = date("Y", $requestTime); $cal_month = date("m", $requestTime); $base_year = $requestYear; $base_month = $requestMonth; $basefirst_of_month = JevDate::mktime(0, 0, 0, $requestMonth, $requestDay, $requestYear); } else { $cal_year = date("Y", $time); $cal_month = date("m", $time); } $base_prev_month = $base_month - 1; $base_next_month = $base_month + 1; $base_next_month_year = $base_year; $base_prev_month_year = $base_year; if ($base_prev_month == 0) { $base_prev_month = 12; $base_prev_month_year -= 1; } if ($base_next_month == 13) { $base_next_month = 1; $base_next_month_year += 1; } $reg = JFactory::getConfig(); $reg->set("jev.modparams", $this->modparams); if ($this->modparams->get("showtooltips", 0)) { $data = $this->datamodel->getCalendarData($cal_year, $cal_month, 1, false, false); $this->hasTooltips = true; } else { $data = $this->datamodel->getCalendarData($cal_year, $cal_month, 1, true, $this->modparams->get("noeventcheck", 0)); } $reg->set("jev.modparams", false); $width = $this->modparams->get("mod_cal_width", "135px"); $height = $this->modparams->get("mod_cal_height", "auto"); $rowheight = $this->modparams->get("mod_cal_rowheight", "auto"); $month_name = JEVHelper::getMonthName($cal_month); $to_day = date("Y-m-d", $this->timeWithOffset); $today = JevDate::mktime(0, 0, 0, $cal_month, $cal_day, $cal_year); $cal_prev_month = $cal_month - 1; $cal_next_month = $cal_month + 1; $cal_next_month_year = $cal_year; $cal_prev_month_year = $cal_year; // additional EBS if ($cal_prev_month == 0) { $cal_prev_month = 12; $cal_prev_month_year -= 1; } if ($cal_next_month == 13) { $cal_next_month = 1; $cal_next_month_year += 1; } $viewname = $this->getTheme(); $viewpath = JURI::root(true) . "/components/{$compname}/views/" . $viewname . "/assets"; $viewimages = $viewpath . "/images"; $linkpref = "index.php?option={$compname}&Itemid=" . $this->myItemid . $this->cat . "&task="; /* $linkprevious = $linkpref."month.calendar&day=$cal_day&month=$cal_prev_month&year=$cal_prev_month_year"; $linkprevious = JRoute::_($linkprevious); $linkprevious = $this->htmlLinkCloaking($linkprevious, '<img border="0" title="' . JText::_("JEV_PREVIOUSMONTH") . '" alt="' . JText::_("JEV_PREVIOUSMONTH") . '" src="'.$viewimages.'/mini_arrowleft.gif"/>' ); */ $jev_component_name = JEV_COM_COMPONENT; $this->_navigationJS($this->_modid); $scriptlinks = ""; if ($this->minical_prevmonth) { $linkprevious = htmlentities(JURI::base() . "index.php?option={$jev_component_name}&task=modcal.ajax&day=1&month={$base_prev_month}&year={$base_prev_month_year}&modid={$this->_modid}&tmpl=component" . $this->cat); $scriptlinks .= "linkprevious = '" . $linkprevious . "';\n"; $linkprevious = '<img border="0" title="' . JText::_("JEV_PREVIOUSMONTH") . '" alt="' . JText::_("JEV_LAST_MONTH") . '" class="mod_events_link" src="' . $viewimages . '/mini_arrowleft.gif" onmousedown="callNavigation(\'' . $linkprevious . '\');" />'; } else { $linkprevious = ""; } if ($this->minical_actmonth == 1) { $linkcurrent = $linkpref . "month.calendar&day={$cal_day}&month={$cal_month}&year={$cal_year}"; $linkcurrent = JRoute::_($linkcurrent); $linkcurrent = $this->htmlLinkCloaking($linkcurrent, $month_name . " " . $cal_year, array("style" => "text-decoration:none;color:inherit;")); } elseif ($this->minical_actmonth == 2) { $linkcurrent = $month_name . " " . $cal_year; } else { $linkcurrent = ""; } /* $linknext = $linkpref."month.calendar&day=$cal_day&month=$cal_next_month&year=$cal_next_month_year"; $linknext = JRoute::_($linknext); $linknext = $this->htmlLinkCloaking($linknext, '<img border="0" title="' . JText::_("JEV_NEXT_MONTH") . '" alt="' . JText::_("JEV_NEXT_MONTH") . '" src="'.$viewimages.'/mini_arrowright.gif"/>' ); */ $this->_navigationJS($this->_modid); if ($this->minical_nextmonth) { $linknext = htmlentities(JURI::base() . "index.php?option={$jev_component_name}&task=modcal.ajax&day=1&month={$base_next_month}&year={$base_next_month_year}&modid={$this->_modid}&tmpl=component" . $this->cat); $scriptlinks .= "linknext = '" . $linknext . "';\n"; $linknext = '<img border="0" title="' . JText::_("JEV_NEXT_MONTH") . '" alt="' . JText::_("JEV_NEXT_MONTH") . '" class="mod_events_link" src="' . $viewimages . '/mini_arrowright.gif" onmousedown="callNavigation(\'' . $linknext . '\');" />'; } else { $linknext = ""; } $content = <<<START <div id="extcal_minical"> \t<table cellspacing="1" cellpadding="0" style="width:{$width}; text-align:center;border: 1px solid rgb(190, 194, 195); background-color: rgb(255, 255, 255);"> \t\t<tr> \t\t\t<td style="vertical-align: top;"> START; if ($this->minical_showlink) { $content .= <<<START \t\t\t\t<table style="width:{$width};" cellspacing="0" cellpadding="2" border="0" class="extcal_navbar"> \t\t\t\t\t<tr> \t\t\t\t\t\t<td valign="middle" height="18" align="center"> \t\t\t\t\t\t\t{$linkprevious} \t\t</td> \t\t <td width="98%" valign="middle" nowrap="nowrap" height="18" align="center" class="extcal_month_label"> \t\t\t\t\t\t\t{$linkcurrent} \t\t </td> \t\t\t\t\t\t<td valign="middle" height="18" align="center" style="margin: 0 auto; min-width: 4px;"> \t\t {$linknext} \t\t</td> \t\t\t\t\t</tr> \t\t\t\t</table> START; } $content .= <<<START \t\t\t\t<table style="width:{$width};height:{$height}; " class="extcal_weekdays"> START; $lf = "\n"; // Days name rows - with blank week no. $content .= "<tr>\n<td/>\n"; for ($i = 0; $i < 7; $i++) { $content .= "<td class='extcal_weekdays'>" . $day_name[($i + $startday) % 7] . "</td>" . $lf; } $content .= "</tr>\n"; $datacount = count($data["dates"]); $dn = 0; for ($w = 0; $w < 6 && $dn < $datacount; $w++) { $content .= "<tr style='height:{$rowheight};'>\n"; // the week column list($week, $link) = each($data['weeks']); $content .= '<td class="extcal_weekcell">'; $content .= $this->htmlLinkCloaking($link, "<img width='5' height='20' border='0' alt='week " . $week . "' src='" . $viewimages . "/icon-mini-week.gif'/>"); $content .= "</td>\n"; for ($d = 0; $d < 7 && $dn < $datacount; $d++) { $currentDay = $data["dates"][$dn]; switch ($currentDay["monthType"]) { case "prior": case "following": $content .= "<td class='extcal_othermonth'/>\n"; break; case "current": $dayOfWeek = JevDate::strftime("%w", $currentDay["cellDate"]); $class = $currentDay["today"] ? "extcal_todaycell" : "extcal_daycell"; $linkclass = "extcal_daylink"; if ($dayOfWeek == 0 && !$currentDay["today"]) { $class = "extcal_sundaycell"; $linkclass = "extcal_sundaylink"; } if ($currentDay["events"] || $this->modparams->get("noeventcheck", 0)) { $linkclass = "extcal_busylink"; } $content .= "<td class='" . $class . "'>\n"; $tooltip = $this->getTooltip($currentDay, array('class' => $linkclass)); if ($tooltip) { $content .= $tooltip; } else { if ($this->modparams->get("emptydaylinks", 1) || $currentDay["events"] || $this->modparams->get("noeventcheck", 0)) { $content .= $this->htmlLinkCloaking($currentDay["link"], $currentDay['d'], array('class' => $linkclass, 'title' => JText::_('JEV_CLICK_TOSWITCH_DAY'))); } else { $content .= $currentDay['d']; } } $content .= "</td>\n"; break; } $dn++; } $content .= "</tr>\n"; } $content .= "</table>\n"; $content .= "</td></tr></table></div>\n"; if ($scriptlinks != "") { $content .= "<script style='text/javascript'>xyz=1;" . $scriptlinks . "zyx=1;</script>"; } // Now check to see if this month needs to have at least 1 event in order to display // if (!$monthMustHaveEvent || $monthHasEvent) return $content; // else return ''; return $content; }
function simulateSaveRepeat($requestObject) { include_once JPATH_SITE . "/components/com_jevents/jevents.defines.php"; if (!JEVHelper::isEventCreator()) { throwerror(JText::_('ALERTNOTAUTH')); } // Convert formdata to array $formdata = array(); foreach (get_object_vars($requestObject->formdata) as $k => $v) { $k = str_replace("[]", "", $k); $formdata[$k] = $v; } $array = JRequest::_cleanVar($formdata, JREQUEST_ALLOWHTML); if (!array_key_exists("rp_id", $array) || intval($array["rp_id"]) <= 0) { throwerror(JText::_("Not a repeat", true)); } $rp_id = intval($array["rp_id"]); $dataModel = new JEventsDataModel("JEventsAdminDBModel"); $queryModel = new JEventsDBModel($dataModel); // I should be able to do this in one operation but that can come later $event = $queryModel->listEventsById(intval($rp_id), 1, "icaldb"); if (!JEVHelper::canEditEvent($event)) { throwerror(JText::_('ALERTNOTAUTH')); } $db =& JFactory::getDBO(); $rpt = new iCalRepetition($db); $rpt->load($rp_id); $query = "SELECT detail_id FROM #__jevents_vevent WHERE ev_id={$rpt->eventid}"; $db->setQuery($query); $eventdetailid = $db->loadResult(); $data["UID"] = valueIfExists($array, "uid", md5(uniqid(rand(), true))); $data["X-EXTRAINFO"] = valueIfExists($array, "extra_info", ""); $data["LOCATION"] = valueIfExists($array, "location", ""); $data["allDayEvent"] = valueIfExists($array, "allDayEvent", "off"); $data["CONTACT"] = valueIfExists($array, "contact_info", ""); // allow raw HTML (mask =2) $data["DESCRIPTION"] = valueIfExists($array, "jevcontent", "", 'request', 'html', 2); $data["publish_down"] = valueIfExists($array, "publish_down", "2006-12-12"); $data["publish_up"] = valueIfExists($array, "publish_up", "2006-12-12"); $interval = valueIfExists($array, "rinterval", 1); $data["SUMMARY"] = valueIfExists($array, "title", ""); $data["MULTIDAY"] = intval(valueIfExists($array, "multiday", "1")); $data["NOENDTIME"] = intval(valueIfExists($array, "noendtime", 0)); $ics_id = valueIfExists($array, "ics_id", 0); if ($data["allDayEvent"] == "on") { $start_time = "00:00"; } else { $start_time = valueIfExists($array, "start_time", "08:00"); } $publishstart = $data["publish_up"] . ' ' . $start_time . ':00'; $data["DTSTART"] = JevDate::strtotime($publishstart); if ($data["allDayEvent"] == "on") { $end_time = "23:59"; $publishend = $data["publish_down"] . ' ' . $end_time . ':59'; } else { $end_time = valueIfExists($array, "end_time", "15:00"); $publishend = $data["publish_down"] . ' ' . $end_time . ':00'; } $data["DTEND"] = JevDate::strtotime($publishend); // iCal for whole day uses 00:00:00 on the next day JEvents uses 23:59:59 on the same day list($h, $m, $s) = explode(":", $end_time . ':00'); if ($h + $m + $s == 0 && $data["allDayEvent"] == "on" && $data["DTEND"] > $data["DTSTART"]) { $publishend = JevDate::strftime('%Y-%m-%d 23:59:59', $data["DTEND"] - 86400); $data["DTEND"] = JevDate::strtotime($publishend); } $data["X-COLOR"] = valueIfExists($array, "color", ""); // Add any custom fields into $data array foreach ($array as $key => $value) { if (strpos($key, "custom_") === 0) { $data[$key] = $value; } } // populate rpt with data $start = $data["DTSTART"]; $end = $data["DTEND"]; $rpt->startrepeat = JevDate::strftime('%Y-%m-%d %H:%M:%S', $start); $rpt->endrepeat = JevDate::strftime('%Y-%m-%d %H:%M:%S', $end); $rpt->duplicatecheck = md5($rpt->eventid . $start); $rpt->rp_id = $rp_id; $rpt->event = $event; return $rpt; }
private function vtimezone($icalEvents) { $params = JComponentHelper::getParams(JEV_COM_COMPONENT); $tzid = ""; if (is_callable("date_default_timezone_set")) { $current_timezone = date_default_timezone_get(); // Do the Timezone definition $tzid = ";TZID={$current_timezone}"; // find the earliest start date $firststart = false; foreach ($icalEvents as $a) { if (!$firststart || $a->getUnixStartTime() < $firststart) { $firststart = $a->getUnixStartTime(); } } // Subtract 1 leap year to make sure we have enough transitions $firststart -= 31622400; $timezone = new DateTimeZone($current_timezone); if (version_compare(PHP_VERSION, "5.3.0") >= 0) { $transitions = $timezone->getTransitions($firststart); } else { $transitions = $timezone->getTransitions(); } $tzindex = 0; while (JevDate::strtotime($transitions[$tzindex]['time']) < $firststart) { $tzindex++; } $transitions = array_slice($transitions, $tzindex); if (count($transitions) >= 2) { $lastyear = $params->get("com_latestyear", 2020); echo "BEGIN:VTIMEZONE\n"; echo "TZID:{$current_timezone}\n"; for ($t = 0; $t < count($transitions); $t++) { $transition = $transitions[$t]; if ($transition['isdst'] == 0) { if (JevDate::strftime("%Y", $transition['ts']) > $lastyear) { continue; } echo "BEGIN:STANDARD\n"; echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transition['ts']); if ($t < count($transitions) - 1) { echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transitions[$t + 1]['ts']); } // if its the first transition then assume the old setting is the same as the next otherwise use the previous value $prev = $t; $prev += $t == 0 ? 1 : -1; $offset = $transitions[$prev]["offset"]; $sign = $offset >= 0 ? "+" : "-"; $offset = abs($offset); $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60); echo "TZOFFSETFROM:{$offset}\n"; $offset = $transitions[$t]["offset"]; $sign = $offset >= 0 ? "" : "-"; $offset = abs($offset); $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60); echo "TZOFFSETTO:{$offset}\n"; echo "TZNAME:{$current_timezone} " . $transitions[$t]["abbr"] . "\n"; echo "END:STANDARD\n"; } } for ($t = 0; $t < count($transitions); $t++) { $transition = $transitions[$t]; if ($transition['isdst'] == 1) { if (JevDate::strftime("%Y", $transition['ts']) > $lastyear) { continue; } echo "BEGIN:DAYLIGHT\n"; echo "DTSTART:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transition['ts']); if ($t < count($transitions) - 1) { echo "RDATE:" . JevDate::strftime("%Y%m%dT%H%M%S\n", $transitions[$t + 1]['ts']); } // if its the first transition then assume the old setting is the same as the next otherwise use the previous value $prev = $t; $prev += $t == 0 ? 1 : -1; $offset = $transitions[$prev]["offset"]; $sign = $offset >= 0 ? "+" : "-"; $offset = abs($offset); $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60); echo "TZOFFSETFROM:{$offset}\n"; $offset = $transitions[$t]["offset"]; $sign = $offset >= 0 ? "" : "-"; $offset = abs($offset); $offset = $sign . sprintf("%04s", floor($offset / 3600) * 100 + $offset % 60); echo "TZOFFSETTO:{$offset}\n"; echo "TZNAME:{$current_timezone} " . $transitions[$t]["abbr"] . "\n"; echo "END:DAYLIGHT\n"; } } echo "END:VTIMEZONE\n"; } } return $tzid; }
function repeatSummary() { $cfg = JEVConfig::getInstance(); // i.e. 1 = follow english word order by default $grammar = intval(JText::_('JEV_REPEAT_GRAMMAR')); // if starttime and end time the same then show no times! if ($this->start_date == $this->stop_date) { if ($this->start_time != $this->stop_time && !$this->alldayevent()) { echo $this->start_date . ', ' . $this->start_time . ' - ' . $this->stop_time_midnightFix; } else { echo $this->start_date; } } else { // recurring events should have time related to recurrance not range of dates if ($this->start_time != $this->stop_time && !($this->reccurtype() > 0)) { echo JText::_('JEV_FROM') . ' ' . $this->start_date . ' - ' . $this->start_time . '<br />' . JText::_('JEV_TO') . ' ' . $this->stop_date . ' - ' . $this->stop_time_midnightFix . '<br/>'; } else { echo JText::_('JEV_FROM') . ' ' . $this->start_date . '<br />' . JText::_('JEV_TO') . ' ' . $this->stop_date . '<br/>'; } } if ($this->reccurtype() > 0) { switch ($this->reccurtype()) { case '1': $reccur = JText::_('JEV_REP_WEEK'); break; case '2': $reccur = JText::_('JEV_REP_WEEK'); break; case '3': $reccur = JText::_('JEV_REP_MONTH'); break; case '4': $reccur = JText::_('JEV_REP_MONTH'); break; case '5': $reccur = JText::_('JEV_REP_YEAR'); break; } if ($this->reccurday() >= 0 || ($this->reccurtype() == 1 || $this->reccurtype() == 2)) { $timeString = ""; if ($this->start_time != $this->stop_time) { $timeString = $this->start_time . " - " . $this->stop_time_midnightFix . " "; } echo $timeString; if (intval($this->reccurday()) < 0) { $event_start_date = JevDate::strtotime($this->startDate()); $reccurday = intval(date('w', $event_start_date)); } else { $reccurday = $this->reccurday(); } if ($this->reccurtype() == 1) { $dayname = JEventsHTML::getDayName($reccurday); echo $dayname . ' ' . JText::_('JEV_EACHOF') . ' ' . $reccur; } else { if ($this->reccurtype() == 2) { $each = JText::_('JEV_EACH') . ' '; if ($grammar == 1) { $each = strtolower($each); } $daystring = ""; if (JString::strlen($this->reccurweeks()) == 0) { $days = explode("|", $this->reccurweekdays()); for ($d = 0; $d < count($days); $d++) { $daystring .= JEventsHTML::getDayName($days[$d]); $daystring .= ($d == 0 ? "," : "") . " "; } $weekstring = ""; } else { $days = explode("|", $this->reccurweekdays()); for ($d = 0; $d < count($days); $d++) { $daystring .= JEventsHTML::getDayName($days[$d]); $daystring .= ($d == 0 ? "," : "") . " "; } $weekstring = $this->reccurweeks() == 'pair' ? JText::_('JEV_REP_WEEKPAIR') : ($this->reccurweeks() == 'impair' ? JText::_('JEV_REP_WEEKIMPAIR') : ""); if ($weekstring == "") { switch ($grammar) { case 1: $weekstring = "- " . JText::_('JEV_REP_WEEK') . " "; $weekstring .= str_replace("|", ", ", $this->reccurweeks()) . " "; $weekstring .= strtolower(JText::_('JEV_EACHMONTH')); break; default: $weekstring = str_replace("|", ", ", $this->reccurweeks()) . " "; $weekstring .= $reccur; $weekstring .= JText::_('JEV_EACHMONTH'); break; } } } $firstword = true; switch ($grammar) { case 1: echo $daystring . $weekstring; break; default: echo $each . $daystring . $weekstring; break; } } else { echo JText::_('JEV_EACH') . ' ' . $reccur; } } } else { echo JText::_('JEV_EACH') . ' ' . $reccur; } } else { if ($this->start_date != $this->stop_date) { echo JText::_('JEV_ALLDAYS'); } } }
$hasevents = false; echo '<fieldset><legend class="ev_fieldset">' . JText::_('JEV_EVENTSFOR') . ' ' . JText::_('JEV_WEEK') . ' : </legend><br />' . "\n"; echo '<table align="center" width="90%" cellspacing="0" cellpadding="5" class="ev_table">' . "\n"; ?> <tr valign="top"> <td colspan="2" align="center" class="cal_td_daysnames"> <!-- <div class="cal_daysnames"> --> <?php echo $data['startdate'] . ' - ' . $data['enddate']; ?> <!-- </div> --> </td> </tr> <?php for ($d = 0; $d < 7; $d++) { $day_link = '<a class="ev_link_weekday" href="' . $data['days'][$d]['link'] . '" title="' . JText::_('JEV_CLICK_TOSWITCH_DAY') . '">' . JEV_CommonFunctions::jev_strftime("%A", JevDate::mktime(3, 0, 0, $data['days'][$d]['week_month'], $data['days'][$d]['week_day'], $data['days'][$d]['week_year'])) . "<br/>" . JEventsHTML::getDateFormat($data['days'][$d]['week_year'], $data['days'][$d]['week_month'], $data['days'][$d]['week_day'], 2) . '</a>' . "\n"; if ($data['days'][$d]['today']) { $bg = 'class="ev_td_today"'; } else { $bg = 'class="ev_td_left"'; } echo '<tr><td ' . $bg . '>' . $day_link . '</td>' . "\n"; echo '<td class="ev_td_right">' . "\n"; $num_events = count($data['days'][$d]['rows']); if ($num_events > 0) { $hasevents = true; echo "<ul class='ev_ul'>\n"; for ($r = 0; $r < $num_events; $r++) { $row = $data['days'][$d]['rows'][$r]; $listyle = 'style="border-color:' . $row->bgcolor() . ';"'; echo "<li class='ev_td_li' {$listyle}>\n";