From 58c611eee6ead3afe187f8067ab13abf099df123 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 25 Jan 2011 11:09:50 -0600 Subject: [PATCH] move shortcut to formbuilder --- lib/WebGUI/Asset/Shortcut.pm | 81 ++++++++++++++++----------------- t/Asset/Shortcut/forms.t | 86 ++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 40 deletions(-) create mode 100644 t/Asset/Shortcut/forms.t diff --git a/lib/WebGUI/Asset/Shortcut.pm b/lib/WebGUI/Asset/Shortcut.pm index a347b9068..2c59242e3 100644 --- a/lib/WebGUI/Asset/Shortcut.pm +++ b/lib/WebGUI/Asset/Shortcut.pm @@ -464,7 +464,7 @@ admin mode is on. sub _overridesCacheTag { my $self = shift; #cache by userId, assetId of this shortcut, and whether adminMode is on or not. - return ["shortcutOverrides", $self->getId, $self->session->user->userId, $self->session->isAdminOn]; + return join "", "shortcutOverrides", $self->getId, $self->session->user->userId, $self->session->isAdminOn; } #------------------------------------------------------------------- @@ -479,6 +479,9 @@ expired, or if the user's profile field has changed. =cut +# The datastructure returned here is insane. There should be a simple "getOverride( 'name' )" +# that works exactly like get() does. + sub getOverrides { my $self = shift; my $session = $self->session; @@ -988,14 +991,16 @@ sub www_getUserPrefsForm { return $i18n->get('cannot personalize') unless $self->getParent->canPersonalize; my $output; my @fielden = $self->getPrefFieldsToShow; - my $f = WebGUI::HTMLForm->new($self->session,extras=>' onsubmit="submitForm(this,\''.$self->getId.'\',\''.$self->getUrl.'\');return false;"'); - $f->raw(''); + my $f = WebGUI::FormBuilder->new($self->session, + action => $self->getUrl, + extras => 'onsubmit="submitForm(this,\''.$self->getId.'\',\''.$self->getUrl.'\');return false;"', + ); my $allowedToSave = ( ! $session->isAdminOn && $self->getParent->canPersonalize ) || ( $session->isAdminOn && $session->user->isInGroup($session->setting->get('groupIdAdminUser')) ); if ($allowedToSave) { - $f->hidden( - -name => 'func', - -value => 'saveUserPrefs' + $f->addField( "hidden", + name => 'func', + value => 'saveUserPrefs' ); } my $u = WebGUI::User->new($session, $self->discernUserId); @@ -1013,14 +1018,13 @@ sub www_getUserPrefsForm { if (! $allowedToSave) { $params->{extras} = ' disabled '; } - $f->raw($field->formField($params,1, $u)); + $f->addField($field->formField($params,1, $u, 0, undef, 1)); } if ($allowedToSave) { - $f->submit({extras=>'className="nothing"'}); + $f->addField( "submit", extras => 'className="nothing"' ); } - $f->raw('
'); my $tags = $session->style->generateAdditionalHeadTags(); - $output .= $tags.$f->print; + $output .= $tags.$f->toHtml; return $output; } @@ -1154,22 +1158,22 @@ sub www_editOverride { my $output = ''; $output .= ''; - my $f = WebGUI::HTMLForm->new($self->session,-action=>$self->getUrl); - $f->hidden( - -name => "func", - -value => "saveOverride" + my $f = WebGUI::FormBuilder->new( $self->session, action => $self->getUrl ); + $f->addField( "hidden", + name => "func", + value => "saveOverride" ); - $f->hidden( - -name => "overrideFieldName", - -value => $fieldName + $f->addField( "hidden", + name => "overrideFieldName", + value => $fieldName ); - $f->readOnly( - -label => $i18n->get("fieldName"), - -value => $fieldName + $f->addField( "readOnly", + label => $i18n->get("fieldName"), + value => $fieldName ); - $f->readOnly( - -label => $i18n->get("Original Value"), - -value => $origValue + $f->addField( "readOnly", + label => $i18n->get("Original Value"), + value => $origValue ); # Fetch the parameters for the dynamic field. @@ -1181,21 +1185,21 @@ sub www_editOverride { if ($params{fieldType} eq 'template') {$params{namespace} = $params{namespace} || WebGUI::Asset->newById($self->session, $origValue)->get("namespace");} - $f->dynamicField(%params); - $f->textarea( - -name => "newOverrideValueText", - -label => $i18n->get("New Override Value"), - -value => $overrides{overrides}{$fieldName}{newValue}, - -hoverHelp => $i18n->get("Place something in this box if you dont want to use the automatically generated field") + $f->addField( $params{fieldType} || "text", %params ); + $f->addField( "textarea", + name => "newOverrideValueText", + label => $i18n->get("New Override Value"), + value => $overrides{overrides}{$fieldName}{newValue}, + hoverHelp => $i18n->get("Place something in this box if you dont want to use the automatically generated field") ); - $f->readOnly( - -label => $i18n->get("Replacement Value"), - -value => $overrides{overrides}{$fieldName}{parsedValue}, - -hoverHelp => $i18n->get("This is the example output of the field when parsed for user preference macros") + $f->addField( "readOnly", + label => $i18n->get("Replacement Value"), + value => $overrides{overrides}{$fieldName}{parsedValue}, + hoverHelp => $i18n->get("This is the example output of the field when parsed for user preference macros") ) if $self->isDashlet; - $f->submit; + $f->addField( "submit", name => "submit" ); - $output .= $f->print; + $output .= $f->toHtml; return $self->_submenu($output,$i18n->get('Edit Override')); } @@ -1214,11 +1218,8 @@ sub www_saveOverride { my $fieldName = $self->session->form->process("overrideFieldName"); my %overrides = $self->getOverrides; my $output = ''; - my %props; - foreach my $def (@{$self->getShortcutOriginal->definition($self->session)}) { - %props = (%props,%{$def->{properties}}); - } - my $fieldType = $props{$fieldName}{fieldType}; + my %params = %{ $self->getShortcutOriginal->getFormProperties($fieldName) }; + my $fieldType = $params{fieldType} || "Text"; my $value = $self->session->form->process($fieldName,$fieldType); $value = $self->session->form->process("newOverrideValueText") || $value; $self->session->db->write("delete from Shortcut_overrides where assetId=".$self->session->db->quote($self->getId)." and fieldName=".$self->session->db->quote($fieldName)); diff --git a/t/Asset/Shortcut/forms.t b/t/Asset/Shortcut/forms.t new file mode 100644 index 000000000..6bf1bec51 --- /dev/null +++ b/t/Asset/Shortcut/forms.t @@ -0,0 +1,86 @@ +# vim:syntax=perl +#------------------------------------------------------------------- +# 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 +#------------------------------------------------------------------ + +# Test the getUserPrefsForm, editOverrides form and +# +# + +use FindBin; +use strict; +use lib "$FindBin::Bin/lib"; +use Test::More; +use WebGUI::Test; # Must use this before any other WebGUI modules +use WebGUI::Session; +use WebGUI::Test::Mechanize; + +#---------------------------------------------------------------------------- +# Init +my $session = WebGUI::Test->session; +$session->user({ userId => 3 }); + +my $page = WebGUI::Test->asset( className => 'WebGUI::Asset::Wobject::Dashboard' ); +my $asset = WebGUI::Test->asset( + className => 'WebGUI::Asset::Wobject::Article', + description => 'Description', +); +my $shortcut = $page->addChild( { + className => 'WebGUI::Asset::Shortcut', + shortcutToAssetId => $asset->getId, + prefFieldsToShow => 'alias', +} ); + +#---------------------------------------------------------------------------- +# Tests + +#---------------------------------------------------------------------------- +# getUserPrefsForm +my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file ); +$mech->get_ok( '/' ); +$mech->session->user({ userId => 3 }); + +$mech->get_ok( $shortcut->getUrl( 'func=getUserPrefsForm' ) ); +$mech->submit_form_ok( { + fields => { alias => "myself" }, +} ); +is( $mech->session->user->get('alias'), "myself", "alias gets set" ); + +#---------------------------------------------------------------------------- +# editOverrides + +# form field +my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file ); +$mech->get_ok('/'); +$mech->session->user({ userId => 3 }); + +$mech->get_ok( $shortcut->getUrl( 'func=editOverride;fieldName=title' ) ); +$mech->submit_form_ok( { + fields => { title => "New Title" }, +} ); +$shortcut = WebGUI::Asset->newById( $mech->session, $shortcut->getId ); +my %overrides = $shortcut->getOverrides; +is( $overrides{overrides}{title}{newValue}, "New Title" ); + +# textarea +my $mech = WebGUI::Test::Mechanize->new( config => WebGUI::Test->file ); +$mech->get_ok('/'); +$mech->session->user({ userId => 3 }); + +$mech->get_ok( $shortcut->getUrl( 'func=editOverride;fieldName=description' ) ); +$mech->submit_form_ok( { + fields => { newOverrideValueText => "New" }, +} ); +$shortcut = WebGUI::Asset->newById( $mech->session, $shortcut->getId ); +my %overrides = $shortcut->getOverrides; +is( $overrides{overrides}{description}{newValue}, "New" ); + + +done_testing; +#vim:ft=perl