move shortcut to formbuilder

This commit is contained in:
Doug Bell 2011-01-25 11:09:50 -06:00
parent eb16ecb99e
commit 58c611eee6
2 changed files with 127 additions and 40 deletions

View file

@ -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('<table cellspacing="0" cellpadding="3" border="0">');
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('</table>');
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 .= '</table>';
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));

86
t/Asset/Shortcut/forms.t Normal file
View file

@ -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