From e3a4afe5c3a26cc187926097e7bfd2ff97f9ceb3 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 4 Jul 2011 14:14:17 -0700 Subject: [PATCH] Allow reasonable default dates in ISO 9601 format. Fixes bug #12165. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Thingy.pm | 18 +++--- lib/WebGUI/i18n/English/Asset_Thingy.pm | 4 +- t/Asset/Wobject/Thingy/getFieldValue.t | 84 +++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 t/Asset/Wobject/Thingy/getFieldValue.t diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 7c3cb711f..e61c2b7f8 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -5,6 +5,7 @@ - added: FormField macro for rendering Form objects directly from templates - fixed: Generic Tax driver does not like spaces around commas - fixed: Date formatting with WebGUI::DateTime has extra spaces for single digit months and days. + - fixed #12165: Default date in Thingy doesn't work 7.10.19 - fixed #12169: extras uploads symlink export diff --git a/lib/WebGUI/Asset/Wobject/Thingy.pm b/lib/WebGUI/Asset/Wobject/Thingy.pm index 8fab714c1..2edead023 100644 --- a/lib/WebGUI/Asset/Wobject/Thingy.pm +++ b/lib/WebGUI/Asset/Wobject/Thingy.pm @@ -1042,18 +1042,22 @@ sub getFieldValue { my $dateFormat = shift || "%z"; my $dateTimeFormat = shift; my $processedValue = $value; - my $dbh = $self->session->db->dbh; + my $session = $self->session; + my $dbh = $session->db->dbh; - if (lc $field->{fieldType} eq "date"){ - $processedValue = $self->session->datetime->epochToHuman($value,$dateFormat); + my $fieldType = lc $field->{fieldType}; + if ($fieldType eq "date"){ + my $dt = WebGUI::DateTime->new($session, $value); + $processedValue = $dt->webguiDate($dateFormat); } - elsif (lc $field->{fieldType} eq "datetime"){ - $processedValue = $self->session->datetime->epochToHuman($value,$dateTimeFormat); + elsif ($fieldType eq "datetime"){ + my $dt = WebGUI::DateTime->new($session, $value); + $processedValue = $dt->webguiDate($dateTimeFormat); } # TODO: The otherThing field type is probably also handled by getFormPlugin, so the elsif below can probably be # safely removed. However, this requires more testing than I can provide right now, so for now this stays the # way it was. - elsif ($field->{fieldType} =~ m/^otherThing/x) { + elsif ($field->{fieldType} =~ m/^otherthing/x) { my $otherThingId = $field->{fieldType}; $otherThingId =~ s/^otherThing_//x; my $tableName = 'Thingy_'.$otherThingId; @@ -2112,7 +2116,7 @@ sub www_editThing { $self->session->style->setLink($self->session->url->extras('wobject/Thingy/thingy.css'), {type =>'text/css', rel=>'stylesheet'}); - $tab = $tabForm->getTab('fields'); + $session->log->warn("one"); foreach my $fieldType ( keys %{ WebGUI::Form::FieldType->new($session)->getTypes }) { my $form = eval { WebGUI::Pluggable::instanciate("WebGUI::Form::".$fieldType, "new", [$session]) }; if ($@) { diff --git a/lib/WebGUI/i18n/English/Asset_Thingy.pm b/lib/WebGUI/i18n/English/Asset_Thingy.pm index a60fc6bd4..bcd651ab8 100644 --- a/lib/WebGUI/i18n/English/Asset_Thingy.pm +++ b/lib/WebGUI/i18n/English/Asset_Thingy.pm @@ -456,8 +456,8 @@ ipAddress etc?|, 'default value description' => { message => q|Enter the default value (if any) for the field. If you have defined the possible values for -this field using a hash, then the default value has to be a key in that hash, and not a value. For Yes/No fields, enter "yes" to select "Yes" and "no" to select "No".|, - lastUpdated => 1223372150, +this field using a hash, then the default value has to be a key in that hash, and not a value. For Yes/No fields, enter "yes" to select "Yes" and "no" to select "No". For Date and Date/Time fields, enter an epoch date, or a date in YYYY-MM-DD HH:MM:SS, the ISO 9601 format with optional time|, + lastUpdated => 1309814047, }, 'default value subtext' => { diff --git a/t/Asset/Wobject/Thingy/getFieldValue.t b/t/Asset/Wobject/Thingy/getFieldValue.t new file mode 100644 index 000000000..e26b9ea82 --- /dev/null +++ b/t/Asset/Wobject/Thingy/getFieldValue.t @@ -0,0 +1,84 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2009 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use FindBin; +use strict; +use lib "$FindBin::Bin/../../../lib"; + +##The goal of this test is to test editThingDataSave, particularly those things not tested in Thingy.t + +use WebGUI::Test; +use WebGUI::Session; +use Test::More tests => 2; # increment this value for each test you create +use Test::Deep; +use JSON; +use WebGUI::Asset::Wobject::Thingy; +use WebGUI::Search; +use WebGUI::Search::Index; +use Data::Dumper; + +my $session = WebGUI::Test->session; + +# Do our work in the import node +my $node = WebGUI::Asset->getImportNode($session); + +my $versionTag = WebGUI::VersionTag->getWorking($session); +$versionTag->set({name=>"Thingy Test"}); +WebGUI::Test->addToCleanup($versionTag); +my $thingy = $node->addChild({ + className => 'WebGUI::Asset::Wobject::Thingy', + groupIdView => 7, + url => 'some_thing', +}); +$versionTag->commit; +$thingy = $thingy->cloneFromDb; + +# Test indexThing, without needing a real thing +my $groupIdEdit = $thingy->get("groupIdEdit"); +my %thingProperties = ( + thingId => "THING_RECORD", + label => 'Label', + editScreenTitle => 'Edit', + editInstructions => 'instruction_edit', + groupIdAdd => $groupIdEdit, + groupIdEdit => $groupIdEdit, + saveButtonLabel => 'save', + afterSave => 'searchThisThing', + editTemplateId => "ThingyTmpl000000000003", + groupIdView => '2', + viewTemplateId => "ThingyTmpl000000000002", + defaultView => 'searchThing', + searchScreenTitle => 'Search', + searchDescription => 'description_search', + groupIdSearch => $groupIdEdit, + groupIdExport => $groupIdEdit, + groupIdImport => $groupIdEdit, + searchTemplateId => "ThingyTmpl000000000004", + thingsPerPage => 25, +); +my $thingId = $thingy->addThing(\%thingProperties); +%thingProperties = %{ $thingy->getThing($thingId) }; + +my $field1Id = $thingy->addField({ + thingId => $thingId, + fieldId => "new", + label => "dated", + dateCreated => time(), + fieldType => "Date", + defaultValue => '2011-07-04', + status => "editable", + display => 1, +}, 0); + +my $field1 = $thingy->getFields($thingId)->hashRef; + +note 'getFieldValue'; +is $thingy->getFieldValue(WebGUI::Test->webguiBirthday, $field1), '8/16/2001', 'with epoch as default'; +is $thingy->getFieldValue('2011-07-04', $field1), '7/4/2011', 'with mysql date as default';