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