/**
  * @param $attribute
  * @param \MongoDate|string|int $oldValue
  * @param \MongoDate|string|int $newValue
  * @return array|bool
  */
 private function getLogRow($attribute, $oldValue, $newValue)
 {
     $row = ['date' => new \MongoDate(), 'user' => \Yii::$app->user->identity['fullName']];
     switch ($attribute) {
         case 'date':
             $row['action'] = "Изменилась дата с " . \Yii::$app->formatter->asDate($oldValue->toDateTime()) . " на " . \Yii::$app->formatter->asDate($newValue->toDateTime());
             return $row;
         case 'beginTime':
             $row['action'] = "Изменилось время начала с " . MinuteFormatter::asString($oldValue) . " на " . MinuteFormatter::asString($newValue);
             return $row;
         case 'endTime':
             $row['action'] = "Изменилось время окончания с " . MinuteFormatter::asString($oldValue) . " на " . MinuteFormatter::asString($newValue);
             return $row;
         case 'participantsId':
             $action = '';
             foreach ($newValue as $item) {
                 $index = array_search($item, $oldValue);
                 if ($index !== false) {
                     unset($oldValue[$index]);
                 } else {
                     $action .= "Участник '" . Participant::findOne(['_id' => $item])->shortName . "' был добавлен\n";
                 }
             }
             foreach ($oldValue as $item) {
                 $action .= "Участник '" . Participant::findOne(['_id' => $item])->shortName . "' был удалён\n";
             }
             $row['action'] = $action;
             return $row;
         default:
             return false;
     }
 }
Example #2
0
 public function approveRoom($roomId)
 {
     $request = $this->request;
     $roomMongoId = new \MongoId($roomId);
     $approvedRoomMongoId = new \MongoId($this->approvedRoomId);
     /** @var Collection $participantCollection*/
     $participantCollection = \Yii::$app->get('mongodb')->getCollection(Participant::collectionName());
     /** @var Collection $requestCollection*/
     $requestCollection = \Yii::$app->get('mongodb')->getCollection(Request::collectionName());
     $newLogRecord = false;
     if ($this->approvedRoomId !== $roomId) {
         $key = array_search($roomMongoId, $request->participantsId);
         /** Если меняется комната в заявке */
         if ($key !== false) {
             $requestCollection->update(['_id' => $request->_id, 'participantsId' => $roomMongoId], ['$set' => ['participantsId.$' => $approvedRoomMongoId]]);
             $participantCollection->update(['_id' => $roomMongoId], ['$pull' => ['log' => ['requestId' => $request->_id]]]);
             \Yii::$app->mailer->compose(['html' => 'changeRoom'], ['request' => $request, 'oldRoom' => Participant::findOne(['_id' => $roomMongoId]), 'newRoom' => Participant::findOne(['_id' => $approvedRoomMongoId])])->setFrom([\Yii::$app->params['email.admin'] => 'Служба технической поддержки ' . \Yii::$app->name])->setTo($request->owner->email)->setSubject("Изменение помещения в заявке")->send();
             $newLogRecord = true;
         }
     }
     $this->saveRoomStatus($approvedRoomMongoId, Participant::STATUS_APPROVE, $newLogRecord);
 }
 public function behaviors()
 {
     return ['verbs' => ['class' => VerbFilter::className(), 'actions' => ['index' => ['get'], 'view' => ['get'], 'create' => ['get', 'post'], 'update' => ['get', 'post'], 'delete' => ['post'], 'approve' => ['post'], 'cancel' => ['get', 'post']]], 'access' => ['class' => AccessControl::className(), 'only' => ['approve-booking', 'update', 'create'], 'rules' => [['actions' => ['create'], 'allow' => true, 'roles' => ['@']], ['actions' => ['approve-booking'], 'allow' => true, 'matchCallback' => function () {
         /** @var Participant $room */
         $room = Participant::findOne(['_id' => \Yii::$app->request->get('roomId')]);
         return \Yii::$app->user->identity['_id'] == $room->confirmPersonId;
     }], ['actions' => ['update'], 'allow' => true, 'matchCallback' => function () {
         if (\Yii::$app->user->can(SystemPermission::APPROVE_REQUEST)) {
             return true;
         }
         $request = Request::findOne(['_id' => \Yii::$app->request->get('id')]);
         if (!\Yii::$app->user->can(SystemPermission::UPDATE_REQUEST, ['object' => $request])) {
             return false;
         }
         $allowTime = $request->date->sec + ($request->beginTime - \Yii::$app->params['vks.allowRequestUpdateMinute']) * 60;
         $now = time() + 3 * 60 * 60;
         //Минус разница формата TimeZone
         if ($now > $allowTime) {
             throw new ForbiddenHttpException("Заявку нельзя редактировать менее чем за " . \Yii::$app->params['vks.allowRequestUpdateMinute'] . " минут до начала мероприятия");
         } else {
             return true;
         }
     }]]]];
 }