public function actionUpdate() { self::validateRequest(); if (Yii::$app->request->isPost) { $id = Yii::$app->request->post('CalendarEvent')['id']; $create = Yii::$app->request->post('create_event'); if ($create == '0') { //vem do create (pode já ter dados) $model = new CalendarEvent(); $model->load(Yii::$app->request->post()); $model->setEventDateTime(); $modelReminder = $model->getReminder(); $modelAssigned = CalendarEventAssign::findAll(['calendar_event_id' => -1]); $modelMembers = \Yii::$app->user->identity->familyMembers; return $this->renderAjax('_user', ['model' => $model, 'modelReminder' => $modelReminder, 'modelAssigned' => $modelAssigned, 'modelMembers' => $modelMembers]); } elseif ($create == '1') { // cria novo - detalhado $model = new CalendarEvent(); } else { $model = CalendarEvent::findOne($id); } $model->load(Yii::$app->request->post()); if (!$model || !$model->isMine()) { return false; } $model->setEventDateTime(); $model->validateRule(); if ($model->save()) { $model->saveReminder(Yii::$app->request->post()); \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return CalendarEvent::getEventArray($model); } return $this->redirect("/calendar/user"); } // Envia dados para atualizar evento $id = Yii::$app->request->getQueryParam('id'); $model = CalendarEvent::findOne($id); if (!$model || !$model->isMine()) { return json_encode("Algo correu mal!!! Pedido não pode ser satisfeito."); } if ($model->recurrence_id) { $start = Yii::$app->request->getQueryParam('start'); $end = Yii::$app->request->getQueryParam('end'); if (!$start || !$end) { throw new \yii\base\Exception("Faltam parametros 'start' e 'end' "); } $model->setEventDateTime($start, $end); } $modelReminder = $model->getReminder(); $modelAssigned = CalendarEventAssign::findAll(['calendar_event_id' => $id]); $modelMembers = \Yii::$app->user->identity->familyMembers; return json_encode($this->renderAjax('_user', ['model' => $model, 'modelReminder' => $modelReminder, 'modelAssigned' => $modelAssigned, 'modelMembers' => $modelMembers])); }
public static function getDatesByEventID($id, $start, $end) { $events = array(); $evt = CalendarEvent::findOne($id); //Só envia os eventos privados do próprio utilizador if ($evt->event_type == \app\enum\EventType::Privado && $evt->calendar_id != \Yii::$app->user->identity->calendar_id) { return $events; } if ($evt->recurrence != 1) { $events[] = CalendarEvent::getEventArray($evt); } else { $timezone = date_default_timezone_get(); $evtstart = new \DateTime($evt->start); $evtend = new \DateTime($evt->end); $rrule = $evt->recurrence_rule; $rule = new \Recurr\Rule($rrule, $evtstart, $evtend, $timezone); $transformer = new \Recurr\Transformer\ArrayTransformer(); //$transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig(); //$transformerConfig->enableLastDayOfMonthFix(); //$transformer->setConfig($transformerConfig); //$constraint = new \Recurr\Transformer\Constraint\BetweenConstraint($rstart,$rend,true); //$results = $transformer->transform($rule,null,$constraint); $results = $transformer->transform($rule); // $textTransformer = new \Recurr\Transformer\TextTransformer(new \Recurr\Transformer\Translator('en')); // echo 'eventos entre '. $start . ' e '. $end .'<br>'; // echo $evt->recurrence_rule .'<br>'; // echo $textTransformer->transform($rule) .'<br>'; // // var_dump($results->startsBetween(new \DateTime($start),new \DateTime($end),true)); die; foreach ($results->startsBetween(new \DateTime($start), new \DateTime($end), true) as $obj) { $s = $obj->getStart(); $e = $obj->getEnd(); $evt->setEventDateTime($s->format('Y-m-d H:i'), $e->format('Y-m-d H:i')); $events[] = CalendarEvent::getEventArray($evt); } } return $events; }