diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 60e54aab5..25b07a61c 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -2,7 +2,8 @@ - fixed: The indent loop of the Navigation wobject has an incorrect number of iterations in some cases. (Martin Kamerbeek / Oqapi) - fixed: Thingy: Setting the size of a field has no effect - + - fixed: Form/* now all use getOriginalValue (split off from getDefaultValue) which resolves the Layout bug not being able to uncheck all hidden assets. + Tests were updated, but need are still lacking and need a major overhaul. 7.5.19 - fixed: paginator doesn't show correct number of page links with a limit applied - fixed: user profile defaults can contain arbitrary perl code diff --git a/lib/WebGUI/Form/Asset.pm b/lib/WebGUI/Form/Asset.pm index 3d9409392..07a90277a 100644 --- a/lib/WebGUI/Form/Asset.pm +++ b/lib/WebGUI/Form/Asset.pm @@ -118,7 +118,8 @@ Formats as a link. sub getValueAsHtml { my $self = shift; - my $asset = WebGUI::Asset->newByDynamicClass($self->session,$self->getDefaultValue); +# my $asset = WebGUI::Asset->newByDynamicClass($self->session,$self->getDefaultValue); + my $asset = WebGUI::Asset->newByDynamicClass($self->session,$self->getOriginalValue); if (defined $asset) { return ''.$asset->getTitle.''; } @@ -148,7 +149,7 @@ Renders an asset selector. sub toHtml { my $self = shift; - my $asset = WebGUI::Asset->newByDynamicClass($self->session, $self->getDefaultValue) || WebGUI::Asset->getRoot($self->session); + my $asset = WebGUI::Asset->newByDynamicClass($self->session, $self->getOriginalValue) || WebGUI::Asset->getRoot($self->session); my $url = $asset->getUrl("op=formHelper;sub=assetTree;class=Asset;formId=".$self->get('id')); $url .= ";classLimiter=".$self->get("class") if ($self->get("class")); return WebGUI::Form::Hidden->new($self->session, diff --git a/lib/WebGUI/Form/Attachments.pm b/lib/WebGUI/Form/Attachments.pm index ce555d53a..a2840599e 100644 --- a/lib/WebGUI/Form/Attachments.pm +++ b/lib/WebGUI/Form/Attachments.pm @@ -148,7 +148,7 @@ Renders an attachments control. sub toHtml { my $self = shift; - my @assetIds = @{$self->getDefaultValue}; + my @assetIds = @{$self->getOriginalValue}; my $thumbnail = $self->get("thumbnailSize") || $self->session->setting->get("thumbnailSize"); my $image = $self->get("maxImageSize") || $self->session->setting->get("maxImageSize"); my $attachmentsList = "attachments=".join(";attachments=", @assetIds) if (scalar(@assetIds)); diff --git a/lib/WebGUI/Form/Button.pm b/lib/WebGUI/Form/Button.pm index 6642db7c9..c89473be1 100644 --- a/lib/WebGUI/Form/Button.pm +++ b/lib/WebGUI/Form/Button.pm @@ -88,7 +88,7 @@ Renders a button. sub toHtml { my $self = shift; - my $value = $self->fixQuotes($self->getDefaultValue); + my $value = $self->fixQuotes($self->getOriginalValue); my $html = 'get("name").'" ' if ($self->get("name")); $html .= 'id="'.$self->get('id').'" ' unless ($self->get('id') eq "_formId"); diff --git a/lib/WebGUI/Form/CheckList.pm b/lib/WebGUI/Form/CheckList.pm index 62ba6001f..6959081a8 100644 --- a/lib/WebGUI/Form/CheckList.pm +++ b/lib/WebGUI/Form/CheckList.pm @@ -148,7 +148,7 @@ sub toHtml { my $options = $self->getOptions; foreach my $key (keys %{$options}) { $i++; - my @values = $self->getDefaultValue; + my @values = $self->getOriginalValue; my $checked = (grep { $_ eq $key } @values) ? 1 : 0 diff --git a/lib/WebGUI/Form/Checkbox.pm b/lib/WebGUI/Form/Checkbox.pm index fc827f5d5..acaf31188 100644 --- a/lib/WebGUI/Form/Checkbox.pm +++ b/lib/WebGUI/Form/Checkbox.pm @@ -118,7 +118,7 @@ Renders and input tag of type checkbox. sub toHtml { my $self = shift; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; $value = defined $value ? $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($value))) : ''; my $checkedText = $self->get("checked") ? ' checked="checked"' : ''; my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : ''; diff --git a/lib/WebGUI/Form/Color.pm b/lib/WebGUI/Form/Color.pm index a0fc1e8a3..482369dac 100644 --- a/lib/WebGUI/Form/Color.pm +++ b/lib/WebGUI/Form/Color.pm @@ -117,7 +117,7 @@ sub toHtml { $style->setLink($url->extras('/colorpicker/colorpicker.css'),{ type=>'text/css', rel=>"stylesheet" }); $style->setScript($url->extras('/colorpicker/colorpicker.js'),{ type=>'text/javascript' }); my $id = $self->get("id"); - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; my $name = $self->get("name"); return qq{ get("value"); return $value if (defined $value); + return $self->getDefaultValue(); +} +#------------------------------------------------------------------- + +=head2 getDefaultValue ( ) + +Returns the "defaultValue" passed in to the object in that order + +=cut + +sub getDefaultValue { + my $self = shift; return $self->get("defaultValue"); } @@ -660,7 +672,7 @@ Renders the form field to HTML. This method should be overridden by all subclass sub toHtml { my $self = shift; - return $self->get("value"); + return $self->getOriginalValue(); } #------------------------------------------------------------------- @@ -673,7 +685,8 @@ Renders the form field to HTML as a hidden field rather than whatever field type sub toHtmlAsHidden { my $self = shift; - return ''."\n"; + return ''."\n"; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Form/DatabaseLink.pm b/lib/WebGUI/Form/DatabaseLink.pm index 6651d1bb2..e92a82d2b 100644 --- a/lib/WebGUI/Form/DatabaseLink.pm +++ b/lib/WebGUI/Form/DatabaseLink.pm @@ -170,7 +170,7 @@ sub toHtmlWithWrapper { if ($self->session->user->isInGroup(3)) { my $subtext; if ($self->get("afterEdit")) { - $subtext = $self->session->icon->edit("op=editDatabaseLink;lid=".$self->getDefaultValue.";afterEdit=".$self->session->url->escape($self->get("afterEdit"))); + $subtext = $self->session->icon->edit("op=editDatabaseLink;lid=".$self->getOriginalValue.";afterEdit=".$self->session->url->escape($self->get("afterEdit"))); } $subtext .= $self->session->icon->manage("op=listDatabaseLinks"); $self->set("subtext", $subtext . $self->get("subtext")); diff --git a/lib/WebGUI/Form/Date.pm b/lib/WebGUI/Form/Date.pm index e7a3526ff..1f18905e3 100644 --- a/lib/WebGUI/Form/Date.pm +++ b/lib/WebGUI/Form/Date.pm @@ -54,11 +54,11 @@ The following additional parameters have been added via this sub class. =head4 maxlength -Defaults to 10. Determines the maximum number of characters allowed in this field. +Originals to 10. Determines the maximum number of characters allowed in this field. =head4 size -Defaults to 10. The displayed size of the box for the date to be typed in. +Originals to 10. The displayed size of the box for the date to be typed in. =head4 noDate @@ -66,7 +66,7 @@ A default date is placed in the value field. Set this to "1" to leave it empty. =head4 defaultValue -If no value is specified, this will be used. Defaults to today and now. +If no value is specified, this will be used. Originals to today and now. If the defaultValue is a MySQL date string, this form control will return MySQL date strings instead of epoch times. @@ -179,11 +179,11 @@ sub getValueAsHtml { || $self->get("defaultValue") =~ m/^\d+$/ || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { - return $self->session->datetime->epochToHuman($self->getValue,"%z"); + return $self->session->datetime->epochToHuman($self->getOriginalValue,"%z"); } else { # MySQL format - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; return $value; } } @@ -221,11 +221,11 @@ sub toHtml { || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { # Epoch format - $value = $self->set("value",$self->session->datetime->epochToSet($self->getDefaultValue)); + $value = $self->set("value",$self->session->datetime->epochToSet($self->getOriginalValue)); } else { # MySQL format - $value = $self->getDefaultValue; + $value = $self->getOriginalValue; # NOTE: Cannot fix time zone since we don't have a complete date/time } @@ -265,10 +265,10 @@ sub toHtmlAsHidden { || $self->get("defaultValue") =~ m/^\d+$/ || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { - $value = $self->session->datetime->epochToSet($self->getDefaultValue,"%z"); + $value = $self->session->datetime->epochToSet($self->getOriginalValue,"%z"); } else { # MySQL format - $value = $self->getDefaultValue; + $value = $self->getOriginalValue; # NOTE: Cannot fix time zone since we don't have a complete date/time } diff --git a/lib/WebGUI/Form/DateTime.pm b/lib/WebGUI/Form/DateTime.pm index 1bad4194a..8a20b293c 100644 --- a/lib/WebGUI/Form/DateTime.pm +++ b/lib/WebGUI/Form/DateTime.pm @@ -182,11 +182,11 @@ sub getValueAsHtml { || $self->get("defaultValue") =~ m/^\d+$/ || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { - return $self->session->datetime->epochToHuman($self->getDefaultValue,"%z %Z"); + return $self->session->datetime->epochToHuman($self->getOriginalValue,"%z %Z"); } else { # MySQL format - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; # Fix time zone $value = WebGUI::DateTime->new($self->session, mysql => $value) ->set_time_zone($self->get("timeZone")) @@ -224,10 +224,10 @@ sub toHtml { || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { # Epoch format - $value = $self->session->datetime->epochToSet($self->getDefaultValue,1); + $value = $self->session->datetime->epochToSet($self->getOriginalValue,1); } else { # MySQL format - $value = $self->getDefaultValue; + $value = $self->getOriginalValue; # Fix time zone $value = WebGUI::DateTime->new($self->session, mysql => $value) ->set_time_zone($self->get("timeZone")) @@ -269,10 +269,10 @@ sub toHtmlAsHidden { || $self->get("defaultValue") =~ m/^\d+$/ || !$self->get("value") || $self->get("value") =~ m/^\d+$/) { - $value = $self->session->datetime->epochToSet($self->getDefaultValue,1); + $value = $self->session->datetime->epochToSet($self->getOriginalValue,1); } else { # MySQL format - $value = $self->getDefaultValue; + $value = $self->getOriginalValue; # Fix Time zone $value = WebGUI::DateTime->new($self->session, mysql => $value) ->set_time_zone($self->get("timeZone")) diff --git a/lib/WebGUI/Form/Email.pm b/lib/WebGUI/Form/Email.pm index 1c0eeb75a..c4cb15670 100644 --- a/lib/WebGUI/Form/Email.pm +++ b/lib/WebGUI/Form/Email.pm @@ -81,7 +81,7 @@ Formats as an email link. sub getValueAsHtml { my $self = shift; - my $email = $self->getDefaultValue; + my $email = $self->getOriginalValue; return ''.$email.''; } diff --git a/lib/WebGUI/Form/File.pm b/lib/WebGUI/Form/File.pm index e61f61911..a5a22fb1b 100644 --- a/lib/WebGUI/Form/File.pm +++ b/lib/WebGUI/Form/File.pm @@ -154,7 +154,7 @@ Returns the WebGUI::Storage object for this control. sub getStorageLocation { my $self = shift; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; my $storage = WebGUI::Storage->get($self->session, $value) if ( defined $value ); return $storage; } @@ -210,7 +210,7 @@ Displays the file as a link. sub getValueAsHtml { my ($self) = @_; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; return '' unless $value; my $location = WebGUI::Storage->get($self->session,$value); my $file = shift @{ $location->getFiles }; @@ -274,7 +274,7 @@ sub toHtml { else { $uploadControl .= WebGUI::Form::Hidden->new($self->session, { name => $self->get("name"), - value => $self->getDefaultValue, + value => $self->getOriginalValue, id => $self->get("id") })->toHtml()."
"; $uploadControl .= WebGUI::Form::Hidden->new($self->session, { diff --git a/lib/WebGUI/Form/Group.pm b/lib/WebGUI/Form/Group.pm index 1a1e79a1e..dd500ec31 100644 --- a/lib/WebGUI/Form/Group.pm +++ b/lib/WebGUI/Form/Group.pm @@ -133,7 +133,7 @@ Formats as a name. sub getValueAsHtml { my $self = shift; - my $group = WebGUI::Group->new($self->session, $self->getDefaultValue); + my $group = WebGUI::Group->new($self->session, $self->getOriginalValue); if (defined $group) { return $group->name; } diff --git a/lib/WebGUI/Form/Hidden.pm b/lib/WebGUI/Form/Hidden.pm index 18f10a8f9..cc2db8846 100644 --- a/lib/WebGUI/Form/Hidden.pm +++ b/lib/WebGUI/Form/Hidden.pm @@ -97,7 +97,7 @@ Renders an input tag of type hidden. sub toHtmlAsHidden { my $self = shift; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; $value = defined $value ? $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($value))) : ''; my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : ''; return 'get("extras")||'').$idText.' />'."\n"; diff --git a/lib/WebGUI/Form/Image.pm b/lib/WebGUI/Form/Image.pm index 9a2a0a630..8b27bf5d5 100644 --- a/lib/WebGUI/Form/Image.pm +++ b/lib/WebGUI/Form/Image.pm @@ -132,7 +132,7 @@ Returns the WebGUI::Storage object for this control. sub getStorageLocation { my $self = shift; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; my $storage = WebGUI::Storage::Image->get($self->session, $value) if ($value); return $storage; } @@ -181,7 +181,7 @@ Displays the image using an img tag. sub getValueAsHtml { my ($self) = @_; - my $value = $self->getDefaultValue; + my $value = $self->getOriginalValue; return '' unless $value; my $location = WebGUI::Storage::Image->get($self->session, $value); my $file = shift @{ $location->getFiles }; diff --git a/lib/WebGUI/Form/IntSlider.pm b/lib/WebGUI/Form/IntSlider.pm index 47d1d8a95..329751635 100644 --- a/lib/WebGUI/Form/IntSlider.pm +++ b/lib/WebGUI/Form/IntSlider.pm @@ -89,7 +89,7 @@ sub getInputElement { return WebGUI::Form::Integer($self->session, { name => $self->get('name'), - value => $self->get('value'), + value => $self->getValue(), size => $self->get('size'), id => 'view-'.$self->get('id'), }); diff --git a/lib/WebGUI/Form/Interval.pm b/lib/WebGUI/Form/Interval.pm index f7f693a61..b062b3709 100644 --- a/lib/WebGUI/Form/Interval.pm +++ b/lib/WebGUI/Form/Interval.pm @@ -149,7 +149,7 @@ sub toHtml { 'weeks'=>$i18n->get(701), 'months'=>$i18n->get(702), 'years'=>$i18n->get(703)); - my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getDefaultValue); + my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getOriginalValue); # not sure why, but these things need to be defined like this or # they fail under some circumstnaces my $cmd = "WebGUI::Form::Integer"; @@ -180,7 +180,7 @@ Returns the field as hidden controls rather than displayable controls. sub toHtmlAsHidden { my $self = shift; - my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getDefaultValue); + my ($interval, $units) = $self->session->datetime->secondsToInterval($self->getOriginalValue); return WebGUI::Form::Hidden->new($self->session, name=>$self->get("name").'_interval', value=>$interval diff --git a/lib/WebGUI/Form/LdapLink.pm b/lib/WebGUI/Form/LdapLink.pm index 87ae2e913..9fc357659 100644 --- a/lib/WebGUI/Form/LdapLink.pm +++ b/lib/WebGUI/Form/LdapLink.pm @@ -191,7 +191,7 @@ sub toHtmlWithWrapper { if ($self->session->user->isInGroup(3)) { my $subtext; if ($self->get("afterEdit")) { - $subtext = $self->session->icon->edit("op=editLDAPLink;llid=".$self->getDefaultValue.";afterEdit=".$self->session->url->escape($self->get("afterEdit"))); + $subtext = $self->session->icon->edit("op=editLDAPLink;llid=".$self->getOriginalValue.";afterEdit=".$self->session->url->escape($self->get("afterEdit"))); } $subtext .= $self->session->icon->manage("op=listLDAPLinks"); $self->set("subtext", $subtext . $self->get("subtext")); diff --git a/lib/WebGUI/Form/List.pm b/lib/WebGUI/Form/List.pm index bd6bdc740..60f0de6be 100644 --- a/lib/WebGUI/Form/List.pm +++ b/lib/WebGUI/Form/List.pm @@ -203,6 +203,7 @@ Optional values to process, instead of POST input. sub getValue { my ($self, $value) = @_; + my @values = (); if (defined $value) { if (ref $value eq "ARRAY") { @@ -236,7 +237,47 @@ Returns the either the "value" ore "defaultValue" passed in to the object in tha sub getDefaultValue { my $self = shift; my @values = (); - foreach my $value ($self->get("value"), $self->get("defaultValue")) { + + foreach my $value ($self->get('defaultValue')) { + if (scalar @values < 1 && defined $value) { + if (ref $value eq "ARRAY") { + @values = @{$value}; + } + else { + $value =~ s/\r//g; + @values = split "\n", $value; + } + } + } + return wantarray ? @values : join("\n",@values); +} + + +=head2 getOriginalValue ( ) + +Returns the either the "value" ore "defaultValue" passed in to the object in that order, and doesn't take into account form processing. + +=cut + +sub getOriginalValue { + my $self = shift; + my @values = (); + foreach my $value ($self->get("value")) { + if (scalar @values < 1 && defined $value) { + if (ref $value eq "ARRAY") { + @values = @{$value}; + } + else { + $value =~ s/\r//g; + @values = split "\n", $value; + } + } + } + if(@values){ + return wantarray ? @values : join("\n",@values); + } + + foreach my $value ($self->getDefaultValue()) { if (scalar @values < 1 && defined $value) { if (ref $value eq "ARRAY") { @values = @{$value}; @@ -261,7 +302,7 @@ Return all the options sub getValueAsHtml { my ($self) = @_; my $options = $self->getOptions; - return join ", ", map { $options->{$_} } $self->getDefaultValue; + return join ", ", map { $options->{$_} } $self->getOriginalValue; } #------------------------------------------------------------------- @@ -290,7 +331,7 @@ sub toHtmlAsHidden { my $self = shift; my $options = $self->getOptions(); my $output; - my @values = $self->getDefaultValue(); + my @values = $self->getOriginalValue(); foreach my $key (keys %{$options}) { foreach my $item (@values) { if ($item eq $key) { diff --git a/lib/WebGUI/Form/Password.pm b/lib/WebGUI/Form/Password.pm index b291e1f07..62be99b74 100644 --- a/lib/WebGUI/Form/Password.pm +++ b/lib/WebGUI/Form/Password.pm @@ -119,7 +119,7 @@ Renders an input tag of type password. sub toHtml { my $self = shift; - my $html = 'get("name").'" value="'.$self->fixQuotes($self->getOriginalValue).'" size="'.$self->get("size").'" id="'.$self->get('id').'" '; $html .= 'maxlength="'.$self->get("maxlength").'" ' if ($self->get("maxlength")); $html .= $self->get("extras").' />'; return $html; diff --git a/lib/WebGUI/Form/Radio.pm b/lib/WebGUI/Form/Radio.pm index 4064c79e2..e778c9933 100644 --- a/lib/WebGUI/Form/Radio.pm +++ b/lib/WebGUI/Form/Radio.pm @@ -100,7 +100,7 @@ Renders and input tag of type radio. sub toHtml { my$self = shift; - my $value = $self->get('value'); + my $value = $self->getOriginalValue(); $value = defined $value ? $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($value))) : ''; my $checkedText = $self->get("checked") ? ' checked="checked"' : ''; my $idText = $self->get('id') ? ' id="'.$self->get('id').'" ' : ''; diff --git a/lib/WebGUI/Form/RadioList.pm b/lib/WebGUI/Form/RadioList.pm index 5789a5bad..6f9c891c4 100644 --- a/lib/WebGUI/Form/RadioList.pm +++ b/lib/WebGUI/Form/RadioList.pm @@ -110,6 +110,19 @@ sub getDefaultValue { #------------------------------------------------------------------- +=head2 getOriginalValue( [ value ] ) + +See WebGUI::Form::Control::getOriginalValue() + +=cut + +sub getOriginalValue{ + my $self = shift; + return $self->WebGUI::Form::Control::getOriginalValue(@_); +} + +#------------------------------------------------------------------- + =head2 isDynamicCompatible ( ) A class method that returns a boolean indicating whether this control is compatible with the DynamicField control. @@ -137,7 +150,7 @@ sub toHtml { foreach my $key (keys %{$options}) { $i++; my $checked = 0; - if ($self->get('value') eq $key) { + if ($self->getOriginalValue() eq $key) { $checked = 1; } $output .= WebGUI::Form::Radio->new($self->session, { diff --git a/lib/WebGUI/Form/ReadOnly.pm b/lib/WebGUI/Form/ReadOnly.pm index 3367b5e64..b5976eb26 100644 --- a/lib/WebGUI/Form/ReadOnly.pm +++ b/lib/WebGUI/Form/ReadOnly.pm @@ -84,7 +84,7 @@ Renders the value. sub toHtml { my $self = shift; - return $self->getDefaultValue; + return $self->getOriginalValue; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Form/SelectBox.pm b/lib/WebGUI/Form/SelectBox.pm index 6f039a5e9..bd61989e7 100644 --- a/lib/WebGUI/Form/SelectBox.pm +++ b/lib/WebGUI/Form/SelectBox.pm @@ -115,16 +115,30 @@ Returns the either the "value" ore "defaultValue" passed in to the object in tha sub getDefaultValue { my $self = shift; - my $value = $self->get("value"); - unless (defined $value) { - $value = $self->get("defaultValue"); - } + my $value = $self->get("defaultValue"); if (ref $value eq 'ARRAY') { $value = $value->[0]; } return $value; } +=head2 getOriginalValue ( ) + +Returns the either the "value" ore "defaultValue" passed in to the object in that order, and doesn't take into account form processing. + +=cut + +sub getOriginalValue { + my $self = shift; + my $value = $self->get("value"); + unless (defined $value) { + $value = $self->getDefaultValue(); + } + if (ref $value eq 'ARRAY') { + $value = $value->[0]; + } + return $value; +} #------------------------------------------------------------------- @@ -150,7 +164,7 @@ sub toHtml { my $self = shift; my $output = 'get("extras")||'').$multiple.'>'; my $options = $self->getOptions; - my @values = $self->getDefaultValue(); + my @values = $self->getOriginalValue(); foreach my $key (keys %{$options}) { $output .= '