diff options
Diffstat (limited to 'apps/calendar/lib/object.php')
-rw-r--r-- | apps/calendar/lib/object.php | 341 |
1 files changed, 318 insertions, 23 deletions
diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index 1c145003511..cbb1badf802 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -356,9 +356,99 @@ class OC_Calendar_Object{ 'weekday' => $l10n->t('Every Weekday'), 'biweekly' => $l10n->t('Bi-Weekly'), 'monthly' => $l10n->t('Monthly'), - 'yearly' => $l10n->t('Yearly'), + 'yearly' => $l10n->t('Yearly') ); } + + public static function getEndOptions($l10n) + { + return array( + 'never' => $l10n->t('never'), + 'count' => $l10n->t('by occurrences'), + 'date' => $l10n->t('by date') + ); + } + + public static function getMonthOptions($l10n) + { + return array( + 'monthday' => $l10n->t('by monthday'), + 'weekday' => $l10n->t('by weekday') + ); + } + + public static function getWeeklyOptions($l10n) + { + return array( + 'MO' => $l10n->t('Monday'), + 'TU' => $l10n->t('Tuesday'), + 'WE' => $l10n->t('Wednesday'), + 'TH' => $l10n->t('Thursday'), + 'FR' => $l10n->t('Friday'), + 'SA' => $l10n->t('Saturday'), + 'SU' => $l10n->t('Sunday') + ); + } + + public static function getWeekofMonth($l10n) + { + return array( + 'auto' => $l10n->t('events week of month'), + '1' => $l10n->t('first'), + '2' => $l10n->t('second'), + '3' => $l10n->t('third'), + '4' => $l10n->t('fourth'), + '5' => $l10n->t('fifth'), + '-1' => $l10n->t('last') + ); + } + + public static function getByYearDayOptions(){ + $return = array(); + foreach(range(1,366) as $num){ + $return[(string) $num] = (string) $num; + } + return $return; + } + + public static function getByMonthDayOptions(){ + $return = array(); + foreach(range(1,31) as $num){ + $return[(string) $num] = (string) $num; + } + return $return; + } + + public static function getByMonthOptions($l10n){ + return array( + '1' => $l10n->t('January'), + '2' => $l10n->t('February'), + '3' => $l10n->t('March'), + '4' => $l10n->t('April'), + '5' => $l10n->t('May'), + '6' => $l10n->t('June'), + '7' => $l10n->t('July'), + '8' => $l10n->t('August'), + '9' => $l10n->t('September'), + '10' => $l10n->t('October'), + '11' => $l10n->t('November'), + '12' => $l10n->t('December') + ); + } + + public static function getYearOptions($l10n){ + return array( + 'bydate' => $l10n->t('by events date'), + 'byyearday' => $l10n->t('by yearday(s)'), + 'byweekno' => $l10n->t('by weeknumber(s)'), + 'bydaymonth' => $l10n->t('by day and month') + ); + } + + public static function getByWeekNoOptions(){ + return range(1, 52); + } + public static function validateRequest($request) { $errnum = 0; @@ -367,7 +457,7 @@ class OC_Calendar_Object{ $errarr['title'] = 'true'; $errnum++; } - $calendar = OC_Calendar_Calendar::findCalendar($request['calendar']); + $calendar = OC_Calendar_Calendar::find($request['calendar']); if($calendar['userid'] != OC_User::getUser()){ $errarr['cal'] = 'true'; $errnum++; @@ -397,7 +487,91 @@ class OC_Calendar_Object{ $errarr['to'] = 'true'; $errnum++; } - ; + if($request['repeat'] != 'doesnotrepeat'){ + if(is_nan($request['interval']) && $request['interval'] != ''){ + $errarr['interval'] = 'true'; + $ernum++; + } + if(array_key_exists('repeat', $request) && !array_key_exists($request['repeat'], self::getRepeatOptions(OC_Calendar_App::$l10n))){ + $errarr['repeat'] = 'true'; + $ernum++; + } + if(array_key_exists('advanced_month_select', $request) && !array_key_exists($request['advanced_month_select'], self::getMonthOptions(OC_Calendar_App::$l10n))){ + $errarr['advanced_month_select'] = 'true'; + $errnum++; + } + if(array_key_exists('advanced_year_select', $request) && !array_key_exists($request['advanced_year_select'], self::getYearOptions(OC_Calendar_App::$l10n))){ + $errarr['advanced_year_select'] = 'true'; + $errnum++; + } + if(array_key_exists('weekofmonthoptions', $request) && !array_key_exists($request['weekofmonthoptions'], self::getWeekofMonth(OC_Calendar_App::$l10n))){ + $errarr['weekofmonthoptions'] = 'true'; + $errnum++; + } + if($request['end'] != 'never'){ + if(!array_key_exists($request['end'], self::getEndOptions(OC_Calendar_App::$l10n))){ + $errarr['end'] = 'true'; + $errnum++; + } + if($request['end'] == 'count' && is_nan($request['byoccurrences'])){ + $errarr['byoccurrences'] = 'true'; + $errnum++; + } + if($request['end'] == 'date'){ + list($bydate_day, $bydate_month, $bydate_year) = explode('-', $request['bydate']); + if(!checkdate($bydate_month, $bydate_day, $bydate_year)){ + $errarr['bydate'] = 'true'; + $errnum++; + } + } + } + if(array_key_exists('weeklyoptions', $request)){ + foreach($request['weeklyoptions'] as $option){ + if(!in_array($option, self::getWeeklyOptions(OC_Calendar_App::$l10n))){ + $errarr['weeklyoptions'] = 'true'; + $errnum++; + } + } + } + if(array_key_exists('byyearday', $request)){ + foreach($request['byyearday'] as $option){ + if(!array_key_exists($option, self::getByYearDayOptions())){ + $errarr['byyearday'] = 'true'; + $errnum++; + } + } + } + if(array_key_exists('weekofmonthoptions', $request)){ + if(is_nan((double)$request['weekofmonthoptions'])){ + $errarr['weekofmonthoptions'] = 'true'; + $errnum++; + } + } + if(array_key_exists('bymonth', $request)){ + foreach($request['bymonth'] as $option){ + if(!in_array($option, self::getByMonthOptions(OC_Calendar_App::$l10n))){ + $errarr['bymonth'] = 'true'; + $errnum++; + } + } + } + if(array_key_exists('byweekno', $request)){ + foreach($request['byweekno'] as $option){ + if(!array_key_exists($option, self::getByWeekNoOptions())){ + $errarr['byweekno'] = 'true'; + $errnum++; + } + } + } + if(array_key_exists('bymonthday', $request)){ + foreach($request['bymonthday'] as $option){ + if(!array_key_exists($option, self::getByMonthDayOptions())){ + $errarr['bymonthday'] = 'true'; + $errnum++; + } + } + } + } if(!$allday && self::checkTime(urldecode($request['totime']))) { $errarr['totime'] = 'true'; $errnum++; @@ -468,27 +642,148 @@ class OC_Calendar_Object{ $fromtime = $request['fromtime']; $totime = $request['totime']; } + $vevent = $vcalendar->VEVENT; $description = $request["description"]; - //$repeat = $request["repeat"]; - /*switch($request["repeatfreq"]){ - case "DAILY": - $repeatfreq = "DAILY"; - case "WEEKLY": - $repeatfreq = "WEEKLY"; - case "WEEKDAY": - $repeatfreq = "DAILY;BYDAY=MO,TU,WE,TH,FR"; //load weeksdayss from userconfig when weekdays are choosable - case "": - $repeatfreq = ""; - case "": - $repeatfreq = ""; - case "": - $repeatfreq = ""; - default: - $repeat = "false"; - }*/ - $repeat = "false"; + $repeat = $request["repeat"]; + if($repeat != 'doesnotrepeat'){ + $rrule = ''; + $interval = $request['interval']; + $end = $request['end']; + $byoccurrences = $request['byoccurrences']; + switch($repeat){ + case 'daily': + $rrule .= 'FREQ=DAILY'; + break; + case 'weekly': + $rrule .= 'FREQ=WEEKLY'; + if(array_key_exists('weeklyoptions', $request)){ + $byday = ''; + $daystrings = array_flip(self::getWeeklyOptions(OC_Calendar_App::$l10n)); + foreach($request['weeklyoptions'] as $days){ + if($byday == ''){ + $byday .= $daystrings[$days]; + }else{ + $byday .= ',' .$daystrings[$days]; + } + } + $rrule .= ';BYDAY=' . $byday; + } + break; + case 'weekday': + $rrule .= 'FREQ=WEEKLY'; + $rrule .= ';BYDAY=MO,TU,WE,TH,FR'; + break; + case 'biweekly': + $rrule .= 'FREQ=WEEKLY'; + $interval = $interval * 2; + break; + case 'monthly': + $rrule .= 'FREQ=MONTHLY'; + if($request['advanced_month_select'] == 'monthday'){ + break; + }elseif($request['advanced_month_select'] == 'weekday'){ + if($request['weekofmonthoptions'] == 'auto'){ + list($_day, $_month, $_year) = explode('-', $from); + $weekofmonth = floor($_day/7); + }else{ + $weekofmonth = $request['weekofmonthoptions']; + } + $days = array_flip(self::getWeeklyOptions(OC_Calendar_App::$l10n)); + $byday = ''; + foreach($request['weeklyoptions'] as $day){ + if($byday == ''){ + $byday .= $weekofmonth . $days[$day]; + }else{ + $byday .= ',' . $weekofmonth . $days[$day]; + } + } + $rrule .= ';BYDAY=' . $byday; + } + break; + case 'yearly': + $rrule .= 'FREQ=YEARLY'; + if($request['advanced_year_select'] == 'bydate'){ + + }elseif($request['advanced_year_select'] == 'byyearday'){ + list($_day, $_month, $_year) = explode('-', $from); + $byyearday = date('z', mktime(0,0,0, $_month, $_day, $_year)) + 1; + if(array_key_exists('byyearday', $request)){ + foreach($request['byyearday'] as $yearday){ + $byyearday .= ',' . $yearday; + } + } + $rrule .= ';BYYEARDAY=' . $byyearday; + }elseif($request['advanced_year_select'] == 'byweekno'){ + list($_day, $_month, $_year) = explode('-', $from); + $rrule .= ';BYDAY=' . strtoupper(substr(date('l', mktime(0,0,0, $_month, $_day, $_year)), 0, 2)); + $byweekno = ''; + foreach($request['byweekno'] as $weekno){ + if($byweekno == ''){ + $byweekno = $weekno; + }else{ + $byweekno .= ',' . $weekno; + } + } + $rrule .= ';BYWEEKNO=' . $byweekno; + }elseif($request['advanced_year_select'] == 'bydaymonth'){ + if(array_key_exists('weeklyoptions', $request)){ + $days = array_flip(self::getWeeklyOptions(OC_Calendar_App::$l10n)); + $byday = ''; + foreach($request['weeklyoptions'] as $day){ + if($byday == ''){ + $byday .= $days[$day]; + }else{ + $byday .= ',' . $days[$day]; + } + } + $rrule .= ';BYDAY=' . $byday; + } + if(array_key_exists('bymonth', $request)){ + $monthes = array_flip(self::getByMonthOptions(OC_Calendar_App::$l10n)); + $bymonth = ''; + foreach($request['bymonth'] as $month){ + if($bymonth == ''){ + $bymonth .= $monthes[$month]; + }else{ + $bymonth .= ',' . $monthes[$month]; + } + } + $rrule .= ';BYMONTH=' . $bymonth; + + } + if(array_key_exists('bymonthday', $request)){ + $bymonthday = ''; + foreach($request['bymonthday'] as $monthday){ + if($bymonthday == ''){ + $bymonthday .= $monthday; + }else{ + $bymonthday .= ',' . $monthday; + } + } + $rrule .= ';BYMONTHDAY=' . $bymonthday; + + } + } + break; + default: + break; + } + if($interval != ''){ + $rrule .= ';INTERVAL=' . $interval; + } + if($end == 'count'){ + $rrule .= ';COUNT=' . $byoccurrences; + } + if($end == 'date'){ + list($bydate_day, $bydate_month, $bydate_year) = explode('-', $request['bydate']); + $rrule .= ';UNTIL=' . $bydate_year . $bydate_month . $bydate_day; + } + $vevent->setString('RRULE', $rrule); + $repeat = "true"; + }else{ + $repeat = "false"; + } - $vevent = $vcalendar->VEVENT; $vevent->setDateTime('LAST-MODIFIED', 'now', Sabre_VObject_Element_DateTime::UTC); $vevent->setDateTime('DTSTAMP', 'now', Sabre_VObject_Element_DateTime::UTC); @@ -521,4 +816,4 @@ class OC_Calendar_Object{ return $vcalendar; } -} +}
\ No newline at end of file |