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; }