function Defaultgetstartenddates($view)
{
    $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
    $startdate = JRequest::getString("startdate", "");
    $enddate = JRequest::getString("enddate", "");
    if ($startdate == "") {
        if ($params->get("relative", "rel") == "abs") {
            $startdate = $params->get("absstart", "");
            list($startyear, $startmonth, $startday) = explode("-", $startdate);
        } else {
            if ($params->get("relative", "rel") == "strtotime") {
                $value = $params->get("strstart", "");
                $value = new JevDate(JevDate::strtotime($value));
                $startdate = $value->toFormat("%Y-%m-%d");
            } else {
                $value = $params->get("relstart", "");
                $value = str_replace(",", " ", $value);
                $value = str_replace("y", "year", $value);
                $value = str_replace("d", "day", $value);
                $value = str_replace("w", "week", $value);
                $value = str_replace("m", "month", $value);
                $value = new JevDate($value);
                $startdate = $value->toFormat("%Y-%m-%d");
            }
        }
    }
    if ($enddate == "") {
        if ($params->get("relative", "rel") == "abs") {
            $enddate = $params->get("absend", "");
        } else {
            if ($params->get("relative", "rel") == "strtotime") {
                $value = $params->get("strend", "");
                $value = new JevDate(JevDate::strtotime($value));
                $enddate = $value->toFormat("%Y-%m-%d");
            } else {
                $value = $params->get("relend", "");
                $value = str_replace(",", " ", $value);
                $value = str_replace("y", "year", $value);
                $value = str_replace("d", "day", $value);
                $value = str_replace("w", "week", $value);
                $value = str_replace("m", "month", $value);
                $value = new JevDate($value);
                $enddate = $value->toFormat("%Y-%m-%d");
            }
        }
    }
    if ($enddate < $startdate) {
        // default to 1 year when input dates are not valid!
        $value = new JevDate($startdate);
        $value->add(new DateInterval('P1Y'));
        $enddate = $value->toFormat("%Y-%m-%d");
    }
    return array($startdate, $enddate);
}
 function eventOnDate($testDate, $multidayTreatment = 0)
 {
     if (!isset($this->_startday)) {
         $this->_startday = JevDate::mktime(0, 0, 0, $this->mup(), $this->dup(), $this->yup());
         $this->_endday = JevDate::mktime(0, 0, 0, $this->mdn(), $this->ddn(), $this->ydn());
         // if ends on midnight then testing day should ignore the second day since no one wants this event to show
         if ($this->hdn() + $this->mindn() + $this->sdn() == 0 && $this->_startday != $this->_endday) {
             $this->_endday -= 86400;
         }
     }
     if ($this->_startday <= $testDate && $this->_endday >= $testDate) {
         // if only show on first day
         if ($multidayTreatment == 2 && $testDate >= $this->_startday + 86400) {
             return false;
         }
         // don't show multiday suppressed events after the first day if multiday is not true
         if ($multidayTreatment == 0) {
             if (!$this->_multiday && $testDate >= $this->_startday + 86400) {
                 return false;
             }
         }
         return true;
     } else {
         return false;
     }
 }
function DefaultdateFormattedDateRange($view)
{
    $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
    if ($params->get("daterangeformat", "") == "") {
        $return = JEventsHTML::getDateFormat($view->startyear, $view->startmonth, $view->startday, 1) . "&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;" . JEventsHTML::getDateFormat($view->endyear, $view->endmonth, $view->endday, 1);
    } else {
        $return = $params->get("daterangeformat", "");
        $startmatches = array();
        preg_match_all('|{START(.*?)}|', $return, $startmatches);
        if (count($startmatches) == 2 && count($startmatches[1]) == 1) {
            $replace = str_replace(array("(", ")"), "", $startmatches[1][0]);
            $datestp = JevDate::mktime(0, 0, 0, $view->startmonth, $view->startday, $view->startyear);
            $replace = JEV_CommonFunctions::jev_strftime($replace, $datestp);
            $return = str_replace($startmatches[0][0], $replace, $return);
        }
        $endmatches = array();
        preg_match_all('|{END(.*?)}|', $return, $endmatches);
        if (count($endmatches) == 2 && count($endmatches[1]) == 1) {
            $replace = str_replace(array("(", ")"), "", $endmatches[1][0]);
            $datestp = JevDate::mktime(0, 0, 0, $view->endmonth, $view->endday, $view->endyear);
            $replace = JEV_CommonFunctions::jev_strftime($replace, $datestp);
            $return = str_replace($endmatches[0][0], $replace, $return);
        }
        //$return = $params->get("daterangeformat", "");
    }
    return $return;
}
Example #4
0
 function getAdjacentYear($year, $month, $day, $direction = 1)
 {
     $d1 = JevDate::mktime(0, 0, 0, $month, $day, $year + $direction);
     $day = JevDate::strftime("%d", $d1);
     $year = JevDate::strftime("%Y", $d1);
     $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
     $cfg = JEVConfig::getInstance();
     if (method_exists("JEVHelper", "getMinYear")) {
         $earliestyear = JEVHelper::getMinYear();
         $latestyear = JEVHelper::getMaxYear();
     } else {
         $earliestyear = $params->get("com_earliestyear", 1970);
         $latestyear = $params->get("com_latestyear", 2150);
     }
     if ($year > $latestyear || $year < $earliestyear) {
         return false;
     }
     $month = JevDate::strftime("%m", $d1);
     $task = JRequest::getString('jevtask');
     $Itemid = JEVHelper::getItemid();
     if (isset($Itemid)) {
         $item = "&Itemid={$Itemid}";
     } else {
         $item = "";
     }
     return JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&task={$task}{$item}&year={$year}&month={$month}&day={$day}");
 }
 function listevents($tpl = null)
 {
     JEVHelper::componentStylesheet($this);
     $params =& JComponentHelper::getParams(JEV_COM_COMPONENT);
     $value = trim($params->get("relstart", ""));
     if ($value != "") {
         $value = str_replace(",", " ", $value);
         $value = str_replace("y", "year", $value);
         $value = str_replace("d", "day", $value);
         $value = str_replace("w", "week", $value);
         $value = str_replace("m", "month", $value);
         $value = new JevDate($value);
         $startdate = $value->toFormat("%Y-%m-%d");
         list($startyear, $startmonth, $startday) = explode("-", $startdate);
     } else {
         $startyear = $params->get("com_earliestyear", 2008);
         $startdate = $startyear . "-01-01";
         $startmonth = 1;
         $startday = 1;
     }
     if ($value != "") {
         $value = trim($params->get("relend", ""));
         $value = str_replace(",", " ", $value);
         $value = str_replace("y", "year", $value);
         $value = str_replace("d", "day", $value);
         $value = str_replace("w", "week", $value);
         $value = str_replace("m", "month", $value);
         $value = new JevDate($value);
         $enddate = $value->toFormat("%Y-%m-%d");
         list($endyear, $endmonth, $endday) = explode("-", $enddate);
     } else {
         $endyear = $params->get("com_latestyear", 2020);
         $enddate = $endyear . "-12-31";
         $endmonth = 12;
         $endday = 31;
     }
     $this->assign("startdate", $startdate);
     $this->assign("startyear", $startyear);
     $this->assign("startmonth", $startmonth);
     $this->assign("startday", $startday);
     $this->assign("enddate", $enddate);
     $this->assign("endyear", $endyear);
     $this->assign("endmonth", $endmonth);
     $this->assign("endday", $endday);
     // Note that using a $limit value of -1 the limit is ignored in the query
     $this->assign("data", $this->datamodel->getRangeData($startdate, $enddate, $this->limit, $this->limitstart));
 }
Example #6
0
 /**
  * override store function to force rrule to save too!
  *
  * @param unknown_type $updateNulls
  */
 function store($updateNulls = false)
 {
     $date = JevDate::getDate();
     $this->modified = $date->toMySQL();
     if (parent::store($updateNulls)) {
         // I also need to store custom data
         $dispatcher = JDispatcher::getInstance();
         // just incase we don't have jevents plugins registered yet
         JPluginHelper::importPlugin("jevents");
         $res = $dispatcher->trigger('onStoreCustomDetails', array(&$this));
     } else {
         JError::raiseError(321, "Problem saving event " . $this->_db->getErrorMsg());
     }
     return $this->evdet_id;
 }
Example #7
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;
 }
    function editICalendar($icsid, $catid, $access = 0, $state = 1, $label = "")
    {
        $db =& JFactory::getDBO();
        $temp = new iCalICSFile($db);
        $temp->_setup($icsid, $catid, $access, $state);
        $temp->filename = "_from_scratch_";
        $temp->icaltype = 2;
        $temp->label = empty($label) ? 'Scratch-' . md5(JevDate::mktime()) : $label;
        $temp->srcURL = "";
        $rawText = <<<RAWTEXT

BEGIN:VCALENDAR
PRODID:-//JEvents Project//JEvents Calendar 1.5.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:{$label}
X-WR-TIMEZONE:Europe/London
BEGIN:VTIMEZONE
TZID:Europe/London
X-LIC-LOCATION:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19700329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
\t\t
RAWTEXT;
        $temp->_icalInfo =& JEVHelper::iCalInstance("", $rawText);
        return $temp;
    }
 function getAdjacentYear($year, $month, $day, $direction = 1)
 {
     $d1 = JevDate::mktime(0, 0, 0, $month, $day, $year + $direction);
     $day = JevDate::strftime("%d", $d1);
     $year = JevDate::strftime("%Y", $d1);
     $cfg =& JEVConfig::getInstance();
     $earliestyear = $cfg->get('com_earliestyear');
     $latestyear = $cfg->get('com_latestyear');
     if ($year > $latestyear || $year < $earliestyear) {
         return false;
     }
     $month = JevDate::strftime("%m", $d1);
     $task = JRequest::getString('jevtask');
     $Itemid = JEVHelper::getItemid();
     if (isset($Itemid)) {
         $item = "&Itemid={$Itemid}";
     } else {
         $item = "";
     }
     return JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&task={$task}{$item}&year={$year}&month={$month}&day={$day}");
 }
Example #10
0
 static function getEventStringArray($row)
 {
     $urlString['title'] = urlencode($row->title());
     $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
     $tz = $params->get("icaltimezonelive", "");
     if ($tz) {
         $urlString['dates'] = JevDate::strftime("%Y%m%dT%H%M%S", $row->getUnixStartTime()) . "/" . JevDate::strftime("%Y%m%dT%H%M%S", $row->getUnixEndTime()) . "&ctz=" . $tz;
     } else {
         $urlString['dates'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixStartTime()) . "/" . JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixEndTime());
     }
     $urlString['st'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixStartTime());
     $urlString['et'] = JevDate::strftime("%Y%m%dT%H%M%SZ", $row->getUnixEndTime());
     $urlString['duration'] = (int) $row->getUnixEndTime() - (int) $row->getUnixStartTime();
     $urlString['location'] = urlencode(isset($row->_locationaddress) ? $row->_locationaddress : $row->location());
     $urlString['sitename'] = urlencode(JFactory::getApplication()->get('sitename'));
     $urlString['siteurl'] = urlencode(JUri::root());
     $urlString['rawdetails'] = urlencode($row->get('description'));
     $urlString['details'] = strip_tags($row->get('description'));
     if (JString::strlen($urlString['details']) > 100) {
         $urlString['details'] = JString::substr($urlString['details'], 0, 100) . ' ...';
     }
     $urlString['details'] = urlencode($urlString['details']);
     return $urlString;
 }
Example #11
0
 /**
  * Gets the date in a specific format
  *
  * Returns a string formatted according to the given format. Month and weekday names and
  * other language dependent strings respect the current locale
  *
  * @deprecated	Deprecated since 1.6, use JDate::format() instead.
  *
  * @param	string	The date format specification string (see {@link PHP_MANUAL#JevDate::strftime})
  * @param	boolean	True to return the date string in the local time zone, false to return it in GMT.
  * @return	string	The date as a formatted string.
  * @since	1.5
  */
 public function toFormat($format = '%Y-%m-%d %H:%M:%S', $local = false)
 {
     // do not reset the timezone !! - this is needed for the weekdays
     // Set time zone to GMT as JevDate::strftime formats according locale setting.
     // date_default_timezone_set('GMT');
     // Generate the timestamp.
     $time = (int) parent::format('U', true);
     // this requires php 5.3!
     //$time = $this->getTimeStamp();
     // If the returned time should be local add the GMT offset.
     if ($local) {
         $time += $this->getOffsetFromGMT();
     }
     // Manually modify the month and day strings in the format.
     if (strpos($format, '%a') !== false) {
         $format = str_replace('%a', $this->dayToString(date('w', $time), true), $format);
     }
     if (strpos($format, '%A') !== false) {
         $format = str_replace('%A', $this->dayToString(date('w', $time)), $format);
     }
     if (strpos($format, '%b') !== false) {
         $format = str_replace('%b', $this->monthToString(date('n', $time), true), $format);
     }
     if (strpos($format, '%B') !== false) {
         $format = str_replace('%B', $this->monthToString(date('n', $time)), $format);
     }
     // Generate the formatted string.
     $date = JevDate::strftime($format, $time);
     // reset the timezone !!
     date_default_timezone_set(self::$stz->getName());
     return $date;
 }
Example #12
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;
 }
Example #13
0
	</div>
</div>
<div class="jev_clear"></div>
<div id='jev_maincal' class='jev_listview'>

	<?php 
$num_events = count($data['rows']);
$chdate = "";
if ($num_events > 0) {
    $hasevents = true;
    for ($r = 0; $r < $num_events; $r++) {
        $row = $data['rows'][$r];
        $event_day_month_year = $row->dup() . $row->mup() . $row->yup();
        // Ensure we reflect multiday setting
        if (!$row->eventOnDate(JevDate::mktime(0, 0, 0, $row->mup(), $row->dup(), $row->yup()))) {
            continue;
        }
        $date = JEventsHTML::getDateFormat($row->yup(), $row->mup(), $row->dup(), 1);
        ?>
			<div class="jev_listrow">
		<ul class='ev_ul'>

					<?php 
        $listyle = 'style="border-color:' . $row->bgcolor() . ';"';
        echo "<li class='ev_td_li' {$listyle}>\n";
        if (!$this->loadedFromTemplate('icalevent.list_row', $row, 0)) {
            $this->viewEventRowNEW($row);
            echo "&nbsp;::&nbsp;";
            $this->viewEventCatRowNEW($row);
        }
Example #14
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;
 }
Example #15
0
 /**
  * Support all JevDate::strftime() parameter for Window systems
  *
  * @param string $format
  * @param int $timestamp
  * @return string formated string
  */
 function jev_strftime($format = '', $timestamp = null)
 {
     if (!$timestamp) {
         $timestamp = time();
     }
     // Replace names by own translation to get rid of improper os system library
     if (strpos($format, '%a') !== false) {
         $format = str_replace('%a', JEVHelper::getShortDayName(date('w', $timestamp)), $format);
     }
     if (strpos($format, '%A') !== false) {
         $format = str_replace('%A', JEVHelper::getDayName(date('w', $timestamp)), $format);
     }
     if (strpos($format, '%b') !== false) {
         $format = str_replace('%b', JEVHelper::getShortMonthName(date('n', $timestamp)), $format);
     }
     if (strpos($format, '%B') !== false) {
         $format = str_replace('%B', JEVHelper::getMonthName(date('n', $timestamp)), $format);
     }
     if (JUtility::isWinOS()) {
         if (!class_exists('JEV_CompatWin')) {
             require_once dirname(__FILE__) . '/compatwin.php';
         }
         return JEV_CompatWin::win_strftime($format, $timestamp);
     } else {
         return JevDate::strftime($format, $timestamp);
     }
 }
 function edit()
 {
     // get the view
     $this->view =& $this->getView("icalevent", "html");
     $cid = JRequest::getVar('cid', array(0));
     JArrayHelper::toInteger($cid);
     if (is_array($cid) && count($cid) > 0) {
         $id = $cid[0];
     } else {
         $id = 0;
     }
     // front end passes the id as evid
     if ($id == 0) {
         $id = JRequest::getInt("evid", 0);
     }
     if (!JEVHelper::isEventCreator()) {
         JError::raiseError(403, JText::_('ALERTNOTAUTH'));
     }
     $repeatId = 0;
     $db = JFactory::getDBO();
     // iCal agid uses GUID or UUID as identifier
     if ($id > 0) {
         if ($repeatId == 0) {
             // this version gives us a repeat not an event so
             //$row = $this->queryModel->getEventById($id, true, "icaldb");
             $vevent = $this->dataModel->queryModel->getVEventById($id);
             if (!$vevent) {
                 $Itemid = JRequest::getInt("Itemid");
                 JFactory::getApplication()->redirect(JRoute::_("index.php?option=" . JEV_COM_COMPONENT . "&Itemid={$Itemid}", false), JText::_("JEV_SORRY_UPDATED"));
             }
             $row = new jIcalEventDB($vevent);
             $row->fixDtstart();
         } else {
             $row = $this->queryModel->listEventsById($repeatId, true, "icaldb");
         }
         if (!JEVHelper::canEditEvent($row)) {
             JError::raiseError(403, JText::_('ALERTNOTAUTH'));
         }
     } else {
         $vevent = new iCalEvent($db);
         $vevent->set("freq", "DAILY");
         $vevent->set("description", "");
         $vevent->set("summary", "");
         list($year, $month, $day) = JEVHelper::getYMD();
         $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
         $defaultstarttime = $params->get("defaultstarttime", "08:00");
         $defaultendtime = $params->get("defaultendtime", "17:00");
         list($starthour, $startmin) = explode(":", $defaultstarttime);
         list($endhour, $endmin) = explode(":", $defaultendtime);
         $vevent->set("dtstart", JevDate::mktime($starthour, $startmin, 0, $month, $day, $year));
         $vevent->set("dtend", JevDate::mktime($endhour, $endmin, 0, $month, $day, $year));
         $row = new jIcalEventDB($vevent);
         // TODO - move this to class!!
         // populate with meaningful initial values
         $row->starttime($defaultstarttime);
         $row->endtime($defaultendtime);
     }
     /*
     $db =& JFactory::getDBO();
     // get list of groups
     $query = "SELECT id AS value, name AS text"
     . "\n FROM #__groups"
     . "\n ORDER BY id"	;
     $db->setQuery( $query );
     $groups = $db->loadObjectList();
     
     // build the html select list
     $glist = JHTML::_('select.genericlist', $groups, 'access', 'class="inputbox" size="1"',	'value', 'text', intval( $row->access() ) );
     */
     $glist = JEventsHTML::buildAccessSelect(intval($row->access()), 'class="inputbox" size="1"');
     // get all the raw native calendars
     $nativeCals = $this->dataModel->queryModel->getNativeIcalendars();
     // Strip this list down based on user permissions
     $jevuser =& JEVHelper::getAuthorisedUser();
     if ($jevuser && $jevuser->calendars != "" && $jevuser->calendars != "all") {
         $cals = array_keys($nativeCals);
         $allowedcals = explode("|", $jevuser->calendars);
         foreach ($cals as $calid) {
             if (!in_array($calid, $allowedcals)) {
                 unset($nativeCals[$calid]);
             }
         }
     }
     // Are we allowed to edit events within a URL based iCal
     $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
     if ($params->get("allowedit", 0) && $row->icsid() > 0) {
         $calsql = 'SELECT * FROM #__jevents_icsfile WHERE ics_id=' . intval($row->icsid());
         $db->setQuery($calsql);
         $cal = $db->loadObject();
         if ($cal && $cal->icaltype == 0) {
             $nativeCals[$cal->ics_id] = $cal;
             $this->view->assign("offerlock", 1);
         }
     }
     $excats = "0";
     if ($jevuser && $jevuser->categories != "" && $jevuser->categories != "all") {
         // Find which categories to exclude
         if (JVersion::isCompatible("1.6.0")) {
             $catsql = 'SELECT id  FROM #__categories WHERE id NOT IN (' . str_replace("|", ",", $jevuser->categories) . ') AND extension="com_jevents"';
         } else {
             $catsql = 'SELECT id  FROM #__categories WHERE id NOT IN (' . str_replace("|", ",", $jevuser->categories) . ') AND section="com_jevents"';
         }
         $db->setQuery($catsql);
         $excats = implode(",", $db->loadResultArray());
     }
     // only offer a choice of native calendars if it exists!
     if (count($nativeCals) > 1) {
         $icalList = array();
         $icalList[] = JHTML::_('select.option', '0', JText::_('JEV_EVENT_CHOOSE_ICAL'), 'ics_id', 'label');
         $icalList = array_merge($icalList, $nativeCals);
         $clist = JHTML::_('select.genericlist', $icalList, 'ics_id', " onchange='preselectCategory(this);'", 'ics_id', 'label', $row->icsid());
         $this->view->assign('clistChoice', true);
         $this->view->assign('defaultCat', 0);
     } else {
         if (count($nativeCals) == 0 || !is_array($nativeCals)) {
             JError::raiseWarning(870, JText::_('INVALID_CALENDAR_STRUCTURE'));
         }
         $icsid = $row->icsid() > 0 ? $row->icsid() : current($nativeCals)->ics_id;
         $clist = '<input type="hidden" name="ics_id" value="' . $icsid . '" />';
         $this->view->assign('clistChoice', false);
         $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
         if ($params->get("defaultcat", false)) {
             $this->view->assign('defaultCat', current($nativeCals)->catid);
         } else {
             $this->view->assign('defaultCat', 0);
         }
     }
     // Set the layout
     $this->view->setLayout('edit');
     $this->view->assign('editCopy', $this->editCopy);
     $this->view->assign('id', $id);
     $this->view->assign('row', $row);
     $this->view->assign('excats', $excats);
     $this->view->assign('nativeCals', $nativeCals);
     $this->view->assign('clist', $clist);
     $this->view->assign('repeatId', $repeatId);
     $this->view->assign('glist', $glist);
     // only those who can publish globally can set priority field
     if (JEVHelper::isEventPublisher(true)) {
         $list = array();
         for ($i = 0; $i < 10; $i++) {
             $list[] = JHTML::_('select.option', $i, $i, 'val', 'text');
         }
         $priorities = JHTML::_('select.genericlist', $list, 'priority', "", 'val', 'text', $row->priority());
         $this->view->assign('setPriority', true);
         $this->view->assign('priority', $priorities);
     } else {
         $this->view->assign('setPriority', false);
     }
     $this->view->assignRef('dataModel', $this->dataModel);
     // for Admin interface only
     $this->view->assign('with_unpublished_cat', JFactory::getApplication()->isAdmin());
     $this->view->display();
 }
Example #17
0
function JEventsBuildRouteNew(&$query, $task)
{
    $transtask = translatetask($task);
    $params = JComponentHelper::getParams("com_jevents");
    // get a menu item based on Itemid or currently active
    $app = JFactory::getApplication();
    $menu = $app->getMenu();
    // we need a menu item.  Either the one specified in the query, or the current active one if none specified
    if (empty($query['Itemid'])) {
        $menuItem = $menu->getActive();
        $menuItemGiven = false;
    } else {
        $menuItem = $menu->getItem($query['Itemid']);
        $menuItemGiven = true;
    }
    $cfg = JEVConfig::getInstance();
    $segments = array();
    if (count($query) == 2 && isset($query['Itemid']) && isset($query['option'])) {
        // special case where we do not need any information since its a menu item
        // as long as the task matches up!
        $menu = JFactory::getApplication()->getMenu();
        $menuitem = $menu->getItem($query["Itemid"]);
        if (!is_null($menuitem) && (isset($menuitem->query["task"]) || isset($menuitem->query["view"]) && isset($menuitem->query["layout"]))) {
            if (isset($menuitem->query["task"]) && $task == $menuitem->query["task"]) {
                return $segments;
            } else {
                if (isset($menuitem->query["view"]) && isset($menuitem->query["layout"]) && $task == $menuitem->query["view"] . "." . $menuitem->query["layout"]) {
                    return $segments;
                } else {
                    $segments[] = $transtask;
                }
            }
        }
    }
    switch ($task) {
        case "year.listevents":
        case "month.calendar":
        case "week.listevents":
        case "day.listevents":
        case "cat.listevents":
        case "jevent.detail":
        case "icalevent.detail":
        case "icalrepeat.detail":
        case "search.form":
        case "search.results":
        case "admin.listevents":
            if (!in_array($transtask, $segments)) {
                $segments[] = $transtask;
            }
            $config = JFactory::getConfig();
            $t_datenow = JEVHelper::getNow();
            // if no date in the query then use TODAY not the calendar date
            $nowyear = JevDate::strftime('%Y', $t_datenow->toUnix(true));
            $nowmonth = JevDate::strftime('%m', $t_datenow->toUnix(true));
            $nowday = JevDate::strftime('%d', $t_datenow->toUnix(true));
            if (isset($query['year'])) {
                $year = $query['year'] == "YYYYyyyy" ? "YYYYyyyy" : intval($query['year']);
                unset($query['year']);
            } else {
                $year = $nowyear;
            }
            if (isset($query['month'])) {
                $month = $query['month'] == "MMMMmmmm" ? "MMMMmmmm" : intval($query['month']);
                unset($query['month']);
            } else {
                $month = $nowmonth;
            }
            if (isset($query['day'])) {
                $day = intval($query['day']);
                unset($query['day']);
            } else {
                // if no date in the query then use TODAY not the calendar date
                $day = $nowday;
            }
            // for week data always go to the start of the week
            if ($task == "week.listevents" && is_int($month)) {
                $startday = $cfg->get('com_starday');
                if (!$startday) {
                    $startday = 0;
                }
                $date = mktime(5, 5, 5, $month, $day, $year);
                $currentday = strftime("%w", $date);
                if ($currentday > $startday) {
                    $date -= ($currentday - $startday) * 86400;
                    list($year, $month, $day) = explode("-", strftime("%Y-%m-%d", $date));
                } else {
                    if ($currentday < $startday) {
                        $date -= (7 + $currentday - $startday) * 86400;
                        list($year, $month, $day) = explode("-", strftime("%Y-%m-%d", $date));
                    }
                }
            }
            // only include the year in the date and list views
            if (in_array($task, array("year.listevents", "month.calendar", "week.listevents", "day.listevents"))) {
                $segments[] = $year;
            }
            // only include the month in the date and list views (excluding year)
            if (in_array($task, array("month.calendar", "week.listevents", "day.listevents"))) {
                $segments[] = $month;
            }
            // only include the day in the week and day views (excluding year and month)
            if (in_array($task, array("week.listevents", "day.listevents"))) {
                $segments[] = $day;
            }
            switch ($task) {
                case "jevent.detail":
                case "icalevent.detail":
                case "icalrepeat.detail":
                    if (isset($query['jevtype'])) {
                        unset($query['jevtype']);
                    }
                    if ($transtask != "") {
                        if (isset($query['evid'])) {
                            $segments[] = $query['evid'];
                            unset($query['evid']);
                        } else {
                            $segments[] = "0";
                        }
                    }
                    break;
                default:
                    break;
            }
            if (isset($query['catids']) && strlen($query['catids']) > 0) {
                $segments[] = $query['catids'];
                unset($query['catids']);
            } else {
                if ($transtask != "") {
                    $segments[] = "-";
                }
            }
            switch ($task) {
                case "icalrepeat.detail":
                    if (isset($query['uid'])) {
                        // Some remote UIDs have @ and other dodgy characters in them so encode them for safety
                        //$segments[] = base64_encode($query['uid']);
                        unset($query['uid']);
                    }
                    if (isset($query['title'])) {
                        $segments[] = substr(JApplication::stringURLSafe($query['title']), 0, 150);
                        unset($query['title']);
                    } else {
                        $segments[] = "-";
                    }
                    if ($transtask == "") {
                        if (isset($query['evid'])) {
                            $segments[] = $query['evid'];
                            unset($query['evid']);
                        } else {
                            $segments[] = "0";
                        }
                    }
                    break;
                default:
                    break;
            }
            break;
        case "jevent.edit":
        case "icalevent.edit":
        case "icalevent.publish":
        case "icalevent.unpublish":
        case "icalevent.editcopy":
        case "icalrepeat.edit":
        case "jevent.delete":
        case "icalevent.delete":
        case "icalrepeat.delete":
        case "icalrepeat.deletefuture":
            $segments[] = $transtask;
            if (isset($query['jevtype'])) {
                unset($query['jevtype']);
            }
            if (isset($query['evid'])) {
                $segments[] = $query['evid'];
                unset($query['evid']);
            } else {
                $segments[] = "0";
            }
            break;
        case "modlatest.rss":
            $segments[] = $transtask;
            // assume implicit feed document
            //unset($query['format']);
            // feed type
            if (isset($query['type'])) {
                $segments[] = $query['type'];
                unset($query['type']);
            } else {
                $segments[] = 'rss';
            }
            // modid
            if (isset($query['modid'])) {
                $segments[] = $query['modid'];
                unset($query['modid']);
            } else {
                $segments[] = "0";
            }
            break;
        case "icalrepeat.vcal":
        case "icalevent.vcal":
            $segments[] = $transtask;
            if (isset($query['evid'])) {
                $segments[] = $query['evid'];
                unset($query['evid']);
            } else {
                $segments[] = "0";
            }
            if (isset($query['catids'])) {
                $segments[] = $query['catids'];
                unset($query['catids']);
            } else {
                $segments[] = "0";
            }
            break;
        default:
            $segments[] = $transtask;
            $segments[] = "-";
            break;
    }
    return $segments;
}
Example #18
0
function JEventsBuildRoute(&$query)
{
    $cfg =& JEVConfig::getInstance();
    $segments = array();
    // sometimes the task is not set but view and layout are so tackle this!
    if (!isset($query['task']) && isset($query['view']) && isset($query['layout'])) {
        $query['task'] = $query['view'] . "." . $query['layout'];
    }
    // We don't need the view - its only used to manipulate parameters
    if (isset($query['view'])) {
        unset($query['view']);
    }
    if (isset($query['layout'])) {
        unset($query['layout']);
    }
    $task = false;
    $task = false;
    if (!isset($query['task'])) {
        if (isset($query["Itemid"])) {
            $menu =& JSite::getMenu();
            $menuitem = $menu->getItem($query["Itemid"]);
            if (!is_null($menuitem) && isset($menuitem->query["task"])) {
                $task = $menuitem->query["task"];
                return $segments;
            } else {
                if (!is_null($menuitem) && isset($menuitem->query["layout"]) && isset($menuitem->query["view"])) {
                    $task = $menuitem->query["view"] . "." . $menuitem->query["layout"];
                }
            }
        }
        if (!$task) {
            $task = 'month.calendar';
        }
    } else {
        $task = $query['task'];
        unset($query['task']);
    }
    switch ($task) {
        case "year.listevents":
        case "month.calendar":
        case "week.listevents":
        case "day.listevents":
        case "cat.listevents":
        case "jevent.detail":
        case "icalevent.detail":
        case "icalrepeat.detail":
        case "search.form":
        case "search.results":
        case "admin.listevents":
            $segments[] = $task;
            $config =& JFactory::getConfig();
            $t_datenow = JEVHelper::getNow();
            // if no date in the query then use TODAY not the calendar date
            $nowyear = JevDate::strftime('%Y', $t_datenow->toUnix(true));
            $nowmonth = JevDate::strftime('%m', $t_datenow->toUnix(true));
            $nowday = JevDate::strftime('%d', $t_datenow->toUnix(true));
            /*
            $year	= intval( JRequest::getVar( 'year',	 $nowyear ));
            $month	= intval( JRequest::getVar( 'month', $nowmonth ));
            $day	= intval( JRequest::getVar( 'day',	 $nowday ));
            */
            if (isset($query['year'])) {
                $segments[] = $query['year'];
                unset($query['year']);
            } else {
                // if no date in the query then use TODAY not the calendar date
                $segments[] = $nowyear;
            }
            if (isset($query['month'])) {
                $segments[] = $query['month'];
                unset($query['month']);
            } else {
                // if no date in the query then use TODAY not the calendar date
                $segments[] = $nowmonth;
            }
            if (isset($query['day'])) {
                $segments[] = $query['day'];
                unset($query['day']);
            } else {
                // if no date in the query then use TODAY not the calendar date
                $segments[] = $nowday;
            }
            switch ($task) {
                case "jevent.detail":
                case "icalevent.detail":
                case "icalrepeat.detail":
                    if (isset($query['jevtype'])) {
                        unset($query['jevtype']);
                    }
                    if (isset($query['evid'])) {
                        $segments[] = $query['evid'];
                        unset($query['evid']);
                    } else {
                        $segments[] = "0";
                    }
                    /*
                    // Can we drop the use of uid?
                    if(isset($query['title'])) {
                    $segments[] = JFilterOutput::stringURLSafe($query['title']);
                    unset($query['title']);
                    }
                    else {
                    $segments[] = "-";
                    }
                    */
                    break;
                default:
                    break;
            }
            if (isset($query['catids']) && strlen($query['catids']) > 0) {
                $segments[] = $query['catids'];
                unset($query['catids']);
            } else {
                $segments[] = "-";
            }
            switch ($task) {
                case "icalrepeat.detail":
                    if (isset($query['uid'])) {
                        // Some remote UIDs have @ and other dodgy characters in them so encode them for safety
                        //$segments[] = base64_encode($query['uid']);
                        unset($query['uid']);
                    }
                    if (isset($query['title'])) {
                        $segments[] = substr(JFilterOutput::stringURLSafe($query['title']), 0, 150);
                        unset($query['title']);
                    } else {
                        $segments[] = "-";
                    }
                    break;
                default:
                    break;
            }
            break;
        case "jevent.edit":
        case "icalevent.edit":
        case "icalevent.publish":
        case "icalevent.unpublish":
        case "icalevent.editcopy":
        case "icalrepeat.edit":
        case "jevent.delete":
        case "icalevent.delete":
        case "icalrepeat.delete":
        case "icalrepeat.deletefuture":
            $segments[] = $task;
            if (isset($query['jevtype'])) {
                unset($query['jevtype']);
            }
            if (isset($query['evid'])) {
                $segments[] = $query['evid'];
                unset($query['evid']);
            } else {
                $segments[] = "0";
            }
            break;
        case "modlatest.rss":
            $segments[] = $task;
            // assume implicit feed document
            //unset($query['format']);
            // feed type
            if (isset($query['type'])) {
                $segments[] = $query['type'];
                unset($query['type']);
            } else {
                $segments[] = 'rss';
            }
            // modid
            if (isset($query['modid'])) {
                $segments[] = $query['modid'];
                unset($query['modid']);
            } else {
                $segments[] = "0";
            }
            break;
        case "icalrepeat.vcal":
        case "icalevent.vcal":
            $segments[] = $task;
            if (isset($query['evid'])) {
                $segments[] = $query['evid'];
                unset($query['evid']);
            } else {
                $segments[] = "0";
            }
            if (isset($query['catids'])) {
                $segments[] = $query['catids'];
                unset($query['catids']);
            } else {
                $segments[] = "0";
            }
            break;
        default:
            $segments[] = $task;
            $segments[] = "-";
            break;
    }
    return $segments;
}
 /**
  * Search method
  *
  * The sql must return the following fields that are used in a common display
  * routine: href, title, section, created, text, browsernav
  * @param string Target search string
  * @param string matching option, exact|any|all
  * @param string ordering option, newest|oldest|popular|alpha|category
  */
 function onSearch($text, $phrase = '', $ordering = '', $areas = null)
 {
     $db = JFactory::getDBO();
     $user = JFactory::getUser();
     $groups = version_compare(JVERSION, '1.6.0', '>=') ? implode(',', $user->getAuthorisedViewLevels()) : false;
     $limit = version_compare(JVERSION, '1.6.0', '>=') ? $this->params->get('search_limit', 50) : $this->_params->def('search_limit', 50);
     $dateformat = version_compare(JVERSION, '1.6.0', ">=") ? $this->params->get('date_format', "%d %B %Y") : $this->_params->def('date_format', "%d %B %Y");
     $allLanguages = $this->params->get('all_language_search', true);
     $limit = "\n LIMIT {$limit}";
     $text = trim($text);
     if ($text == '') {
         return array();
     }
     if (is_array($areas)) {
         $test = array_keys(plgSearchEventsSearchAreas());
         if (!array_intersect($areas, array_keys(plgSearchEventsSearchAreas()))) {
             return array();
         }
     }
     $params = JComponentHelper::getParams("com_jevents");
     // See http://www.php.net/manual/en/timezones.php
     $tz = $params->get("icaltimezonelive", "");
     if ($tz != "" && is_callable("date_default_timezone_set")) {
         $timezone = date_default_timezone_get();
         date_default_timezone_set($tz);
         $this->jeventstimezone = $timezone;
     }
     $search_ical_attributes = array('det.summary', 'det.description', 'det.location', 'det.contact', 'det.extra_info');
     // process the new plugins
     // get extra data and conditionality from plugins
     $extrawhere = array();
     $extrajoin = array();
     $needsgroup = false;
     $filterarray = array("published");
     $dataModel = new JEventsDataModel();
     $compparams = JComponentHelper::getParams("com_jevents");
     if ($compparams->get("multicategory", 0)) {
         $catwhere = "\n AND catmap.catid IN(" . $dataModel->accessibleCategoryList(null, null, null, $allLanguages) . ")";
         $catjoin = "\n LEFT JOIN #__jevents_catmap as catmap ON catmap.evid = rpt.eventid";
         $catjoin .= "\n LEFT JOIN #__categories AS b ON catmap.catid = b.id";
     } else {
         $catwhere = "\n AND ev.catid IN(" . $dataModel->accessibleCategoryList(null, null, null, $allLanguages) . ")";
         $catjoin = "\n INNER JOIN #__categories AS b ON b.id = ev.catid";
     }
     // If there are extra filters from the module then apply them now
     $reg = JFactory::getConfig();
     $modparams = $reg->get("jev.modparams", false);
     if ($modparams && $modparams->get("extrafilters", false)) {
         $filterarray = array_merge($filterarray, explode(",", $modparams->get("extrafilters", false)));
     }
     $filters = jevFilterProcessing::getInstance($filterarray);
     $filters->setWhereJoin($extrawhere, $extrajoin);
     $needsgroup = $filters->needsGroupBy();
     JPluginHelper::importPlugin('jevents');
     $dispatcher = JDispatcher::getInstance();
     $dispatcher->trigger('onListIcalEvents', array(&$extrafields, &$extratables, &$extrawhere, &$extrajoin, &$needsgroup));
     $extrajoin = count($extrajoin) ? " \n LEFT JOIN " . implode(" \n LEFT JOIN ", $extrajoin) : '';
     $extrawhere = count($extrawhere) ? ' AND ' . implode(' AND ', $extrawhere) : '';
     $extrasearchfields = array();
     $dispatcher->trigger('onSearchEvents', array(&$extrasearchfields, &$extrajoin, &$needsgroup));
     $wheres = array();
     $wheres_ical = array();
     switch ($phrase) {
         case 'exact':
             $text = $db->Quote('%' . $db->escape($text, true) . '%', false);
             // ical
             $wheres2 = array();
             foreach ($search_ical_attributes as $search_item) {
                 $wheres2[] = "LOWER({$search_item}) LIKE " . $text;
             }
             $where_ical = '(' . implode(') OR (', $wheres2) . ')';
             break;
         case 'all':
         case 'any':
         default:
             $words = explode(' ', $text);
             $text = $db->Quote('%' . $db->escape($text, true) . '%', false);
             // ical
             $wheres = array();
             foreach ($words as $word) {
                 $word = $db->Quote('%' . $db->escape($word) . '%', false);
                 $wheres2 = array();
                 foreach ($search_ical_attributes as $search_item) {
                     $wheres2[] = "LOWER({$search_item}) LIKE " . $word;
                 }
                 $wheres[] = implode(' OR ', $wheres2);
             }
             $where_ical = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $wheres) . ')';
             break;
     }
     if (count($extrasearchfields) > 0) {
         $extraor = implode(" OR ", $extrasearchfields);
         $extraor = " OR " . $extraor;
         // replace the ### placeholder with the keyword
         // $text is already exscaped above
         $extraor = str_replace("###", $text, $extraor);
         $where_ical .= $extraor;
     }
     // some of the where statements may already be escaped
     $where_ical = str_replace("%'%'", "%'", $where_ical);
     $where_ical = str_replace("''", "'", $where_ical);
     $where_ical = str_replace("'%'%", "'%", $where_ical);
     $morder = '';
     $morder_ical = '';
     switch ($ordering) {
         case 'oldest':
             $order = 'a.created ASC';
             $order_ical = 'det.created ASC';
             break;
         case 'popular':
             $order = 'a.hits DESC';
             $order_ical = 'det.created ASC';
             // no hit field available
             break;
         case 'alpha':
             $order = 'a.title ASC';
             $order_ical = 'det.summary ASC';
             break;
         case 'category':
             $order = 'b.title ASC, a.title ASC';
             $morder = 'a.title ASC';
             $order_ical = 'b.title ASC, det.summary ASC';
             $morder_ical = 'det.summary ASC';
             break;
         case 'newest':
         default:
             $order = 'a.created DESC';
             $order_ical = 'det.created DESC';
             break;
     }
     $eventstitle = JText::_("Events Calendar");
     // Now Search Icals
     $display2 = array();
     foreach ($search_ical_attributes as $search_ical_attribute) {
         $display2[] = "{$search_ical_attribute}";
     }
     $display = 'CONCAT(' . implode(", ' ', ", $display2) . ')';
     $query = "SELECT det.evdet_id, det.summary as title," . "\n ev.created as created," . "\n {$display} as text," . "\n CONCAT('{$eventstitle}','/',det.summary) AS section," . "\n CONCAT('index.php?option=com_jevents&task=icalrepeat.detail&evid=',min(rpt.rp_id)) AS href," . "\n '2' AS browsernav ," . "\n rpt.startrepeat, rpt.rp_id " . "\n FROM (#__jevents_vevent as ev)" . "\n LEFT  JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . $catjoin . "\n LEFT  JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT  JOIN #__jevents_icsfile as icsf ON icsf.ics_id = ev.icsid" . $extrajoin . "\n WHERE ({$where_ical})" . "\n AND icsf.state = 1" . "\n AND icsf.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <=  ' . $user->gid) . "\n AND ev.state = 1" . "\n AND ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <=  ' . $user->gid) . "\n AND b.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <=  ' . $user->gid) . "\n AND b.published = '1'" . $extrawhere . $catwhere . "\n GROUP BY det.evdet_id" . "\n ORDER BY " . ($morder_ical ? $morder_ical : $order_ical) . $limit;
     $db->setQuery($query);
     $list_ical = $db->loadObjectList('evdet_id');
     jimport('joomla.utilities.date');
     if ($list_ical) {
         foreach ($list_ical as $id => $item) {
             $user = JFactory::getUser();
             $query = "SELECT ev.*, ev.state as published, rpt.*, rr.*, det.*, ev.created as created, ex_id, exception_type " . "\n , YEAR(rpt.startrepeat) as yup, MONTH(rpt.startrepeat ) as mup, DAYOFMONTH(rpt.startrepeat ) as dup" . "\n , YEAR(rpt.endrepeat  ) as ydn, MONTH(rpt.endrepeat   ) as mdn, DAYOFMONTH(rpt.endrepeat   ) as ddn" . "\n , HOUR(rpt.startrepeat) as hup, MINUTE(rpt.startrepeat ) as minup, SECOND(rpt.startrepeat ) as sup" . "\n , HOUR(rpt.endrepeat  ) as hdn, MINUTE(rpt.endrepeat   ) as mindn, SECOND(rpt.endrepeat   ) as sdn" . "\n FROM #__jevents_vevent as ev" . "\n LEFT JOIN #__jevents_repetition as rpt ON rpt.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_vevdetail as det ON det.evdet_id = rpt.eventdetail_id" . "\n LEFT JOIN #__jevents_rrule as rr ON rr.eventid = ev.ev_id" . "\n LEFT JOIN #__jevents_exception as ex ON det.evdet_id = ex.eventdetail_id" . "\n WHERE ev.access " . (version_compare(JVERSION, '1.6.0', '>=') ? ' IN (' . $groups . ')' : ' <=  ' . $user->gid) . "\n AND det.evdet_id = {$id}" . "\n ORDER BY rpt.startrepeat ASC limit 1";
             $db->setQuery($query);
             $row = $db->loadObject();
             if (!$row) {
                 continue;
             }
             $event = new jIcalEventRepeat($row);
             // only get the next repeat IF its not an exception
             if (is_null($row->ex_id)) {
                 $event = $event->getNextRepeat();
             }
             $startdate = new JevDate(strtotime($event->_startrepeat));
             $item->title = $item->title . " (" . $startdate->toFormat($dateformat) . ")";
             $item->startrepeat = $event->_startrepeat;
             $myitemid = $this->params->get("target_itemid", 0);
             if ($myitemid == 0) {
                 // I must find the itemid that allows this event to be shown
                 $catidsOut = $modcatids = $catidList = $modparams = $showall = "";
                 // Use the plugin params to ensure menu item is picked up
                 //$modparams = new JRegistry($this->_plugin->params);
                 $modparams = new JRegistry(null);
                 // pretend to have category restriction
                 $modparams->set("catid0", $row->catid);
                 $modparams->set("ignorecatfilter", 1);
                 $myitemid = findAppropriateMenuID($catidsOut, $modcatids, $catidList, $modparams->toObject(), $showall);
             }
             $item->href = $event->viewDetailLink($event->yup(), $event->mup(), $event->dup(), false, $myitemid);
             $link = $item->href;
             $list_ical[$id] = $item;
         }
     }
     // Must reset the timezone back!!
     if ($tz && is_callable("date_default_timezone_set")) {
         date_default_timezone_set($timezone);
     }
     return $list_ical;
 }
Example #20
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();
     }
 }
Example #21
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
 }
Example #22
0
 public static function getDateFormat($year, $month, $day, $type)
 {
     // Transform to translation strings
     if (empty($year)) {
         $year = 0;
     }
     if (empty($month)) {
         $month = 0;
     }
     if (empty($day)) {
         $day = 1;
     }
     static $format_type;
     if (!isset($format_type)) {
         $cfg = JEVConfig::getInstance();
         $format_type = $cfg->get('com_dateformat');
     }
     $datestp = JevDate::mktime(0, 0, 0, $month, $day, $year);
     // if date format is from langauge file then do this first
     if ($format_type == 3 && is_numeric($type)) {
         return JEV_CommonFunctions::jev_strftime(JText::_("DATE_FORMAT_" . $type), $datestp);
     }
     switch ($type) {
         case '0':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%A %d %B %Y", $datestp);
                 // Fr style : Monday 03 Juillet 2003
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%A, %B %d, %Y", $datestp);
                 // Us style : Monday, July 03, 2003
             } else {
                 //return JevDate::strftime("%A, %e. %B %Y",$datestp);
                 // %e not supported by windows
                 return sprintf(JEV_CommonFunctions::jev_strftime("%A, %%s. %B %Y", $datestp), intval(JEV_CommonFunctions::jev_strftime('%d', $datestp)));
                 // De style : Montag, 3. Juli 2003
             }
             break;
         case '1':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%d %B %Y", $datestp);
                 // Fr style : 23 Juillet 2003
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%B %d, %Y", $datestp);
                 // Us style : July 23, 2003
             } else {
                 return JEV_CommonFunctions::jev_strftime("%d. %B %Y", $datestp);
                 // De style : 23. Juli 2003
             }
             break;
         case '2':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%d %B", $datestp);
                 // Fr style : 23 Juillet
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%B %d", $datestp);
                 // Us style : Juillet 23
             } else {
                 return JEV_CommonFunctions::jev_strftime("%d. %B", $datestp);
                 // De style : 23. Juli
             }
             break;
         case '3':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%B %Y", $datestp);
                 // Fr style : Juillet 2003
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%B, %Y", $datestp);
                 // Us style : Juillet, 2003
             } else {
                 return JEV_CommonFunctions::jev_strftime("%B %Y", $datestp);
                 // De style : Juli 2003
             }
             break;
         case '4':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%d/%m/%Y", $datestp);
                 // Fr style : 23/07/2003
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%m/%d/%Y", $datestp);
                 // Us style : 07/23/2003
             } else {
                 return JEV_CommonFunctions::jev_strftime("%d.%m.%Y", $datestp);
                 // De style : 23.07.2003
             }
             break;
         case '5':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%d/%m", $datestp);
                 // Fr style : 23/07
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%m/%d", $datestp);
                 // Us style : 07/23
             } else {
                 return JEV_CommonFunctions::jev_strftime("%d.%m.", $datestp);
                 // De style : 23.07.
             }
             break;
         case '6':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp);
                 // Fr style : 07/2003
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp);
                 // Us style : 07/2003
             } else {
                 return JEV_CommonFunctions::jev_strftime("%m/%Y", $datestp);
                 // De style : 07/2003
             }
             break;
         case '7':
             if ($format_type == 0) {
                 return JEV_CommonFunctions::jev_strftime("%A, %d", $datestp);
                 // Fr style : Monday 23
             } elseif ($format_type == 1) {
                 return JEV_CommonFunctions::jev_strftime("%A, %d", $datestp);
                 // Us style : Monday, 23
             } else {
                 return JEV_CommonFunctions::jev_strftime("%A, %d.", $datestp);
                 // De style : Montag, 23.
             }
             break;
         default:
             // in this case $type is a format!
             return JEV_CommonFunctions::jev_strftime($type, $datestp);
             break;
     }
     return $newdate;
 }
 /**
  * iCal spec represents date in ISO 8601 format followed by "T" then the time
  * a "Z at the end means the time is UTC and not local time zone
  *
  * TODO make sure if time is UTC we take account of system time offset properly
  *
  */
 function unixTime($ical_date, $tz = false)
 {
     jimport("joomla.utilities.date");
     static $offset = null;
     if (is_null($offset)) {
         $config =& JFactory::getConfig();
         $offset = $config->getValue('config.offset', 0);
     }
     if (!is_numeric($ical_date)) {
         $t = JevDate::strtotime($ical_date);
         if (JString::strpos($ical_date, "Z") > 0) {
             if (is_callable("date_default_timezone_set")) {
                 $timezone = date_default_timezone_get();
                 // See http://www.php.net/manual/en/timezones.php
                 $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
                 // server offset tiemzone
                 if ($params->get("icaltimezone", "") != "") {
                     date_default_timezone_set($params->get("icaltimezone", ""));
                 }
                 // server offset PARAMS
                 $serveroffset1 = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600;
                 // server offset SERVER
                 date_default_timezone_set($timezone);
                 $serveroffset2 = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600;
                 $t = new JevDate($ical_date, $serveroffset1 - $serveroffset2);
                 //$t = new JevDate($ical_date );
                 date_default_timezone_set($timezone);
                 echo "icaldate = " . $ical_date . " imported date=" . $t->toMySQL() . "<br/>";
             } else {
                 // Summer Time adjustment
                 list($y, $m, $d, $h, $min, $s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S', $t));
                 $dst = (JevDate::mktime($h, $min, $s, $m, $d, $y, 0) - JevDate::mktime($h, $min, $s, $m, $d, $y, -1)) / 3600;
                 // server offset including DST
                 $serveroffset = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S', $t)) - JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ', $t))) / 3600;
                 $serveroffset += $dst;
                 $t = new JevDate($ical_date, -($serveroffset + $offset));
             }
             /*
             echo "<h3>SET TIMEZONE</h3>";
             $timezone= date_default_timezone_get();
             date_default_timezone_set('America/New_York');
             
             $tempIcal  = "20091020T163000Z";
             echo $tempIcal."<br/>";
             $temp = JevDate::strtotime($tempIcal);
             list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp));
             echo "$y,$m,$d,$h,$min,$s<br/>";
             $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600;
             $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600;
             echo " dst=".$dst." serverforoffset=".$so."<br/>";
             $so += $dst;
             $t = new JevDate($tempIcal);
             echo $t->toMySQL()."<br><br/>";
             
             
             $tempIcal  = "20091029T163000Z";
             echo $tempIcal."<br/>";
             $temp = JevDate::strtotime($tempIcal);
             list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp));
             echo "$y,$m,$d,$h,$min,$s<br/>";
             $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600;
             $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600;
             echo " dst=".$dst." serverforoffset=".$so."<br/>";
             $so += $dst;
             $t = new JevDate($tempIcal );
             echo $t->toMySQL()."<br><br/>";
             
             $tempIcal  = "20091103T163000Z";
             echo $tempIcal."<br/>";
             $temp = JevDate::strtotime($tempIcal);
             list($y,$m,$d,$h,$min,$s) = explode(":", JevDate::strftime('%Y:%m:%d:%H:%M:%S',$temp));
             echo "$y,$m,$d,$h,$min,$s<br/>";
             $dst = (JevDate::mktime($h,$min,$s,$m,$d,$y,0)-JevDate::mktime($h,$min,$s,$m,$d,$y,-1))/3600;
             $so = (JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%S',$temp))-JevDate::strtotime(JevDate::strftime('%Y%m%dT%H%M%SZ',$temp)))/3600;
             echo " dst=".$dst." serverforoffset=".$so."<br/>";
             $so += $dst;
             $t = new JevDate($tempIcal);
             echo $t->toMySQL()."<br>";
             */
         } else {
             if ($tz != false && $tz != "") {
                 // really should use the timezone of the inputted date
                 $tz = new DateTimeZone($tz);
                 $t = new JevDate($ical_date, $tz);
                 echo "icaldate = " . $ical_date . " imported date=" . $t->toMySQL() . "<br/>";
             } else {
                 $compparams = JComponentHelper::getParams(JEV_COM_COMPONENT);
                 $jtz = $compparams->get("icaltimezonelive", "");
                 if ($jtz) {
                     $t = new JevDate($ical_date, $jtz);
                 } else {
                     $t = new JevDate($ical_date);
                 }
             }
         }
         //$result = $t->toMySQL();
         $result = $t->toUnix();
         return $result;
     }
     $isUTC = false;
     if (JString::strpos($ical_date, "Z") !== false) {
         $isUTC = true;
     }
     // strip "T" and "Z" from the string
     $ical_date = str_replace('T', '', $ical_date);
     $ical_date = str_replace('Z', '', $ical_date);
     // split it out intyo YYYY MM DD HH MM SS
     preg_match("#([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})([0-9]{0,2})#", $ical_date, $date);
     list($temp, $y, $m, $d, $h, $min, $s) = $date;
     if (!$min) {
         $min = 0;
     }
     if (!$h) {
         $h = 0;
     }
     if (!$d) {
         $d = 0;
     }
     if (!$s) {
         $s = 0;
     }
     // Trap unix dated beofre 1970
     $y = max($y, 1970);
     if ($isUTC) {
         $t = gmJevDate::mktime($h, $min, $s, $m, $d, $y) + 3600 * $offset;
         $result = JevDate::strtotime(gmdate('Y-m-d H:i:s', $t));
     } else {
         $result = JevDate::mktime($h, $min, $s, $m, $d, $y);
     }
     // double check!!
     //list($y1,$m1,$d1,$h1,$min1,$s1)=explode(":",JevDate::strftime('%Y:%m:%d:%H:%M:%S',$result));
     return $result;
 }
Example #24
0
                    // UTC!
                    // Change timezone to UTC
                    $current_timezone = date_default_timezone_get();
                    date_default_timezone_set("UTC");
                    // Do not use JevDate version since this sets timezone to config value!
                    $chstart = strftime("%Y%m%dT%H%M%SZ", $chstart);
                    $chend = strftime("%Y%m%dT%H%M%SZ", $chend);
                    $stamptime = strftime("%Y%m%dT%H%M%SZ", time());
                    $originalstart = strftime("%Y%m%dT%H%M%SZ", $originalstart);
                    // Change back
                    date_default_timezone_set($current_timezone);
                } else {
                    $chstart = JevDate::strftime("%Y%m%dT%H%M%S", $chstart);
                    $chend = JevDate::strftime("%Y%m%dT%H%M%S", $chend);
                    $stamptime = JevDate::strftime("%Y%m%dT%H%M%S", time());
                    $originalstart = JevDate::strftime("%Y%m%dT%H%M%S", $originalstart);
                }
                $html .= "DTSTAMP{$tzid}:" . $stamptime . "\r\n";
                $html .= "DTSTART{$tzid}:" . $chstart . "\r\n";
                $html .= "DTEND{$tzid}:" . $chend . "\r\n";
                $html .= "RECURRENCE-ID{$tzid}:" . $originalstart . "\r\n";
                $html .= "SEQUENCE:" . $a->_sequence . "\r\n";
                $html .= "TRANSP:OPAQUE\r\n";
                $html .= "END:VEVENT\r\n";
            }
        }
    }
}
$html .= "END:VCALENDAR";
// clear out any rubbish
@ob_end_clean();
 /**
  * Get week number according ISO 8601
  *
  * @static
  * @param int $date date
  * @return int weeknumber
  */
 function _getWeekNumberISO8601($date)
 {
     $thursday = JEV_CompatWin::_getThursdayOfWeek($date);
     $thursday_Y = JevDate::strftime('%Y', $thursday);
     $first_th = JEV_CompatWin::_getThursdayOfWeek(JevDate::strtotime($thursday_Y . '-01-04'));
     return (JevDate::strftime('%j', $thursday) - JevDate::strftime('%j', $first_th)) / 7 + 1;
 }
Example #26
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;
}
Example #28
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;
 }
Example #29
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');
         }
     }
 }
Example #30
0
$hasevents = false;
echo '<fieldset><legend class="ev_fieldset">' . JText::_('JEV_EVENTSFOR') . '&nbsp;' . JText::_('JEV_WEEK') . ' : </legend><br />' . "\n";
echo '<table align="center" width="90%" cellspacing="0" cellpadding="5" class="ev_table">' . "\n";
?>
    <tr valign="top">
        <td colspan="2"  align="center" class="cal_td_daysnames">
           <!-- <div class="cal_daysnames"> -->
            <?php 
echo $data['startdate'] . ' - ' . $data['enddate'];
?>
            <!-- </div> -->
        </td>
    </tr>
<?php 
for ($d = 0; $d < 7; $d++) {
    $day_link = '<a class="ev_link_weekday" href="' . $data['days'][$d]['link'] . '" title="' . JText::_('JEV_CLICK_TOSWITCH_DAY') . '">' . JEV_CommonFunctions::jev_strftime("%A", JevDate::mktime(3, 0, 0, $data['days'][$d]['week_month'], $data['days'][$d]['week_day'], $data['days'][$d]['week_year'])) . "<br/>" . JEventsHTML::getDateFormat($data['days'][$d]['week_year'], $data['days'][$d]['week_month'], $data['days'][$d]['week_day'], 2) . '</a>' . "\n";
    if ($data['days'][$d]['today']) {
        $bg = 'class="ev_td_today"';
    } else {
        $bg = 'class="ev_td_left"';
    }
    echo '<tr><td ' . $bg . '>' . $day_link . '</td>' . "\n";
    echo '<td class="ev_td_right">' . "\n";
    $num_events = count($data['days'][$d]['rows']);
    if ($num_events > 0) {
        $hasevents = true;
        echo "<ul class='ev_ul'>\n";
        for ($r = 0; $r < $num_events; $r++) {
            $row = $data['days'][$d]['rows'][$r];
            $listyle = 'style="border-color:' . $row->bgcolor() . ';"';
            echo "<li class='ev_td_li' {$listyle}>\n";