repository = $repository; $this->summit_repository = $summit_repository; $this->service = $service; } use AddSummitChildElement; /** * @param array $payload * @return array */ function getAddValidationRules(array $payload): array { return [ 'qr_code' => 'required|string', 'scan_date' => 'required|date_format:U', ]; } /** * @param Summit $summit * @param array $payload * @return IEntity */ protected function addChild(Summit $summit, array $payload): IEntity { $current_member = $this->resource_server_context->getCurrentUser(); if (is_null($current_member)) throw new HTTP403ForbiddenException(); return $this->service->addBadgeScan($summit, $current_member, $payload); } /** * @param $summit_id * @param $sponsor_id * @return \Illuminate\Http\JsonResponse|mixed */ public function addGrant($summit_id, $sponsor_id){ try{ $summit = SummitFinderStrategyFactory::build($this->getSummitRepository(), $this->getResourceServerContext())->find($summit_id); if (is_null($summit)) return $this->error404(); $current_member = $this->resource_server_context->getCurrentUser(); if (is_null($current_member)) throw new HTTP403ForbiddenException(); $grant = $this->service->addGrant($summit, intval($sponsor_id), $current_member); return $this->created(SerializerRegistry::getInstance()->getSerializer ( $grant, $this->addSerializerType() )->serialize(Request::input('expand', ''))); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412(array($ex->getMessage())); } catch(EntityNotFoundException $ex) { Log::warning($ex); return $this->error404(array('message'=> $ex->getMessage())); } catch (\HTTP401UnauthorizedException $ex) { Log::warning($ex); return $this->error401(); } catch (HTTP403ForbiddenException $ex) { Log::warning($ex); return $this->error403(); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @return ISummitRepository */ protected function getSummitRepository(): ISummitRepository { return $this->summit_repository; } // traits use ParametrizedGetAll; /** * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ public function getAllMyBadgeScans($summit_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); if (is_null($summit)) return $this->error404(); $current_member = $this->resource_server_context->getCurrentUser(); if (is_null($current_member)) return $this->error403(); return $this->_getAll( function(){ return [ 'attendee_first_name' => ['=@', '=='], 'attendee_last_name' => ['=@', '=='], 'attendee_full_name' => ['=@', '=='], 'attendee_email' => ['=@', '=='], 'ticket_number' => ['=@', '=='], 'order_number' => ['=@', '=='], ]; }, function(){ return [ 'attendee_first_name' => 'sometimes|string', 'attendee_last_name' => 'sometimes|string', 'attendee_full_name' => 'sometimes|string', 'attendee_email' => 'sometimes|string', 'ticket_number' => 'sometimes|string', 'order_number' => 'sometimes|string', ]; }, function() { return [ 'id', 'scan_date' ]; }, function($filter) use($summit, $current_member){ if($filter instanceof Filter){ $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); $filter->addFilterCondition(FilterElement::makeEqual('user_id', $current_member->getId())); } return $filter; }, function(){ return SerializerRegistry::SerializerType_Public; } ); } /** * @param $summit_id * @return mixed */ public function getAllBySummit($summit_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); if (is_null($summit)) return $this->error404(); $current_member = $this->resource_server_context->getCurrentUser(); if (is_null($current_member)) return $this->error403(); $sponsor = null; if(!$current_member->isAdmin()){ $sponsor = $current_member->getSponsorBySummit($summit); if(is_null($sponsor)){ return $this->error403(); } } return $this->_getAll( function(){ return [ 'attendee_first_name' => ['=@', '=='], 'attendee_last_name' => ['=@', '=='], 'attendee_full_name' => ['=@', '=='], 'attendee_email' => ['=@', '=='], 'ticket_number' => ['=@', '=='], 'order_number' => ['=@', '=='], 'sponsor_id' => ['=='], 'attendee_company' => ['=@', '=='], ]; }, function(){ return [ 'attendee_first_name' => 'sometimes|string', 'attendee_last_name' => 'sometimes|string', 'attendee_full_name' => 'sometimes|string', 'attendee_email' => 'sometimes|string', 'ticket_number' => 'sometimes|string', 'order_number' => 'sometimes|string', 'sponsor_id' => 'sometimes|integer', 'attendee_company' => 'sometimes|string', ]; }, function() { return [ 'id', 'attendee_full_name', 'attendee_email', 'attendee_first_name', 'attendee_last_name', 'attendee_company', 'scan_date' ]; }, function($filter) use($summit, $sponsor){ if($filter instanceof Filter){ $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); if(!is_null($sponsor)){ $filter->addFilterCondition(FilterElement::makeEqual('sponsor_id', $sponsor->getId())); } } return $filter; }, function(){ return SerializerRegistry::SerializerType_Public; } ); } /** * @param $summit_id * @return mixed */ public function getAllBySummitCSV($summit_id){ $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); if (is_null($summit)) return $this->error404(); $current_member = $this->resource_server_context->getCurrentUser(); if (is_null($current_member)) return $this->error403(); $sponsor = null; if(!$current_member->isAdmin()){ $sponsor = $current_member->getSponsorBySummit($summit); if(is_null($sponsor)){ return $this->error403(); } } return $this->_getAllCSV( function(){ return [ 'attendee_first_name' => ['=@', '=='], 'attendee_last_name' => ['=@', '=='], 'attendee_full_name' => ['=@', '=='], 'attendee_email' => ['=@', '=='], 'ticket_number' => ['=@', '=='], 'order_number' => ['=@', '=='], 'sponsor_id' => ['=='], 'attendee_company' => ['=@', '=='], ]; }, function(){ return [ 'attendee_first_name' => 'sometimes|string', 'attendee_last_name' => 'sometimes|string', 'attendee_full_name' => 'sometimes|string', 'attendee_email' => 'sometimes|string', 'ticket_number' => 'sometimes|string', 'order_number' => 'sometimes|string', 'sponsor_id' => 'sometimes|integer', 'attendee_company' => 'sometimes|string', ]; }, function() { return [ 'id', 'attendee_full_name', 'attendee_email', 'attendee_first_name', 'attendee_last_name', 'attendee_company', 'scan_date' ]; }, function($filter) use($summit, $sponsor){ if($filter instanceof Filter){ $filter->addFilterCondition(FilterElement::makeEqual('summit_id', $summit->getId())); if(!is_null($sponsor)){ $filter->addFilterCondition(FilterElement::makeEqual('sponsor_id', $sponsor->getId())); } } return $filter; }, function(){ return SerializerRegistry::SerializerType_CSV; }, function(){ return [ 'scan_date' => new EpochCellFormatter(), ]; }, function(){ $allowed_columns = [ 'scan_date', 'qr_code', 'sponsor_id', 'user_id', 'badge_id', 'attendee_first_name', 'attendee_last_name', 'attendee_email', 'attendee_company' ]; $columns_param = Request::input("columns", ""); $columns = []; if(!empty($columns_param)) $columns = explode(',', $columns_param); $diff = array_diff($columns, $allowed_columns); if(count($diff) > 0){ throw new ValidationException(sprintf("columns %s are not allowed!", implode(",", $diff))); } if(empty($columns)) $columns = $allowed_columns; return $columns; }, 'attendees-badge-scans-' ); } }