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