1616use App \Models \Foundation \Summit \Repositories \ISummitOrderExtraQuestionTypeRepository ;
1717use App \ModelSerializers \SerializerUtils ;
1818use App \Services \Model \ISummitOrderExtraQuestionTypeService ;
19+ use Illuminate \Support \Facades \Log ;
1920use libs \utils \HTMLCleaner ;
2021use models \exceptions \EntityNotFoundException ;
2122use models \exceptions \ValidationException ;
2223use models \oauth2 \IResourceServerContext ;
2324use models \summit \ISummitRepository ;
2425use models \summit \Summit ;
26+ use models \summit \SummitAttendee ;
27+ use models \summit \SummitOrderExtraQuestionTypeConstants ;
2528use models \utils \IEntity ;
2629use ModelSerializers \SerializerRegistry ;
30+ use utils \Filter ;
31+ use utils \FilterElement ;
32+ use utils \Order ;
33+ use utils \PagingInfo ;
2734use utils \PagingResponse ;
2835use App \Http \Controllers \RequestProcessor ;
2936
@@ -80,6 +87,8 @@ public function __construct
8087
8188 use RequestProcessor;
8289
90+ use ParametrizedGetAll;
91+
8392 /**
8493 * @param $summit_id
8594 * @return mixed
@@ -105,7 +114,9 @@ protected function getFilterRules(): array
105114 'type ' => ['== ' , '=@ ' ],
106115 'usage ' => ['== ' , '=@ ' ],
107116 'label ' => ['== ' , '=@ ' ],
108- 'class ' => ['== ' ]
117+ 'class ' => ['== ' ],
118+ 'has_ticket_types ' => ['== ' ],
119+ 'has_badge_feature_types ' => ['== ' ]
109120 ];
110121 }
111122
@@ -120,6 +131,8 @@ protected function getFilterValidatorRules(): array
120131 'usage ' => 'sometimes|required|string ' ,
121132 'label ' => 'sometimes|required|string ' ,
122133 'class ' => 'sometimes|required|string|in: ' . implode (', ' , ExtraQuestionTypeConstants::AllowedQuestionClass),
134+ 'has_ticket_types ' => 'sometimes|string|in:true,false ' ,
135+ 'has_badge_feature_types ' => 'sometimes|string|in:true,false '
123136 ];
124137 }
125138
@@ -444,4 +457,90 @@ public function deleteSubQuestionRule($summit_id, $question_id, $rule_id)
444457 return $ this ->deleted ();
445458 });
446459 }
460+
461+ /**
462+ * @param $summit_id
463+ * @return mixed
464+ */
465+ public function getOwnAttendeeAllowedExtraQuestions ($ summit_id )
466+ {
467+ return $ this ->processRequest (function () use ($ summit_id ) {
468+ $ summit = SummitFinderStrategyFactory::build ($ this ->summit_repository , $ this ->getResourceServerContext ())->find ($ summit_id );
469+ if (is_null ($ summit )) return $ this ->error404 ();
470+
471+ $ type = CheckAttendeeStrategyFactory::Me;
472+ $ attendee = CheckAttendeeStrategyFactory::build ($ type , $ this ->resource_server_context )->check ('me ' , $ summit );
473+ if (is_null ($ attendee )) return $ this ->error404 ();
474+
475+ return $ this ->getAttendeeExtraQuestions ($ summit_id , $ attendee ->getId ());
476+ });
477+ }
478+
479+ /**
480+ * @param $summit_id
481+ * @param $attendee_id
482+ * @return mixed
483+ */
484+ public function getAttendeeExtraQuestions ($ summit_id , $ attendee_id )
485+ {
486+ $ summit = SummitFinderStrategyFactory::build ($ this ->getSummitRepository (), $ this ->getResourceServerContext ())->find ($ summit_id );
487+ if (is_null ($ summit )) return $ this ->error404 ();
488+
489+ $ attendee = $ summit ->getAttendeeById (intval ($ attendee_id ));
490+ if (is_null ($ attendee )) return $ this ->error404 ();
491+
492+ return $ this ->_getAll (
493+ function () {
494+ return [
495+ 'name ' => ['=@ ' , '== ' ],
496+ 'type ' => ['=@ ' , '== ' ],
497+ 'label ' => ['=@ ' , '== ' ],
498+ 'printable ' => ['== ' ],
499+ 'usage ' => ['=@ ' , '== ' ],
500+ 'summit_id ' => ['== ' ]
501+ ];
502+ },
503+ function () {
504+ return [
505+ 'name ' => 'sometimes|string ' ,
506+ 'type ' => 'sometimes|string ' ,
507+ 'label ' => 'sometimes|string ' ,
508+ 'printable ' => 'sometimes|string|in:true,false ' ,
509+ 'usage ' => 'sometimes|string ' ,
510+ 'summit_id ' => 'sometimes|integer '
511+ ];
512+ },
513+ function () {
514+ return [
515+ 'id ' ,
516+ 'name ' ,
517+ 'label ' ,
518+ 'order ' ,
519+ ];
520+ },
521+ function ($ filter ) use ($ summit ) {
522+ if ($ filter instanceof Filter) {
523+ $ filter ->addFilterCondition (FilterElement::makeEqual ('summit_id ' , $ summit ->getId ()));
524+ $ filter ->addFilterCondition (FilterElement::makeEqual ('class ' , ExtraQuestionTypeConstants::QuestionClassMain));
525+ $ filter ->addFilterCondition (FilterElement::makeEqual ('usage ' , SummitOrderExtraQuestionTypeConstants::TicketQuestionUsage));
526+ }
527+ return $ filter ;
528+ },
529+ function () {
530+ return SerializerRegistry::SerializerType_Public;
531+ },
532+ null ,
533+ null ,
534+ function ($ page , $ per_page , $ filter , $ order , $ applyExtraFilters ) use ($ attendee ) {
535+ return $ this ->repository ->getAllAllowedByPage
536+ (
537+ $ attendee ,
538+ new PagingInfo ($ page , $ per_page ),
539+ call_user_func ($ applyExtraFilters , $ filter ),
540+ $ order
541+ );
542+ },
543+ ['attendee ' => $ attendee ]
544+ );
545+ }
447546}
0 commit comments