Пример #1
0
 public static function allInPeriodCalendar($aCalendar, $MODE = 'today', $sDay = '')
 {
     //today,tomorrow,actweek,withoutdate,missedtasks
     $sharedwithByTodo = self::getTodoSharees();
     $cDataTimeLine = new Timeline();
     $cDataTimeLine->setTimeLineMode($MODE);
     if ($MODE === 'dayselect') {
         $cDataTimeLine->setTimeLineDay($sDay);
     }
     $cDataTimeLine->setCalendars($aCalendar);
     $aSQL = $cDataTimeLine->getTimeLineDB();
     $startDate = $cDataTimeLine->getStartDate();
     $endDate = $cDataTimeLine->getEndDate();
     //\OCP\Util::writeLog(self::$appname,'sql->where: '.$aSQL['wheresql'], \OCP\Util::DEBUG);
     $stmt = \OCP\DB::prepare('SELECT * FROM `' . CalendarApp::CldObjectTable . '` WHERE  `objecttype`= ? ' . $aSQL['wheresql'] . ' ORDER BY relatedto ASC, calendarid ASC, startdate DESC');
     $result = $stmt->execute($aSQL['execsql']);
     $calendarobjects = array();
     while ($row = $result->fetchRow()) {
         //$row['permissions'] = \OCP\PERMISSION_ALL;
         $row['shared'] = 0;
         if (is_array($sharedwithByTodo) && isset($sharedwithByTodo[$row['id']])) {
             $row['shared'] = 1;
         }
         if ($row['repeating'] === 1) {
             $start = new \DateTime($row['startdate']);
             $end = new \DateTime($row['enddate']);
             $startDB = new \DateTime($startDate);
             $endDB = new \DateTime($endDate);
             $object = VObject::parse($row['calendardata']);
             $vtodo = $object->VTODO;
             $rrule = explode(';', $vtodo->getAsString('RRULE'));
             foreach ($rrule as $rule) {
                 list($attr, $val) = explode('=', $rule);
                 if ($attr === 'FREQ') {
                     if ($val === 'WEEKLY') {
                         $endTS = $end->format('U');
                         //Get day of Week
                         $dayOfWeekrRule = date('w', $start->format('U'));
                         $dayOfWeek = date('w', $startDB->format('U'));
                         $startDBU = $startDB->format('U');
                         if ($MODE != 'actweek') {
                             if ($dayOfWeekrRule == $dayOfWeek && $startDBU < $endTS) {
                                 $calendarobjects[] = $row;
                             }
                         } else {
                             $endDBU = $endDB->format('U');
                             if ($endTS > $endDBU) {
                                 $calendarobjects[] = $row;
                                 //\OCP\Util::writeLog('calendar','Events Shared Found: ->'.$MODE, \OCP\Util::DEBUG);
                             }
                         }
                     }
                     if ($val === 'DAILY') {
                         $dayOfWeek = date('w', $startDB->format('U'));
                         $endTS = $end->format('U');
                         $startDBU = $startDB->format('U');
                         if ($MODE !== 'actweek') {
                             if ($dayOfWeek != 0 && $dayOfWeek != 6 && $startDBU < $endTS) {
                                 $calendarobjects[] = $row;
                             }
                         } else {
                             for ($i = 1; $i < 6; $i++) {
                                 $row['day'] = $i;
                                 $calendarobjects[] = $row;
                             }
                         }
                     }
                 }
             }
         } else {
             $calendarobjects[] = $row;
         }
     }
     $tasksFiltered = array();
     foreach ($calendarobjects as $taskHaupt) {
         $bsub = false;
         $uidName = '';
         foreach ($calendarobjects as $taskSub) {
             if ($taskHaupt['eventuid'] !== '' && $taskHaupt['eventuid'] === $taskSub['relatedto']) {
                 $bsub = true;
                 $uidName = $taskHaupt['summary'];
             }
         }
         $taskHaupt['subtask'] = $bsub;
         if ($bsub === false) {
             $taskHaupt['uidname'] = $uidName;
         }
         $tasksFiltered[] = $taskHaupt;
     }
     return $tasksFiltered;
 }