]> source.dussan.org Git - nextcloud-server.git/commitdiff
connect OC_Calendar_repeat to events.php
authorGeorg Ehrke <dev@georgswebsite.de>
Mon, 11 Jun 2012 15:25:03 +0000 (17:25 +0200)
committerGeorg Ehrke <dev@georgswebsite.de>
Mon, 11 Jun 2012 15:25:03 +0000 (17:25 +0200)
apps/calendar/lib/app.php

index b5667070d998f4b7acb422e5fe38e065038efb01..4bd1e1b7119b5f0f4b3a671093cc98f62ce60a30 100644 (file)
@@ -119,8 +119,7 @@ class OC_Calendar_App{
         * @brief returns the default categories of ownCloud
         * @return (array) $categories
         */
-       protected static function getDefaultCategories()
-       {
+       protected static function getDefaultCategories(){
                return array(
                        self::$l10n->t('Birthday'),
                        self::$l10n->t('Business'),
@@ -155,8 +154,7 @@ class OC_Calendar_App{
         * @brief returns the categories of the vcategories object
         * @return (array) $categories
         */
-       public static function getCategoryOptions()
-       {
+       public static function getCategoryOptions(){
                $categories = self::getVCategories()->categories();
                return $categories;
        }
@@ -359,65 +357,84 @@ class OC_Calendar_App{
        /*
         * @brief generates the output for an event which will be readable for our js
         * @param (mixed) $event - event object / array
-        * @param (int) $start - unixtimestamp of start
-        * @param (int) $end - unixtimestamp of end
+        * @param (int) $start - DateTime object of start
+        * @param (int) $end - DateTime object of end
         * @return (array) $output - readable output
         */
        public static function generateEventOutput($event, $start, $end){
-               $output = array();
-               
-               if(isset($event['calendardata'])){
+               // Why is the following code necessary ? //
+               /*if(isset($event['calendardata'])){
                        $object = OC_VObject::parse($event['calendardata']);
                        $vevent = $object->VEVENT;
                }else{
                        $vevent = $event['vevent'];
-               }
-               
+               }*/
+               $return = array();
+               $id = $event['id'];
+               $object = $object = OC_VObject::parse($event['calendardata']);
+               $vevent = $object->VEVENT;
+               $allday = ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false;
                $last_modified = @$vevent->__get('LAST-MODIFIED');
                $lastmodified = ($last_modified)?$last_modified->getDateTime()->format('U'):0;
-               
-               $output = array('id'=>(int)$event['id'],
+               $staticoutput = array('id'=>(int)$event['id'],
                                                'title' => htmlspecialchars(($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed')),
                                                'description' => isset($vevent->DESCRIPTION)?htmlspecialchars($vevent->DESCRIPTION->value):'',
-                                               'lastmodified'=>$lastmodified);
-
-               $object->expand($start, $end);
-               foreach($object->getComponents() as $child){
-                       if(get_class($child) != 'Sabre_VObject_Component_VEvent'){
-                               continue;
-                       }
-                       $vevent = $child;
-                       $dtstart = $vevent->DTSTART;
-                       $start_dt = $dtstart->getDateTime();
-                       $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
-                       $end_dt = $dtend->getDateTime();
-                       
-                       if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
-                               $output['allDay'] = true;
-                       }else{
-                               $output['allDay'] = false;
-                               $start_dt->setTimezone(new DateTimeZone(self::$tz));
-                               $end_dt->setTimezone(new DateTimeZone(self::$tz));
+                                               'lastmodified'=>$lastmodified,
+                                               'allDay'=>$allday);
+               if(OC_Calendar_Object::isrepeating($id) && OC_Calendar_Repeat::is_cached_inperiod($event['id'], OC_Calendar_Object::getUTCforMDB($start), OC_Calendar_Object::getUTCforMDB($end))){
+                       $cachedinperiod = OC_Calendar_Repeat::get_inperiod($id, OC_Calendar_Object::getUTCforMDB($start), OC_Calendar_Object::getUTCforMDB($end));
+                       foreach($cachedinperiod as $cachedevent){
+                               $dynamicoutput = array();
+                               if($allday){
+                                       $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC'));
+                                       $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC'));
+                                       $dynamicoutput['start'] = $start_dt->format('Y-m-d');
+                                       $dynamicoutput['end'] = $end_dt->format('Y-m-d');
+                               }else{
+                                       $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC'));
+                                       $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC'));
+                                       $start_dt->setTimezone(new DateTimeZone(self::$tz));
+                                       $end_dt->setTimezone(new DateTimeZone(self::$tz));
+                                       $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s');
+                                       $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s');
+                               }
+                               $return[] = array_merge($staticoutput, $dynamicoutput);
                        }
-
-                       // Handle exceptions to recurring events
-                       /*$exceptionDateObjects = $vevent->select('EXDATE');
-                       $exceptionDateMap = Array();
-                       foreach ($exceptionDateObjects as $exceptionObject) {
-                               foreach($exceptionObject->getDateTimes() as $datetime) {
-                                       $ts = $datetime->getTimestamp();
-                                       $exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)] = true;
+               }else{
+                       $object->expand($start, $end);
+                       foreach($object->getComponents() as $vevent){
+                               if(get_class($vevent) != 'Sabre_VObject_Component_VEvent'){
+                                       continue;
                                }
-                       }*/
-                       if($output['allDay'] == true){
-                               $output['start'] = $start_dt->format('Y-m-d');
-                               $end_dt->modify('-1 sec');
-                               $output['end'] = $end_dt->format('Y-m-d');
-                       }else{
-                               $output['start'] = $start_dt->format('Y-m-d H:i:s');
-                               $output['end'] = $end_dt->format('Y-m-d H:i:s');
+                               $dynamicoutput = array();
+                               $dtstart = $vevent->DTSTART;
+                               $start_dt = $dtstart->getDateTime();
+                               $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
+                               $end_dt = $dtend->getDateTime();
+                               
+                               if($allday){
+                                       $dynamicoutput['start'] = $start_dt->format('Y-m-d');
+                                       $end_dt->modify('-1 sec');
+                                       $dynamicoutput['end'] = $end_dt->format('Y-m-d');
+                               }else{
+                                       $start_dt->setTimezone(new DateTimeZone(self::$tz));
+                                       $end_dt->setTimezone(new DateTimeZone(self::$tz));
+                                       $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s');
+                                       $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s');
+                               }
+
+                               // Handle exceptions to recurring events
+                               /*$exceptionDateObjects = $vevent->select('EXDATE');
+                               $exceptionDateMap = Array();
+                               foreach ($exceptionDateObjects as $exceptionObject) {
+                                       foreach($exceptionObject->getDateTimes() as $datetime) {
+                                               $ts = $datetime->getTimestamp();
+                                               $exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)] = true;
+                                       }
+                               }*/
+
+                               $return[] = array_merge($staticoutput, $dynamicoutput);
                        }
-                       $return[] = $output;
                }
                return $return;
        }