private function _setEventAttributes($model, $params) { //Grid sends move request if (isset($params['offset'])) { $model->start_time = \GO\Base\Util\Date::roundQuarters($model->start_time + $params['offset']); $model->end_time = \GO\Base\Util\Date::roundQuarters($model->end_time + $params['offset']); } if (isset($params['offset_days'])) { $model->start_time = \GO\Base\Util\Date::date_add($model->start_time, $params['offset_days']); $model->end_time = \GO\Base\Util\Date::date_add($model->end_time, $params['offset_days']); } //when a user resizes an event if (isset($params['duration_end_time'])) { //only use time for the update $old_end_date = getdate($model->end_time); $new_end_time = getdate($params['duration_end_time']); $model->end_time = mktime($new_end_time['hours'], $new_end_time['minutes'], 0, $old_end_date['mon'], $old_end_date['mday'], $old_end_date['year']); } if (!empty($params['freq'])) { $rRule = new \GO\Base\Util\Icalendar\Rrule(); $rRule->readJsonArray($params); $model->rrule = $rRule->createRrule(); } elseif (isset($params['freq'])) { $model->rrule = ""; } if (isset($params['reminder_value']) && isset($params['reminder_multiplier'])) { $model->reminder = \GO\Base\Util\Number::unlocalize($params['reminder_value']) * $params['reminder_multiplier']; } // else // $model->reminder = 0; $model->setAttributes($params); }
protected function beforeSubmit(&$response, &$model, &$params) { if (isset($params['freq'])) { if (!empty($params['freq'])) { $rRule = new \GO\Base\Util\Icalendar\Rrule(); $rRule->readJsonArray($params); $model->rrule = $rRule->createRrule(); } else { $model->rrule = ''; } } if (!empty($params['remind'])) { // Check for a setted reminder $model->reminder = \GO\Base\Util\Date::to_unixtime($params['remind_date'] . ' ' . $params['remind_time']); } else { $model->reminder = 0; } if ($model->isNew && empty($params['remind']) && !isset($params['priority'])) { //This checks if it is called from the quickadd bar $model->reminder = $model->getDefaultReminder(\GO\Base\Util\Date::to_unixtime($params['start_time'])); } return parent::beforeSubmit($response, $model, $params); }
/** * Import a task from a VObject * * @param Sabre\VObject\Component $vobject * @param array $attributes Extra attributes to apply to the task. Raw values should be past. No input formatting is applied. * @return Task */ public function importVObject(Sabre\VObject\Component $vobject, $attributes = array()) { //$event = new \GO\Calendar\Model\Event(); $this->uuid = (string) $vobject->uid; $this->name = (string) $vobject->summary; $this->description = (string) $vobject->description; if (!empty($vobject->dtstart)) { $this->start_time = $vobject->dtstart->getDateTime()->format('U'); } if (!empty($vobject->dtend)) { $this->due_time = $vobject->dtend->getDateTime()->format('U'); if (empty($vobject->dtstart)) { $this->start_time = $this->due_time; } } if (!empty($vobject->due)) { $this->due_time = $vobject->due->getDateTime()->format('U'); } if (empty($vobject->dtstart)) { $this->start_time = 0; } if ($vobject->dtstamp) { $this->mtime = $vobject->dtstamp->getDateTime()->format('U'); } if (empty($this->due_time)) { $this->due_time = time(); } if ($vobject->rrule) { $rrule = new \GO\Base\Util\Icalendar\Rrule(); $rrule->readIcalendarRruleString($this->start_time, (string) $vobject->rrule); $rrule->shiftDays(false); $this->rrule = $rrule->createRrule(); if (isset($rrule->until)) { $this->repeat_end_time = $rrule->until; } } //var_dump($vobject->status); if ($vobject->status) { $this->status = (string) $vobject->status; } if ($vobject->duration) { $duration = \GO\Base\VObject\Reader::parseDuration($vobject->duration); $this->end_time = $this->start_time + $duration; } if (!empty($vobject->priority)) { if ((string) $vobject->priority > 5) { $this->priority = self::PRIORITY_LOW; } elseif ((string) $vobject->priority < 3) { $this->priority = self::PRIORITY_HIGH; } else { $this->priority = self::PRIORITY_NORMAL; } } if ((string) $vobject->completed != '') { $this->completion_time = $vobject->completed->getDateTime()->format('U'); $this->status = 'COMPLETED'; } else { $this->completion_time = 0; } if (!empty($vobject->{"percent-complete"})) { $this->percentage_complete = (string) $vobject->{"percent-complete"}; } if ($this->status == 'COMPLETED' && empty($this->completion_time)) { $this->completion_time = time(); } $this->reminder = 0; if ($vobject->valarm && $vobject->valarm->trigger) { $date = $vobject->valarm->getEffectiveTriggerTime(); if ($date) { $this->reminder = $date->format('U'); } } $this->setAttributes($attributes, false); $this->cutAttributeLengths(); if ($this->due_time < $this->start_time) { $this->due_time = $this->start_time; } $this->save(); return $this; }
/** * Converts a vcalendar 1.0 component to an icalendar 2.0 component. * * @param Sabre_VObject_Component $vobject */ public static function convertVCalendarToICalendar(Sabre\VObject\Component $vobject) { if ($vobject->version == '1.0') { $vobject->version = '2.0'; foreach ($vobject->children() as $child) { if ($child instanceof Sabre\VObject\Component) { // for($i=0;$i<count($child->children);$i++){ // $property = $child->children[$i]; // if((string) $property->getValue()==""){ // \GO\Syncml\Server::debug("Unsetting: ".$property->name); // array_splice($child->children, $i, 1); // $i--; // } // // // \GO\Syncml\Server::debug("Prop: ".$property->name); // // if(isset($property['ENCODING']) && strtoupper($property['ENCODING'])=='QUOTED-PRINTABLE'){ // // \GO\Syncml\Server::debug("decode"); // // $value = quoted_printable_decode($property->getValue()); // $value = str_replace("\r","",$value); // // $property->setValue($value); // unset($property['ENCODING']); // } // } if (isset($child->rrule) && (string) $child->rrule != '') { $rrule = new \GO\Base\Util\Icalendar\Rrule(); $rrule->readIcalendarRruleString($child->dtstart->getDateTime()->format('U'), (string) $child->rrule); $child->rrule = str_replace('RRULE:', '', $rrule->createRrule()); } if (isset($child->exdate)) { $exdates = explode(';', (string) $child->exdate); $child->exdate = $exdates[0]; for ($i = 1; $i < count($exdates); $i++) { $child->add('exdate', $exdates[$i]); } } } } } }