diff --git a/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php b/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php index 4ac04a5d..528fe629 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php +++ b/app/Http/Controllers/Apis/Protected/Summit/Factories/SummitValidationRulesFactory.php @@ -23,17 +23,17 @@ final class SummitValidationRulesFactory return [ 'name' => 'sometimes|string|max:50', 'start_date' => 'sometimes|date_format:U', - 'end_date' => 'required_with:start_date|date_format:U|after:start_date', - 'submission_begin_date' => 'sometimes|date_format:U', - 'submission_end_date' => 'required_with:submission_begin_date|date_format:U|after:submission_begin_date', - 'voting_begin_date' => 'sometimes|date_format:U', - 'voting_end_date' => 'required_with:voting_begin_date|date_format:U|after:voting_begin_date', - 'selection_begin_date' => 'sometimes|date_format:U', - 'selection_end_date' => 'required_with:selection_begin_date|date_format:U|after:selection_begin_date', - 'registration_begin_date' => 'sometimes|date_format:U', - 'registration_end_date' => 'required_with:registration_begin_date|date_format:U|after:registration_begin_date', - 'start_showing_venues_date' => 'sometimes|date_format:U|before:start_date', - 'schedule_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', + 'schedule_start_date' => 'nullable|date_format:U|after_or_equal:start_date|before_or_equal:end_date', 'active' => 'sometimes|boolean', 'dates_label' => 'sometimes|string', 'time_zone_id' => 'sometimes|timezone', @@ -42,31 +42,31 @@ final class SummitValidationRulesFactory 'calendar_sync_name' => 'sometimes|string|max:255', 'calendar_sync_desc' => 'sometimes|string', 'link' => 'sometimes|url', - 'registration_link' => 'sometimes|url', - 'max_submission_allowed_per_user' => 'sometimes|integer|min:1', - 'secondary_registration_link' => 'sometimes|url', - 'secondary_registration_label' => 'sometimes|string', + 'registration_link' => 'sometimes|url', + 'max_submission_allowed_per_user' => 'sometimes|integer|min:1', + 'secondary_registration_link' => 'sometimes|url', + 'secondary_registration_label' => 'sometimes|string', ]; } return [ 'name' => 'required|string|max:50', 'start_date' => 'required|date_format:U', - 'end_date' => 'required_with:start_date|date_format:U|after:start_date', - 'submission_begin_date' => 'sometimes|date_format:U', - 'submission_end_date' => 'required_with:submission_begin_date|date_format:U|after:submission_begin_date', - 'voting_begin_date' => 'sometimes|date_format:U', - 'voting_end_date' => 'required_with:voting_begin_date|date_format:U|after:voting_begin_date', - 'selection_begin_date' => 'sometimes|date_format:U', - 'selection_end_date' => 'required_with:selection_begin_date|date_format:U|after:selection_begin_date', - 'registration_begin_date' => 'sometimes|date_format:U', - 'registration_end_date' => 'required_with:registration_begin_date|date_format:U|after:registration_begin_date', - 'start_showing_venues_date' => 'sometimes|date_format:U|before:start_date', - 'schedule_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', + 'schedule_start_date' => 'nullable|date_format:U|after_or_equal:start_date|before_or_equal:end_date', 'active' => 'sometimes|boolean', 'dates_label' => 'sometimes|string', 'time_zone_id' => 'required|timezone', - 'external_summit_id' => 'sometimes|string', + 'external_summit_id' => 'nullable|string', 'available_on_api' => 'sometimes|boolean', 'calendar_sync_name' => 'sometimes|string|max:255', 'calendar_sync_desc' => 'sometimes|string', diff --git a/app/Models/Foundation/Summit/Factories/SummitFactory.php b/app/Models/Foundation/Summit/Factories/SummitFactory.php index f9d07bde..5db79219 100644 --- a/app/Models/Foundation/Summit/Factories/SummitFactory.php +++ b/app/Models/Foundation/Summit/Factories/SummitFactory.php @@ -65,87 +65,122 @@ final class SummitFactory $summit->setCalendarSyncDesc(trim($data['calendar_sync_desc'])); } - if(isset($data['start_date']) && isset($data['end_date'])) { - $start_datetime = intval($data['start_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); - $end_datetime = intval($data['end_date']); - $end_datetime = new \DateTime("@$end_datetime"); - $end_datetime->setTimezone($summit->getTimeZone()); + if(array_key_exists('start_date', $data) && array_key_exists('end_date', $data)) { + if (isset($data['start_date']) && isset($data['end_date'])) { + $start_datetime = intval($data['start_date']); + $start_datetime = new \DateTime("@$start_datetime"); + $start_datetime->setTimezone($summit->getTimeZone()); + $end_datetime = intval($data['end_date']); + $end_datetime = new \DateTime("@$end_datetime"); + $end_datetime->setTimezone($summit->getTimeZone()); - // set local time from UTC - $summit->setBeginDate($start_datetime); - $summit->setEndDate($end_datetime); + // set local time from UTC + $summit->setBeginDate($start_datetime); + $summit->setEndDate($end_datetime); + } + else{ + $summit->clearBeginEndDates(); + } } - 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()); + 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); + // set local time from UTC + $summit->setSubmissionBeginDate($start_datetime); + $summit->setSubmissionEndDate($end_datetime); + } + else{ + $summit->clearSubmissionDates(); + } } - 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()); + 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); + // set local time from UTC + $summit->setVotingBeginDate($start_datetime); + $summit->setVotingEndDate($end_datetime); + } + else{ + $summit->clearVotingDates(); + } } - 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()); + 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); + // set local time from UTC + $summit->setSelectionBeginDate($start_datetime); + $summit->setSelectionEndDate($end_datetime); + } + else{ + $summit->clearSelectionDates(); + } } - if(isset($data['registration_begin_date']) && isset($data['registration_end_date'])) { - $start_datetime = intval($data['registration_begin_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); - $end_datetime = intval($data['registration_end_date']); - $end_datetime = new \DateTime("@$end_datetime"); - $end_datetime->setTimezone($summit->getTimeZone()); + 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']); + $start_datetime = new \DateTime("@$start_datetime"); + $start_datetime->setTimezone($summit->getTimeZone()); + $end_datetime = intval($data['registration_end_date']); + $end_datetime = new \DateTime("@$end_datetime"); + $end_datetime->setTimezone($summit->getTimeZone()); - // set local time from UTC - $summit->setRegistrationBeginDate($start_datetime); - $summit->setRegistrationEndDate($end_datetime); + // set local time from UTC + $summit->setRegistrationBeginDate($start_datetime); + $summit->setRegistrationEndDate($end_datetime); + } + else{ + $summit->clearRegistrationDates(); + } } - if(isset($data['start_showing_venues_date'])) { - $start_datetime = intval($data['start_showing_venues_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); + if(array_key_exists('start_showing_venues_date', $data)){ + if (isset($data['start_showing_venues_date'])) { + $start_datetime = intval($data['start_showing_venues_date']); + $start_datetime = new \DateTime("@$start_datetime"); + $start_datetime->setTimezone($summit->getTimeZone()); - // set local time from UTC - $summit->setStartShowingVenuesDate($start_datetime); + // set local time from UTC + $summit->setStartShowingVenuesDate($start_datetime); + } + else{ + $summit->clearStartShowingVenuesDate(); + } } - if(isset($data['schedule_start_date'])) { - $start_datetime = intval($data['schedule_start_date']); - $start_datetime = new \DateTime("@$start_datetime"); - $start_datetime->setTimezone($summit->getTimeZone()); + if(array_key_exists('schedule_start_date', $data)) { + if (isset($data['schedule_start_date'])) { + $start_datetime = intval($data['schedule_start_date']); + $start_datetime = new \DateTime("@$start_datetime"); + $start_datetime->setTimezone($summit->getTimeZone()); - // set local time from UTC - $summit->setScheduleDefaultStartDate($start_datetime); + // set local time from UTC + $summit->setScheduleDefaultStartDate($start_datetime); + } + else{ + $summit->clearScheduleDefaultStartDate(); + } } if(isset($data['link']) ){ diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 10a00d16..69e683db 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -390,6 +390,10 @@ class Summit extends SilverstripeBaseModel $this->schedule_default_start_date = $this->convertDateFromTimeZone2UTC($schedule_default_start_date); } + public function clearScheduleDefaultStartDate(){ + $this->schedule_default_start_date = null; + } + /** * @return mixed */ @@ -406,6 +410,14 @@ class Summit extends SilverstripeBaseModel $this->begin_date = $this->convertDateFromTimeZone2UTC($begin_date); } + /** + * @return $this + */ + public function clearBeginEndDates(){ + $this->begin_date = $this->end_date = null; + return $this; + } + /** * @return \DateTime */ @@ -454,6 +466,10 @@ class Summit extends SilverstripeBaseModel $this->start_showing_venues_date = $this->convertDateFromTimeZone2UTC($start_showing_venues_date); } + public function clearStartShowingVenuesDate(){ + $this->start_showing_venues_date = null; + } + /** * @return boolean */ @@ -1393,6 +1409,14 @@ SQL; $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 */ @@ -1423,6 +1447,14 @@ SQL; $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 */ @@ -1453,6 +1485,14 @@ SQL; $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 */ @@ -1483,6 +1523,14 @@ SQL; $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 */ diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index a4845a0a..6a3d3ff8 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -127,7 +127,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest 'name' => 'Vancouver, BC', 'start_date' => 1522853212, 'end_date' => 1542853212, - 'time_zone_id' => 'America/Argentina/Buenos_Aires' + 'time_zone_id' => 'America/Argentina/Buenos_Aires', ]; $headers = [ @@ -158,7 +158,9 @@ final class OAuth2SummitApiTest extends ProtectedApiTest 'name' => $name, 'start_date' => 1522853212, 'end_date' => 1542853212, - 'time_zone_id' => 'America/Argentina/Buenos_Aires' + 'time_zone_id' => 'America/Argentina/Buenos_Aires', + 'submission_begin_date' => null, + 'submission_end_date' => null, ]; $headers = [