summit_repository = $summit_repository; $this->summit_event_repository = $summit_event_repository; $this->category_change_request_repository = $category_change_request_repository; $this->selection_plan_service = $selection_plan_service; $this->selection_plan_extra_questions_service = $selection_plan_extra_questions_service; $this->selection_plan_extra_questions_repository = $selection_plan_extra_questions_repository; } /** * @param $summit_id * @param $selection_plan_id * @return mixed */ public function getSelectionPlan($summit_id, $selection_plan_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); return $this->ok(SerializerRegistry::getInstance()->getSerializer($selection_plan)->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @return mixed */ public function updateSelectionPlan($summit_id, $selection_plan_id) { try { if (!Request::isJson()) return $this->error400(); $payload = Request::json()->all(); $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $rules = SummitSelectionPlanValidationRulesFactory::build($payload, true); // Creates a Validator instance and validates the data. $validation = Validator::make($payload, $rules); if ($validation->fails()) { $messages = $validation->messages()->toArray(); return $this->error412 ( $messages ); } $selection_plan = $this->selection_plan_service->updateSelectionPlan($summit, $selection_plan_id, $payload); return $this->updated(SerializerRegistry::getInstance()->getSerializer($selection_plan)->serialize()); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @return mixed */ public function addSelectionPlan($summit_id) { try { if (!Request::isJson()) return $this->error400(); $payload = Request::json()->all(); $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $rules = SummitSelectionPlanValidationRulesFactory::build($payload); // Creates a Validator instance and validates the data. $validation = Validator::make($payload, $rules); if ($validation->fails()) { $messages = $validation->messages()->toArray(); return $this->error412 ( $messages ); } $selection_plan = $this->selection_plan_service->addSelectionPlan($summit, $payload); return $this->created(SerializerRegistry::getInstance()->getSerializer($selection_plan)->serialize()); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @return mixed */ public function deleteSelectionPlan($summit_id, $selection_plan_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $this->selection_plan_service->deleteSelectionPlan($summit, $selection_plan_id); return $this->deleted(); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $track_group_id * @return mixed */ public function addTrackGroupToSelectionPlan($summit_id, $selection_plan_id, $track_group_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $this->selection_plan_service->addTrackGroupToSelectionPlan($summit, $selection_plan_id, $track_group_id); return $this->deleted(); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $track_group_id * @return mixed */ public function deleteTrackGroupToSelectionPlan($summit_id, $selection_plan_id, $track_group_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $this->selection_plan_service->deleteTrackGroupToSelectionPlan($summit, $selection_plan_id, $track_group_id); return $this->deleted(); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $status * @return \Illuminate\Http\JsonResponse|mixed */ public function getCurrentSelectionPlanByStatus($summit_id, $status) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $this->selection_plan_service->getCurrentSelectionPlanByStatus($summit, $status); if (is_null($selection_plan)) return $this->error404(); return $this->ok(SerializerRegistry::getInstance()->getSerializer($selection_plan)->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } use ParametrizedGetAll; /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getSelectionPlanPresentations($summit_id, $selection_plan_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $member = $this->resource_server_context->getCurrentUser(); if (is_null($member)) return $this->error403(); $authz = $summit->isTrackChair($member) || $summit->isTrackChairAdmin($member); if (!$authz) return $this->error403(); return $this->_getAll( function () { return [ 'title' => ['=@', '=='], 'abstract' => ['=@', '=='], 'social_summary' => ['=@', '=='], 'tags' => ['=@', '=='], 'level' => ['=@', '=='], 'summit_type_id' => ['=='], 'event_type_id' => ['=='], 'track_id' => ['=='], 'speaker_id' => ['=='], 'speaker' => ['=@', '=='], 'speaker_email' => ['=@', '=='], 'selection_status' => ['=='], 'id' => ['=='], 'selection_plan_id' => ['=='], 'status' => ['=='], 'is_chair_visible' => ['=='], 'is_voting_visible' => ['=='], 'track_chairs_status' => ['=='], 'viewed_status' => ['=='], 'actions' => ['=='], ]; }, function () { return [ 'title' => 'sometimes|string', 'abstract' => 'sometimes|string', 'social_summary' => 'sometimes|string', 'tags' => 'sometimes|string', 'level' => 'sometimes|string', 'summit_type_id' => 'sometimes|integer', 'event_type_id' => 'sometimes|integer', 'track_id' => 'sometimes|integer', 'speaker_id' => 'sometimes|integer', 'speaker' => 'sometimes|string', 'speaker_email' => 'sometimes|string', 'selection_status' => 'sometimes|string', 'id' => 'sometimes|integer', 'selection_plan_id' => 'sometimes|integer', 'status' => 'sometimes|string', 'is_chair_visible' => 'sometimes|boolean', 'is_voting_visible' => 'sometimes|boolean', 'track_chairs_status' => 'sometimes|string|in:voted,untouched,team_selected,selected,maybe,pass', 'viewed_status' => 'sometimes|string|in:seen,unseen,moved', 'actions' => 'sometimes|string', ]; }, function () { return [ 'id', 'title', 'start_date', 'end_date', 'created', 'track', 'location', 'trackchairsel', 'last_edited', ]; }, function ($filter) use ($summit, $selection_plan_id) { if ($filter instanceof Filter) { $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); $filter->addFilterCondition(FilterElement::makeEqual('selection_plan_id', $selection_plan_id)); $current_member = $this->resource_server_context->getCurrentUser(false); if(!is_null($current_member)) { $filter->addFilterCondition(FilterElement::makeEqual('current_member_id', $current_member->getId())); } } return $filter; }, function () { return IPresentationSerializerTypes::TrackChairs; }, null, null, function ($page, $per_page, $filter, $order, $applyExtraFilters) { return $this->summit_event_repository->getAllByPage ( new PagingInfo($page, $per_page), call_user_func($applyExtraFilters, $filter), $order ); } ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getSelectionPlanPresentationsCSV($summit_id, $selection_plan_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $member = $this->resource_server_context->getCurrentUser(); if (is_null($member)) return $this->error403(); $authz = $summit->isTrackChair($member) || $summit->isTrackChairAdmin($member); if (!$authz) return $this->error403(); return $this->_getAllCSV( function () { return [ 'title' => ['=@', '=='], 'abstract' => ['=@', '=='], 'social_summary' => ['=@', '=='], 'tags' => ['=@', '=='], 'level' => ['=@', '=='], 'summit_type_id' => ['=='], 'event_type_id' => ['=='], 'track_id' => ['=='], 'speaker_id' => ['=='], 'speaker' => ['=@', '=='], 'speaker_email' => ['=@', '=='], 'selection_status' => ['=='], 'id' => ['=='], 'selection_plan_id' => ['=='], 'status' => ['=='], 'is_chair_visible' => ['=='], 'is_voting_visible' => ['=='], 'track_chairs_status' => ['=='], 'viewed_status' => ['=='], 'actions' => ['=='], ]; }, function () { return [ 'title' => 'sometimes|string', 'abstract' => 'sometimes|string', 'social_summary' => 'sometimes|string', 'tags' => 'sometimes|string', 'level' => 'sometimes|string', 'summit_type_id' => 'sometimes|integer', 'event_type_id' => 'sometimes|integer', 'track_id' => 'sometimes|integer', 'speaker_id' => 'sometimes|integer', 'speaker' => 'sometimes|string', 'speaker_email' => 'sometimes|string', 'selection_status' => 'sometimes|string', 'id' => 'sometimes|integer', 'selection_plan_id' => 'sometimes|integer', 'status' => 'sometimes|string', 'is_chair_visible' => 'sometimes|boolean', 'is_voting_visible' => 'sometimes|boolean', 'track_chairs_status' => 'sometimes|string|in:voted,untouched,team_selected,selected,maybe,pass', 'viewed_status' => 'sometimes|string|in:seen,unseen,moved', 'actions' => 'sometimes|string', ]; }, function () { return [ 'id', 'title', 'start_date', 'end_date', 'created', 'track', 'location', 'trackchairsel', 'last_edited', ]; }, function ($filter) use ($summit, $selection_plan_id) { if ($filter instanceof Filter) { $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); $filter->addFilterCondition(FilterElement::makeEqual('selection_plan_id', $selection_plan_id)); $current_member = $this->resource_server_context->getCurrentUser(false); if(!is_null($current_member)) { $filter->addFilterCondition(FilterElement::makeEqual('current_member_id', $current_member->getId())); } } return $filter; }, function () { return IPresentationSerializerTypes::TrackChairs_CSV; }, function () { return [ 'created' => new EpochCellFormatter(), 'last_edited' => new EpochCellFormatter(), ]; }, function () { return []; }, 'presentations-', [], function ($page, $per_page, $filter, $order, $applyExtraFilters) { return $this->summit_event_repository->getAllByPage ( new PagingInfo($page, $per_page), call_user_func($applyExtraFilters, $filter), $order ); } ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $presentation_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getSelectionPlanPresentation($summit_id, $selection_plan_id, $presentation_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById(intval($selection_plan_id)); if (is_null($selection_plan)) return $this->error404(); $presentation = $selection_plan->getPresentation(intval($presentation_id)); if(is_null($presentation)) throw new EntityNotFoundException(); return $this->ok(SerializerRegistry::getInstance()->getSerializer ( $presentation )->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $presentation_id * @return \Illuminate\Http\JsonResponse|mixed */ public function markPresentationAsViewed($summit_id, $selection_plan_id, $presentation_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $presentation = $this->selection_plan_service->markPresentationAsViewed($summit, $selection_plan_id, $presentation_id); return $this->updated(SerializerRegistry::getInstance()->getSerializer ( $presentation, IPresentationSerializerTypes::TrackChairs )->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $presentation_id * @return \Illuminate\Http\JsonResponse|mixed */ public function addCommentToPresentation($summit_id, $selection_plan_id, $presentation_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $data = Request::json(); $payload = $data->all(); // Creates a Validator instance and validates the data. $validation = Validator::make($payload, [ 'body' => 'required|string', 'is_public' => 'required|boolean', ]); if ($validation->fails()) { $messages = $validation->messages()->toArray(); return $this->error412 ( $messages ); } $comment = $this->selection_plan_service->addPresentationComment($summit, $selection_plan_id, $presentation_id, HTMLCleaner::cleanData($payload, ['body'])); return $this->created(SerializerRegistry::getInstance()->getSerializer($comment)->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getAllPresentationCategoryChangeRequest($summit_id, $selection_plan_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $member = $this->resource_server_context->getCurrentUser(); if (is_null($member)) return $this->error403(); $authz = $summit->isTrackChair($member) || $summit->isTrackChairAdmin($member); if (!$authz) return $this->error403(); return $this->_getAll( function () { return [ 'selection_plan_id' => ['=='], 'summit_id' => ['=='], 'new_category_id' => ['=='], 'old_category_id' => ['=='], 'new_category_name' => ['=@', '=='], 'old_category_name' => ['=@', '=='], 'requester_fullname' => ['=@', '=='], 'requester_email' => ['=@', '=='], 'aprover_fullname' => ['=@', '=='], 'aprover_email' => ['=@', '=='], 'presentation_title' => ['=@', '=='], ]; }, function () { return [ 'selection_plan_id' => 'sometimes|integer', 'summit_id' => 'sometimes|integer', 'new_category_id' => 'sometimes|integer', 'old_category_id' => 'sometimes|integer', 'new_category_name' => 'sometimes|string', 'old_category_name' => 'sometimes|string', 'requester_fullname' => 'sometimes|string', 'aprover_fullname' => 'sometimes|string', 'aprover_email' => 'sometimes|string', 'presentation_title' => 'sometimes|string', ]; }, function () { return [ 'id', 'approval_date', 'status', 'presentation_title', 'new_category_name', 'old_category_name', 'requester_fullname', ]; }, function ($filter) use ($summit, $selection_plan_id) { if ($filter instanceof Filter) { $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); $filter->addFilterCondition(FilterElement::makeEqual('selection_plan_id', $selection_plan_id)); } return $filter; }, function () { return SerializerRegistry::SerializerType_Public; }, null, null, function ($page, $per_page, $filter, $order, $applyExtraFilters) { return $this->category_change_request_repository->getAllByPage ( new PagingInfo($page, $per_page), call_user_func($applyExtraFilters, $filter), $order ); } ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $presentation_id * @return \Illuminate\Http\JsonResponse|mixed */ public function createPresentationCategoryChangeRequest($summit_id, $selection_plan_id, $presentation_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $data = Request::json(); $payload = $data->all(); // Creates a Validator instance and validates the data. $validation = Validator::make($payload, [ 'new_category_id' => 'required|integer', ]); if ($validation->fails()) { $messages = $validation->messages()->toArray(); return $this->error412 ( $messages ); } $change_request = $this->selection_plan_service->createPresentationCategoryChangeRequest ( $summit, intval($selection_plan_id), intval($presentation_id), intval($payload['new_category_id']) ); return $this->created(SerializerRegistry::getInstance()->getSerializer($change_request)->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @param $presentation_id * @param $category_change_request_id * @return \Illuminate\Http\JsonResponse|mixed */ public function resolvePresentationCategoryChangeRequest($summit_id, $selection_plan_id, $presentation_id, $category_change_request_id) { try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $data = Request::json(); $payload = $data->all(); // Creates a Validator instance and validates the data. $validation = Validator::make($payload, [ 'approved' => 'required|bool', 'reason' => 'sometimes|string', ]); if ($validation->fails()) { $messages = $validation->messages()->toArray(); return $this->error412 ( $messages ); } $change_request = $this->selection_plan_service->resolvePresentationCategoryChangeRequest ( $summit, intval($selection_plan_id), intval($presentation_id), intval($category_change_request_id), $payload ); return $this->updated(SerializerRegistry::getInstance()->getSerializer($change_request)->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * Extra questions */ /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getExtraQuestions($summit_id, $selection_plan_id){ try { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); return $this->_getAll( function () { return [ 'name' => ['=@', '=='], 'type' => ['=@', '=='], 'label' => ['=@', '=='], ]; }, function () { return [ 'name' => 'sometimes|string', 'type' => 'sometimes|string', 'label' => 'sometimes|string', ]; }, function () { return [ 'id', 'name', 'label', 'order', ]; }, function ($filter) use ($summit, $selection_plan_id) { if ($filter instanceof Filter) { $filter->addFilterCondition ( FilterElement::makeEqual('selection_plan_id', intval($selection_plan_id)) ); } return $filter; }, function () { return SerializerRegistry::SerializerType_Public; }, null, null, function ($page, $per_page, $filter, $order, $applyExtraFilters) { return $this->selection_plan_extra_questions_repository->getAllByPage ( new PagingInfo($page, $per_page), call_user_func($applyExtraFilters, $filter), $order ); } ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404($ex->getMessage()); } catch (AuthzException $ex) { Log::warning($ex); return $this->error403($ex); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getExtraQuestionsMetadata($summit_id, $selection_plan_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); return $this->ok ( $this->selection_plan_extra_questions_repository->getQuestionsMetadata() ); } use ParametrizedAddEntity; /** * @param $summit_id * @param $selection_plan_id * @return \Illuminate\Http\JsonResponse */ public function addExtraQuestion($summit_id, $selection_plan_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan]; return $this->_add( function ($payload) { return SelectionPlanExtraQuestionValidationRulesFactory::build($payload); }, function ($payload, $selection_plan){ return $this->selection_plan_extra_questions_service->addExtraQuestion($selection_plan, HTMLCleaner::cleanData($payload, ['label'])); }, ...$args ); } use ParametrizedGetEntity; /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @return \Illuminate\Http\JsonResponse */ public function getExtraQuestion($summit_id, $selection_plan_id, $question_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); return $this->_get($question_id, function($id) use($selection_plan){ return $selection_plan->getExtraQuestionById(intval($id)); }); } use ParametrizedUpdateEntity; /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @return \Illuminate\Http\JsonResponse|mixed */ public function updateExtraQuestion($summit_id, $selection_plan_id, $question_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan]; return $this->_update($question_id, function($payload){ return SelectionPlanExtraQuestionValidationRulesFactory::build($payload, true); }, function ($question_id, $payload, $selection_plan){ return $this->selection_plan_extra_questions_service->updateExtraQuestion($selection_plan, $question_id, HTMLCleaner::cleanData($payload, ['label'])); }, ...$args); } use ParametrizedDeleteEntity; /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @return \Illuminate\Http\JsonResponse */ public function deleteExtraQuestion($summit_id, $selection_plan_id, $question_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan]; return $this->_delete(intval($question_id) , function($question_id, $selection_plan){ $this->selection_plan_extra_questions_service->deleteExtraQuestion($selection_plan, $question_id); }, ...$args); } /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @return \Illuminate\Http\JsonResponse */ public function addExtraQuestionValue($summit_id, $selection_plan_id, $question_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan, intval($question_id)]; return $this->_add( function($payload){ return ExtraQuestionTypeValueValidationRulesFactory::build($payload); }, function($payload, $selection_plan, $question_id){ return $this->selection_plan_extra_questions_service-> addExtraQuestionValue($selection_plan, $question_id, $payload); }, ...$args); } /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @param $value_id * @return \Illuminate\Http\JsonResponse|mixed */ public function updateExtraQuestionValue($summit_id, $selection_plan_id, $question_id, $value_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan, intval($question_id)]; return $this->_update($value_id, function($payload){ return ExtraQuestionTypeValueValidationRulesFactory::build($payload, false); }, function($value_id, $payload, $selection_plan, $question_id){ return $this->selection_plan_extra_questions_service->updateExtraQuestionValue ( $selection_plan, $question_id, $value_id, $payload ); }, ...$args); } /** * @param $summit_id * @param $selection_plan_id * @param $question_id * @param $value_id * @return \Illuminate\Http\JsonResponse|mixed */ public function deleteExtraQuestionValue($summit_id, $selection_plan_id, $question_id, $value_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); if (is_null($summit)) return $this->error404(); $selection_plan = $summit->getSelectionPlanById($selection_plan_id); if (is_null($selection_plan)) return $this->error404(); $args = [$selection_plan, intval($question_id)]; return $this->_delete($value_id, function($value_id, $selection_plan, $question_id){ $this->selection_plan_extra_questions_service->deleteExtraQuestionValue($selection_plan, $question_id, $value_id); } , ...$args); } }