示例#1
0
文件: calendar.php 项目: ratbird/hope
 protected function storeEventData(CalendarEvent $event, SingleCalendar $calendar)
 {
     if (Request::int('isdayevent')) {
         $dt_string = Request::get('start_date') . ' 00:00:00';
     } else {
         $dt_string = Request::get('start_date') . ' ' . Request::int('start_hour') . ':' . Request::int('start_minute');
     }
     $event->setStart($this->parseDateTime($dt_string));
     if (Request::int('isdayevent')) {
         $dt_string = Request::get('end_date') . ' 23:59:59';
     } else {
         $dt_string = Request::get('end_date') . ' ' . Request::int('end_hour') . ':' . Request::int('end_minute');
     }
     $event->setEnd($this->parseDateTime($dt_string));
     if ($event->getStart() > $event->getEnd()) {
         $messages[] = _('Die Startzeit muss vor der Endzeit liegen.');
     }
     if (Request::isXhr()) {
         $event->setTitle(studip_utf8decode(Request::get('summary', '')));
         $event->event->description = studip_utf8decode(Request::get('description', ''));
         $event->setUserDefinedCategories(studip_utf8decode(Request::get('categories', '')));
         $event->event->location = studip_utf8decode(Request::get('location', ''));
     } else {
         $event->setTitle(Request::get('summary'));
         $event->event->description = Request::get('description', '');
         $event->setUserDefinedCategories(Request::get('categories', ''));
         $event->event->location = Request::get('location', '');
     }
     $event->event->category_intern = Request::int('category_intern', 1);
     $event->setAccessibility(Request::option('accessibility', 'PRIVATE'));
     $event->setPriority(Request::int('priority', 0));
     if (!$event->getTitle()) {
         $messages[] = _('Es muss eine Zusammenfassung angegeben werden.');
     }
     $rec_type = Request::option('recurrence', 'single');
     $expire = Request::option('exp_c', 'never');
     $rrule = array('linterval' => null, 'sinterval' => null, 'wdays' => null, 'month' => null, 'day' => null, 'rtype' => 'SINGLE', 'count' => null, 'expire' => null);
     if ($expire == 'count') {
         $rrule['count'] = Request::int('exp_count', 10);
     } else {
         if ($expire == 'date') {
             if (Request::isXhr()) {
                 $exp_date = studip_utf8decode(Request::get('exp_date'));
             } else {
                 $exp_date = Request::get('exp_date');
             }
             $exp_date = $exp_date ?: strftime('%x', time());
             $rrule['expire'] = $this->parseDateTime($exp_date . ' 12:00');
         }
     }
     switch ($rec_type) {
         case 'daily':
             if (Request::option('type_daily', 'day') == 'day') {
                 $rrule['linterval'] = Request::int('linterval_d', 1);
                 $rrule['rtype'] = 'DAILY';
             } else {
                 $rrule['linterval'] = 1;
                 $rrule['wdays'] = '12345';
                 $rrule['rtype'] = 'WEEKLY';
             }
             break;
         case 'weekly':
             $rrule['linterval'] = Request::int('linterval_w', 1);
             $rrule['wdays'] = implode('', Request::intArray('wdays', array(strftime('%u', $event->getStart()))));
             $rrule['rtype'] = 'WEEKLY';
             break;
         case 'monthly':
             if (Request::option('type_m', 'day') == 'day') {
                 $rrule['linterval'] = Request::int('linterval_m1', 1);
                 $rrule['day'] = Request::int('day_m', strftime('%e', $event->getStart()));
                 $rrule['rtype'] = 'MONTHLY';
             } else {
                 $rrule['linterval'] = Request::int('linterval_m2', 1);
                 $rrule['sinterval'] = Request::int('sinterval_m', 1);
                 $rrule['wdays'] = Request::int('wday_m', strftime('%u', $event->getStart()));
                 $rrule['rtype'] = 'MONTHLY';
             }
             break;
         case 'yearly':
             if (Request::option('type_y', 'day') == 'day') {
                 $rrule['linterval'] = 1;
                 $rrule['day'] = Request::int('day_y', strftime('%e', $event->getStart()));
                 $rrule['month'] = Request::int('month_y1', date('n', $event->getStart()));
                 $rrule['rtype'] = 'YEARLY';
             } else {
                 $rrule['linterval'] = 1;
                 $rrule['sinterval'] = Request::int('sinterval_y', 1);
                 $rrule['wdays'] = Request::int('wday_y', strftime('%u', $event->getStart()));
                 $rrule['month'] = Request::int('month_y2', date('n', $event->getStart()));
                 $rrule['rtype'] = 'YEARLY';
             }
             break;
     }
     if (sizeof($messages)) {
         PageLayout::postMessage(MessageBox::error(_('Bitte Eingaben korrigieren'), $messages));
         return false;
     } else {
         $event->setRecurrence($rrule);
         $exceptions = array_diff(Request::getArray('exc_dates'), Request::getArray('del_exc_dates'));
         $event->setExceptions($this->parseExceptions($exceptions));
         // if this is a group event, store event in the calendars of each attendee
         if (get_config('CALENDAR_GROUP_ENABLE')) {
             $attendee_ids = Request::optionArray('attendees');
             return $calendar->storeEvent($event, $attendee_ids);
         } else {
             return $calendar->storeEvent($event);
         }
     }
 }