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 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));
 }
 /**
  * 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;
 }
示例#4
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher = JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() && $dayEvent->getUnixStartDate() == $dayEvent->getUnixEndDate() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : IS_WIN ? ' @%I:%M%p' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '%a %b %d' . $time_fmt;
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 if ($this->modparams->get("ignorefiltermodule", 0)) {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink() . "&filter_reset=1");
                 } else {
                     $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 }
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'categoryimage':
             $catobj = $dayEvent->getCategoryImage();
             $content .= $catobj;
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'duration':
             $timedelta = $dayEvent->noendtime() || $dayEvent->alldayevent() ? "" : $dayEvent->getUnixEndTime() - $dayEvent->getUnixStartTime();
             if ($timedelta == "") {
                 break;
             }
             $fieldval = isset($dateParm) && $dateParm != '' ? $dateParm : JText::_("JEV_DURATION_FORMAT");
             $shownsign = false;
             // whole days!
             if (stripos($fieldval, "%wd") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 if ($timedelta > 3610) {
                     //if more than 1 hour and 10 seconds over a day then round up the day output
                     $days += 1;
                 }
                 $fieldval = str_ireplace("%wd", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 /*
                  if ($timedelta>3610){
                  //if more than 1 hour and 10 seconds over a day then round up the day output
                  $days +=1;
                  }
                 */
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $eventPassed = !($timedelta >= 0);
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%nopast") !== false) {
                 if (!$eventPassed) {
                     $fieldval = str_ireplace("%nopast", "", $fieldval);
                 } else {
                     $fieldval = JText::_('JEV_EVENT_FINISHED');
                 }
             }
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             // limit to 2 because we may be using joomla content plugins
                             $subparts = explode("}", $part, 2);
                             if (strpos($subparts[0], "#") > 0) {
                                 $formattedparts = explode("#", $subparts[0]);
                                 $subparts[0] = $formattedparts[0];
                             } else {
                                 $formattedparts = array($subparts[0], "%s", "");
                             }
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 if ($temp != "") {
                                     $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                 } else {
                                     if (isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                     }
                                 }
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     if ($temp != "") {
                                         $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                     } else {
                                         if (isset($formattedparts[2])) {
                                             $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                         }
                                     }
                                 } else {
                                     $matchedByPlugin = false;
                                     $layout = "list";
                                     static $fieldNameArrays = array();
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             if (!isset($fieldNameArrays[$classname])) {
                                                 $fieldNameArrays[$classname] = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             }
                                             if (isset($fieldNameArrays[$classname]["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArrays[$classname]["values"])) {
                                                     $matchedByPlugin = true;
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $temp = call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                         if ($temp != "") {
                                                             $tempstr .= str_replace("%s", $temp, $formattedparts[1]);
                                                         } else {
                                                             if (isset($formattedparts[2])) {
                                                                 $tempstr .= str_replace("%s", $temp, $formattedparts[2]);
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     if (!$matchedByPlugin) {
                                         // Layout editor code
                                         include_once JEV_PATH . "/views/default/helpers/defaultloadedfromtemplate.php";
                                         ob_start();
                                         // false at the end to stop it running through the plugins
                                         $part = "{{Dummy Label:" . implode("#", $formattedparts) . "}}";
                                         DefaultLoadedFromTemplate(false, false, $dayEvent, 0, $part, false);
                                         $newpart = ob_get_clean();
                                         if ($newpart != $part) {
                                             $tempstr .= $newpart;
                                             $matchedByPlugin = true;
                                         }
                                     }
                                     // none of the plugins has replaced the output so we now replace the blank formatted part!
                                     if (!$matchedByPlugin && isset($formattedparts[2])) {
                                         $tempstr .= str_replace("%s", "", $formattedparts[2]);
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
示例#5
0
文件: rss.php 项目: poorgeek/JEvents
        $item_organizer = html_entity_decode( $item_organizer );
        // location for particular item
        $item_location = htmlspecialchars( $row->location() );
        $item_location = html_entity_decode( $item_location );
        // start date for particular item
        $item_startdate = htmlspecialchars( $row->publish_up());
        // end date for particular item
        $item_enddate = htmlspecialchars( $row->publish_down() );
        if (isset($row->_thumbimg1) && $row->_thumbimg1!=""){
        	$item_description = $row->_thumbimg1. "<br/>".$item_description;
        }
        */
        // load individual item creator class
        $item = new JFeedItem();
        // item info
        if ($row->alldayevent()) {
            $temptime = new JevDate($eventDate);
            $item->title = $temptime->toFormat(JText::_('JEV_RSS_DATE')) . " : " . $item_title;
        } else {
            $temptime = new JevDate($eventDate);
            $item->title = $temptime->toFormat(JText::_('JEV_RSS_DATETIME')) . " : " . $item_title;
        }
        $item->link = $item_link;
        $item->description = $item_description;
        $item->category = $item_type;
        $eventcreated = new JevDate($row->created());
        $item->date = $eventcreated->toUnix(true);
        // add item info to RSS document
        $doc->addItem($item);
    }
}
示例#6
0
 function maprpts()
 {
     $db =& JFactory::getDBO();
     $db->setQuery("delete from jos_repbyday");
     $db->query();
     $db->setQuery("SELECT rpt.rp_id, rpt.startrepeat, rpt.endrepeat, evt.catid FROM #__jevents_repetition as rpt LEFT JOIN #__jevents_vevent as evt ON rpt.eventid=evt.ev_id");
     $rpts = $db->loadObjectList();
     jimport("joomla.utilities.date");
     foreach ($rpts as $rpt) {
         $startday = new JevDate(substr($rpt->startrepeat, 0, 10));
         $endday = new JevDate(substr($rpt->endrepeat, 0, 10));
         while ($endday->toUnix() >= $startday->toUnix()) {
             $db->setQuery("replace into jos_jevents_repbyday (rptday,rp_id,catid) values('" . $startday->toFormat('%Y-%m-%d') . "'," . $rpt->rp_id . "," . $rpt->catid . ")");
             $db->query();
             $startday = new JevDate($startday->toUnix() + 86400);
         }
     }
 }
示例#7
0
 protected function processMatch(&$content, $match, $dayEvent, $dateParm, $relDay)
 {
     $datenow = JEVHelper::getNow();
     $dispatcher =& JDispatcher::getInstance();
     // get the title and start time
     $startDate = JevDate::strtotime($dayEvent->publish_up());
     if ($relDay > 0) {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " +{$relDay} days");
     } else {
         $eventDate = JevDate::strtotime($datenow->toFormat('%Y-%m-%d ') . JevDate::strftime('%H:%M', $startDate) . " {$relDay} days");
     }
     $endDate = JevDate::strtotime($dayEvent->publish_down());
     list($st_year, $st_month, $st_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     list($ev_year, $ev_month, $ev_day) = explode('-', JevDate::strftime('%Y-%m-%d', $startDate));
     $task_events = 'icalrepeat.detail';
     switch ($match) {
         case 'endDate':
         case 'startDate':
         case 'eventDate':
             // Note we need to examine the date specifiers used to determine if language translation will be
             // necessary.  Do this later when script is debugged.
             if (!$this->disableDateStyle) {
                 $content .= '<span class="mod_events_latest_date">';
             }
             if (!$dayEvent->alldayevent() && $match == "endDate" && ($dayEvent->noendtime() || $dayEvent->getUnixStartTime() == $dayEvent->getUnixEndTime())) {
                 $time_fmt = "";
             } else {
                 if (!isset($dateParm) || $dateParm == '') {
                     if ($this->com_calUseStdTime) {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%l:%M%p';
                     } else {
                         $time_fmt = $dayEvent->alldayevent() ? '' : ' @%H:%M';
                     }
                     $dateFormat = $this->displayYear ? '%a %b %d, %Y' . $time_fmt : '<span class="eventDay">%a</span>  <span class="eventDate">%d<span class="eventMonth">%b</span></span>';
                     $jmatch = new JevDate(${$match});
                     $content .= $jmatch->toFormat($dateFormat);
                     //$content .= JEV_CommonFunctions::jev_strftime($dateFormat, $$match);
                 } else {
                     // format endDate when midnight to show midnight!
                     if ($match == "endDate" && $dayEvent->sdn() == 59) {
                         $tempEndDate = $endDate + 1;
                         if ($dayEvent->alldayevent()) {
                             // if an all day event then we don't want to roll to the next day
                             $tempEndDate -= 86400;
                         }
                         $match = "tempEndDate";
                     }
                     // if a '%' sign detected in date format string, we assume JevDate::strftime() is to be used,
                     if (preg_match("/\\%/", $dateParm)) {
                         $jmatch = new JevDate(${$match});
                         $content .= $jmatch->toFormat($dateParm);
                     } else {
                         $content .= date($dateParm, ${$match});
                     }
                     if ($match == "tempDndDate") {
                         $match = "endDate";
                     }
                 }
             }
             if (!$this->disableDateStyle) {
                 $content .= "</span>";
             }
             break;
         case 'title':
             $title = $dayEvent->title();
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen($title) > intval($parts[0])) {
                     $title = substr($title, 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $title .= $parts[1];
                     }
                 }
             }
             if (!$this->disableTitleStyle) {
                 $content .= '<span class="mod_events_latest_content">';
             }
             if ($this->displayLinks) {
                 $link = $dayEvent->viewDetailLink($ev_year, $ev_month, $ev_day, false, $this->myItemid);
                 $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
                 $content .= $this->_htmlLinkCloaking($link, JEventsHTML::special($title));
             } else {
                 $content .= JEventsHTML::special($title);
             }
             if (!$this->disableTitleStyle) {
                 $content .= '</span>';
             }
             break;
         case 'category':
             $catobj = $dayEvent->getCategoryName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'calendar':
             $catobj = $dayEvent->getCalendarName();
             $content .= JEventsHTML::special($catobj);
             break;
         case 'contact':
             // Also want to cloak contact details so
             $this->modparams->set("image", 1);
             $dayEvent->text = $dayEvent->contact_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent, &$this->modparams, 0));
             } else {
                 $dispatcher->trigger('onPrepareContent', array(&$dayEvent, &$this->modparams, 0), true);
             }
             $dayEvent->contact_info($dayEvent->text);
             $content .= $dayEvent->contact_info();
             break;
         case 'content':
             // Added by Kaz McCoy 1-10-2004
             $this->modparams->set("image", 1);
             $dayEvent->data->text = $dayEvent->content();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             if (!empty($dateParm)) {
                 $parts = explode("|", $dateParm);
                 if (count($parts) > 0 && strlen(strip_tags($dayEvent->data->text)) > intval($parts[0])) {
                     $dayEvent->data->text = substr(strip_tags($dayEvent->data->text), 0, intval($parts[0]));
                     if (count($parts) > 1) {
                         $dayEvent->data->text .= $parts[1];
                     }
                 }
             }
             $dayEvent->content($dayEvent->data->text);
             //$content .= substr($dayEvent->content, 0, 150);
             $content .= $dayEvent->content();
             break;
         case 'addressInfo':
         case 'location':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->location();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->location($dayEvent->data->text);
             $content .= $dayEvent->location();
             break;
         case 'extraInfo':
             $this->modparams->set("image", 0);
             $dayEvent->data->text = $dayEvent->extra_info();
             if (JVersion::isCompatible("1.6.0")) {
                 $dispatcher->trigger('onContentPrepare', array('com_jevents', &$dayEvent->data, &$this->modparams, 0));
             } else {
                 $results = $dispatcher->trigger('onPrepareContent', array(&$dayEvent->data, &$this->modparams, 0), true);
             }
             $dayEvent->extra_info($dayEvent->data->text);
             $content .= $dayEvent->extra_info();
             break;
         case 'countdown':
             $timedelta = $dayEvent->getUnixStartTime() - JevDate::mktime();
             $fieldval = $dateParm;
             $shownsign = false;
             if (stripos($fieldval, "%d") !== false) {
                 $days = intval($timedelta / (60 * 60 * 24));
                 $timedelta -= $days * 60 * 60 * 24;
                 $fieldval = str_ireplace("%d", $days, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%h") !== false) {
                 $hours = intval($timedelta / (60 * 60));
                 $timedelta -= $hours * 60 * 60;
                 if ($shownsign) {
                     $hours = abs($hours);
                 }
                 $hours = sprintf("%02d", $hours);
                 $fieldval = str_ireplace("%h", $hours, $fieldval);
                 $shownsign = true;
             }
             if (stripos($fieldval, "%m") !== false) {
                 $mins = intval($timedelta / 60);
                 $timedelta -= $hours * 60;
                 if ($mins) {
                     $mins = abs($mins);
                 }
                 $mins = sprintf("%02d", $mins);
                 $fieldval = str_ireplace("%m", $mins, $fieldval);
             }
             $content .= $fieldval;
             break;
         case 'createdByAlias':
             $content .= $dayEvent->created_by_alias();
             break;
         case 'createdByUserName':
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= isset($catobj->username) ? $catobj->username : "";
             break;
         case 'createdByUserEmail':
             // Note that users email address will NOT be available if they don't want to receive email
             $catobj = JEVHelper::getUser($dayEvent->created_by());
             $content .= $catobj->sendEmail ? $catobj->email : '';
             break;
         case 'createdByUserEmailLink':
             // Note that users email address will NOT be available if they don't want to receive email
             $content .= JRoute::_("index.php?option=" . $compname . "&task=" . $task_events . "&agid=" . $dayEvent->id() . "&year=" . $st_year . "&month=" . $st_month . "&day=" . $st_day . "&Itemid=" . $this->myItemid . $this->catout);
             break;
         case 'color':
             $content .= $dayEvent->bgcolor();
             break;
         case 'eventDetailLink':
             $link = $dayEvent->viewDetailLink($st_year, $st_month, $st_day, false, $this->myItemid);
             $link = JRoute::_($link . $this->datamodel->getCatidsOutLink());
             $content .= $link;
             /*
              $content .= JRoute::_("index.php?option="
              . $compname
              . "&task=".$task_events
              . "&agid=".$dayEvent->id()
              . "&year=".$st_year
              . "&month=".$st_month
              . "&day=".$st_day
              . "&Itemid=".$this->myItemid . $this->catout);
             */
             break;
         default:
             try {
                 if (strpos($match, '${') !== false) {
                     $parts = explode('${', $match);
                     $tempstr = "";
                     foreach ($parts as $part) {
                         if (strpos($part, "}") !== false) {
                             $subparts = explode("}", $part);
                             //$part = str_replace("}","",$part);
                             $subpart = "_" . $subparts[0];
                             if (isset($dayEvent->{$subpart})) {
                                 $temp = $dayEvent->{$subpart};
                                 $tempstr .= $temp;
                             } else {
                                 if (isset($dayEvent->customfields[$subparts[0]]['value'])) {
                                     $temp = $dayEvent->customfields[$subparts[0]]['value'];
                                     $tempstr .= $temp;
                                 } else {
                                     $layout = "list";
                                     $jevplugins = JPluginHelper::getPlugin("jevents");
                                     foreach ($jevplugins as $jevplugin) {
                                         $classname = "plgJevents" . ucfirst($jevplugin->name);
                                         if (is_callable(array($classname, "substitutefield"))) {
                                             $fieldNameArray = call_user_func(array($classname, "fieldNameArray"), $layout);
                                             if (isset($fieldNameArray["values"])) {
                                                 if (in_array($subparts[0], $fieldNameArray["values"])) {
                                                     // is the event detail hidden - if so then hide any custom fields too!
                                                     if (!isset($event->_privateevent) || $event->_privateevent != 3) {
                                                         $tempstr .= call_user_func(array($classname, "substitutefield"), $dayEvent, $subparts[0]);
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                     //$dispatcher->trigger( 'onLatestEventsField', array( &$dayEvent, $subparts[0], &$tempstr));
                                 }
                             }
                             $tempstr .= $subparts[1];
                         } else {
                             $tempstr .= $part;
                         }
                     }
                     $content .= $tempstr;
                 } else {
                     if ($match) {
                         $content .= $match;
                     }
                 }
             } catch (Exception $e) {
                 if ($match) {
                     $content .= $match;
                 }
             }
             break;
     }
     // end of switch
 }
示例#8
0
文件: rss.php 项目: madseller/coperio
        $item_organizer = html_entity_decode( $item_organizer );
        // location for particular item
        $item_location = htmlspecialchars( $row->location() );
        $item_location = html_entity_decode( $item_location );
        // start date for particular item
        $item_startdate = htmlspecialchars( $row->publish_up());
        // end date for particular item
        $item_enddate = htmlspecialchars( $row->publish_down() );
        if (isset($row->_thumbimg1) && $row->_thumbimg1!=""){
        	$item_description = $row->_thumbimg1. "<br/>".$item_description;
        }
        */
        // load individual item creator class
        $item = new JFeedItem();
        // item info
        if ($row->alldayevent()) {
            $temptime = new JevDate($eventDate);
            $item->set('title', $temptime->toFormat(JText::_('JEV_RSS_DATE')) . " : " . $item_title);
        } else {
            $temptime = new JevDate($eventDate);
            $item->set('title', $temptime->toFormat(JText::_('JEV_RSS_DATETIME')) . " : " . $item_title);
        }
        $item->set('link', $item_link);
        $item->set('description', $item_description);
        $item->set('category', $item_type);
        $eventcreated = new JevDate($row->created());
        $item->set('date', $eventcreated->toUnix(true));
        // add item info to RSS document
        $doc->addItem($item);
    }
}
示例#9
0
 /**
  * Function converts datetime to iCal format
  *
  * @param datetime Datetime of the event
  * @return converted datetime in iCal format
  */
 private function datetimeToIcsFormat($datetime)
 {
     $newdatetime = JevDate::strtotime($datetime);
     $tempdate = new JevDate($newdatetime);
     if (strlen($datetime) <= 10 && $tempdate->toFormat("%H:%M:%S") == "00:00:00") {
         // in this case we have not time element so don't set it otherwise iCal import will think a time is actually set and not process all day or no end time events correctly
         return date("Ymd", $newdatetime);
     }
     return date("Ymd", $newdatetime) . "T" . date("His", $newdatetime);
 }
function Defaultgetstartenddates($view)
{
    $params = JComponentHelper::getParams(JEV_COM_COMPONENT);
    // fix to allow start/end date to be preserved during pagination IF filter module before/after dates are used
    $Itemid = JRequest::getInt("Itemid", 0);
    // This causes the filter module to reset
    $filters = jevFilterProcessing::getInstance(array());
    $activeFilterMenu = JFactory::getApplication()->getUserState('active_filter_menu ', $Itemid);
    if (intval(JRequest::getVar('filter_reset', 0)) || $activeFilterMenu > 0 && $activeFilterMenu != $Itemid) {
        JRequest::setVar('startdate', '');
        JRequest::setVar('enddate', '');
        JFactory::getApplication()->setUserState('range_enddate' . $Itemid, '');
        JFactory::getApplication()->setUserState('range_startdate' . $Itemid, '');
        JFactory::getApplication()->setUserState('active_filter_menu ', 0);
    }
    $startdate = JFactory::getApplication()->getUserStateFromRequest('range_startdate' . $Itemid, 'startdate', "");
    $enddate = JFactory::getApplication()->getUserStateFromRequest('range_enddate' . $Itemid, 'enddate', "");
    if ($startdate == "") {
        if ($params->get("relative", "rel") == "abs") {
            $startdate = $params->get("absstart", "");
            list($startyear, $startmonth, $startday) = explode("-", $startdate);
        } else {
            if ($params->get("relative", "rel") == "strtotime") {
                $value = $params->get("strstart", "");
                $value = new JevDate(JevDate::strtotime($value));
                $startdate = $value->toFormat("%Y-%m-%d");
            } else {
                $value = $params->get("relstart", "");
                $value = str_replace(",", " ", $value);
                $value = str_replace("y", "year", $value);
                $value = str_replace("d", "day", $value);
                $value = str_replace("w", "week", $value);
                $value = str_replace("m", "month", $value);
                $value = new JevDate($value);
                $startdate = $value->toFormat("%Y-%m-%d");
            }
        }
    }
    if ($enddate == "") {
        if ($params->get("relative", "rel") == "abs") {
            $enddate = $params->get("absend", "");
        } else {
            if ($params->get("relative", "rel") == "strtotime") {
                $value = $params->get("strend", "");
                $value = new JevDate(JevDate::strtotime($value));
                $enddate = $value->toFormat("%Y-%m-%d");
            } else {
                $value = $params->get("relend", "");
                $value = str_replace(",", " ", $value);
                $value = str_replace("y", "year", $value);
                $value = str_replace("d", "day", $value);
                $value = str_replace("w", "week", $value);
                $value = str_replace("m", "month", $value);
                $value = new JevDate($value);
                $enddate = $value->toFormat("%Y-%m-%d");
            }
        }
    }
    if ($enddate < $startdate) {
        // default to 1 year when input dates are not valid!
        $value = new JevDate($startdate);
        $value->add(new DateInterval('P1Y'));
        $enddate = $value->toFormat("%Y-%m-%d");
    }
    return array($startdate, $enddate);
}