Updated Summit TimeZone

moved from array idx to time zone
identifier.

Change-Id: Ie7f4663d014a29cb1907db906225767168ca78af
This commit is contained in:
Sebastian Marcet 2018-04-11 19:20:40 -03:00
parent 416018e715
commit 8064d6d05c
6 changed files with 134 additions and 144 deletions

View File

@ -14,6 +14,7 @@
**/
use Illuminate\Support\Facades\Config;
use models\summit\Summit;
use DateTime;
/**
* Class SummitSerializer
* @package ModelSerializers
@ -22,22 +23,22 @@ class SummitSerializer extends SilverStripeSerializer
{
protected static $array_mappings = [
'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',
'ScheduleDefaultStartDate' => 'schedule_start_date:datetime_epoch',
'Active' => 'active:json_boolean',
'TypeId' => 'type_id:json_int' ,
'DatesLabel' => 'dates_label:json_string' ,
'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',
'ScheduleDefaultStartDate' => 'schedule_start_date:datetime_epoch',
'Active' => 'active:json_boolean',
'TypeId' => 'type_id:json_int' ,
'DatesLabel' => 'dates_label:json_string' ,
// calculated attributes
'PresentationVotesCount' => 'presentation_votes_count:json_int' ,
'PresentationVotersCount' => 'presentation_voters_count:json_int' ,
@ -72,20 +73,17 @@ class SummitSerializer extends SilverStripeSerializer
$summit = $this->object;
if(!$summit instanceof Summit) return [];
$values = parent::serialize($expand, $fields, $relations, $params);
$time_zone_list = timezone_identifiers_list();
$time_zone_id = $summit->getTimeZoneId();
if(!count($relations)) $relations = $this->getAllowedRelations();
$timezone = $summit->getTimeZone();
$values['time_zone'] = null;
if (!empty($time_zone_id) && isset($time_zone_list[$time_zone_id])) {
$time_zone_name = $time_zone_list[$time_zone_id];
$time_zone = new \DateTimeZone($time_zone_name);
$time_zone_info = $time_zone->getLocation();
$time_zone_info['name'] = $time_zone->getName();
$now = new \DateTime($summit->getLocalBeginDate()->format('Y-m-d H:i:s'), $time_zone);
$time_zone_info['offset'] = $time_zone->getOffset($now);
$values['time_zone'] = $time_zone_info;
if (!is_null($timezone)) {
$time_zone_info = $timezone->getLocation();
$time_zone_info['name'] = $timezone->getName();
$now = new DateTime($summit->getLocalBeginDate()->format('Y-m-d H:i:s'), $timezone);
$time_zone_info['offset'] = $timezone->getOffset($now);
$values['time_zone'] = $time_zone_info;
}
$values['logo'] = ($summit->hasLogo()) ?
@ -139,7 +137,7 @@ class SummitSerializer extends SilverStripeSerializer
}
break;
case 'tracks':{
$presentation_categories = array();
$presentation_categories = [];
foreach ($summit->getPresentationCategories() as $cat) {
$presentation_categories[] = SerializerRegistry::getInstance()->getSerializer($cat)->serialize();
}
@ -148,7 +146,7 @@ class SummitSerializer extends SilverStripeSerializer
break;
case 'track_groups':{
// track_groups
$track_groups = array();
$track_groups = [];
foreach ($summit->getCategoryGroups() as $group) {
$track_groups[] = SerializerRegistry::getInstance()->getSerializer($group)->serialize();
}
@ -156,7 +154,7 @@ class SummitSerializer extends SilverStripeSerializer
}
break;
case 'sponsors':{
$sponsors = array();
$sponsors = [];
foreach ($summit->getSponsors() as $company) {
$sponsors[] = SerializerRegistry::getInstance()->getSerializer($company)->serialize();
}
@ -164,7 +162,7 @@ class SummitSerializer extends SilverStripeSerializer
}
break;
case 'speakers':{
$speakers = array();
$speakers = [];
foreach ($summit->getSpeakers() as $speaker) {
$speakers[] =
SerializerRegistry::getInstance()->getSerializer($speaker)->serialize
@ -181,38 +179,38 @@ class SummitSerializer extends SilverStripeSerializer
}
break;
case 'schedule': {
$event_types = array();
$event_types = [];
foreach ($summit->getEventTypes() as $event_type) {
$event_types[] = SerializerRegistry::getInstance()->getSerializer($event_type)->serialize();
}
$values['event_types'] = $event_types;
$presentation_categories = array();
$presentation_categories = [];
foreach ($summit->getPresentationCategories() as $cat) {
$presentation_categories[] = SerializerRegistry::getInstance()->getSerializer($cat)->serialize();
}
$values['tracks'] = $presentation_categories;
// track_groups
$track_groups = array();
$track_groups = [];
foreach ($summit->getCategoryGroups() as $group) {
$track_groups[] = SerializerRegistry::getInstance()->getSerializer($group)->serialize();
}
$values['track_groups'] = $track_groups;
$schedule = array();
$schedule = [];
foreach ($summit->getScheduleEvents() as $event) {
$schedule[] = SerializerRegistry::getInstance()->getSerializer($event)->serialize();
}
$values['schedule'] = $schedule;
$sponsors = array();
$sponsors = [];
foreach ($summit->getSponsors() as $company) {
$sponsors[] = SerializerRegistry::getInstance()->getSerializer($company)->serialize();
}
$values['sponsors'] = $sponsors;
$speakers = array();
$speakers = [];
foreach ($summit->getSpeakers() as $speaker) {
$speakers[] =
SerializerRegistry::getInstance()->getSerializer($speaker)->serialize

View File

@ -29,6 +29,7 @@ final class SummitFactory
/**
* @param Summit $summit
* @param array $data
* @return Summit
*/
public static function populate(Summit $summit, array $data){
@ -37,9 +38,7 @@ final class SummitFactory
}
if(isset($data['time_zone_id']) ){
$time_zone_list = array_flip(timezone_identifiers_list());
$time_zone_id = $time_zone_list[trim($data['time_zone_id'])];
$summit->setTimeZoneId($time_zone_id);
$summit->setTimeZoneId(trim($data['time_zone_id']));
}
if(isset($data['active']) ){

View File

@ -14,16 +14,14 @@
**/
use App\Models\Foundation\Summit\Events\RSVP\RSVPTemplate;
use App\Models\Foundation\Summit\TrackTagGroup;
use App\Models\Utils\TimeZoneUtils;
use App\Models\Utils\TimeZoneEntity;
use DateTime;
use DateTimeZone;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Criteria;
use models\exceptions\ValidationException;
use models\main\Company;
use models\main\File;
use models\main\Member;
use models\main\Tag;
use models\utils\SilverstripeBaseModel;
use Doctrine\ORM\Mapping AS ORM;
/**
@ -35,6 +33,7 @@ use Doctrine\ORM\Mapping AS ORM;
class Summit extends SilverstripeBaseModel
{
use TimeZoneEntity;
/**
* @ORM\Column(name="Title", type="string")
* @var string
@ -168,7 +167,7 @@ class Summit extends SilverstripeBaseModel
private $start_showing_venues_date;
/**
* @ORM\Column(name="TimeZone", type="string")
* @ORM\Column(name="TimeZoneIdentifier", type="string")
* @var string
*/
private $time_zone_id;
@ -516,23 +515,6 @@ class Summit extends SilverstripeBaseModel
}
/**
* @return string
*/
public function getTimeZoneId()
{
return $this->time_zone_id;
}
/**
* @param string $time_zone_id
*/
public function setTimeZoneId($time_zone_id)
{
$this->time_zone_id = $time_zone_id;
}
const DefaultMaxSubmissionAllowedPerUser = 3;
/**
* Summit constructor.
@ -576,53 +558,6 @@ class Summit extends SilverstripeBaseModel
return $speaker_assistance === false ? null : $speaker_assistance;
}
/**
* @param DateTime $value
* @return null|DateTime
*/
public function convertDateFromTimeZone2UTC(DateTime $value)
{
$summit_time_zone = $this->getTimeZone();
if (!is_null($summit_time_zone) && !empty($value)) {
$utc_timezone = new DateTimeZone("UTC");
$timestamp = $value->format('Y-m-d H:i:s');
$local_date = new DateTime($timestamp, $summit_time_zone);
return $local_date->setTimezone($utc_timezone);
}
return null;
}
/**
* @return DateTimeZone|null
*/
public function getTimeZone()
{
return TimeZoneUtils::getTimeZoneById($this->time_zone_id);
}
/**
* @param DateTime $value
* @return null|DateTime
*/
public function convertDateFromUTC2TimeZone(DateTime $value)
{
$time_zone_id = $this->time_zone_id;
if (empty($time_zone_id)) return $value;
$time_zone_list = timezone_identifiers_list();
if (isset($time_zone_list[$time_zone_id]) && !empty($value)) {
$utc_timezone = new DateTimeZone("UTC");
$time_zone_name = $time_zone_list[$time_zone_id];
$summit_time_zone = new DateTimeZone($time_zone_name);
$timestamp = $value->format('Y-m-d H:i:s');
$utc_date = new DateTime($timestamp, $utc_timezone);
return $utc_date->setTimezone($summit_time_zone);
}
return null;
}
/**
* @return DateTime
*/

View File

@ -0,0 +1,94 @@
<?php namespace App\Models\Utils;
/**
* Copyright 2018 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use DateTime;
use DateTimeZone;
/**
* Trait TimeZoneEntity
* @package App\Models\Utils
*/
trait TimeZoneEntity
{
/**
* @return string
*/
public function getTimeZoneId()
{
return $this->time_zone_id;
}
/**
* @param string $time_zone_id
*/
public function setTimeZoneId($time_zone_id)
{
$this->time_zone_id = $time_zone_id;
}
/**
* @return DateTimeZone|null
*/
public function getTimeZone()
{
try {
return new DateTimeZone($this->time_zone_id);
} catch (\Exception $ex) {
return null;
}
}
/**
* @param DateTime $value
* @return null|DateTime
*/
public function convertDateFromUTC2TimeZone(DateTime $value)
{
$time_zone = $this->getTimeZone();
if (is_null($time_zone)) return null;
$utc_timezone = new DateTimeZone("UTC");
$timestamp = $value->format('Y-m-d H:i:s');
$utc_date = new DateTime($timestamp, $utc_timezone);
return $utc_date->setTimezone($time_zone);
}
/**
* @param DateTime $value
* @return null|DateTime
*/
public function convertDateFromTimeZone2UTC(DateTime $value)
{
$time_zone = $this->getTimeZone();
if (is_null($time_zone)) return null;
$utc_timezone = new DateTimeZone("UTC");
$timestamp = $value->format('Y-m-d H:i:s');
$local_date = new DateTime($timestamp, $time_zone);
return $local_date->setTimezone($utc_timezone);
}
/**
* @return array
*/
public function getTimezones()
{
$timezones_list = [];
foreach (DateTimeZone::listIdentifiers() as $timezone_identifier) {
$timezones_list[$timezone_identifier] = $timezone_identifier;
}
return $timezones_list;
}
}

View File

@ -1,35 +0,0 @@
<?php namespace App\Models\Utils;
/**
* Copyright 2018 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use DateTimeZone;
/**
* Class TimeZoneUtils
* @package App\Models\Utils
*/
final class TimeZoneUtils
{
/**
* @param string $time_zone_id
* @return DateTimeZone|null
*/
public static function getTimeZoneById($time_zone_id){
if (empty($time_zone_id)) return null;
$time_zone_list = timezone_identifiers_list();
if (isset($time_zone_list[$time_zone_id])) {
$time_zone_name = $time_zone_list[$time_zone_id];
return new DateTimeZone($time_zone_name);
}
return null;
}
}

View File

@ -20,7 +20,6 @@ use App\Events\SummitUpdated;
use App\Http\Utils\FileUploader;
use App\Models\Foundation\Summit\Factories\SummitFactory;
use App\Models\Utils\IntervalParser;
use App\Models\Utils\TimeZoneUtils;
use App\Services\Model\AbstractService;
use App\Services\Model\IFolderService;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;