コード例 #1
0
ファイル: Event.php プロジェクト: planetenkiller/TimeIt
 /**
  * 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;
 }
コード例 #2
0
ファイル: Container.php プロジェクト: planetenkiller/TimeIt
 /**
  * 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;
 }
コード例 #3
0
ファイル: User.php プロジェクト: planetenkiller/TimeIt
 /**
  * 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');
 }