diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 863804daf..5615296d6 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -13,6 +13,7 @@ an alias to getValueFromForm instead of vice-versa. getValue is still the preferred method, getValueFromForm is still the deprecated method. - fixed: Image Collateral Uploader in Rich Editor now works correctly + - fixed: problem with Calendar in EMS "Ticket" tab, "Start" field 7.5.17 - fixed: Payment Methods Hover Help Incomplete diff --git a/lib/WebGUI/Asset/Sku/EMSTicket.pm b/lib/WebGUI/Asset/Sku/EMSTicket.pm index 2b14da69c..8da550916 100644 --- a/lib/WebGUI/Asset/Sku/EMSTicket.pm +++ b/lib/WebGUI/Asset/Sku/EMSTicket.pm @@ -95,13 +95,12 @@ sub definition { label => $i18n->get("event number"), hoverHelp => $i18n->get("event number help"), }, - startDate => { - tab => "properties", - fieldType => "dateTime", - defaultValue => $date->toDatabase, - label => $i18n->get("add/edit event start date"), - hoverHelp => $i18n->get("add/edit event start date help"), - }, + startDate => { + noFormPost => 1, + fieldType => "hidden", + defaultValue => $date->toDatabase, + autoGenerate => 0, + }, duration => { tab => "properties", fieldType => "float", @@ -252,6 +251,9 @@ sub getEditForm { my $self = shift; my $form = $self->SUPER::getEditForm(@_); my $metadata = JSON->new->utf8->decode($self->get("eventMetaData") || '{}'); + my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem"); + my $date = WebGUI::DateTime->new($self->session, time()); + foreach my $field (@{$self->getParent->getEventMetaFields}) { $form->getTab("meta")->DynamicField( name => "eventmeta ".$field->{label}, @@ -262,6 +264,14 @@ sub getEditForm { label => $field->{label}, ); } + $form->getTab("properties")->DateTime( + name => "startDate", + defaultValue => $date->toDatabase, + label => $i18n->get("add/edit event start date"), + hoverHelp => $i18n->get("add/edit event start date help"), + timeZone => $self->getParent->get("timezone"), + value => $self->get("startDate"), + ); return $form; } @@ -400,7 +410,10 @@ sub processPropertiesFromFormPost { $metadata{$field->{label}} = $form->process('eventmeta '.$field->{label}, $field->{dataType}, { defaultValue => $field->{defaultValues}, options => $field->{possibleValues}}); } - $self->update({eventMetaData => JSON->new->utf8->encode(\%metadata)}); + my $date = WebGUI::DateTime->new($self->session, time())->toDatabase; + my $startDate = $form->process('startDate', "dateTime", $date, + { defaultValue => $date, timeZone => $self->getParent->get("timezone")}); + $self->update({eventMetaData => JSON->new->utf8->encode(\%metadata), startDate => $startDate}); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index 291900455..60ea88865 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -1026,7 +1026,9 @@ className='WebGUI::Asset::Sku::EMSTicket' and state='published' and revisionDate foreach my $field (keys %{$meta}) { $description .= '
'.$field.': '.$meta->{$field}.'
' unless ($meta->{$field} eq ""); } - my $date = WebGUI::DateTime->new($session, $ticket->get('startDate')); + my $date = WebGUI::DateTime->new($session, mysql => $ticket->get('startDate')) + ->set_time_zone($self->get("timezone")) + ->webguiDate("%W %z %Z"); push(@records, { title => $ticket->getTitle, description => $description, @@ -1038,7 +1040,7 @@ className='WebGUI::Asset::Sku::EMSTicket' and state='published' and revisionDate assetId => $ticket->getId, eventNumber => $ticket->get('eventNumber'), location => $ticket->get('location'), - startDate => $date->webguiDate("%W @ %H:%n%p"), + startDate => $date, duration => $ticket->get('duration'), }); last unless (scalar(@records) < $numberOfResults); diff --git a/lib/WebGUI/Form/DateTime.pm b/lib/WebGUI/Form/DateTime.pm index b85c5a704..d70a03a2d 100644 --- a/lib/WebGUI/Form/DateTime.pm +++ b/lib/WebGUI/Form/DateTime.pm @@ -66,8 +66,13 @@ Defaults to 19. The displayed size of the box for the date to be typed in. If no value is specified, this will be used. Defaults to today and now. -If the defaultValue is a MySQL date/time string, this form control will return -MySQL date/time strings adjusted for the user's time zone. +=head4 timeZone + +The time zone in which MySQL date/time strings are entered. Values selected using +this form control will be converted from this time zone to UTC. This control will +return MySQL date/time strings adjusted for this time zone. + +Defaults to the users time zone. =cut @@ -85,6 +90,9 @@ sub definition { size=>{ defaultValue=> 19 }, + timeZone=>{ + defaultValue=> $session->user->profileField("timeZone") + }, }); return $class->SUPER::definition($session, $definition); } @@ -143,8 +151,8 @@ sub getValue { unless ($value =~ m/(?:\d{2}|\d{4})\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{2}/); # Fix time zone - $value = WebGUI::DateTime->new(mysql => $value, time_zone => $self->session->user->profileField("timeZone")) - ->set_time_zone("UTC")->toMysql; + $value = WebGUI::DateTime->new(mysql => $value, time_zone => $self->get("timeZone")) + ->set_time_zone("UTC")->toMysql; return $value; } @@ -170,6 +178,10 @@ sub getValueAsHtml { else { # MySQL format my $value = $self->getDefaultValue; + # Fix time zone + $value = WebGUI::DateTime->new($self->session, mysql => $value) + ->set_time_zone($self->get("timeZone")) + ->strftime("%Y-%m-%d %H:%M:%S"); return $value; } } @@ -208,9 +220,9 @@ sub toHtml { # MySQL format $value = $self->getDefaultValue; # Fix time zone - $value = WebGUI::DateTime->new($value) - ->set_time_zone($self->session->user->profileField("timeZone")) - ->toMysql; + $value = WebGUI::DateTime->new($self->session, mysql => $value) + ->set_time_zone($self->get("timeZone")) + ->strftime("%Y-%m-%d %H:%M:%S"); } $self->session->style->setLink($self->session->url->extras('yui/build/calendar/assets/skins/sam/calendar.css'), { rel=>"stylesheet", type=>"text/css", media=>"all" }); $self->session->style->setScript($self->session->url->extras('yui/build/yahoo/yahoo-min.js'),{ type=>'text/javascript' }); @@ -253,9 +265,9 @@ sub toHtmlAsHidden { # MySQL format $value = $self->getDefaultValue; # Fix Time zone - $value = WebGUI::DateTime->new($value) - ->set_time_zone($self->session->user->profileField("timeZone")) - ->toMysql; + $value = WebGUI::DateTime->new($self->session, mysql => $value) + ->set_time_zone($self->get("timeZone")) + ->strftime("%Y-%m-%d %H:%M:%S"); } return WebGUI::Form::Hidden->new(