function JEventDate($datetime = '')
 {
     $time = JevDate::strtotime($datetime);
     if ($datetime != "" && $time !== false) {
         $this->date = $time;
         $parts = explode(":", date("Y:m:j:G:i:s:t", $this->date));
         $this->year = intval($parts[0]);
         $this->month = intval($parts[1]);
         $this->day = intval($parts[2]);
         $this->hour = intval($parts[3]);
         $this->minute = intval($parts[4]);
         $this->second = intval($parts[5]);
         $this->dim = intval($parts[6]);
     } else {
         $this->date = time();
         $parts = explode(":", date("Y:m:j:G:i:s:t", $this->date));
         $this->year = intval($parts[0]);
         $this->month = intval($parts[1]);
         $this->day = intval($parts[2]);
         $this->hour = 0;
         $this->minute = 0;
         $this->second = 0;
         $this->dim = intval($parts[6]);
     }
 }
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);
}
示例#3
0
 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;
 }
示例#4
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher = JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() && $dayEvent->getUnixStartDate() == $dayEvent->getUnixEndDate() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : IS_WIN ? ' @%I:%M%p' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '%a %b %d' . $time_fmt;
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 if ($this->modparams->get("ignorefiltermodule", 0)) {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink() . "&filter_reset=1");
                 } else {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 }
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'categoryimage':
             $catobj = $dayEvent->getCategoryImage();
             $content .= $catobj;
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'duration':
             $timedelta = $dayEvent->noendtime() || $dayEvent->alldayevent() ? "" : $dayEvent->getUnixEndTime() - $dayEvent->getUnixStartTime();
             if ($timedelta == "") {
                 break;
             }
             $fieldval = isset($dateParm) && $dateParm != '' ? $dateParm : JText::_("JEV_DURATION_FORMAT");
             $shownsign = false;
             // whole days!
             if (stripos($fieldval, "%wd") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 if ($timedelta > 3610) {
                     //if more than 1 hour and 10 seconds over a day then round up the day output
                     $days += 1;
                 }
                 $fieldval = str_ireplace("%wd", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 /*
                  if ($timedelta>3610){
                  //if more than 1 hour and 10 seconds over a day then round up the day output
                  $days +=1;
                  }
                 */
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $eventPassed = !($timedelta >= 0);
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%nopast") !== false) {
                 if (!$eventPassed) {
                     $fieldval = str_ireplace("%nopast", "", $fieldval);
                 } else {
                     $fieldval = JText::_('JEV_EVENT_FINISHED');
                 }
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             // limit to 2 because we may be using joomla content plugins
                             $subparts = explode("}", $part, 2);
                             if (strpos($subparts[0], "#") > 0) {
                                 $formattedparts = explode("#", $subparts[0]);
                                 $subparts[0] = $formattedparts[0];
                             } else {
                                 $formattedparts = array($subparts[0], "%s", "");
                             }
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 if ($temp != "") {
                                     $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                 } else {
                                     if (isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                     }
                                 }
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     if ($temp != "") {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                     } else {
                                         if (isset($formattedparts[2])) {
                                             $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                         }
                                     }
                                 } else {
                                     $matchedByPlugin = false;
                                     $layout = "list";
                                     static $fieldNameArrays = array();
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             if (!isset($fieldNameArrays[$classname])) {
                                                 $fieldNameArrays[$classname] = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             }
                                             if (isset($fieldNameArrays[$classname]["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArrays[$classname]["values"])) {
                                                     $matchedByPlugin = true;
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $temp = call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                         if ($temp != "") {
                                                             $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                                         } else {
                                                             if (isset($formattedparts[2])) {
                                                                 $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     if (!$matchedByPlugin) {
                                         // Layout editor code
                                         include_once JEV_PATH . "/views/default/helpers/defaultloadedfromtemplate.php";
                                         ob_start();
                                         // false at the end to stop it running through the plugins
                                         $part = "{{Dummy Label:" . implode("#", $formattedparts) . "}}";
                                         DefaultLoadedFromTemplate(false, false, $dayEvent, 0, $part, false);
                                         $newpart = ob_get_clean();
                                         if ($newpart != $part) {
                                             $tempstr .= $newpart;
                                             $matchedByPlugin = true;
                                         }
                                     }
                                     // none of the plugins has replaced the output so we now replace the blank formatted part!
                                     if (!$matchedByPlugin && isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", "", $formattedparts[2]);
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
 /**
  * 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 fixDtstart()
 {
     // must only ever do this once!
     if (isset($this->dtfixed) && $this->dtfixed) {
         return;
     }
     $this->dtfixed = 1;
     $db =& JFactory::getDBO();
     // Now get the first repeat since dtstart may have been set in a different timezeone and since it is a unixdate it would then be wrong
     if (strtolower($this->freq()) == "none") {
         $repeat = $this->getFirstRepeat();
         $this->dtstart($repeat->getUnixStartTime());
         $this->dtend($repeat->getUnixEndTime());
     } else {
         $repeat = $this->getFirstRepeat();
         // Is this repeat an exception?
         $db->setQuery("SELECT * FROM #__jevents_exception WHERE rp_id=" . intval($repeat->rp_id()));
         $exception = $db->loadObject();
         if (!$exception) {
             $this->dtstart($repeat->getUnixStartTime());
             $this->dtend($repeat->getUnixEndTime());
         } else {
             // This is the scenario where the first repeat is an exception so check to see if we need to be worried
             $jregistry =& JRegistry::getInstance("jevents");
             // This is the server default timezone
             $jtimezone = $jregistry->getValue("jevents.timezone", false);
             if ($jtimezone) {
                 // This is the JEvents set timezone
                 $timezone = date_default_timezone_get();
                 // Only worry if the JEvents  set timezone is different to the server timezone
                 if ($timezone != $jtimezone) {
                     // look for repeats that are not exceptions
                     $repeat2 = $this->getFirstRepeat(false);
                     // if we have none then use the first repeat and give a warning
                     if (!$repeat2) {
                         $this->dtstart($repeat->getUnixStartTime());
                         $this->dtend($repeat->getUnixEndTime());
                         JFactory::getApplication()->enqueueMessage(JText::_('JEV_PLEASE_CHECK_START_AND_END_TIMES_FOR_THIS_EVENT'));
                     } else {
                         // Calculate the time adjustment (if any) then check against the non-exceptional repeat
                         // Convert dtstart using system timezone to date
                         date_default_timezone_set($jtimezone);
                         $truestarttime = JevDate::strftime("%H:%M:%S", $this->dtstart());
                         // if the system timezone version of dtstart is the same time as the first non-exceptional repeat
                         // then we are safe to use this adjustment mechanism to dtstart.  We use the real "date" and convert
                         // back into unix time using the  Jevents timezone
                         if ($truestarttime == JevDate::strftime("%H:%M:%S", JevDate::mktime($repeat2->hup(), $repeat2->minup(), $repeat2->sup(), 0, 0, 0))) {
                             $truedtstart = JevDate::strftime("%Y-%m-%d %H:%M:%S", $this->dtstart());
                             $truedtend = JevDate::strftime("%Y-%m-%d %H:%M:%S", $this->dtend());
                             // switch timezone back to Jevents timezone
                             date_default_timezone_set($timezone);
                             $this->dtstart(JevDate::strtotime($truedtstart));
                             $this->dtend(JevDate::strtotime($truedtend));
                         } else {
                             // In this scenario we have no idea what the time should be unfortunately
                             JFactory::getApplication()->enqueueMessage(JText::_('JEV_PLEASE_CHECK_START_AND_END_TIMES_FOR_THIS_EVENT'));
                             // switch timezone back
                             date_default_timezone_set($timezone);
                         }
                     }
                 }
             }
         }
     }
 }
示例#7
0
    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;
}
                $this->data["dates"][$dn]["slots"][$slot_to_use] = array($event, $blocks, $i);
                for ($block = 1; $block < $blocks; $block++) {
                    if ($cfg->get('flattruncpriorpost', 0) && $this->data["dates"][$dn + $block]["month"] != $this->month) {
                        // RESET THE BLOCK COUNT FOR THE END OF MONTH AND BREAK
                        $this->data["dates"][$dn]["slots"][$slot_to_use] = array($event, $block, $i);
                        break;
                    }
                    $this->data["dates"][$dn + $block]["slots"][$slot_to_use] = array($event, 0, $i);
                }
            }
        } else {
            $event->_length = 1;
        }
        // For events into their second or third week then update blocks accordingly
        if ($dayOfWeek == 0 && $currentDay["cellDate"] != $event->_startday) {
            $event->_length = JevDate::strtotime($event->endDate()) - $currentDay["cellDate"];
            $event->_length = intval(round($event->_length / 86400, 0)) + 1;
            if ($dayOfWeek + $event->_length > 6) {
                $blocks = 7 - $dayOfWeek;
            } else {
                $blocks = $event->_length;
            }
            $this->data["dates"][$dn]["slots"][$slot_to_use] = array($event, $blocks, $i);
            for ($block = 1; $block < $blocks; $block++) {
                $this->data["dates"][$dn + $block]["slots"][$slot_to_use] = array($event, 0, $i);
            }
        }
        // mark event as shown
        $event->_shown = true;
    }
}
示例#10
0
 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;
 }
 /**
  * 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;
 }
示例#12
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher =& JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '<span class="eventDay">%a</span>  <span class="eventDate">%d<span class="eventMonth">%b</span></span>';
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             } else {
                 $dispatcher->trigger('onPrepareContent', array(&$dayEvent, &$this->modparams, 0), true);
             }
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             $subparts = explode("}", $part);
                             //$part = str_replace("}","",$part);
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 $tempstr .= $temp;
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     $tempstr .= $temp;
                                 } else {
                                     $layout = "list";
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             $fieldNameArray = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             if (isset($fieldNameArray["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArray["values"])) {
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $tempstr .= call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
示例#13
0
 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;
 }
示例#14
0
 /**
  * Function converts datetime to iCal format
  *
  * @param datetime Datetime of the event
  * @return converted datetime in iCal format
  */
 private function datetimeToUtcIcsFormat($datetime)
 {
     $datetime = JevDate::strtotime($datetime);
     return gmdate("Ymd", $datetime) . "T" . gmdate("His", $datetime) . "Z";
 }
示例#15
0
文件: rss.php 项目: madseller/coperio
$doc->setDescription($this->info['description']);
$docimage = new JFeedImage();
$docimage->set('description', $this->info['description']);
$docimage->set('title', $this->info['title']);
$docimage->set('url', $this->info['image_url']);
$docimage->set('link', $this->info['imagelink']);
$doc->set('image', $docimage);
foreach ($this->eventsByRelDay as $relDay => $ebrd) {
    foreach ($ebrd as $row) {
        // title for particular item
        $item_title = htmlspecialchars($row->title());
        $item_title = html_entity_decode($item_title);
        // url link to article
        $startDate = $row->publish_up();
        //$eventDate = JevDate::mktime(substr($startDate,11,2),substr($startDate,14,2), substr($startDate,17,2),$this->jeventCalObject->now_m,$this->jeventCalObject->now_d + $relDay,$this->jeventCalObject->now_Y);
        $eventDate = JevDate::strtotime($startDate);
        $targetid = $this->modparams->get("target_itemid", 0);
        $link = $row->viewDetailLink(date("Y", $eventDate), date("m", $eventDate), date("d", $eventDate), false, $targetid);
        $item_link = JRoute::_($link . $this->jeventCalObject->datamodel->getCatidsOutLink());
        // removes all formating from the intro text for the description text
        $item_description = $row->content();
        if ($this->info['limit_text']) {
            if ($this->info['text_length']) {
                $item_description = JFilterOutput::cleanText($item_description);
                // limits description text to x words
                $item_description_array = explode(' ', $item_description);
                $count = count($item_description_array);
                if ($count > $this->info['text_length']) {
                    $item_description = '';
                    for ($a = 0; $a < $this->info['text_length']; $a++) {
                        $item_description .= $item_description_array[$a] . ' ';
function Defaultgetstartenddates($view)
{
    $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
    // fix to allow start/end date to be preserved during pagination IF filter module before/after dates are used
    $Itemid = JRequest::getInt("Itemid", 0);
    // This causes the filter module to reset
    $filters = jevFilterProcessing::getInstance(array());
    $activeFilterMenu = JFactory::getApplication()->getUserState('active_filter_menu ', $Itemid);
    if (intval(JRequest::getVar('filter_reset', 0)) || $activeFilterMenu > 0 && $activeFilterMenu != $Itemid) {
        JRequest::setVar('startdate', '');
        JRequest::setVar('enddate', '');
        JFactory::getApplication()->setUserState('range_enddate' . $Itemid, '');
        JFactory::getApplication()->setUserState('range_startdate' . $Itemid, '');
        JFactory::getApplication()->setUserState('active_filter_menu ', 0);
    }
    $startdate = JFactory::getApplication()->getUserStateFromRequest('range_startdate' . $Itemid, 'startdate', "");
    $enddate = JFactory::getApplication()->getUserStateFromRequest('range_enddate' . $Itemid, '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 converts datetime to iCal format
  *
  * @param datetime Datetime of the event
  * @return converted datetime in iCal format
  */
 private function datetimeToIcsFormat($datetime)
 {
     $datetime = JevDate::strtotime($datetime);
     return date("Ymd", $datetime) . "T" . date("His", $datetime);
 }
示例#18
0
 /**
  * Function converts datetime to iCal format
  *
  * @param datetime Datetime of the event
  * @return converted datetime in iCal format
  */
 private function datetimeToIcsFormat($datetime)
 {
     $newdatetime = JevDate::strtotime($datetime);
     $tempdate = new JevDate($newdatetime);
     if (strlen($datetime) <= 10 && $tempdate->toFormat("%H:%M:%S") == "00:00:00") {
         // in this case we have not time element so don't set it otherwise iCal import will think a time is actually set and not process all day or no end time events correctly
         return date("Ymd", $newdatetime);
     }
     return date("Ymd", $newdatetime) . "T" . date("His", $newdatetime);
 }
示例#19
0
 }
 $html .= "SUMMARY:" . $a->title() . "\r\n";
 if ($a->location() != "") {
     $html .= "LOCATION:" . $this->wraplines($this->replacetags($a->location())) . "\r\n";
 }
 // We Need to wrap this according to the specs
 $html .= $this->setDescription($a->content()) . "\r\n";
 if ($a->hasContactInfo()) {
     $html .= "CONTACT:" . $this->replacetags($a->contact_info()) . "\r\n";
 }
 if ($a->hasExtraInfo()) {
     $html .= "X-EXTRAINFO:" . $this->wraplines($this->replacetags($a->_extra_info));
 }
 $html .= "\r\n";
 $exception = $changedexceptions[$a->rp_id()];
 $originalstart = JevDate::strtotime($exception->oldstartrepeat);
 $chstart = $a->getUnixStartTime();
 $chend = $a->getUnixEndTime();
 // No doing true timezones!
 if ($tzid == "" && is_callable("date_default_timezone_set")) {
     // 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);
示例#20
0
 /**
  * Function that overwrites meta-tags in mainframe!!
  *
  * @static
  * @param string $name - metatag name
  * @param string $content - metatag value
  */
 function checkRobotsMetaTag($name = "robots", $content = "noindex, nofollow")
 {
     // force robots metatag
     $cfg =& JEVConfig::getInstance();
     if ($cfg->get('com_blockRobots', 0) >= 1) {
         $document =& JFactory::getDocument();
         // Allow on content pages
         if ($cfg->get('com_blockRobots', 0) == 3) {
             if (strpos(JRequest::getString("jevtask", ""), ".detail") > 0) {
                 $document->setMetaData($name, "nofollow");
                 return;
             }
             $document->setMetaData($name, $content);
             return;
         }
         if ($cfg->get('com_blockRobots', 0) == 1) {
             $document->setMetaData($name, $content);
             return;
         }
         list($cyear, $cmonth, $cday) = JEVHelper::getYMD();
         $cdate = JevDate::mktime(0, 0, 0, $cmonth, $cday, $cyear);
         $prior = JevDate::strtotime($cfg->get('robotprior', "-1 day"));
         if ($cdate < $prior) {
             $document->setMetaData($name, $content);
             return;
         }
         $post = JevDate::strtotime($cfg->get('robotpost', "-1 day"));
         if ($cdate > $post) {
             $document->setMetaData($name, $content);
             return;
         }
     }
 }
示例#21
0
 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;
 }
示例#22
0
 function listIcalEventsByCat($catids, $showrepeats = false, $total = 0, $limitstart = 0, $limit = 0, $order = "rpt.startrepeat asc, rpt.endrepeat ASC, det.summary ASC", $filters = false, $extrafields = "", $extratables = "")
 {
     $db =& JFactory::getDBO();
     $user = JFactory::getUser();
     // Use catid in accessibleCategoryList to pick up offsping too!
     $aid = null;
     $catidlist = implode(",", $catids);
     // process the new plugins
     // get extra data and conditionality from plugins
     $extrafields = "";
     // must have comma prefix
     $extratables = "";
     // must have comma prefix
     $extrawhere = array();
     $extrajoin = array();
     $needsgroup = false;
     if (!$this->cfg->getValue("showyearpast", 1)) {
         list($year, $month, $day) = JEVHelper::getYMD();
         $startdate = JevDate::mktime(0, 0, 0, $month, $day, $year);
         $today = JevDate::strtotime("+0 days");
         if ($startdate < $today) {
             $startdate = $today;
         }
         $startdate = JevDate::strftime('%Y-%m-%d 00:00:00', $startdate);
         $extrawhere[] = "rpt.endrepeat >=  '{$startdate}'";
     }
     if (!$filters) {
         $filters = jevFilterProcessing::getInstance(array("published", "justmine", "category", "search"));
         $filters->setWhereJoin($extrawhere, $extrajoin);
         $needsgroup = $filters->needsGroupBy();
         $dispatcher =& JDispatcher::getInstance();
         $dispatcher->trigger('onListIcalEvents', array(&$extrafields, &$extratables, &$extrawhere, &$extrajoin, &$needsgroup));
     } else {
         $filters->setWhereJoin($extrawhere, $extrajoin);
     }
     $catwhere = "\n WHERE ev.catid IN(" . $this->accessibleCategoryList() . ")";
     $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 " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . 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) : '';
     if ($limit > 0 || $limitstart > 0) {
         if (empty($limitstart) || !$limitstart) {
             $limitstart = 0;
         }
         $rows_per_page = $limit;
         $limit = " LIMIT {$limitstart}, {$rows_per_page}";
     } else {
         $limit = "";
     }
     if ($order != "") {
         $order = (strpos($order, 'ORDER BY') === false ? " ORDER BY " : " ") . $order;
     }
     $user = JFactory::getUser();
     if ($showrepeats) {
         $query = "SELECT ev.*, rpt.*, rr.*, det.* {$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_vevent as ev" . "\n LEFT JOIN #__jevents_icsfile as icsf ON icsf.ics_id=ev.icsid" . "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . $extrajoin . $catwhere . $extrawhere . "\n  AND icsf.state=1" . "\n AND ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . JEVHelper::getAid($user)) . "\n GROUP BY rpt.rp_id" . $order . $limit;
     } else {
         // TODO find a single query way of doing this !!!
         $query = "SELECT MIN(rpt.rp_id) as rp_id FROM #__jevents_repetition as rpt " . "\n LEFT JOIN #__jevents_vevent as ev ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id" . "\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 . $catwhere . $extrawhere . "\n  AND icsf.state=1" . "\n AND ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . JEVHelper::getAid($user)) . "\n GROUP BY ev.ev_id";
         $db->setQuery($query);
         //echo $db->explain();
         $rplist = $db->loadResultArray();
         $rplist = implode(',', array_merge(array(-1), $rplist));
         $query = "SELECT rpt.rp_id,ev.*, rpt.*, rr.*, det.* {$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_rrule as rr ON rr.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . $extrajoin . $catwhere . $extrawhere . "\n AND rpt.rp_id IN({$rplist})" . "\n  AND icsf.state=1" . "\n AND ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . JEVHelper::getAid($user) . ')' : ' <=  ' . JEVHelper::getAid($user)) . ($needsgroup ? "\n GROUP BY rpt.rp_id" : "") . $order . $limit;
     }
     $cache =& JFactory::getCache(JEV_COM_COMPONENT);
     $lang =& JFactory::getLanguage();
     $langtag = $lang->getTag();
     $rows = $cache->call('JEventsDBModel::_cachedlistIcalEvents', $query, $langtag);
     $dispatcher =& JDispatcher::getInstance();
     $dispatcher->trigger('onDisplayCustomFieldsMultiRowUncached', array(&$rows));
     return $rows;
 }
示例#23
0
 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();
     }
 }
示例#24
0
 /**
  * Generates repetition from vevent & rrule data from scratch
  * The result can then be saved to the database
  */
 function getRepetitions($dtstart, $dtend, $duration, $recreate = false, $exdate = array())
 {
     // put exdate into somewhere that I can get from _makerepeat
     $this->_exdate = $exdate;
     // TODO  "getRepetitions doesnt yet deal with Short months and 31st or leap years/week 53<br/>";
     if ($dtend == 0 && $duration > 0) {
         $dtend = $dtstart + $duration;
     }
     if (!$recreate && isset($this->_repetitions)) {
         return $this->_repetitions;
     }
     $this->_repetitions = array();
     if (!isset($this->eventid)) {
         echo "no eventid set in generateRepetitions<br/>";
         return $this->_repetitions;
     }
     if ($this->count == 1 && $this->freq != "IRREGULAR") {
         //echo "count=1 returing<br/>";
         $this->_makeRepeat($dtstart, $dtend);
         return $this->_repetitions;
     }
     //list ($h,$min,$s,$d,$m,$y) = explode(":",JevDate::strftime("%H:%M:%S:%d:%m:%Y",$end));
     list($startHour, $startMin, $startSecond, $startDay, $startMonth, $startYear, $startWD) = explode(":", JevDate::strftime("0%H:0%M:0%S:%d:%m:%Y:%w", $dtstart));
     //echo "$startHour,$startMin,$startSecond,$startDay,$startMonth,$startYear,$startWD,$dtstart<br/>";
     $dtstartMidnight = JevDate::mktime(0, 0, 0, $startMonth, $startDay, $startYear);
     list($endDay, $endMonth, $endYear, $endWD) = explode(":", JevDate::strftime("%d:%m:%Y:%w", $dtend));
     $duration = $dtend - $dtstart;
     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");
     static $dailySecs = 86400;
     static $weeklySecs = 604800;
     // TODO implement byyearday
     // TODO do full leap year audit e.g. YEARLY repeats
     //echo "freq = ".$this->freq."<br/>";
     switch ($this->freq) {
         case "YEARLY":
             // TODO the code doesn't yet deal with multiple bymonths
             if ($this->bymonth == "") {
                 $this->bymonth = $startMonth;
             }
             //if ($this->byday=="") $this->byday=$weekdayReverseMap[$startWD];
             // If I have byday and bymonthday then the two considions must be met
             $weekdays = array();
             if ($this->byday != "") {
                 foreach (explode(",", $this->byday) as $bday) {
                     if (array_key_exists($bday, $weekdayMap)) {
                         $weekdays[] = $weekdayMap[$bday];
                     }
                 }
             }
             if ($this->byyearday != "") {
                 echo "byyearday <br/>";
                 $days = explode(",", $this->byyearday);
                 $start = $dtstart;
                 $end = $dtend;
                 $countRepeats = 0;
                 $currentYearStart = JevDate::mktime(0, 0, 0, 1, 1, $startYear);
                 // do the current month first
                 while ($countRepeats < $this->count && !$this->_afterUntil($currentYearStart)) {
                     $currentYear = JevDate::strftime("%Y", $currentYearStart);
                     $currentYearDays = date("L", $currentYearStart) ? 366 : 365;
                     foreach ($days as $day) {
                         if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                             return $this->_repetitions;
                         }
                         // TODO I am assuming all + or all -ve
                         $details = array();
                         preg_match("/(\\+|-?)(\\d*)/", $day, $details);
                         list($temp, $plusminus, $daynumber) = $details;
                         if (JString::strlen($plusminus) == 0) {
                             $plusminus = "+";
                         }
                         // do not go over year end
                         if ($daynumber > $currentYearDays) {
                             continue;
                         }
                         if ($plusminus == "+") {
                             $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, 12, 31, $currentYear - 1);
                             $targetStart = JevDate::strtotime("+{$daynumber} days", $targetStart);
                         } else {
                             $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, 1, 1, $currentYear + 1);
                             $targetStart = JevDate::strtotime("-{$daynumber} days", $targetStart);
                         }
                         $targetEnd = $targetStart + $duration;
                         if ($countRepeats >= $this->count) {
                             return $this->_repetitions;
                         }
                         if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                             // double check for byday constraints
                             if ($this->byday != "") {
                                 if (!in_array(JevDate::strftime("%w", $targetStart), $weekdays)) {
                                     continue;
                                 }
                             }
                             $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                         }
                     }
                     // now ago to the start of next year
                     if ($currentYear + $this->rinterval > 2099) {
                         return $this->_repetitions;
                     }
                     $currentYearStart = JevDate::mktime(0, 0, 0, 1, 1, $currentYear + $this->rinterval);
                 }
             } else {
                 if ($this->bymonthday != "") {
                     echo "bymonthday" . $this->bymonthday . " <br/>";
                     $days = explode(",", $this->bymonthday);
                     $start = $dtstart;
                     $end = $dtend;
                     $countRepeats = 0;
                     $currentMonthStart = JevDate::mktime(0, 0, 0, $startMonth, 1, $startYear);
                     // do the current month first
                     while ($countRepeats < $this->count && !$this->_afterUntil($currentMonthStart)) {
                         list($currentMonth, $currentYear) = explode(":", JevDate::strftime("%m:%Y", $currentMonthStart));
                         $currentMonthDays = date("t", $currentMonthStart);
                         foreach ($days as $day) {
                             if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                                 return $this->_repetitions;
                             }
                             // Assume no negative bymonthday values
                             // TODO relax this assumption
                             // do not go over month end
                             if ($day > $currentMonthDays) {
                                 continue;
                             }
                             $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, $currentMonth, $day, $currentYear);
                             $targetEnd = $targetStart + $duration;
                             if ($countRepeats >= $this->count) {
                                 return $this->_repetitions;
                             }
                             if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                 // double check for byday constraints
                                 if ($this->byday != "") {
                                     if (!in_array(JevDate::strftime("%w", $targetStart), $weekdays)) {
                                         continue;
                                     }
                                 }
                                 $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                             }
                         }
                         // now ago to the start of next month
                         if ($currentYear + $this->rinterval > 2099) {
                             return $this->_repetitions;
                         }
                         $currentMonthStart = JevDate::mktime(0, 0, 0, $currentMonth, 1, $currentYear + $this->rinterval);
                     }
                 } else {
                     if ($this->byday == "") {
                         $start = $dtstart;
                         $end = $dtend;
                         $countRepeats = 0;
                         while ($countRepeats < $this->count && !$this->_afterUntil($start)) {
                             $countRepeats += $this->_makeRepeat($start, $end);
                             $currentYear = JevDate::strftime("%Y", $start);
                             list($h, $min, $s, $d, $m, $y) = explode(":", JevDate::strftime("%H:%M:%S:%d:%m:%Y", $start));
                             $maxyear = PHP_INT_SIZE === 8 ? 2999 : 2037;
                             if ($currentYear + $this->rinterval >= $maxyear) {
                                 break;
                             }
                             $start = JevDate::strtotime("+" . $this->rinterval . " years", $start);
                             $end = JevDate::strtotime("+" . $this->rinterval . " years", $end);
                         }
                     } else {
                         $days = explode(",", $this->byday);
                         // duplicate where necessary
                         $extradays = array();
                         foreach ($days as $day) {
                             if (strpos($day, "+") === false && strpos($day, "-") === false) {
                                 for ($i = 2; $i <= 52; $i++) {
                                     $extradays[] = "+" . $i . $day;
                                 }
                             }
                         }
                         $days = array_merge($days, $extradays);
                         $start = $dtstart;
                         $end = $dtend;
                         $countRepeats = 0;
                         // do the current month first
                         while ($countRepeats < $this->count && !$this->_afterUntil($start)) {
                             $currentMonth = JevDate::strftime("%m", $start);
                             foreach ($days as $day) {
                                 if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                                     return $this->_repetitions;
                                 }
                                 $details = array();
                                 if (strpos($day, "+") === false && strpos($day, "-") === false) {
                                     $day = "+1" . $day;
                                 }
                                 preg_match("/(\\+|-?)(\\d+)(.{2})/", $day, $details);
                                 if (count($details) != 4) {
                                     echo "<br/><br/><b>PROBLEMS with {$day}</b><br/><br/>";
                                     return $this->_repetitions;
                                 } else {
                                     list($temp, $plusminus, $weeknumber, $dayname) = $details;
                                     if (JString::strlen($plusminus) == 0) {
                                         $plusminus = "+";
                                     }
                                     if (JString::strlen($weeknumber) == 0) {
                                         $weeknumber = 1;
                                     }
                                     // always check for dtstart (nothing is allowed earlier)
                                     if ($plusminus == "-") {
                                         //echo "count back $weeknumber weeks on $dayname<br/>";
                                         list($startDay, $startMonth, $startYear, $startWD) = explode(":", JevDate::strftime("%d:%m:%Y:%w", $start));
                                         $startLast = date("t", $start);
                                         $monthEnd = JevDate::mktime(0, 0, 0, $startMonth, $startLast, $startYear);
                                         $meWD = JevDate::strftime("%w", $monthEnd);
                                         $adjustment = $startLast - (7 + $meWD - $weekdayMap[$dayname]) % 7;
                                         $targetstartDay = $adjustment - ($weeknumber - 1) * 7;
                                         $targetendDay = $targetstartDay + $endDay - $startDay;
                                         list($h, $min, $s, $d, $m, $y) = explode(":", JevDate::strftime("%H:%M:%S:%d:%m:%Y", $start));
                                         $testStart = JevDate::mktime($h, $min, $s, $m, $targetstartDay, $y);
                                         if ($currentMonth == JevDate::strftime("%m", $testStart)) {
                                             $targetStart = $testStart;
                                             $targetEnd = $targetStart + $duration;
                                             if ($countRepeats >= $this->count) {
                                                 return $this->_repetitions;
                                             }
                                             if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                                 $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                                             }
                                         }
                                     } else {
                                         //echo "count forward $weeknumber weeks on $dayname<br/>";
                                         list($startDay, $startMonth, $startYear, $startWD) = explode(":", JevDate::strftime("%d:%m:%Y:%w", $start));
                                         $monthStart = JevDate::mktime(0, 0, 0, $startMonth, 1, $startYear);
                                         $msWD = JevDate::strftime("%w", $monthStart);
                                         if (!isset($weekdayMap[$dayname])) {
                                             $x = 1;
                                         }
                                         $adjustment = 1 + (7 + $weekdayMap[$dayname] - $msWD) % 7;
                                         $targetstartDay = $adjustment + ($weeknumber - 1) * 7;
                                         $targetendDay = $targetstartDay + $endDay - $startDay;
                                         list($h, $min, $s, $d, $m, $y) = explode(":", JevDate::strftime("%H:%M:%S:%d:%m:%Y", $start));
                                         $testStart = JevDate::mktime($h, $min, $s, $m, $targetstartDay, $y);
                                         if ($currentMonth == JevDate::strftime("%m", $testStart)) {
                                             $targetStart = $testStart;
                                             $targetEnd = $targetStart + $duration;
                                             if ($countRepeats >= $this->count) {
                                                 return $this->_repetitions;
                                             }
                                             if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                                 $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                                             }
                                         }
                                     }
                                 }
                             }
                             // now ago to the start of the next month
                             $start = $targetStart;
                             $end = $targetEnd;
                             list($h, $min, $s, $d, $m, $y) = explode(":", JevDate::strftime("%H:%M:%S:%d:%m:%Y", $start));
                             if ($y + $this->rinterval + $m / 12 > 2099) {
                                 return $this->_repetitions;
                             }
                             $start = JevDate::mktime($h, $min, $s, $m, 1, $y + $this->rinterval);
                             $end = $start + $duration;
                         }
                     }
                 }
             }
             return $this->_repetitions;
             break;
         case "MONTHLY":
             if ($this->bymonthday == "" && $this->byday == "") {
                 $this->bymonthday = $startDay;
             }
             if ($this->bymonthday != "") {
                 echo "bymonthday" . $this->bymonthday . " <br/>";
                 // if not byday then by monthday
                 $days = explode(",", $this->bymonthday);
                 // If I have byday and bymonthday then the two considions must be met
                 $weekdays = array();
                 if ($this->byday != "") {
                     foreach (explode(",", $this->byday) as $bday) {
                         $weekdays[] = $weekdayMap[$bday];
                     }
                 }
                 $start = $dtstart;
                 $end = $dtend;
                 $countRepeats = 0;
                 $currentMonthStart = JevDate::mktime(0, 0, 0, $startMonth, 1, $startYear);
                 // do the current month first
                 while ($countRepeats < $this->count && !$this->_afterUntil($currentMonthStart)) {
                     //echo $countRepeats ." ".$this->count." ".$currentMonthStart."<br/>";
                     list($currentMonth, $currentYear) = explode(":", JevDate::strftime("%m:%Y", $currentMonthStart));
                     $currentMonthDays = date("t", $currentMonthStart);
                     foreach ($days as $day) {
                         if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                             return $this->_repetitions;
                         }
                         $details = array();
                         preg_match("/(\\+|-?)(\\d+)/", $day, $details);
                         if (count($details) != 3) {
                             echo "<br/><br/><b>PROBLEMS with {$day}</b><br/><br/>";
                             return $this->_repetitions;
                         } else {
                             list($temp, $plusminus, $daynumber) = $details;
                             if (JString::strlen($plusminus) == 0) {
                                 $plusminus = "+";
                             }
                             if (JString::strlen($daynumber) == 0) {
                                 $daynumber = $startDay;
                             }
                             // always check for dtstart (nothing is allowed earlier)
                             if ($plusminus == "-") {
                                 // must not go before start of month etc.
                                 if ($daynumber > $currentMonthDays) {
                                     continue;
                                 }
                                 echo "I need to check negative bymonth days <br/>";
                                 $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, $currentMonth, $currentMonthDays + 1 - $daynumber, $currentYear);
                                 $targetEnd = $targetStart + $duration;
                                 if ($countRepeats >= $this->count) {
                                     return $this->_repetitions;
                                 }
                                 if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                     $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                                 }
                             } else {
                                 //echo "$daynumber $currentMonthDays bd=".$this->byday." <br/>";
                                 // must not go over end month etc.
                                 if ($daynumber > $currentMonthDays) {
                                     continue;
                                 }
                                 //echo "$startHour,$startMin,$startSecond,$currentMonth,$daynumber,$currentYear<br/>";
                                 $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, $currentMonth, $daynumber, $currentYear);
                                 $targetEnd = $targetStart + $duration;
                                 //echo "$targetStart $targetEnd $dtstartMidnight<br/>";
                                 if ($countRepeats >= $this->count) {
                                     return $this->_repetitions;
                                 }
                                 if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                     // double check for byday constraints
                                     if ($this->byday != "") {
                                         if (!in_array(JevDate::strftime("%w", $targetStart), $weekdays)) {
                                             continue;
                                         }
                                     }
                                     $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                                     //echo "countrepeats = $countRepeats<br/>";
                                 }
                             }
                         }
                     }
                     // now ago to the start of next month
                     if ($currentYear + ($currentMonth + $this->rinterval) / 12 > 2099) {
                         return $this->_repetitions;
                     }
                     $currentMonthStart = JevDate::mktime(0, 0, 0, $currentMonth + $this->rinterval, 1, $currentYear);
                 }
             } else {
                 $days = explode(",", $this->byday);
                 // TODO I should also iterate over week number if this is used
                 //$weeknumbers = explode(",",$this->byweekno);
                 if ($this->bysetpos != "") {
                     $newdays = array();
                     $setpositions = explode(",", $this->bysetpos);
                     foreach ($setpositions as $setposition) {
                         foreach ($days as $day) {
                             if (strpos($setposition, "+") === false && strpos($setposition, "-") === false) {
                                 $setposition = "+" . $setposition;
                             }
                             $newdays[] = $setposition . $day;
                         }
                     }
                     $days = $newdays;
                     $this->byday = implode(",", $days);
                 }
                 $start = $dtstart;
                 $end = $dtend;
                 $countRepeats = 0;
                 $currentMonthStart = JevDate::mktime(0, 0, 0, $startMonth, 1, $startYear);
                 // do the current month first
                 while ($countRepeats < $this->count && !$this->_afterUntil($currentMonthStart)) {
                     list($currentMonth, $currentYear, $currentMonthStartWD) = explode(":", JevDate::strftime("%m:%Y:%w", $currentMonthStart));
                     $currentMonthDays = date("t", $currentMonthStart);
                     $this->sortByDays($days, $currentMonthStart, $dtstart);
                     foreach ($days as $day) {
                         if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                             return $this->_repetitions;
                         }
                         $details = array();
                         preg_match("/(\\+|-?)(\\d?)(.+)/", $day, $details);
                         if (count($details) != 4) {
                             echo "<br/><br/><b>PROBLEMS with {$day}</b><br/><br/>";
                             return $this->_repetitions;
                         } else {
                             list($temp, $plusminus, $weeknumber, $dayname) = $details;
                             if (JString::strlen($plusminus) == 0) {
                                 $plusminus = "+";
                             }
                             if (JString::strlen($weeknumber) == 0) {
                                 $weeknumber = 1;
                             }
                             $multiplier = $plusminus == "+" ? 1 : -1;
                             // always check for dtstart (nothing is allowed earlier)
                             if ($plusminus == "-") {
                                 //echo "count back $weeknumber weeks on $dayname<br/>";
                                 $startLast = date("t", $currentMonthStart);
                                 $currentMonthEndWD = ($startLast - 1 + $currentMonthStartWD) % 7;
                                 $adjustment = $startLast - (7 + $currentMonthEndWD - $weekdayMap[$dayname]) % 7;
                                 $targetstartDay = $adjustment - ($weeknumber - 1) * 7;
                             } else {
                                 //echo "count forward $weeknumber weeks on $dayname<br/>";
                                 $adjustment = 1 + (7 + $weekdayMap[$dayname] - $currentMonthStartWD) % 7;
                                 $targetstartDay = $adjustment + ($weeknumber - 1) * 7;
                             }
                             $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, $currentMonth, $targetstartDay, $currentYear);
                             if ($currentMonth == JevDate::strftime("%m", $targetStart)) {
                                 $targetEnd = $targetStart + $duration;
                                 if ($countRepeats >= $this->count) {
                                     return $this->_repetitions;
                                 }
                                 if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                                     $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                                 }
                             }
                         }
                     }
                     // now go to the start of next month
                     if ($currentYear + ($currentMonth + $this->rinterval) / 12 > 2099) {
                         return $this->_repetitions;
                     }
                     $currentMonthStart = JevDate::mktime(0, 0, 0, $currentMonth + $this->rinterval, 1, $currentYear);
                 }
             }
             return $this->_repetitions;
             break;
         case "WEEKLY":
             $days = explode(",", $this->byday);
             $start = $dtstart;
             $end = $dtend;
             $countRepeats = 0;
             $currentWeekDay = JevDate::strftime("%w", $start);
             // Go to the zero day of the first week (even if this is in the past)
             // this will be the base from which we count the weeks and weekdays
             $currentWeekStart = JevDate::strtotime("-{$currentWeekDay} days", $start);
             // no BYDAY specified
             if ($this->byday == "") {
                 $daynames = array("SU", "MO", "TU", "WE", "TH", "FR", "SA", "SU");
                 $this->byday = "+" . $daynames[$currentWeekDay];
                 $days = array($this->byday);
             }
             while ($countRepeats < $this->count && !$this->_afterUntil($currentWeekStart)) {
                 list($currentDay, $currentMonth, $currentYear) = explode(":", JevDate::strftime("%d:%m:%Y", $currentWeekStart));
                 foreach ($days as $day) {
                     if ($countRepeats >= $this->count || $this->_afterUntil($start)) {
                         return $this->_repetitions;
                     }
                     $details = array();
                     preg_match("/(\\+|-?)(\\d?)(.+)/", $day, $details);
                     if (count($details) != 4) {
                         continue;
                         echo "<br/><br/><b>PROBLEMS with {$day}</b><br/><br/>";
                         return $this->_repetitions;
                     } else {
                         list($temp, $plusminus, $daynumber, $dayname) = $details;
                         if (JString::strlen($plusminus) == 0) {
                             $plusminus = "+";
                         }
                         // this is not relevant for weekly recurrence ?!?!?
                         //if (JString::strlen($daynumber)==0) $daynumber=1;
                         $multiplier = $plusminus == "+" ? 1 : -1;
                         if ($plusminus == "-") {
                             // TODO find out if I ever have this situation?
                             // It would seem meaningless
                         } else {
                             //echo "count forward $daynumber days on $dayname<br/>";
                             $targetstartDay = $currentDay + $weekdayMap[$dayname];
                         }
                         $targetStart = JevDate::mktime($startHour, $startMin, $startSecond, $currentMonth, $targetstartDay, $currentYear);
                         $targetEnd = $targetStart + $duration;
                         if ($countRepeats >= $this->count) {
                             return $this->_repetitions;
                         }
                         if ($targetStart >= $dtstartMidnight && !$this->_afterUntil($targetStart)) {
                             $countRepeats += $this->_makeRepeat($targetStart, $targetEnd);
                         }
                     }
                 }
                 // now go to the start of next week
                 if ($currentYear + $currentMonth / 12 > 2099) {
                     return $this->_repetitions;
                 }
                 $currentWeekStart = JevDate::strtotime("+" . $this->rinterval . " weeks", $currentWeekStart);
             }
             return $this->_repetitions;
             break;
         case "DAILY":
             $start = $dtstart;
             $end = $dtend;
             $countRepeats = 0;
             $startYear = JevDate::strftime("%Y", $start);
             while ($startYear < 2027 && $countRepeats < $this->count && !$this->_afterUntil($start)) {
                 //while ($startYear<5027 && $countRepeats < $this->count && !$this->_afterUntil($start)) {
                 $countRepeats += $this->_makeRepeat($start, $end);
                 $start = JevDate::strtotime("+" . $this->rinterval . " days", $start);
                 $end = JevDate::strtotime("+" . $this->rinterval . " days", $end);
                 $startYear = JevDate::strftime("%Y", $start);
             }
             return $this->_repetitions;
             break;
         case "IRREGULAR":
             $processedDates = array();
             // current date is ALWAYS a repeat
             $processedDates[] = $dtstart;
             $this->_makeRepeat($dtstart, $dtend);
             if (is_string($this->irregulardates) && $this->irregulardates != "") {
                 $this->irregulardates = @json_decode($this->irregulardates);
             }
             if (!is_array($this->irregulardates)) {
                 $this->irregulardates = array();
             }
             sort($this->irregulardates);
             foreach ($this->irregulardates as $irregulardate) {
                 // avoid duplicate values
                 if (in_array($irregulardate, $processedDates)) {
                     continue;
                 }
                 $processedDates[] = $irregulardate;
                 // find the start and end times of the initial event
                 $irregulardate += $dtstart - $dtstartMidnight;
                 $this->_makeRepeat($irregulardate, $irregulardate + $duration);
             }
             return $this->_repetitions;
             break;
         default:
             echo "UNKNOWN TYPE<br/>";
             return $this->_repetitions;
             break;
     }
 }
示例#25
0
 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 . ',&nbsp;' . $this->start_time . '&nbsp;-&nbsp;' . $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') . '&nbsp;' . $this->start_date . '&nbsp;-&nbsp; ' . $this->start_time . '<br />' . JText::_('JEV_TO') . '&nbsp;' . $this->stop_date . '&nbsp;-&nbsp;' . $this->stop_time_midnightFix . '<br/>';
         } else {
             echo JText::_('JEV_FROM') . '&nbsp;' . $this->start_date . '<br />' . JText::_('JEV_TO') . '&nbsp;' . $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 . "&nbsp;-&nbsp;" . $this->stop_time_midnightFix . "&nbsp;";
             }
             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 . '&nbsp;' . JText::_('JEV_EACHOF') . '&nbsp;' . $reccur;
             } else {
                 if ($this->reccurtype() == 2) {
                     $each = JText::_('JEV_EACH') . '&nbsp;';
                     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 ? "," : "") . "&nbsp;";
                         }
                         $weekstring = "";
                     } else {
                         $days = explode("|", $this->reccurweekdays());
                         for ($d = 0; $d < count($days); $d++) {
                             $daystring .= JEventsHTML::getDayName($days[$d]);
                             $daystring .= ($d == 0 ? "," : "") . "&nbsp;";
                         }
                         $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') . '&nbsp;' . $reccur;
                 }
             }
         } else {
             echo JText::_('JEV_EACH') . '&nbsp;' . $reccur;
         }
     } else {
         if ($this->start_date != $this->stop_date) {
             echo JText::_('JEV_ALLDAYS');
         }
     }
 }
示例#26
0
文件: rss.php 项目: poorgeek/JEvents
$docimage->link = $this->info['imagelink'];
$doc->image = $docimage;
foreach ($this->eventsByRelDay as $relDay => $ebrd) {
    foreach ($ebrd as $row) {
        // title for particular item
        $item_title = htmlspecialchars($row->title());
        $item_title = html_entity_decode($item_title);
        // url link to article
        $startDate = $row->publish_up();
        //$eventDate = JevDate::mktime(JString::substr($startDate,11,2),JString::substr($startDate,14,2), JString::substr($startDate,17,2),$this->jeventCalObject->now_m,$this->jeventCalObject->now_d + $relDay,$this->jeventCalObject->now_Y);
        $eventDate = JevDate::strtotime($startDate);
        $datenow = JEVHelper::getNow();
        if ($relDay > 0) {
            $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $eventDate) . " +{$relDay} days");
        } else {
            $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $eventDate) . " {$relDay} days");
        }
        $targetid = $this->modparams->get("target_itemid", 0);
        $link = $row->viewDetailLink(date("Y", $eventDate), date("m", $eventDate), date("d", $eventDate), false, $targetid);
        $link = str_replace("&tmpl=component", "", $link);
        $item_link = JRoute::_($link . $this->jeventCalObject->datamodel->getCatidsOutLink());
        // removes all formating from the intro text for the description text
        $item_description = $row->content();
        // remove dodgy border e.g. "diamond/question mark"
        $item_description = preg_replace('#border=[\\"\'][^0-9]*[\\"\']#i', '', $item_description);
        if ($this->info['limit_text']) {
            if ($this->info['text_length']) {
                $item_description = JFilterOutput::cleanText($item_description);
                // limits description text to x words
                $item_description_array = explode(' ', $item_description);
                $count = count($item_description_array);