Example #1
0
 private function parseRrules($rrule)
 {
     $rrulearr = array();
     $repeat['repeat_rules'] = '';
     foreach ($rrule as $rule) {
         list($attr, $val) = explode('=', $rule);
         if ((string) $attr !== 'COUNT') {
             if ($repeat['repeat_rules'] === '') {
                 $repeat['repeat_rules'] = $attr . '=' . $val;
             } else {
                 $repeat['repeat_rules'] .= ';' . $attr . '=' . $val;
             }
         }
     }
     foreach ($rrule as $rule) {
         list($attr, $val) = explode('=', $rule);
         $rrulearr[$attr] = $val;
     }
     if (!isset($rrulearr['INTERVAL']) || $rrulearr['INTERVAL'] === '') {
         $rrulearr['INTERVAL'] = 1;
     }
     if (array_key_exists('BYDAY', $rrulearr)) {
         if (substr_count($rrulearr['BYDAY'], ',') === 0) {
             if (strlen($rrulearr['BYDAY']) === 2) {
                 $repeat['weekdays'][$rrulearr['BYDAY']] = $rrulearr['BYDAY'];
             } elseif (strlen($rrulearr['BYDAY']) === 3) {
                 $repeat['weekofmonth'] = substr($rrulearr['BYDAY'], 0, 1);
                 $repeat['weekdays'][substr($rrulearr['BYDAY'], 1, 2)] = substr($rrulearr['BYDAY'], 1, 2);
             } elseif (strlen($rrulearr['BYDAY']) === 4) {
                 $repeat['weekofmonth'] = substr($rrulearr['BYDAY'], 0, 2);
                 $repeat['weekdays'][substr($rrulearr['BYDAY'], 2, 2)] = substr($rrulearr['BYDAY'], 2, 2);
             }
         } else {
             $byday_days = explode(',', $rrulearr['BYDAY']);
             foreach ($byday_days as $byday_day) {
                 if (strlen($byday_day) === 2) {
                     $repeat['weekdays'][$byday_day] = $byday_day;
                 } elseif (strlen($byday_day) === 3) {
                     $repeat['weekofmonth'] = substr($byday_day, 0, 1);
                     $repeat['weekdays'][substr($byday_day, 1, 2)] = substr($byday_day, 1, 2);
                 } elseif (strlen($byday_day) === 4) {
                     $repeat['weekofmonth'] = substr($byday_day, 0, 2);
                     $repeat['weekdays'][substr($byday_day, 2, 2)] = substr($byday_day, 2, 2);
                 }
             }
         }
     }
     if (array_key_exists('BYMONTHDAY', $rrulearr)) {
         if (substr_count($rrulearr['BYMONTHDAY'], ',') === 0) {
             $repeat['bymonthday'][$rrulearr['BYMONTHDAY']] = $rrulearr['BYMONTHDAY'];
         } else {
             $bymonthdays = explode(',', $rrulearr['BYMONTHDAY']);
             foreach ($bymonthdays as $bymonthday) {
                 $repeat['bymonthday'][$bymonthday] = $bymonthday;
             }
         }
     }
     if (array_key_exists('BYMONTH', $rrulearr)) {
         //Fix
         if (substr_count($rrulearr['BYMONTH'], ',') === 0) {
             $repeat['bymonth'][(string) $rrulearr['BYMONTH']] = (string) $rrulearr['BYMONTH'];
         } else {
             $bymonth = explode(',', $rrulearr['BYMONTH']);
             foreach ($bymonth as $month) {
                 $repeat['bymonth'][$month] = $month;
             }
         }
         //$repeat['bymonthday'][] =$dtstart -> getDateTime() -> format('d');
     }
     switch ($rrulearr['FREQ']) {
         case 'DAILY':
             if ((int) $repeat['interval'] === 1) {
                 $repeat['repeat'] = 'DAILY';
             } else {
                 $repeat['repeat'] = 'OWNDEF';
             }
             break;
         case 'WEEKLY':
             if (array_key_exists('BYDAY', $rrulearr) === false) {
                 $rrulearr['BYDAY'] = '';
                 $repeat['repeat'] = 'WEEKLY';
             } else {
                 $repeat['repeat'] = 'OWNDEF';
                 $repeat['rAdvanced'] = 'WEEKLY';
             }
             break;
         case 'MONTHLY':
             $repeat['repeat'] = 'MONTHLY';
             if (array_key_exists('BYDAY', $rrulearr)) {
                 $repeat['rRadio0'] = '';
                 $repeat['rClass0'] = 'class="ui-isDisabled"';
                 $repeat['rRadio1'] = 'checked="checked"';
                 $repeat['rClass1'] = '';
                 $repeat['rAdvanced'] = 'MONTHLY';
                 $repeat['repeat'] = 'OWNDEF';
             } elseif (array_key_exists('BYMONTHDAY', $rrulearr)) {
                 $repeat['rRadio0'] = 'checked="checked"';
                 $repeat['rClass0'] = '';
                 $repeat['rRadio1'] = '';
                 $repeat['rClass1'] = 'class="ui-isDisabled"';
                 $repeat['rAdvanced'] = 'MONTHLY';
                 $repeat['repeat'] = 'OWNDEF';
             } else {
                 $repeat['rRadio0'] = 'checked="checked"';
                 $repeat['rClass0'] = '';
                 $repeat['rRadio1'] = '';
                 $repeat['rClass1'] = 'class="ui-isDisabled"';
             }
             break;
         case 'YEARLY':
             //Fix
             $repeat['repeat'] = 'YEARLY';
             if (array_key_exists('BYMONTH', $rrulearr) && array_key_exists('BYDAY', $rrulearr)) {
                 $repeat['checkedMonth'] = 'checked';
                 $repeat['bdayClass'] = '';
                 $repeat['repeat'] = 'OWNDEF';
                 $repeat['rAdvanced'] = 'YEARLY';
             } elseif (array_key_exists('BYMONTH', $rrulearr) && array_key_exists('BYDAY', $rrulearr) === false) {
                 $repeat['checkedMonth'] = '';
                 $repeat['repeat'] = 'OWNDEF';
                 $repeat['rAdvanced'] = 'YEARLY';
                 $repeat['bdayClass'] = 'class="ui-isDisabled"';
             } else {
                 $repeat['year'] = '';
             }
     }
     $repeat['interval'] = $rrulearr['INTERVAL'];
     if (array_key_exists('COUNT', $rrulearr)) {
         $repeat['end'] = 'count';
         $repeat['count'] = $rrulearr['COUNT'];
     } elseif (array_key_exists('UNTIL', $rrulearr)) {
         $repeat['end'] = 'date';
         $endbydate_day = substr($rrulearr['UNTIL'], 6, 2);
         $endbydate_month = substr($rrulearr['UNTIL'], 4, 2);
         $endbydate_year = substr($rrulearr['UNTIL'], 0, 4);
         $repeat['date'] = $endbydate_day . '-' . $endbydate_month . '-' . $endbydate_year;
     } else {
         $repeat['end'] = 'never';
     }
     if (array_key_exists('weekdays', $repeat)) {
         $repeat_weekdays_ = array();
         $days = CalendarApp::getWeeklyOptions();
         foreach ($repeat['weekdays'] as $weekday) {
             $repeat_weekdays[$weekday] = $weekday;
         }
         $repeat['weekdays'] = $repeat_weekdays;
     }
     return $repeat;
 }