diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 557d1b3c0..e19ebc027 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -23,6 +23,15 @@ - fixed #11062: subscriptionCode - fixed #11061: SQLForm_fieldOrder - fixed #11066: wrong definitions + - fixed #11070: i18n Asset_Navigation::assetsToInclude + - fixed #11068: ITransact_recurringStatus + - fixed #11075: product destroys variants + - fixed #11073: preview interchanges width and height properties + - fixed #11079: Datepicker, without times, does not highlight my birthday + - fixed #11071: Form::Date / Session::DateTime + - fixed #11076: WebGUI::Account::Friends message_rpp + - fixed #11067: My Purchases Detail Template - Status Message broken + - fixed #11081: Prop style in 7.8.0? 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/packages-7.8.1/shopping-cart-collateral-items_my-purchases-detail-default.wgpkg b/docs/upgrades/packages-7.8.1/shopping-cart-collateral-items_my-purchases-detail-default.wgpkg new file mode 100644 index 000000000..3c97f5207 Binary files /dev/null and b/docs/upgrades/packages-7.8.1/shopping-cart-collateral-items_my-purchases-detail-default.wgpkg differ diff --git a/docs/upgrades/upgrade_7.8.0-7.8.1.pl b/docs/upgrades/upgrade_7.8.0-7.8.1.pl index bf4bd77b1..381264c4f 100644 --- a/docs/upgrades/upgrade_7.8.0-7.8.1.pl +++ b/docs/upgrades/upgrade_7.8.0-7.8.1.pl @@ -33,9 +33,14 @@ my $session = start(); # this line required fixWikis( $session ); fixEMSTemplates( $session ); removeOldSubscriptionTables( $session ); +removeOldITransactTables( $session ); removeSQLFormTables( $session ); fixBadRevisionDateColumns( $session ); +<<<<<<< HEAD:docs/upgrades/upgrade_7.8.0-7.8.1.pl addEMSSubmission( $session ); +======= +removeImportCruft( $session ); +>>>>>>> ad702e908f63d36d79be04054b586044bd3c9ecf:docs/upgrades/upgrade_7.8.0-7.8.1.pl finish($session); # this line required @@ -83,6 +88,14 @@ sub removeOldSubscriptionTables { print "Done.\n" unless $quiet; } +# Describe what our function does +sub removeOldITransactTables { + my $session = shift; + print "\tRemoving tables leftover from the old 7.5 ITransact Plugin... " unless $quiet; + $session->db->write('DROP TABLE IF EXISTS ITransact_recurringStatus'); + print "Done.\n" unless $quiet; +} + # Describe what our function does sub fixWikis { my $session = shift; @@ -101,7 +114,6 @@ sub fixEMSTemplates { print "Done.\n" unless $quiet; } -#---------------------------------------------------------------------------- # Add tables for the EMS Submission feature sub addEMSSubmission { my $session = shift; @@ -154,6 +166,17 @@ ESQL print "DONE!\n" unless $quiet; } +# Describe what our function does +sub removeImportCruft { + my $session = shift; + print "\tRemoving cruft from the import node... " unless $quiet; + my $propFolder = WebGUI::Asset->newByDynamicClass($session, '2c4RcwsUfQMup_WNujoTGg'); + if ($propFolder) { + $propFolder->purge; + } + print "Done.\n" unless $quiet; +} + # -------------- DO NOT EDIT BELOW THIS LINE -------------------------------- diff --git a/lib/WebGUI/Account/Friends.pm b/lib/WebGUI/Account/Friends.pm index cf49894a4..37dab7f08 100644 --- a/lib/WebGUI/Account/Friends.pm +++ b/lib/WebGUI/Account/Friends.pm @@ -67,7 +67,7 @@ sub canView { my $uid = $self->uid; return 1 if (($session->user->userId eq $uid || $uid eq "") && $session->user->profileField('ableToBeFriend')); - + my $user = WebGUI::User->new($session,$uid); return 0 if($user->isVisitor); #This should never happen but let's make sure return 0 unless ($user->profileField('ableToBeFriend')); #User doesn't have friends enabled @@ -310,7 +310,7 @@ sub www_removeFriend { my $i18n = WebGUI::International->new($session,"Account_Friends"); $errorMsg = $i18n->get("not a friend error"); } - + if($errorMsg ne "") { my $backUrl = $self->getUrl("module=friends"); return $self->showError($var,$errorMsg,$backUrl,$self->getErrorTemplateId); @@ -352,7 +352,7 @@ sub www_removeFriendConfirm { elsif(!$friend->isFriend($friendId)){ $errorMsg = $i18n->get("not a friend error"); } - + if($errorMsg ne "") { my $backUrl = $self->getUrl("module=friends"); return $self->showError($var,$errorMsg,$backUrl,$self->getErrorTemplateId); @@ -401,7 +401,7 @@ sub www_sendFriendsRequest { #Overwrite these $var->{'user_full_name' } = $user->getWholeName; $var->{'user_member_since' } = $user->dateCreated; - + my $defaultComment = sprintf( $i18n->get('default friend comments'), $user->getFirstName, @@ -419,12 +419,12 @@ sub www_sendFriendsRequest { value => $defaultComment, width => "600", }); - + $var->{'form_header' } = WebGUI::Form::formHeader($session,{ action => $self->getUrl("module=friends;do=sendFriendsRequestSave;uid=$uid"), extras => q{name="messageForm"} }); - + $var->{'submit_button' } = WebGUI::Form::submit($session,{}); $var->{'form_footer' } = WebGUI::Form::formFooter($session, {}); @@ -487,7 +487,7 @@ sub www_view { my $user = $self->getUser; $self->appendCommonVars($var); - + my $displayView = $uid ne ""; $var->{'display_message'} = $msg; @@ -507,10 +507,13 @@ sub www_view { #Deal with rows per page my $rpp = $session->form->get("rpp") || 25; my $rpp_url = ";rpp=$rpp"; - - #Cache the base url - my $friendsUrl = $self->getUrl("op=account;module=friends;do=view"); + # Handle viewing someone else's friends + my $uid_url = $session->user->userId eq $uid ? q{} : ";uid=$uid"; + + #Cache the base url + my $friendsUrl = $self->getUrl("op=account;module=friends;do=view$uid_url"); + #Note for anyone who attempts to sort this list by the user's whole name: #You can do this, but the only way to do it efficiently is to join #the users, userProfileData, and groupings table. This will break if the groups API @@ -525,7 +528,7 @@ sub www_view { $rpp ); $p->setDataByArrayRef(\@friendIds); - + #Export page to template my @friends = (); foreach my $friendId ( @{$p->getPageData} ) { @@ -533,7 +536,7 @@ sub www_view { next if($friend->isVisitor); #If you have friends turned off you shouldn't show up when other people view your friends friends next if($displayView && !$friend->profileField('ableToBeFriend')); - + my $hash = {}; # TODO Move this into a sub that can be more easily overridden $hash->{'friend_full_name' } = $friend->getWholeName; @@ -564,7 +567,7 @@ sub www_view { push(@friends,$hash); } my $friendCount = $p->getRowCount; - + $var->{'friends_loop' } = \@friends; $var->{'has_friends' } = $friendCount > 0; $var->{'friends_total' } = $friendCount; diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index c4166da6c..d9ca122c2 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -654,8 +654,8 @@ sub www_resize { var resize = new YAHOO.util.Resize('yui_img', { handles: 'all', knobHandles: true, - height: '${x}px', - width: '${y}px', + height: '${y}px', + width: '${x}px', proxy: true, ghost: true, status: true, diff --git a/lib/WebGUI/Asset/Sku/Product.pm b/lib/WebGUI/Asset/Sku/Product.pm index ae1de8152..097d7d1f0 100644 --- a/lib/WebGUI/Asset/Sku/Product.pm +++ b/lib/WebGUI/Asset/Sku/Product.pm @@ -153,37 +153,43 @@ sub definition { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, accessoryJSON => { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, relatedJSON => { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, specificationJSON => { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, featureJSON => { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, benefitJSON => { ##Collateral data is stored as JSON in here autoGenerate => 0, defaultValue => '[]', - fieldType=>"textarea", + fieldType => "textarea", + noFormPost => 1, }, ); push(@{$definition}, { diff --git a/lib/WebGUI/Asset/Story.pm b/lib/WebGUI/Asset/Story.pm index f76e12656..146f5ae2d 100644 --- a/lib/WebGUI/Asset/Story.pm +++ b/lib/WebGUI/Asset/Story.pm @@ -166,6 +166,7 @@ sub definition { fieldType => 'textarea', defaultValue => '[]', noFormPost => 1, + autoGenerate => 0, }, ); push(@{$definition}, { diff --git a/lib/WebGUI/Asset/Wobject/Thingy.pm b/lib/WebGUI/Asset/Wobject/Thingy.pm index 733ca8098..618294733 100644 --- a/lib/WebGUI/Asset/Wobject/Thingy.pm +++ b/lib/WebGUI/Asset/Wobject/Thingy.pm @@ -892,10 +892,10 @@ sub getFieldValue { my $processedValue = $value; my $dbh = $self->session->db->dbh; - if ($field->{fieldType} eq "date"){ + if (lc $field->{fieldType} eq "date"){ $processedValue = $self->session->datetime->epochToHuman($value,$dateFormat); } - elsif ($field->{fieldType} eq "dateTime"){ + elsif (lc $field->{fieldType} eq "datetime"){ $processedValue = $self->session->datetime->epochToHuman($value,$dateTimeFormat); } # TODO: The otherThing field type is probably also handled by getFormPlugin, so the elsif below can probably be diff --git a/lib/WebGUI/DateTime.pm b/lib/WebGUI/DateTime.pm index 69bc597b3..049add201 100644 --- a/lib/WebGUI/DateTime.pm +++ b/lib/WebGUI/DateTime.pm @@ -137,9 +137,11 @@ sub new #use Data::Dumper; #warn "Args to DateTime->new: ".Dumper \@_; - - if (@_ > 1 && grep /^mysql$/, @_) - { + + if (! scalar(@_) || $_[0] eq '') { + $self = $class->SUPER::now(); + } + elsif (@_ > 1 && grep /^mysql$/, @_) { my %hash = @_; $hash{time_zone} ||= "UTC"; my $string = delete $hash{mysql}; @@ -149,12 +151,10 @@ sub new $self = $class->SUPER::new(%hash); } - elsif (@_ > 1) - { + elsif (@_ > 1) { $self = $class->SUPER::new(@_); } - elsif ($_[0] =~ /^\d+$/) - { + elsif ($_[0] =~ /^-?\d+$/) { $self = DateTime->from_epoch(epoch=>$_[0], time_zone=>"UTC", locale=>$locale); } else { diff --git a/lib/WebGUI/Form/Date.pm b/lib/WebGUI/Form/Date.pm index 1ae63bbc8..0cc454a8c 100644 --- a/lib/WebGUI/Form/Date.pm +++ b/lib/WebGUI/Form/Date.pm @@ -19,6 +19,8 @@ use base 'WebGUI::Form::Text'; use WebGUI::Form::Hidden; use WebGUI::International; +my $isaEpoch = qr/^-?\d+$/; + =head1 NAME Package WebGUI::Form::Date @@ -137,9 +139,9 @@ sub getValue { my $self = shift; # This should probably be rewritten as a cascading ternary my $value = $self->SUPER::getValue(@_); - if (!$self->getDefaultValue || $self->getDefaultValue =~ m/^\d+$/) { + if (!$self->getDefaultValue || $self->getDefaultValue =~ $isaEpoch) { # Epoch format - if($value =~ /^\d+$/){ + if($value =~ $isaEpoch){ return $value; } return $self->session->datetime->setToEpoch($value); @@ -150,10 +152,7 @@ sub getValue { # NOTE: Cannot fix time zone since we don't have a complete date/time - # MySQL format - # YY(YY)?-MM-DD HH:MM:SS - - if($value =~ /^\d+$/){ + if($value =~ $isaEpoch){ return $self->session->datetime->epochToSet($value,$self->session->user->profileField( 'timeZone' )); } @@ -173,17 +172,17 @@ Return the date in a human readable format. =cut sub getValueAsHtml { - my ($self) = @_; + my ($self) = @_; # This should probably be rewritten as a cascading ternary - if (!$self->get("defaultValue") - || $self->get("defaultValue") =~ m/^\d+$/ - || !$self->get("value") - || $self->get("value") =~ m/^\d+$/) { - return $self->session->datetime->epochToHuman($self->getOriginalValue,"%z"); - } + if ( !$self->get("defaultValue") + || $self->get("defaultValue") =~ $isaEpoch + || !$self->get("value") + || $self->get("value") =~ $isaEpoch) { + return $self->session->datetime->epochToHuman($self->getOriginalValue, '%z'); + } else { - # MySQL format - my $value = $self->getOriginalValue; + # MySQL format + my $value = $self->getOriginalValue; return $value; } } @@ -217,17 +216,8 @@ sub toHtml { # No default date $value = $self->set("value",''); } - elsif (!$self->get("defaultValue") - || $self->get("defaultValue") =~ m/^\d+$/ - || !$self->get("value") - || $self->get("value") =~ m/^\d+$/) { - # Epoch format - $value = $session->datetime->epochToSet($self->getOriginalValue); - } else { - # MySQL format - $value = $self->getOriginalValue; - # NOTE: Cannot fix time zone since we don't have a complete date/time + $value = WebGUI::DateTime->new($session, $self->getOriginalValue)->toMysqlDate; } my $style = $session->style; @@ -262,25 +252,13 @@ Renders the form field to HTML as a hidden field rather than whatever field type =cut sub toHtmlAsHidden { - my $self = shift; - my $value; - - # This should probably be rewritten as a cascading ternary - if (!$self->get("defaultValue") - || $self->get("defaultValue") =~ m/^\d+$/ - || !$self->get("value") - || $self->get("value") =~ m/^\d+$/) { - $value = $self->session->datetime->epochToSet($self->getOriginalValue,"%z"); - } else { - # MySQL format - $value = $self->getOriginalValue; - # NOTE: Cannot fix time zone since we don't have a complete date/time - } - - return WebGUI::Form::Hidden->new($self->session, - name => $self->get("name"), - value => $value, - )->toHtmlAsHidden; + my $self = shift; + my $session = $self->session; + my $value = WebGUI::DateTime->new($session, $self->getOriginalValue)->toMysqlDate; + return WebGUI::Form::Hidden->new($session, + name => $self->get("name"), + value => $value, + )->toHtmlAsHidden; } 1; diff --git a/lib/WebGUI/Form/DateTime.pm b/lib/WebGUI/Form/DateTime.pm index b601646f1..8a7f6b7d2 100644 --- a/lib/WebGUI/Form/DateTime.pm +++ b/lib/WebGUI/Form/DateTime.pm @@ -20,6 +20,8 @@ use WebGUI::Form::Hidden; use WebGUI::International; use WebGUI::DateTime; +my $isaEpoch = qr/^-?\d+$/; + =head1 NAME Package WebGUI::Form::DateTime @@ -139,9 +141,9 @@ sub getValue { # This should probably be rewritten as a cascading ternary my $value = $self->SUPER::getValue(@_); - if (!$self->getDefaultValue || $self->getDefaultValue =~ m/^\d+$/) { + if (!$self->getDefaultValue || $self->getDefaultValue =~ $isaEpoch) { # Epoch format - if($value =~ /^\d+$/){ + if($value =~ $isaEpoch){ return $value; } return $self->session->datetime->setToEpoch($value); @@ -150,7 +152,7 @@ sub getValue { # MySQL format # YY(YY)?-MM-DD HH:MM:SS - if($value =~ /^\d+$/){ + if($value =~ $isaEpoch){ return $self->session->datetime->epochToSet($value,$self->session->user->profileField( 'timeZone' )); } @@ -178,8 +180,10 @@ Return the date in a human readable format. sub getValueAsHtml { my ($self) = @_; # This should probably be rewritten as a cascading ternary - my $formatValue = $self->getDefaultValue || $self->getOriginalValue; - if (!$formatValue || $formatValue =~ m/^\d+$/) { + if ( !$self->get("defaultValue") + || $self->get("defaultValue") =~ $isaEpoch + || !$self->get("value") + || $self->get("value") =~ $isaEpoch) { return $self->session->datetime->epochToHuman($self->getOriginalValue,"%z %Z"); } else { @@ -216,22 +220,10 @@ Renders a date picker control. sub toHtml { my $self = shift; my $session = $self->session; - my $value; - # This should probably be rewritten as a cascading ternary - if (!$self->get("defaultValue") - || $self->get("defaultValue") =~ m/^\d+$/ - || !$self->get("value") - || $self->get("value") =~ m/^\d+$/) { - # Epoch format - $value = $session->datetime->epochToSet($self->getOriginalValue,1); - } else { - # MySQL format - $value = $self->getOriginalValue; - # Fix time zone - $value = WebGUI::DateTime->new($session, mysql => $value) - ->set_time_zone($self->get("timeZone")) - ->strftime("%Y-%m-%d %H:%M:%S"); - } + my $value = WebGUI::DateTime->new($session, $self->getOriginalValue) + ->set_time_zone($self->get("timeZone")) + ->strftime("%Y-%m-%d %H:%M:%S"); + my $style = $session->style; my $url = $session->url; $style->setLink($url->extras('yui/build/calendar/assets/skins/sam/calendar.css'), { rel=>"stylesheet", type=>"text/css", media=>"all" }); @@ -245,12 +237,12 @@ sub toHtml { $style->setScript($url->extras('yui-webgui/build/datepicker/datepicker.js'),{ type => 'text/javascript' }); return WebGUI::Form::Text->new($self->session, - name=>$self->get("name"), - value=>$value, - size=>$self->get("size"), - extras=>$self->get("extras") . ' onfocus="YAHOO.WebGUI.Form.DatePicker.display(this, true);"', - id=>$self->get('id'), - maxlength=>$self->get("maxlength") + name => $self->get("name"), + value => $value, + size => $self->get("size"), + extras => $self->get("extras") . ' onfocus="YAHOO.WebGUI.Form.DatePicker.display(this, true);"', + id => $self->get('id'), + maxlength => $self->get("maxlength") )->toHtml; } @@ -263,28 +255,15 @@ Renders the form field to HTML as a hidden field rather than whatever field type =cut sub toHtmlAsHidden { - my $self = shift; - my $value; + my $self = shift; + my $value = WebGUI::DateTime->new($self->session, $self->getOriginalValue) + ->set_time_zone($self->get("timeZone")) + ->strftime("%Y-%m-%d %H:%M:%S"); - # This should probably be rewritten as a cascading ternary - if (!$self->get("defaultValue") - || $self->get("defaultValue") =~ m/^\d+$/ - || !$self->get("value") - || $self->get("value") =~ m/^\d+$/) { - $value = $self->session->datetime->epochToSet($self->getOriginalValue,1); - } else { - # MySQL format - $value = $self->getOriginalValue; - # 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 WebGUI::Form::Hidden->new( - name => $self->get("name"), - value => $value, - )->toHtmlAsHidden; + return WebGUI::Form::Hidden->new($self->session, + name => $self->get("name"), + value => $value, + )->toHtmlAsHidden; } 1; diff --git a/lib/WebGUI/i18n/English/Asset_Navigation.pm b/lib/WebGUI/i18n/English/Asset_Navigation.pm index ec0c9dc9e..605e6abb6 100644 --- a/lib/WebGUI/i18n/English/Asset_Navigation.pm +++ b/lib/WebGUI/i18n/English/Asset_Navigation.pm @@ -544,8 +544,8 @@ be useful, others may not.|, }, 'assetsToInclude' => { - message => q|A newline separated string containg the kids of assets to include in the Navigation, by relationship. Ancestors, the asset itself, siblings, descendants and/or pedigree.|, - lastUpdated => 1253162657, + message => q|A newline separated string containing the kids of assets to include in the Navigation, by relationship. Ancestors, the asset itself, siblings, descendants and/or pedigree.|, + lastUpdated => 1254329336, }, 'startType' => { diff --git a/t/Asset/Wobject/Thingy.t b/t/Asset/Wobject/Thingy.t index e13b38123..0844c2b77 100644 --- a/t/Asset/Wobject/Thingy.t +++ b/t/Asset/Wobject/Thingy.t @@ -16,7 +16,7 @@ use lib "$FindBin::Bin/../../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 26; # increment this value for each test you create +use Test::More tests => 28; # increment this value for each test you create use Test::Deep; use JSON; use WebGUI::Asset::Wobject::Thingy; @@ -373,28 +373,51 @@ is($table, undef, '... drops thing specific table'); # ################################################################# -%otherThingProperties = %thingProperties; -$otherThingProperties{'groupIdView'} = 3; -$otherThingId = $thingy->addThing(\%otherThingProperties, 0); -%otherFieldProperties = %fieldProperties; -$otherFieldProperties{thingId} = $otherThingId; -$otherFieldId = $thingy->addField(\%otherFieldProperties, 0); -$thingy->editThingDataSave($otherThingId, 'new', {"field_".$otherFieldId => 'value 1'} ); -$thingy->editThingDataSave($otherThingId, 'new', {"field_".$otherFieldId => 'value 2'} ); -$thingy->editThingDataSave($otherThingId, 'new', {"field_".$otherFieldId => 'value 3'} ); +{ + my %newThingProperties = %thingProperties; + $newThingProperties{'groupIdView'} = 3; + my $newThingId = $thingy->addThing(\%newThingProperties, 0); + my %newFieldProperties = %fieldProperties; + $newFieldProperties{thingId} = $newThingId; + my $newFieldId = $thingy->addField(\%newFieldProperties, 0); + $thingy->editThingDataSave($newThingId, 'new', {"field_".$newFieldId => 'value 1'} ); + $thingy->editThingDataSave($newThingId, 'new', {"field_".$newFieldId => 'value 2'} ); + $thingy->editThingDataSave($newThingId, 'new', {"field_".$newFieldId => 'value 3'} ); -my $andy = WebGUI::User->create($session); -WebGUI::Test->usersToDelete($andy); -$session->user({userId => $andy->userId}); + my $andy = WebGUI::User->create($session); + WebGUI::Test->usersToDelete($andy); + $session->user({userId => $andy->userId}); -my $form = $thingy->getFormPlugin({ - name => 'fakeFormForTesting', - fieldType => 'otherThing_'.$otherThingId, - fieldInOtherThingId => $otherFieldId, -}); + my $form = $thingy->getFormPlugin({ + name => 'fakeFormForTesting', + fieldType => 'otherThing_'.$newThingId, + fieldInOtherThingId => $newFieldId, + }); + + cmp_deeply( + $form->get('options'), + {}, + 'getFormPlugin: form has no data since the user does not have viewing privileges' + ); +} + +################################################################# +# +# getFieldValue +# +################################################################# +{ + my %newThingProperties = %thingProperties; + my $newThingId = $thingy->addThing(\%newThingProperties, 0); + my %newFieldProperties = %fieldProperties; + $newFieldProperties{thingId} = $newThingId; + $newFieldProperties{fieldType} = 'Date'; + + my $date = $thingy->getFieldValue(WebGUI::Test->webguiBirthday, \%newFieldProperties); + like($date, qr{\d+/\d+/\d+}, "getFieldValue: Date field type returns data in user's format"); + + $newFieldProperties{fieldType} = 'DateTime'; + my $datetime = $thingy->getFieldValue(WebGUI::Test->webguiBirthday, \%newFieldProperties); + like($datetime, qr{^\d+/\d+/\d+\s+\d+:\d+}, "... DateTime field also returns data in user's format"); +} -cmp_deeply( - $form->get('options'), - {}, - 'getFormPlugin: form has no data since the user does not have viewing privileges' -); diff --git a/t/DateTime.t b/t/DateTime.t index 74e44f85e..9834dad58 100644 --- a/t/DateTime.t +++ b/t/DateTime.t @@ -14,29 +14,25 @@ use lib "$FindBin::Bin/lib"; use WebGUI::Test; use WebGUI::Session; use WebGUI::User; +use DateTime; +use WebGUI::DateTime; # load your modules here use Test::More; +use Test::Deep; my $session = WebGUI::Test->session; # put your tests here -my $numTests = 1 + 17; -plan tests => $numTests; - -my $loaded = use_ok("WebGUI::DateTime"); +plan tests => 23; my $timeZoneUser = addUser($session); -SKIP: { - -skip "Unable to load WebGUI::DateTime", $numTests-1 unless $loaded; - my $dt = WebGUI::DateTime->new($session,"2006-11-06 21:12:45"); -isa_ok($dt, "WebGUI::DateTime", "constructor"); +isa_ok($dt, "WebGUI::DateTime", "constructor via epoch"); isa_ok($dt, "DateTime", "constructor"); is($dt->toDatabase, "2006-11-06 21:12:45", "toDatabase returns the identical string since it is in UTC"); @@ -67,7 +63,18 @@ is($copiedDt->toUserTimeZone(), "2006-11-06 15:12:45", "add returns the correct my $epochDt = WebGUI::DateTime->new($session, "1169141075"); isa_ok($epochDt, "WebGUI::DateTime", "epochal construction"); -} +my $now; +my $nowDt = WebGUI::DateTime->new($session); +isa_ok($nowDt, 'WebGUI::DateTime', 'constructed with undef'); +cmp_deeply($nowDt->epoch, num(time(),5), '... uses now as the epoch'); + +$nowDt = WebGUI::DateTime->new($session, ''); +isa_ok($nowDt, 'WebGUI::DateTime', 'constructed with empty string'); +cmp_deeply($nowDt->epoch, num(time(),5), '... uses now as the epoch'); + +my $dt1970 = WebGUI::DateTime->new($session, 0); +isa_ok($dt1970, 'WebGUI::DateTime', 'constructed with 0'); +is($dt1970->epoch, 0, '... uses 0 for epoch'); sub addUser { my $session = shift; @@ -80,7 +87,3 @@ sub addUser { WebGUI::Test->usersToDelete($user); return $user; } - -END { ##Clean-up after yourself, always -} - diff --git a/t/Form/Date.t b/t/Form/Date.t index 24003b336..6e2ef04fa 100644 --- a/t/Form/Date.t +++ b/t/Form/Date.t @@ -36,15 +36,21 @@ my $testBlock = [ }, { key => 'Date2', - testValue => "2008-08-01 16:34:26", - expected => $session->datetime->setToEpoch("2008-08-01 16:34:26"),#must call this so that value is appropriate for testers timezone + testValue => "2008-08-01", + expected => $session->datetime->setToEpoch("2008-08-01"),#must call this so that value is appropriate for testers timezone comment => 'MySQL formatted to epoch', }, + { + key => 'Date3', + testValue => '-1', + expected => '-1', + comment => 'negative epoch to negative epoch', + }, ]; my $formType = 'date'; -my $numTests = 16 + scalar @{ $testBlock } ; +my $numTests = 25 + scalar @{ $testBlock } ; plan tests => $numTests; @@ -73,10 +79,11 @@ my $input = $inputs[1]; is($input->name, 'TestDate', 'Checking input name'); is($input->type, 'text', 'Checking input type'); -TODO: { - local $TODO = "Figure out why this is returning a MySQL value instead of an epoch."; - is($input->value, $defaultTime, "Checking default value"); -} +is( + $input->value, + WebGUI::DateTime->new($session, $defaultTime)->toMysqlDate, + "Checking default value" +); is($input->{size}, 10, 'Checking size param, default'); is($input->{maxlength}, 10, 'Checking maxlength param, default'); @@ -97,10 +104,6 @@ $html = join "\n", @inputs = $forms[0]->inputs; $input = $inputs[1]; is($input->name, 'preDateValue', 'Checking input name'); -TODO: { - local $TODO = "Figure out why this is returning a MySQL value instead of an epoch."; - is($input->value, 1217608466, 'Checking default value'); -} is($input->{size}, 10, 'Checking size param, set'); is($input->{maxlength}, 10, 'Checking maxlength param, set'); @@ -110,13 +113,50 @@ WebGUI::Form_Checking::auto_check($session, $formType, $testBlock); #Dates to MySQL -my $date2 = WebGUI::Form::Date->new($session, {'defaultValue' => '2008-08-01 16:34:26'}); -is($date2->getValue(1217608466), '2008-08-01 11:34:26', "Epoch to MySQL"); -is($date2->getValue('2008-08-01 11:34:26'), '2008-08-01 11:34:26', "MySQL to MySQL"); +my $date2; +$date2 = WebGUI::Form::Date->new($session, {'defaultValue' => '2008-08-01 16:34:26'}); +is($date2->getValue(1217608466), '2008-08-01 11:34:26', "getValue, defaultValue MySQL format: Epoch to MySQL"); +is($date2->getValue('2008-08-01'), '2008-08-01', "... MySQL to MySQL"); +is($date2->getValue(-1), '1969-12-31 17:59:59', "... Negative epoch to MySQL"); -my $date2 = WebGUI::Form::Date->new($session); -is($date2->getValue(1217608466), 1217608466, "Default Epoch to Epoch"); -is($date2->getValue('2008-08-01 11:34:26'), 1217608466, "Default MySQL to Epoch"); +$date2 = WebGUI::Form::Date->new($session); +is($date2->getValue(1217608466), 1217608466, "getValue, no default: Default Epoch to Epoch"); +is($date2->getValue('2008-08-01'), 1217566800, "... Default MySQL to Epoch"); +is($date2->getValue(-1), -1, "... Default negative epoch to negative epoch"); -__END__ +my $bday = WebGUI::Test->webguiBirthday; +$date2 = WebGUI::Form::Date->new($session); +is($date2->getValueAsHtml(), $session->datetime->epochToHuman($date2->getDefaultValue,'%z'), "getValueAsHtml: no defaultValue set, no value set, returns now in user's format"); + +$date2 = WebGUI::Form::Date->new($session, {defaultValue => 1217608466}); +is($date2->getValueAsHtml(), '8/1/2008', "getValueAsHtml: defaultValue in epoch format, returns now in user's format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '2008-08-01', + "toHtmlAsHidden: defaultValue in epoch format, returns date in mysql format" +); +is( + getValueFromForm($session, $date2->toHtml), + '2008-08-01', + "toHtml: defaultValue in epoch format, returns date in mysql format" +); +$date2 = WebGUI::Form::Date->new($session, {defaultValue => -1}); +is($date2->getValueAsHtml(), '12/31/1969', "getValueAsHtml: defaultValue as negative epoch, returns in users's format"); + +$date2 = WebGUI::Form::Date->new($session, {defaultValue => '2008-08-01'}); +is($date2->getValueAsHtml(), '2008-08-01', "getValueAsHtml: defaultValue in mysql format, returns default value in mysql format"); + +$date2 = WebGUI::Form::Date->new($session, {defaultValue => '2008-08-01', value => $bday, }); +is($date2->getValueAsHtml(), '8/16/2001', "getValueAsHtml: defaultValue in mysql format, value as epoch returns value in user's format"); + +$date2 = WebGUI::Form::Date->new($session, {defaultValue => '2008-08-01', value => '2001-08-16', }); +is($date2->getValueAsHtml(), '2001-08-16', "getValueAsHtml: defaultValue in mysql format, value as mysql returns value in mysql format"); + +sub getValueFromForm { + my ($session, $textForm) = @_; + my ($header, $footer) = (WebGUI::Form::formHeader($session), WebGUI::Form::formFooter($session)); + my @forms = HTML::Form->parse($header.$textForm.$footer, 'http://www.webgui.org'); + my @inputs = $forms[0]->inputs; + return $inputs[1]->{value}; +} diff --git a/t/Form/DateTime.t b/t/Form/DateTime.t index db2fdfaad..8b9365659 100644 --- a/t/Form/DateTime.t +++ b/t/Form/DateTime.t @@ -29,7 +29,7 @@ my $session = WebGUI::Test->session; my $formType = 'datetime'; -my $numTests = 15; +my $numTests = 34; plan tests => $numTests; @@ -82,23 +82,111 @@ is($input->name, 'preDateValue', 'Checking input name'); is($input->{size}, 19, 'Checking size param, set'); is($input->{maxlength}, 19, 'Checking maxlength param, set'); -##Test Form Output parsing -#Dates to Epoch -#WebGUI::Form_Checking::auto_check($session, $formType, $testBlock); +######################################### +# +# getValue +# +######################################### my $date1 = WebGUI::Form::DateTime->new($session, {'defaultValue' => time()}); $session->user->profileField( 'timeZone' , 'America/Chicago'); -is($date1->getValue(1217608466), 1217608466, "Epoch to Epch"); -is($date1->getValue('2008-08-01 16:34:26'), $session->datetime->setToEpoch("2008-08-01 16:34:26"), "MySQL to Epoch"); +is($date1->getValue(1217608466), 1217608466, "getValue, defaultValue epoch: Epoch to Epch"); +is($date1->getValue('2008-08-01 16:34:26'), 1217626466, "... MySQL to Epoch"); +is($date1->getValue(-1), -1, "... negative epoch to epoch"); my $date2 = WebGUI::Form::DateTime->new($session); -is($date2->getValue(1217608466), 1217608466, "Default Epoch to Epch"); -is($date2->getValue('2008-08-01 16:34:26'), $session->datetime->setToEpoch("2008-08-01 16:34:26"), "Default MySQL to Epoch"); +is($date2->getValue(1217608466), 1217608466, "getValue, no default: Default Epoch to Epch"); +is($date2->getValue('2008-08-01 16:34:26'), 1217626466, "... Default MySQL to Epoch"); +is($date2->getValue(-1), -1, "... negative epoch to epoch"); #Dates to MySQL my $date3 = WebGUI::Form::DateTime->new($session, {'defaultValue' => '2008-08-01 16:34:26'}); -is($date3->getValue(1217608466), '2008-08-01 11:34:26', "Epoch to MySQL"); -is($date3->getValue('2008-08-01 11:34:26'), '2008-08-01 16:34:26', "MySQL to MySQL");#UTC is 5 hours ahead of Chicago +is($date3->getValue(1217608466), '2008-08-01 11:34:26', "getValue, defaultValue is mysql, epoch to mySQL"); +is($date3->getValue('2008-08-01 11:34:26'), '2008-08-01 16:34:26', "... MySQL to MySQL");#UTC is 5 hours ahead of Chicago +is($date3->getValue(-1), '1969-12-31 17:59:59', "... negative epoch to mysql"); -__END__ +######################################### +# +# getValueAsHtml +# +######################################### +my $bday = WebGUI::Test->webguiBirthday; + +$date2 = WebGUI::Form::DateTime->new($session); +is($date2->getValueAsHtml(), $session->datetime->epochToHuman($date2->getDefaultValue,'%z %Z'), "getValueAsHtml: no defaultValue set, no value set, returns now in user's format"); + +$date2 = WebGUI::Form::DateTime->new($session, {defaultValue => 1217608466}); +is($date2->getValueAsHtml(), '8/1/2008 11:34 am', "getValueAsHtml: defaultValue in epoch format, returns now in user's format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '2008-08-01 11:34:26', + "toHtmlAsHidden: defaultValue in mysql format, returns date in mysql format" +); +is( + getValueFromForm($session, $date2->toHtml), + '2008-08-01 11:34:26', + "toHtml: defaultValue in mysql format, returns date in mysql format" +); + +$date2 = WebGUI::Form::DateTime->new($session, {defaultValue => -1}); +is($date2->getValueAsHtml(), '12/31/1969 5:59 pm', "getValueAsHtml: defaultValue as negative epoch, returns as user's format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '1969-12-31 17:59:59', + "toHtmlAsHidden: defaultValue as negative epoch, returns date/time in mysql format" +); +is( + getValueFromForm($session, $date2->toHtml), + '1969-12-31 17:59:59', + "toHtml: defaultValue in mysql format, returns date in mysql format" +); + + +$date2 = WebGUI::Form::DateTime->new($session, {defaultValue => '2008-08-01 11:34:26'}); +is($date2->getValueAsHtml(), '2008-08-01 06:34:26', "getValueAsHtml: defaultValue in mysql format, returns default value in mysql format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '2008-08-01 06:34:26', + "toHtmlAsHidden: defaultValue in mysql format, returns date in mysql format" +); +is( + getValueFromForm($session, $date2->toHtml), + '2008-08-01 06:34:26', + "toHtml: defaultValue in mysql format, returns date in mysql format" +); + + +$date2 = WebGUI::Form::DateTime->new($session, {defaultValue => '2008-08-01 11:34:26', value => $bday, }); +is($date2->getValueAsHtml(), '8/16/2001 8:00 am', "getValueAsHtml: defaultValue in mysql format, value as epoch returns value in user's format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '2001-08-16 08:00:00', + "toHtmlAsHidden: defaultValue in mysql format, value as epoch returns date in mysql format" +); +is( + getValueFromForm($session, $date2->toHtml), + '2001-08-16 08:00:00', + "toHtml: defaultValue in mysql format, value as epoch returns date in mysql format" +); + +$date2 = WebGUI::Form::DateTime->new($session, {defaultValue => '2008-08-01 11:34:26', value => '2001-08-16 13:00:00', }); +is($date2->getValueAsHtml(), '2001-08-16 08:00:00', "getValueAsHtml: defaultValue in mysql format, value as mysql returns value in mysql format"); +is( + getValueFromForm($session, $date2->toHtmlAsHidden), + '2001-08-16 08:00:00', + "toHtmlAsHidden: defaultValue in mysql format, value as mysql returns date in mysql format, adjusted for time zone" +); +is( + getValueFromForm($session, $date2->toHtml), + '2001-08-16 08:00:00', + "toHtml: defaultValue in mysql format, value as mysql returns date in mysql format, adjusted for time zone" +); + +sub getValueFromForm { + my ($session, $textForm) = @_; + my ($header, $footer) = (WebGUI::Form::formHeader($session), WebGUI::Form::formFooter($session)); + my @forms = HTML::Form->parse($header.$textForm.$footer, 'http://www.webgui.org'); + my @inputs = $forms[0]->inputs; + return $inputs[1]->{value}; +} diff --git a/www/extras/yui-webgui/build/assetManager/assetManager.js b/www/extras/yui-webgui/build/assetManager/assetManager.js index 2cbfac8dd..423c7ff56 100644 --- a/www/extras/yui-webgui/build/assetManager/assetManager.js +++ b/www/extras/yui-webgui/build/assetManager/assetManager.js @@ -114,7 +114,7 @@ WebGUI.AssetManager.formatActions = function ( elCell, oRecord, oColumn, orderNu var menu = new YAHOO.widget.Menu( "moreMenu" + oRecord.getData( 'assetId' ), options ); YAHOO.util.Event.onDOMReady( function () { menu.render( document.getElementById( 'assetManager' ) ) } ); - YAHOO.util.Event.addListener( more, "click", function (e) { menu.show(); menu.focus(); YAHOO.util.Event.stopEvent(e); }, null, menu ); + YAHOO.util.Event.addListener( more, "click", function (e) { YAHOO.util.Event.stopEvent(e); menu.show(); menu.focus(); }, null, menu ); }; /*--------------------------------------------------------------------------- @@ -156,8 +156,8 @@ WebGUI.AssetManager.formatLockedBy = function ( elCell, oRecord, oColumn, orderN + 'title="' + WebGUI.AssetManager.i18n.get('WebGUI', 'locked by') + ' ' + oRecord.getData( 'lockedBy' ) + '" border="0" />' + '' : '' - + '' + WebGUI.AssetManager.i18n.get('WebGUI', 'unlocked') + '' + + '' + WebGUI.AssetManager.i18n.get('Asset', 'unlocked') + '' + '' ; };