/** * Returns all specified events as an array. * * @param string $start Start date. * @param string $end End date. * @param int $cid Calendar to get events from. * @param TimeIt_Filter_Container $filter_obj Filter. * @param boolean $args Additional arguments. * * @return array * @throws InvalidArgumentException In case of invalid parameters. */ public function getDailySortedEvents($start, $end, $cid, TimeIt_Filter_Container $filter_obj = null, $args = array()) { // valid Dates? if (!ModUtil::apiFunc('TimeIt', 'user', 'checkDate', array('date' => $start)) || !ModUtil::apiFunc('TimeIt', 'user', 'checkDate', array('date' => $end))) { throw new InvalidArgumentException(__f('Error! The date %s is not valid.', $start . ' / ' . $end, ZLanguage::getModuleDomain('TimeIt'))); } // default values if (!isset($args['preformat'])) { $args['preformat'] = true; } $prozessRepeat = isset($args['prozessRepeat']) ? $args['prozessRepeat'] : true; $userID = UserUtil::getVar('uid'); $userLang = ZLanguage::getLanguageCode(); $query = Doctrine_Query::create()->from('TimeIt_Model_EventDate ed')->innerJoin('ed.MainEvent e')->leftJoin('ed.LocalEvent le')->where('ed.cid = ?', $cid)->andWhere('((le.id IS NOT NULL AND le.status = 1) OR (le.id IS NULL AND e.status = 1))')->andWhere("ed.date >= ? AND ed.date <= ?", array($start, $end)); // add sharing conditions to where if the filter contains no custom sharing expression if ($filter_obj == null || !$filter_obj->hasFilterOnField('sharing')) { $where = '('; $whereParams = array(); if (!empty($userID)) { $where .= '((le.id IS NOT NULL AND le.cr_uid = ? AND (le.sharing = 1 OR le.sharing = 2)) OR (e.cr_uid = ? AND (e.sharing = 1 OR e.sharing = 2))) OR '; $whereParams[] = $userID; $whereParams[] = $userID; } $where .= 'e.sharing = 3 OR e.sharing = 4 OR le.sharing = 3 OR le.sharing = 4)'; $query->andWhere($where, $whereParams); } // add filter to sql if ($filter_obj != null) { $filter_sql = $filter_obj->toSQL('le'); if (!empty($filter_sql)) { $query->andWhere('((le.id IS NOT NULL AND ' . $filter_sql . ') OR (le.id IS NULL AND ' . $filter_obj->toSQL('e') . '))'); } } // get data form database $array = $query->fetchArray(); $ret = array(); // --------------- ContactList integration -------------------- $buddys = array(); $ignored = array(); if (ModUtil::available('ContactList')) { if (ModUtil::getVar('TimeIt', 'friendCalendar')) { $buddys = ModUtil::apiFunc('ContactList', 'user', 'getBuddyList', array('uid' => $User_ID)); } $ignored = ModUtil::apiFunc('ContactList', 'user', 'getallignorelist', array('uid' => $User_ID)); } // --------------- end ContactList integration -------------------- $site_multilingual = System::getVar('multilingual'); $eventsAdded = 0; foreach ($array as $objDate) { $objDate = $this->_setEventRelation($objDate); $obj = $objDate['Event']; if (!TimeIt_Util_Permission::canViewEvent($objDate, ACCESS_OVERVIEW)) { continue; // no permission to this event so ignore it } if (isset($args['preformat']) && $args['preformat']) { $obj = ModUtil::apiFunc('TimeIt', 'user', 'getEventPreformat', array('obj' => $obj)); } else { if (substr($obj['text'], 0, 11) == "#plaintext#") { $obj['text'] = substr_replace($obj['text'], "", 0, 11); $obj['text'] = nl2br($obj['text']); } } if ($site_multilingual && (!isset($args['translate']) || isset($args['translate']) && $args['translate'] == true)) { if (isset($obj['title_translate'][$user_lang]) && !empty($obj['title_translate'][$user_lang])) { $obj['title'] = $obj['title_translate'][$user_lang]; } if (isset($obj['text_translate'][$user_lang]) && !empty($obj['text_translate'][$user_lang])) { $obj['text'] = $obj['text_translate'][$user_lang]; } } $timestamp = strtotime($objDate['date']); // Move this event back or forward if the timezone calculation needs a move if (isset($obj['allDayStartLocalDateCorrection'])) { $timestamp = $timestamp + $obj['allDayStartLocalDateCorrection'] * (60 * 60 * 24); } $this->_getDailySortedEventsAddToArray($ret, $timestamp, $objDate); $eventsAdded++; // limit control if (isset($args['limit']) && $eventsAdded >= $args['limit']) { break; } } ksort($ret); // sort keys in array //print_r($ret);exit(); foreach ($ret as $key => $events) { usort($ret[$key], array($this, "_getDailySortedEventsUsort")); } return $ret; }
/** * Creates a TimeIt_Filter_Container form GET and POST values. * * @param string $string Filter expression to parse. * @param TimeIt_Filter_Container $filter Filter object to use. * @param string $objectType Obect type to pass to the constructon if $filter was null. * * @return TimeIt_Filter_Container created TimeIt_Filter_Container */ public static function getFilterFormString($string, TimeIt_Filter_Container $filter = null, $objectType = 'event') { if ($filter) { $ret = $filter; } else { $ret = new TimeIt_Filter_Container($objectType); } if (!$ret->hasGroup()) { $ret->addGroup(); } if (!empty($string)) { $first = true; $filters = explode('&', $string); foreach ($filters as $filter) { if (!$first) { $ret->addGroup(); } $expressions = explode(',', $filter); foreach ($expressions as $ex) { $ret->addExp($ex); } } } return $ret; }
/** * Displays all available events. * * @return string HTML Code */ public function view() { // check object type $objectType = FormUtil::getPassedValue('ot', 'event', 'GET'); $this->throwNotFoundUnless(in_array($objectType, TimeIt_Util::getObjectTypes('view')), $this->__f('Unkown object type %s.', DataUtil::formatForDisplay($objectType))); // load filter $filter = TimeIt_Filter_Container::getFilterFormGETPOST($objectType); $this->view->assign('modvars', ModUtil::getVar('TimeIt')); // vars $tpl = null; $theme = null; $domain = $this->serviceManager->getService('timeit.manager.' . $objectType); // load the data if ($objectType == 'event') { $calendarId = (int) FormUtil::getPassedValue('cid', ModUtil::getVar('TimeIt', 'defaultCalendar'), 'GETPOST'); $calendar = $this->serviceManager->getService('timeit.manager.calendar')->getObject($calendarId); $this->throwNotFoundIf(empty($calendar), $this->__f('Calendar [%s] not found.', $calendarId)); $year = (int) FormUtil::getPassedValue('year', date("Y"), 'GETPOST'); $month = (int) FormUtil::getPassedValue('month', date("n"), 'GETPOST'); $day = (int) FormUtil::getPassedValue('day', date("j"), 'GETPOST'); $tpl = FormUtil::getPassedValue('viewType', FormUtil::getPassedValue('viewtype', $calendar['config']['defaultView'], 'GETPOST'), 'GETPOST'); $firstDayOfWeek = (int) FormUtil::getPassedValue('firstDayOfWeek', -1, 'GETPOST'); $theme = FormUtil::getPassedValue('template', $calendar['config']['defaultTemplate'], 'GETPOST'); // backward compatibility if ($theme == 'default') { $theme = 'table'; } // check for a valid $tpl if ($tpl != 'year' && $tpl != 'month' && $tpl != 'week' && $tpl != 'day') { $tpl = $calendar['config']['defaultView']; } $tpl = 'month'; $theme = 'table'; $this->view->assign('template', $theme); $this->view->assign('viewed_day', $day); $this->view->assign('viewed_month', $month); $this->view->assign('viewed_year', $year); $this->view->assign('viewType', $tpl); $this->view->assign('calendar', $calendar); $this->view->assign('viewed_date', DateUtil::getDatetime(mktime(0, 0, 0, $month, $day, $year), DATEONLYFORMAT_FIXED)); $this->view->assign('date_today', DateUtil::getDatetime(null, DATEONLYFORMAT_FIXED)); $this->view->assign('month_startDate', DateUtil::getDatetime(mktime(0, 0, 0, $month, 1, $year), DATEONLYFORMAT_FIXED)); $this->view->assign('month_endDate', DateUtil::getDatetime(mktime(0, 0, 0, $month, DateUtil::getDaysInMonth($month, $year), $year), DATEONLYFORMAT_FIXED)); $this->view->assign('filter_obj_url', $filter->toURL()); $this->view->assign('firstDayOfWeek', $firstDayOfWeek); $this->view->assign('selectedCats', array()); $categories = CategoryRegistryUtil::getRegisteredModuleCategories('TimeIt', 'TimeIt_events'); foreach ($categories as $property => $cid) { $cat = CategoryUtil::getCategoryByID($cid); if (isset($cat['__ATTRIBUTES__']['calendarid']) && !empty($cat['__ATTRIBUTES__']['calendarid'])) { if ($cat['__ATTRIBUTES__']['calendarid'] != $calendar['id']) { unset($categories[$property]); } } } $this->view->assign('categories', $categories); // load event data switch ($tpl) { case 'year': $objectData = $domain->getYearEvents($year, $calendar['id'], $firstDayOfWeek); break; case 'month': $objectData = $domain->getMonthEvents($year, $month, $day, $calendar['id'], $firstDayOfWeek, $filter); break; case 'week': $objectData = $domain->getWeekEvents($year, $month, $day, $calendar['id'], $filter); break; case 'day': $objectData = $domain->getDayEvents($year, $month, $day, $calendar['id'], $filter); break; } } // assign the data $this->view->assign('objectArray', $objectData); // render the html return $this->_renderTemplate($this->view, $objectType, 'user', 'view', $theme, $tpl, 'table'); }