diff --git a/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php b/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php index 528fe629..98ecb84a 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php +++ b/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php @@ -24,12 +24,6 @@ final class SummitValidationRulesFactory 'name' => 'sometimes|string|max:50', 'start_date' => 'sometimes|date_format:U', 'end_date' => 'required_with:start_date|date_format:U|after_or_equal:start_date', - 'submission_begin_date' => 'nullable|date_format:U', - 'submission_end_date' => 'nullable|required_with:submission_begin_date|date_format:U|after_or_equal:submission_begin_date', - 'voting_begin_date' => 'nullable|date_format:U', - 'voting_end_date' => 'nullable|required_with:voting_begin_date|date_format:U|after_or_equal:voting_begin_date', - 'selection_begin_date' => 'nullable|date_format:U', - 'selection_end_date' => 'nullable|required_with:selection_begin_date|date_format:U|after_or_equal:selection_begin_date', 'registration_begin_date' => 'nullable|date_format:U', 'registration_end_date' => 'nullable|required_with:registration_begin_date|date_format:U|after_or_equal:registration_begin_date', 'start_showing_venues_date' => 'nullable|date_format:U|before_or_equal:start_date', @@ -53,12 +47,6 @@ final class SummitValidationRulesFactory 'name' => 'required|string|max:50', 'start_date' => 'required|date_format:U', 'end_date' => 'required_with:start_date|date_format:U|after_or_equal:start_date', - 'submission_begin_date' => 'nullable|date_format:U', - 'submission_end_date' => 'nullable|required_with:submission_begin_date|date_format:U|after_or_equal:submission_begin_date', - 'voting_begin_date' => 'nullable|date_format:U', - 'voting_end_date' => 'nullable|required_with:voting_begin_date|date_format:U|after_or_equal:voting_begin_date', - 'selection_begin_date' => 'nullable|date_format:U', - 'selection_end_date' => 'nullable|required_with:selection_begin_date|date_format:U|after_or_equal:selection_begin_date', 'registration_begin_date' => 'nullable|date_format:U', 'registration_end_date' => 'nullable|required_with:registration_begin_date|date_format:U|after_or_equal:registration_begin_date', 'start_showing_venues_date' => 'nullable|date_format:U|before_or_equal:start_date', diff --git a/app/ModelSerializers/SerializerRegistry.php b/app/ModelSerializers/SerializerRegistry.php index 454165ed..39f47f52 100644 --- a/app/ModelSerializers/SerializerRegistry.php +++ b/app/ModelSerializers/SerializerRegistry.php @@ -45,6 +45,7 @@ use App\ModelSerializers\Summit\RSVP\Templates\RSVPQuestionValueTemplateSerializ use App\ModelSerializers\Summit\RSVP\Templates\RSVPSingleValueTemplateQuestionSerializer; use App\ModelSerializers\Summit\RSVPTemplateSerializer; use App\ModelSerializers\Summit\ScheduledSummitLocationBannerSerializer; +use App\ModelSerializers\Summit\SelectionPlanSerializer; use App\ModelSerializers\Summit\SummitLocationBannerSerializer; use Libs\ModelSerializers\IModelSerializer; use ModelSerializers\ChatTeams\ChatTeamInvitationSerializer; @@ -96,6 +97,7 @@ final class SerializerRegistry self::SerializerType_Private => AdminSummitSerializer::class ]; + $this->registry['SelectionPlan'] = SelectionPlanSerializer::class; $this->registry['SummitWIFIConnection'] = SummitWIFIConnectionSerializer::class; $this->registry['SummitType'] = SummitTypeSerializer::class; $this->registry['SummitEventType'] = SummitEventTypeSerializer::class; diff --git a/app/ModelSerializers/Summit/SelectionPlanSerializer.php b/app/ModelSerializers/Summit/SelectionPlanSerializer.php new file mode 100644 index 00000000..09112280 --- /dev/null +++ b/app/ModelSerializers/Summit/SelectionPlanSerializer.php @@ -0,0 +1,72 @@ + 'name:json_string', + 'Enabled' => 'is_enabled:json_boolean', + 'SubmissionBeginDate' => 'submission_begin_date:datetime_epoch', + 'SubmissionEndDate' => 'submission_end_date:datetime_epoch', + 'VotingBeginDate' => 'voting_begin_date:datetime_epoch', + 'VotingEndDate' => 'voting_end_date:datetime_epoch', + 'SelectionBeginDate' => 'selection_begin_date:datetime_epoch', + 'SelectionEndDate' => 'selection_end_date:datetime_epoch', + 'SummitId' => 'summit_id:json_int', + ]; + + /** + * @param null $expand + * @param array $fields + * @param array $relations + * @param array $params + * @return array + */ + public function serialize($expand = null, array $fields = [], array $relations = [], array $params = []) + { + $selection_plan = $this->object; + if (!$selection_plan instanceof SelectionPlan) return []; + $values = parent::serialize($expand, $fields, $relations, $params); + + $category_groups = []; + foreach ($selection_plan->getCategoryGroups() as $group) { + $category_groups[] = $group->getId(); + } + $values['category_groups'] = $category_groups; + + if (!empty($expand)) { + $expand = explode(',', $expand); + foreach ($expand as $relation) { + switch (trim($relation)) { + case 'category_groups':{ + $category_groups = []; + foreach ($selection_plan->getCategoryGroups() as $group) { + $category_groups[] = SerializerRegistry::getInstance()->getSerializer($group)->serialize($expand); + } + $values['category_groups'] = $category_groups; + } + break; + } + } + } + + return $values; + } +} \ No newline at end of file diff --git a/app/ModelSerializers/Summit/SummitSerializer.php b/app/ModelSerializers/Summit/SummitSerializer.php index 98060ac7..e1c5baf5 100644 --- a/app/ModelSerializers/Summit/SummitSerializer.php +++ b/app/ModelSerializers/Summit/SummitSerializer.php @@ -26,12 +26,6 @@ class SummitSerializer extends SilverStripeSerializer 'Name' => 'name:json_string', 'BeginDate' => 'start_date:datetime_epoch', 'EndDate' => 'end_date:datetime_epoch', - 'SubmissionBeginDate' => 'submission_begin_date:datetime_epoch', - 'SubmissionEndDate' => 'submission_end_date:datetime_epoch', - 'VotingBeginDate' => 'voting_begin_date:datetime_epoch', - 'VotingEndDate' => 'voting_end_date:datetime_epoch', - 'SelectionBeginDate' => 'selection_begin_date:datetime_epoch', - 'SelectionEndDate' => 'selection_end_date:datetime_epoch', 'RegistrationBeginDate' => 'registration_begin_date:datetime_epoch', 'RegistrationEndDate' => 'registration_end_date:datetime_epoch', 'StartShowingVenuesDate' => 'start_showing_venues_date:datetime_epoch', @@ -62,6 +56,7 @@ class SummitSerializer extends SilverStripeSerializer 'ticket_types', 'locations', 'wifi_connections', + 'selection_plans', ]; /** @@ -127,6 +122,15 @@ class SummitSerializer extends SilverStripeSerializer $values['wifi_connections'] = $wifi_connections; } + // selection plans + if(in_array('selection_plans', $relations)) { + $selection_plans = []; + foreach ($summit->getSelectionPlans() as $selection_plan) { + $selection_plans[] = SerializerRegistry::getInstance()->getSerializer($selection_plan)->serialize($expand); + } + $values['selection_plans'] = $selection_plans; + } + if (!empty($expand)) { $expand = explode(',', $expand); foreach ($expand as $relation) { diff --git a/app/Models/Foundation/Summit/Factories/SummitFactory.php b/app/Models/Foundation/Summit/Factories/SummitFactory.php index 5db79219..4eade370 100644 --- a/app/Models/Foundation/Summit/Factories/SummitFactory.php +++ b/app/Models/Foundation/Summit/Factories/SummitFactory.php @@ -83,60 +83,6 @@ final class SummitFactory } } - if(array_key_exists('submission_begin_date', $data) && array_key_exists('submission_end_date', $data)) { - if (isset($data['submission_begin_date']) && isset($data['submission_end_date'])) { - $start_datetime = intval($data['submission_begin_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); - $end_datetime = intval($data['submission_end_date']); - $end_datetime = new \DateTime("@$end_datetime"); - $end_datetime->setTimezone($summit->getTimeZone()); - - // set local time from UTC - $summit->setSubmissionBeginDate($start_datetime); - $summit->setSubmissionEndDate($end_datetime); - } - else{ - $summit->clearSubmissionDates(); - } - } - - if(array_key_exists('voting_begin_date', $data) && array_key_exists('voting_end_date', $data)) { - if (isset($data['voting_begin_date']) && isset($data['voting_end_date'])) { - $start_datetime = intval($data['voting_begin_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); - $end_datetime = intval($data['voting_end_date']); - $end_datetime = new \DateTime("@$end_datetime"); - $end_datetime->setTimezone($summit->getTimeZone()); - - // set local time from UTC - $summit->setVotingBeginDate($start_datetime); - $summit->setVotingEndDate($end_datetime); - } - else{ - $summit->clearVotingDates(); - } - } - - if(array_key_exists('selection_begin_date', $data) && array_key_exists('selection_end_date', $data)) { - if (isset($data['selection_begin_date']) && isset($data['selection_end_date'])) { - $start_datetime = intval($data['selection_begin_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); - $end_datetime = intval($data['selection_end_date']); - $end_datetime = new \DateTime("@$end_datetime"); - $end_datetime->setTimezone($summit->getTimeZone()); - - // set local time from UTC - $summit->setSelectionBeginDate($start_datetime); - $summit->setSelectionEndDate($end_datetime); - } - else{ - $summit->clearSelectionDates(); - } - } - if(array_key_exists('registration_begin_date', $data) && array_key_exists('registration_end_date', $data)) { if (isset($data['registration_begin_date']) && isset($data['registration_end_date'])) { $start_datetime = intval($data['registration_begin_date']); diff --git a/app/Models/Foundation/Summit/SelectionPlan.php b/app/Models/Foundation/Summit/SelectionPlan.php new file mode 100644 index 00000000..18198195 --- /dev/null +++ b/app/Models/Foundation/Summit/SelectionPlan.php @@ -0,0 +1,259 @@ +summit->getTimeZoneId(); + } + + /** + * @ORM\Column(name="Name", type="string") + * @var String + */ + private $name; + + /** + * @ORM\Column(name="Enabled", type="boolean") + * @var bool + */ + private $is_enabled; + + /** + * @ORM\Column(name="SubmissionBeginDate", type="datetime") + * @var \DateTime + */ + private $submission_begin_date; + + /** + * @ORM\Column(name="SubmissionEndDate", type="datetime") + * @var \DateTime + */ + private $submission_end_date; + + /** + * @ORM\Column(name="VotingBeginDate", type="datetime") + * @var \DateTime + */ + private $voting_begin_date; + + /** + * @ORM\Column(name="VotingEndDate", type="datetime") + * @var \DateTime + */ + private $voting_end_date; + + /** + * @ORM\Column(name="SelectionBeginDate", type="datetime") + * @var \DateTime + */ + private $selection_begin_date; + + /** + * @ORM\Column(name="SelectionEndDate", type="datetime") + * @var \DateTime + */ + private $selection_end_date; + + /* + * @ORM\ManyToMany(targetEntity="models\summit\PresentationCategoryGroup") + * @ORM\JoinTable(name="SelectionPlan_CategoryGroups", + * joinColumns={@JoinColumn(name="SelectionPlanID", referencedColumnName="ID")}, + * inverseJoinColumns={@JoinColumn(name="PresentationCategoryGroupID", referencedColumnName="ID")} + * ) + * @var PresentationCategoryGroup[] + */ + private $category_groups; + + /** + * @return DateTime + */ + public function getSubmissionBeginDate() + { + return $this->submission_begin_date; + } + + /** + * @param DateTime $submission_begin_date + */ + public function setSubmissionBeginDate(DateTime $submission_begin_date){ + $this->submission_begin_date = $this->convertDateFromTimeZone2UTC($submission_begin_date); + } + + /** + * @return $this + */ + public function clearSubmissionDates(){ + $this->submission_begin_date = $this->submission_end_date = null; + return $this; + } + + /** + * @return DateTime + */ + public function getSubmissionEndDate() + { + return $this->submission_end_date; + } + + /** + * @param DateTime $submission_end_date + */ + public function setSubmissionEndDate(DateTime $submission_end_date){ + $this->submission_end_date = $this->convertDateFromTimeZone2UTC($submission_end_date); + } + + /** + * @return DateTime + */ + public function getVotingBeginDate() + { + return $this->voting_begin_date; + } + + /** + * @param DateTime $voting_begin_date + */ + public function setVotingBeginDate(DateTime $voting_begin_date){ + $this->voting_begin_date = $this->convertDateFromTimeZone2UTC($voting_begin_date); + } + + /** + * @return $this + */ + public function clearVotingDates(){ + $this->voting_begin_date = $this->voting_end_date = null; + return $this; + } + + /** + * @return DateTime + */ + public function getVotingEndDate() + { + return $this->voting_end_date; + } + + /** + * @param DateTime $voting_end_date + */ + public function setVotingEndDate(DateTime $voting_end_date){ + $this->voting_end_date = $this->convertDateFromTimeZone2UTC($voting_end_date); + } + + /** + * @return DateTime + */ + public function getSelectionBeginDate() + { + return $this->selection_begin_date; + } + + /** + * @param DateTime $selection_begin_date + */ + public function setSelectionBeginDate(DateTime $selection_begin_date){ + $this->selection_begin_date = $this->convertDateFromTimeZone2UTC($selection_begin_date); + } + + /** + * @return $this + */ + public function clearSelectionDates(){ + $this->selection_begin_date = $this->selection_end_date = null; + return $this; + } + + /** + * @return DateTime + */ + public function getSelectionEndDate() + { + return $this->selection_end_date; + } + + /** + * @param DateTime $selection_end_date + */ + public function setSelectionEndDate(DateTime $selection_end_date){ + $this->selection_end_date = $this->convertDateFromTimeZone2UTC($selection_end_date); + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return bool + */ + public function IsEnabled() + { + return $this->is_enabled; + } + + /** + * @param bool $is_enabled + */ + public function setIsEnabled($is_enabled) + { + $this->is_enabled = $is_enabled; + } + + public function __construct() + { + parent::__construct(); + $this->is_enabled = false; + $this->category_groups = new ArrayCollection; + } + + /** + * @return ArrayCollection + */ + public function getCategoryGroups() + { + return $this->category_groups; + } + +} \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 69e683db..3298d138 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -13,6 +13,7 @@ * limitations under the License. **/ use App\Models\Foundation\Summit\Events\RSVP\RSVPTemplate; +use App\Models\Foundation\Summit\SelectionPlan; use App\Models\Foundation\Summit\TrackTagGroup; use App\Models\Utils\TimeZoneEntity; use DateTime; @@ -82,42 +83,6 @@ class Summit extends SilverstripeBaseModel */ private $end_date; - /** - * @ORM\Column(name="SubmissionBeginDate", type="datetime") - * @var \DateTime - */ - private $submission_begin_date; - - /** - * @ORM\Column(name="SubmissionEndDate", type="datetime") - * @var \DateTime - */ - private $submission_end_date; - - /** - * @ORM\Column(name="VotingBeginDate", type="datetime") - * @var \DateTime - */ - private $voting_begin_date; - - /** - * @ORM\Column(name="VotingEndDate", type="datetime") - * @var \DateTime - */ - private $voting_end_date; - - /** - * @ORM\Column(name="SelectionBeginDate", type="datetime") - * @var \DateTime - */ - private $selection_begin_date; - - /** - * @ORM\Column(name="SelectionEndDate", type="datetime") - * @var \DateTime - */ - private $selection_end_date; - /** * @ORM\Column(name="RegistrationBeginDate", type="datetime") * @var \DateTime @@ -259,6 +224,12 @@ class Summit extends SilverstripeBaseModel */ private $attendees; + /** + * @ORM\OneToMany(targetEntity="App\Models\Foundation\Summit\SelectionPlan", mappedBy="summit", cascade={"persist"}, orphanRemoval=true, fetch="EXTRA_LAZY") + * @var SelectionPlan[] + */ + private $selection_plans; + /** * @ORM\OneToMany(targetEntity="models\summit\PresentationCategoryGroup", mappedBy="summit", cascade={"persist"}, orphanRemoval=true, fetch="EXTRA_LAZY") * @var PresentationCategoryGroup[] @@ -573,6 +544,7 @@ class Summit extends SilverstripeBaseModel $this->rsvp_templates = new ArrayCollection; $this->track_tag_groups = new ArrayCollection; $this->notifications = new ArrayCollection; + $this->selection_plans = new ArrayCollection; } /** @@ -1394,158 +1366,6 @@ SQL; return 0; } - /** - * @return DateTime - */ - public function getSubmissionBeginDate() - { - return $this->submission_begin_date; - } - - /** - * @param DateTime $submission_begin_date - */ - public function setSubmissionBeginDate(DateTime $submission_begin_date){ - $this->submission_begin_date = $this->convertDateFromTimeZone2UTC($submission_begin_date); - } - - /** - * @return $this - */ - public function clearSubmissionDates(){ - $this->submission_begin_date = $this->submission_end_date = null; - return $this; - } - - /** - * @return DateTime - */ - public function getSubmissionEndDate() - { - return $this->submission_end_date; - } - - /** - * @param DateTime $submission_end_date - */ - public function setSubmissionEndDate(DateTime $submission_end_date){ - $this->submission_end_date = $this->convertDateFromTimeZone2UTC($submission_end_date); - } - - /** - * @return DateTime - */ - public function getVotingBeginDate() - { - return $this->voting_begin_date; - } - - /** - * @param DateTime $voting_begin_date - */ - public function setVotingBeginDate(DateTime $voting_begin_date){ - $this->voting_begin_date = $this->convertDateFromTimeZone2UTC($voting_begin_date); - } - - /** - * @return $this - */ - public function clearVotingDates(){ - $this->voting_begin_date = $this->voting_end_date = null; - return $this; - } - - /** - * @return DateTime - */ - public function getVotingEndDate() - { - return $this->voting_end_date; - } - - /** - * @param DateTime $voting_end_date - */ - public function setVotingEndDate(DateTime $voting_end_date){ - $this->voting_end_date = $this->convertDateFromTimeZone2UTC($voting_end_date); - } - - /** - * @return DateTime - */ - public function getSelectionBeginDate() - { - return $this->selection_begin_date; - } - - /** - * @param DateTime $selection_begin_date - */ - public function setSelectionBeginDate(DateTime $selection_begin_date){ - $this->selection_begin_date = $this->convertDateFromTimeZone2UTC($selection_begin_date); - } - - /** - * @return $this - */ - public function clearSelectionDates(){ - $this->selection_begin_date = $this->selection_end_date = null; - return $this; - } - - /** - * @return DateTime - */ - public function getSelectionEndDate() - { - return $this->selection_end_date; - } - - /** - * @param DateTime $selection_end_date - */ - public function setSelectionEndDate(DateTime $selection_end_date){ - $this->selection_end_date = $this->convertDateFromTimeZone2UTC($selection_end_date); - } - - /** - * @return DateTime - */ - public function getRegistrationBeginDate() - { - return $this->registration_begin_date; - } - - /** - * @param DateTime $registration_begin_date - */ - public function setRegistrationBeginDate(DateTime $registration_begin_date){ - $this->registration_begin_date = $this->convertDateFromTimeZone2UTC($registration_begin_date); - } - - /** - * @return $this - */ - public function clearRegistrationDates(){ - $this->registration_begin_date = $this->registration_end_date = null; - return $this; - } - - /** - * @return DateTime - */ - public function getRegistrationEndDate() - { - return $this->registration_end_date; - } - - /** - * @param DateTime $registration_end_date - */ - public function setRegistrationEndDate(DateTime $registration_end_date){ - $this->registration_end_date = $this->convertDateFromTimeZone2UTC($registration_end_date); - } - /** * @return int */ @@ -2097,4 +1917,51 @@ SQL; { return $this->calendar_sync_desc; } -} \ No newline at end of file + + /** + * @return DateTime + */ + public function getRegistrationBeginDate() + { + return $this->registration_begin_date; + } + + /** + * @param DateTime $registration_begin_date + */ + public function setRegistrationBeginDate(DateTime $registration_begin_date){ + $this->registration_begin_date = $this->convertDateFromTimeZone2UTC($registration_begin_date); + } + + /** + * @return $this + */ + public function clearRegistrationDates(){ + $this->registration_begin_date = $this->registration_end_date = null; + return $this; + } + + /** + * @return DateTime + */ + public function getRegistrationEndDate() + { + return $this->registration_end_date; + } + + /** + * @param DateTime $registration_end_date + */ + public function setRegistrationEndDate(DateTime $registration_end_date){ + $this->registration_end_date = $this->convertDateFromTimeZone2UTC($registration_end_date); + } + + /** + * @return SelectionPlan[] + */ + public function getSelectionPlans() + { + return $this->selection_plans; + } + +} diff --git a/app/Models/Utils/TimeZoneEntity.php b/app/Models/Utils/TimeZoneEntity.php index d3fc0a4f..55631722 100644 --- a/app/Models/Utils/TimeZoneEntity.php +++ b/app/Models/Utils/TimeZoneEntity.php @@ -43,7 +43,7 @@ trait TimeZoneEntity public function getTimeZone() { try { - return new DateTimeZone($this->time_zone_id); + return new DateTimeZone($this->getTimeZoneId()); } catch (\Exception $ex) { return null; } diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index 6a3d3ff8..a1af4b1f 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -74,7 +74,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest $this->assertResponseStatus(200); } - public function testGetSummit($summit_id = 22) + public function testGetSummit($summit_id = 24) { $params = array