public function adminStore() { Auth::isAdminOrDie(App::$instance); Token::checkToken(); $connCtrl = new ConnectionCode_controller(); $request = $this->request->request; $this->fillParticipants("vks_participants_create", $this->request); Capsule::beginTransaction(); $this->validator->validate(['Дата' => [$request->get('date'), 'required|date'], 'Время начала' => [$request->get('start_time'), 'required'], 'Время окончания' => [$request->get('end_time'), 'required'], 'Название' => [$request->get('title'), 'required|max(255)'], 'ФИО ответственного' => [$request->get('init_customer_fio'), 'required|max(255)'], 'Почта ответственного' => [$request->get('init_customer_mail'), 'required|max(255)'], 'Тел. ответственного' => [$request->get('init_customer_phone'), 'required|max(255)'], 'Подразделение' => [$request->get('department'), 'required|int'], 'Участники в ЦА' => [$request->get('ca_participants'), 'int|between(0,10)'], 'Владелец' => [$request->get('owner_id'), 'required|int'], 'Комментарий для пользователя' => [$request->get('comment_for_user'), 'max(255)'], 'Комментарий для Администратора' => [$request->get('comment_for_admin'), 'max(255)'], 'Участники ВКС' => [$request->get('inside_participants'), 'array'], 'Кол-во участников с рабочих мест (IP телефоны)' => [$request->get('in_place_participants_count'), 'int'], 'Точка для технической поддержки' => [$request->get('tech_support_att_id'), "int|attendance_is_tech_supportable"], 'Комментарий для Тех. поддержки' => [$request->get('user_message'), 'max(255)']]); //if no passes if (!$this->validator->passes()) { $this->backWithData($this->validator->errors()->all()); } //any participants required if (!$request->get('needTB')) { if (!intval($request->get('in_place_participants_count')) && !count($request->get('inner_participants'))) { $this->backWithData('Вы не выбрали внутренних участников (в вашем ТБ) для ВКС'); } if (intval($request->get('in_place_participants_count') == 0 && count($request->get('inner_participants')) == 1)) { $this->backWithData('Выбран только один участник для ВКС'); } if (intval($request->get('in_place_participants_count')) == 1 && !count($request->get('inner_participants'))) { $this->backWithData('Выбран только один участник для ВКС'); } } $vks = new Vks(); if (!$request->get('ca_code')) { $request->set('ca_code', Null); } $vks->fill($request->all()); $vks->is_private = $request->has('is_private') ? 1 : 0; $vks->record_required = $request->has('record_required') ? 1 : 0; $vks->other_tb_required = $request->get('needTB') ? 1 : 0; $vks->start_date_time = $request->get('date') . " " . $request->get('start_time'); $vks->end_date_time = $request->get('date') . " " . $request->get('end_time'); $this->timeBarrier($vks); $vks->comment_for_admin = $request->get('comment_for_admin'); $vks->owner_id = $request->get('owner_id'); $vks->from_ip = App::$instance->user->ip; $vks->status = VKS_STATUS_APPROVED; $vks->approved_by = App::$instance->user->id; $vks->save(); //relation models if ($request->get('needTB')) { App::$instance->callService('vks_ca_negotiator')->fillRequestWithInputData($this->request); App::$instance->callService('vks_ca_negotiator')->validateCaParticipants($this->request, $this); App::$instance->callService('vks_ca_negotiator')->fillRelationEntity($this->request, $vks); } if ($request->get('tech_support_required')) { TechSupportRequest::create(array('att_id' => $request->get('tech_support_att_id'), 'vks_id' => $vks->id, 'owner_id' => App::$instance->user->id, 'user_message' => $request->get('user_message'), 'status' => TechSupportRequest::STATUS_WAIT_VKS_DECISION)); } //check if vks not in past time if (!Auth::isAdmin(App::$instance)) { if (self::isVksInPastTime($vks)) { throw new LogicException('bad vks date, it on past time'); } } //create participants $this->createInnerOrPhoneParp($request->get('inner_participants'), $vks, true); App::$instance->log->logWrite(LOG_VKSWS_CREATED, "VKS " . ST::linkToVksPage($vks->id) . " Created by admin, direct insert"); if (!$request->has('no-codes')) { foreach ($request->get('code') as $code) { $compiledCode = $code['prefix'] . $code['postfix']; if ($request->has('no-check')) { $checkVks = false; } else { $checkVks = $connCtrl->isCodeInUse($compiledCode, $vks->start_date_time, $vks->end_date_time); } if ($checkVks) { $this->backWithData('Ошибка: Код ' . $compiledCode . ' уже используется в ' . ST::linkToVksPage($checkVks->id)); } else { $newCodes[] = ConnectionCode::create(['vks_id' => $vks->id, 'value' => $compiledCode, 'tip' => $code['tip']]); } } } //vks ca process $transportVksMessage = App::$instance->callService('vks_ca_negotiator')->transportVksProcessor($this->request, $vks); if ($transportVksMessage->getStatusCode() != Response::HTTP_OK) { $this->backWithData($transportVksMessage->getContent()); } App::$instance->MQ->setMessage("ВКС " . ST::linkToVksPage($vks->id) . " добавлена в расписание" . "<p>" . $transportVksMessage->getContent() . "</p>"); Capsule::commit(); ST::redirectToRoute('Index/index'); }