adding the new form system

This commit is contained in:
JT Smith 2005-07-26 15:55:15 +00:00
parent fe0d968d87
commit 7d95169b38
26 changed files with 2160 additions and 1073 deletions

372
lib/WebGUI/Form/Control.pm Normal file
View file

@ -0,0 +1,372 @@
package WebGUI::Form::Control;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::Control
=head1 DESCRIPTION
Base class for all form field objects. Never use this class directly.
=head1 SYNOPSIS
use base 'WebGUI::Form::Control';
...your methods here...
Subclasses will look like this:
use WebGUI::Form::subclass;
my $obj = WebGUI::Form::subclass->new(%params);
my $html = $obj->toHtml;
my $html = $obj->toHtmlAsHidden;
my $tableRows = $obj->toHtmlWithWrapper;
=head1 METHODS
The following methods are available via this package.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
Defines the schema or parameters for a form field.
=head3 additionalTerms
An array reference containing a hash of hashes of parameter names and their definitions.
Example:
[{
myParam=>{
defaultValue=>undef
}
}]
By default all form fields have the following parameters:
=head4 name
The field name.
=head4 value
The starting value for the field.
=head4 defaultValue
If no starting value is specified, this will be used instead.
=head4 extras
Add extra attributes to the form tag like
onmouseover='doSomething()'
=head4 label
A text label that will be displayed if toHtmlWithWrapper() is called.
=head4 uiLevel
The UI Level that the user must meet or exceed if this field should be displayed with toHtmlWithWrapper() is called.
=head4 uiLevelOverride
An identifier that will be grabbed from the config file to determine the uiLevel. If the uiLevelOverride is "Article" and the name is "title" then the entry in the config file would look like:
Article_uiLevel = title => 5
=head4 subtext
A text string that will be appended after the field when toHtmlWithWrapper() is called.
=head4 labelClass
A stylesheet class assigned to the label with toHtmlWithWrapper() is called. Defaults to "formDescription".
=head4 fieldClass
A stylesheet class assigned to wrapper the field when toHtmlWithWrapper() is called. Defaults to "tableData".
=head4 rowClass
A stylesheet class assigned to each label/field pair.
=head4 hoverHelp
A text string that will pop up when the user hovers over the label when toHtmlWithWrapper() is called. This string should indicate how to use the field and is usually tied into the help system.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
name=>{
defaultValue=>undef
},
value=>{
defaultValue=>undef
},
extras=>{
defaultValue=>undef
},
defaultValue=>{
defaultValue=>undef
},
label=>{
defaultValue=>undef
},
uiLevel=>{
defaultValue=>1
},
uiLevelOverride=>{
defaultValue=>undef
},
labelClass=>{
defaultValue=>"formDescription"
},
fieldClass=>{
defaultValue=>"tableData"
},
rowClass=>{
defaultValue=>undef
},
hoverHelp=>{
defaultValue=>undef
},
subtext=>{
defaultValue=>undef
}
});
return $definition;
}
#-------------------------------------------------------------------
=head2 fixMacros ( string )
Returns the string having converted all macros in the string to HTML entities so that they won't be processed my the macro engine, but instead will be displayed.
=head3 string
The string to search for macros in.
=cut
sub fixMacros {
my $self = shift;
my $value = shift;
$value =~ s/\^/\&\#94\;/g;
return $value;
}
#-------------------------------------------------------------------
=head2 fixQuotes ( string )
Returns the string having replaced quotes with HTML entities. This is important so not to screw up HTML attributes which use quotes as delimiters.
=head3 string
The string to search for quotes in.
=cut
sub fixQuotes {
my $self = shift;
my $value = shift;
$value =~ s/\"/\&quot\;/g;
return $value;
}
#-------------------------------------------------------------------
=head2 fixSpecialCharacters ( string )
Returns a string having converted any characters that have special meaning in HTML to HTML entities. Currently the only character is ampersand.
=head3 string
The string to search for special characters in.
=cut
sub fixSpecialCharacters {
my $self = shift;
my $value = shift;
$value =~ s/\&/\&amp\;/g;
return $value;
}
#-------------------------------------------------------------------
=head2 fixTags ( string )
Returns a string having converted HTML tags into HTML entities. This is useful when you have HTML that you need to render inside of a <textarea> for instance.
=head3 string
The string to search for HTML tags in.
=cut
sub fixTags {
my $self = shift;
my $value = shift;
$value =~ s/\</\&lt\;/g;
$value =~ s/\>/\&gt\;/g;
return $value;
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Retrieves a value from a form GET or POST and returns it. If the value comes back as undef, this method will return the defaultValue instead.
=cut
sub getValueFromPost {
my $self = shift;
my $formValue = $session{cgi}->param($self->{name});
if (defined $formValue) {
return $formValue;
} else {
return $self->{defaultValue};
}
}
#-------------------------------------------------------------------
=head2 new ( parameters )
Constructor. Creates a new form field object.
=head3 parameters
Accepts any parameters specified by the definition() method. This parameter set can be specified by either a hash or hash reference, and can be tagged or not. Here are examples:
my $obj = $class->new({ name=>"this", value=>"that"});
my $obj = $class->new({ -name=>"this", -value=>"that"});
my $obj = $class->new(name=>"this", value=>"that");
my $obj = $class->new(-name=>"this", -value=>"that");
=cut
sub new {
my $class = shift;
my %raw;
# deal with a hash reference full of properties
if (ref $_[0] eq "HASH") {
%raw = %{$_[0]};
} else {
%raw = @_;
}
my %params;
# Ensure that overrides overwrite the previously defined definition of a field
my @reversedDefinitions = reverse @{$class->definition};
foreach my $definition (@reversedDefinitions) {
foreach my $fieldName (keys %{$definition}) {
$params{$fieldName} = $raw{$fieldName} || $raw{"-".$fieldName} || $definition->{$fieldName}{defaultValue};
}
}
unless (exists $params{value}) {
$params{value} = $params{defaultValue};
}
WebGUI::ErrorHandler::debug($class);
bless \%params, $class;
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders the form field to HTML. This method should be overridden by all subclasses.
=cut
sub toHtml {
my $self = shift;
return $self->{value};
}
#-------------------------------------------------------------------
=head2 toHtmlAsHidden ( )
Renders the form field to HTML as a hidden field rather than whatever field type it was supposed to be.
=cut
sub toHtmlAsHidden {
my $self = shift;
return '<input type="hidden" name="'.$self->{name}.'" value="'.$self->fixQuotes($self->fixMacros($self->fixSpecialCharacters($self->{value}))).'" />'."\n";
}
#-------------------------------------------------------------------
=head2 toHtmlWithWrapper ( )
Renders the form field to HTML as a table row complete with labels, subtext, hoverhelp, etc.
=cut
sub toHtmlWithWrapper {
my $self = shift;
if ($self->{uiLevel} <= $session{user}{uiLevel}
|| ( $session{config}{$self->{uiLevelOverride}}{$self->{name}}
&& $session{config}{$self->{uiLevelOverride}}{$self->{name}} <= $session{user}{uiLevel}))
{
my $rowClass = $self->{rowClass};
$rowClass = qq| class="$rowClass" | if($self->{rowClass});
my $labelClass = $self->{labelClass};
$labelClass = qq| class="$labelClass" | if($self->{labelClass});
my $fieldClass = $self->{fieldClass};
$fieldClass = qq| class="$fieldClass" | if($self->{fieldClass});
my $hoverHelp = $self->{hoverHelp};
$hoverHelp =~ s/\r/ /g;
$hoverHelp =~ s/\n/ /g;
$hoverHelp =~ s/&amp;/& amp;/g;
$hoverHelp =~ s/&gt;/& gt;/g;
$hoverHelp =~ s/&lt;/& lt;/g;
$hoverHelp =~ s/&/&amp;/g;
$hoverHelp =~ s/>/&gt;/g;
$hoverHelp =~ s/</&lt;/g;
$hoverHelp =~ s/"/&quot;/g;
$hoverHelp =~ s/'/\\'/g;
$hoverHelp =~ s/^\s+//;
$hoverHelp = qq| onmouseover="return escape('$hoverHelp')"| if ($hoverHelp);
my $subtext = $self->{subtext};
$subtext = qq| <span class="formSubtext">$subtext</span>| if ($subtext);
return '<tr'.$rowClass.'><td'.$labelClass.$hoverHelp.' valign="top" style="width: 25%;">'.$self->{label}.'</td><td valign="top"'.$fieldClass.' style="width: 75%;">'.$self->toHtml.$subtext."</td></tr>\n";
} else {
return $self->toHtmlAsHidden;
}
}
1;

106
lib/WebGUI/Form/asset.pm Normal file
View file

@ -0,0 +1,106 @@
package WebGUI::Form::asset;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Asset;
use WebGUI::Form::button;
use WebGUI::Form::hidden;
use WebGUI::Form::text;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::asset
=head1 DESCRIPTION
Creates an asset selector field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 name
The name of the field. Defaults to "asset".
=head4 class
Limits the list of selectable assets to a specific class, such as "WebGUI::Asset::Wobject::Article", specified by this parameter.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
name=>{
defaultValue=> "asset"
},
class=>{
defaultValue=> undef
},
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders an asset selector.
=cut
sub toHtml {
my $self = shift;
my $asset = WebGUI::Asset->newByDynamicClass($self->{value}) || WebGUI::Asset->getRoot;
return WebGUI::Form::hidden->new(
name=>$self->{name},
extras=>'id="'.$self->{name}.'" '.$self->{extras},
value=>$asset->getId
)->toHtml
.WebGUI::Form::text->new(
name=>$self->{name}."_display",
extras=>'id="'.$self->{name}."_display".'" readonly="1"',
value=>$asset->get("title")
)->toHtml
.WebGUI::Form::button->new(
value=>"...",
extras=>'onclick="window.open(\''.$asset->getUrl("op=formAssetTree&classLimiter=".$self->{class}."&formId=".$self->{name}).'\',\'assetPicker\',\'toolbar=no, location=no, status=no, directories=no, width=400, height=400\');"'
)->toHtml;
}
1;

83
lib/WebGUI/Form/button.pm Normal file
View file

@ -0,0 +1,83 @@
package WebGUI::Form::button;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::International;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::button
=head1 DESCRIPTION
Creates a form button.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 defaultValue
The default text to appear on the button. Defaults to an internationalized version of the word "save".
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
defaultValue=>{
defaultValue=>WebGUI::International::get(62)
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a button.
=cut
sub toHtml {
my $self = shift;
my $value = $self->fixQuotes($self->{value});
return '<input type="button" name="'.$self->{name}.'" value="'.$value.'" '.$self->{extras}.' />';
}
1;

View file

@ -0,0 +1,133 @@
package WebGUI::Form::checkList;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Form::checkbox;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::checkList
=head1 DESCRIPTION
Creates a series of check box form fields.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control. Also take a look ath WebGUI::Form::checkbox as this class creates a list of checkboxes.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 options
A hash reference containing key values that will be returned with the form post and displayable text pairs. Defaults to an empty hash reference.
=head4 defaultValue
An array reference of the items to be checked if no value is specified. Defaults to an empty array reference.
=head4 vertical
Boolean representing whether the checklist should be represented vertically or horizontally. If set to "1" will be displayed vertically. Defaults to "0".
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
options=>{
defaultValue=>{}
},
defaultValue=>{
defaultValue=>[],
},
vertical=>{
defaultValue=>0
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns an array or a carriage return ("\n") separated scalar depending upon whether you're returning the values into an array or a scalar.
=cut
sub getValueFromPost {
my $self = shift;
my @data = $session{cgi}->param($self->{name});
return wantarray ? @data : join("\n",@data);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a series of checkboxes.
=cut
sub toHtml {
my $self = shift;
my $output;
foreach my $key (keys %{$self->{options}}) {
my $checked = 0;
foreach my $item (@{$self->{value}}) {
if ($item eq $key) {
$checked = 1;
}
}
$output .= WebGUI::Form::checkbox->new({
name=>$self->{name},
value=>$key,
extras=>$self->{extras},
checked=>$checked
})->toHtml;
$output .= ${$self->{options}}{$key};
if ($self->{vertical}) {
$output .= "<br />\n";
} else {
$output .= " &nbsp; &nbsp;\n";
}
}
return $output;
}
1;

View file

@ -0,0 +1,91 @@
package WebGUI::Form::checkbox;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::checkbox
=head1 DESCRIPTION
Creates a check box form field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 checked
Defaults to "0". Set to "1" if this field should be checked.
=head4 defaultValue
The value returned by this field if it is checked and no value is specified. Defaults to "1".
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
checked=>{
defaultValue=> 0
},
defaultValue=>{
defaultValue=>1
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders and input tag of type checkbox.
=cut
sub toHtml {
my $self = shift;
my $value = $self->fixQuotes($self->{value});
my $checkedText = ' checked="checked"' if ($self->{checked});
return '<input type="checkbox" name="'.$self->{name}.'" value="'.$value.'"'.$checkedText.' '.$self->{extras}.' />';
}
1;

View file

@ -0,0 +1,58 @@
package WebGUI::Form::codearea;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::text';
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::codearea
=head1 DESCRIPTION
Creates a code area form field, which is just like a text area except stretches to fit it's space and allows tabs in it's content.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::textarea.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a code area field.
=cut
sub toHtml {
my $self = shift;
WebGUI::Style::setScript($session{config}{extrasURL}.'/TabFix.js',{type=>"text/javascript"});
$self->{extras} .= ' style="width: 99%; min-width: 440px; height: 400px" onkeypress="return TabFix_keyPress(event)" onkeydown="return TabFix_keyDown(event)"';
return $self->SUPER::toHtml;
}
1;

70
lib/WebGUI/Form/color.pm Normal file
View file

@ -0,0 +1,70 @@
package WebGUI::Form::color;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::color
=head1 DESCRIPTION
Creates a color picker which returns hex colors like #000000.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a hex color like "#000000". Returns undef if the return value is not a valid color.
=cut
sub getValueFromPost {
my $self = shift;
my $color = $session{cgi}->param($self->{name});
return undef unless $color =~ /\#\w{6}/;
return $color;
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a color picker control.
=cut
sub toHtml {
my $self = shift;
WebGUI::Style::setScript($session{config}{extrasURL}.'/colorPicker.js',{ type=>'text/javascript' });
return '<script type="text/javascript">initColorPicker("'.$self->{name}.'","'.($self->{value}).'");</script>';
}
1;

80
lib/WebGUI/Form/combo.pm Normal file
View file

@ -0,0 +1,80 @@
package WebGUI::Form::combo;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::selectList';
use WebGUI::Form::text;
use WebGUI::International;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::combo
=head1 DESCRIPTION
Creates a select list merged with a text box form control.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::selectList.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns an array or a carriage return ("\n") separated scalar depending upon whether you're returning the values into an array or a scalar.
=cut
sub getValueFromPost {
my $self = shift;
if ($session{cgi}->param($self->{name}."_new")) {
return $session{cgi}->param($self->{name}."_new");
}
return $self->SUPER::getValueFromPost;
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a combo box form control.
=cut
sub toHtml {
my $self = shift;
$self->{options}->{''} = '['.WebGUI::International::get(582).']';
$self->{options}->{_new_} = WebGUI::International::get(581).'-&gt;';
return $self->SUPER::toHtml
.WebGUI::Form::text->new(
size=>$session{setting}{textBoxSize}-5,
name=>$self->{name}."_new"
)->toHtml;
}
1;

View file

@ -0,0 +1,124 @@
package WebGUI::Form::contentType;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Form::selectList;
use WebGUI::International;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::contentType
=head1 DESCRIPTION
Creates a content type selector which can be used in conjunction with WebGUI::HTML::filter().
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 types
An array reference of field types to be displayed. The types are "mixed", "html", "code", and "text". Defaults to all.
=head4 defaultValue
An array reference of the items to be checked if no value is specified. Defaults to "mixed". Possible values are "mixed", "code", "html", and "text".
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
options=>{
defaultValue=>[qw(mixed html code text)]
},
defaultValue=>{
defaultValue=>"mixed",
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns either what's posted or if nothing comes back it returns "mixed".
=cut
sub getValueFromPost {
my $self = shift;
return $session{cgi}->param($self->{name}) || "mixed";
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a select list form control.
=cut
sub toHtml {
my $self = shift;
my %types;
foreach my $type (@{$self->{types}}) {
if ($type eq "text") {
$types{text} = WebGUI::International::get(1010);
} elsif ($type eq "mixed") {
$types{mixed} = WebGUI::International::get(1008);
} elsif ($type eq "code") {
$types{code} = WebGUI::International::get(1011);
} elsif ($type eq "html") {
$types{html} = WebGUI::International::get(1009);
}
}
return WebGUI::Form::selectList->new(
options=>\%types,
name=>$self->{name},
value=>[$self->{value}],
extras=>$self->{extras},
defaultValue=>[$self->{defaultValue}]
)->toHtml;
}
1;

View file

@ -0,0 +1,96 @@
package WebGUI::Form::databaseLink;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::DatabaseLink;
use WebGUI::Form::selectList;
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::databaseLink
=head1 DESCRIPTION
Creates a database connection chooser control.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 name
The identifier for this field. Defaults to "databaseLinkId".
=head4 defaultValue
A database link id. Defaults to "0", which is the WebGUI database.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
name=>{
defaultValue=>"databaseLinkId"
},
defaultValue=>{
defaultValue=>0
},
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a database connection picker control.
=cut
sub toHtml {
my $self = shift;
return WebGUI::Form::selectList->new(
name=>$self->{name},
options=>WebGUI::DatabaseLink::getList(),
value=>[$self->{value}]
)->toHtml;
}
1;

136
lib/WebGUI/Form/date.pm Normal file
View file

@ -0,0 +1,136 @@
package WebGUI::Form::date;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::text';
use WebGUI::DateTime;
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::date
=head1 DESCRIPTION
Accepts and returns and epoch date and creates a date picker control.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::text.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the superclass for additional details.
=head3 additionalTerms
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.
=head4 size
Defaults to 10. The displayed size of the box for the date to be typed in.
=head4 noDate
By default a 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.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
defaultValue=>{
defaultValue=>time()
},
maxlength=>{
defaultValue=> 10
},
size=>{
defaultValue=> 10
},
noDate=>{
defaultValue=>0
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
=cut
sub getValueFromPost {
my $self = shift;
return WebGUI::DateTime::setToEpoch($session{cgi}->param($self->{name}));
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a date picker control.
=cut
sub toHtml {
my $self = shift;
my $value = WebGUI::DateTime::epochToSet($self->{value}) unless ($self->{noDate} && $self->{value} eq '');
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar.js',{ type=>'text/javascript' });
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/lang/calendar-en.js',{ type=>'text/javascript' });
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar-setup.js',{ type=>'text/javascript' });
WebGUI::Style::setLink($session{config}{extrasURL}.'/calendar/calendar-win2k-1.css', { rel=>"stylesheet", type=>"text/css", media=>"all" });
my $mondayFirst = $session{user}{firstDayOfWeek} ? "true" : "false";
return WebGUI::Form::text->new(
name=>$self->{name},
value=>$value,
size=>$self->{size},
extras=>'id="'.$self->{name}.'Id" '.$self->{extras},
maxlength=>$self->{maxlength}
)->toHtml . '<script type="text/javascript">
Calendar.setup({
inputField : "'.$self->{name}.'Id",
ifFormat : "%Y-%m-%d",
showsTime : false,
timeFormat : "12",
mondayFirst : '.$mondayFirst.'
});
</script>';
}
1;

129
lib/WebGUI/Form/dateTime.pm Normal file
View file

@ -0,0 +1,129 @@
package WebGUI::Form::dateTime;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::text';
use WebGUI::DateTime;
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::dateTime
=head1 DESCRIPTION
Accepts and returns and epoch date and creates a date picker control.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::text.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the superclass for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 maxlength
Defaults to 19. Determines the maximum number of characters allowed in this field.
=head4 size
Defaults to 19. The displayed size of the box for the date to be typed in.
=head4 defaultValue
If no value is specified, this will be used. Defaults to today and now.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
defaultValue=>{
defaultValue=>time()
},
maxlength=>{
defaultValue=> 19
},
size=>{
defaultValue=> 19
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
=cut
sub getValueFromPost {
my $self = shift;
return WebGUI::DateTime::setToEpoch($session{cgi}->param($self->{name}));
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a date picker control.
=cut
sub toHtml {
my $self = shift;
my $value = WebGUI::DateTime::epochToSet($self->{value},1);
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar.js',{ type=>'text/javascript' });
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/lang/calendar-en.js',{ type=>'text/javascript' });
WebGUI::Style::setScript($session{config}{extrasURL}.'/calendar/calendar-setup.js',{ type=>'text/javascript' });
WebGUI::Style::setLink($session{config}{extrasURL}.'/calendar/calendar-win2k-1.css', { rel=>"stylesheet", type=>"text/css", media=>"all" });
my $mondayFirst = $session{user}{firstDayOfWeek} ? "true" : "false";
return WebGUI::Form::text->new(
name=>$self->{name},
value=>$value,
size=>$self->{size},
extras=>'id="'.$self->{name}.'Id" '.$self->{extras},
maxlength=>$self->{maxlength}
)->toHtml . '<script type="text/javascript">
Calendar.setup({
inputField : "'.$self->{name}.'Id",
ifFormat : "%Y-%m-%d %H:%M:%S",
showsTime : true,
timeFormat : "12",
mondayFirst : '.$mondayFirst.'
});
</script>';
}
1;

73
lib/WebGUI/Form/email.pm Normal file
View file

@ -0,0 +1,73 @@
package WebGUI::Form::email;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::text';
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::email
=head1 DESCRIPTION
Creates an email field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::text.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a validated email address. If the result does not pass validation, it returns undef instead.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $session{cgi}->param($self->{name});
if ($value =~ /^([A-Z0-9]+[._+-]?){1,}([A-Z0-9]+[_+-]?)+\@(([A-Z0-9]+[._-]?){1,}[A-Z0-9]+\.){1,}[A-Z]{2,4}$/i) {
return $value;
}
return undef;
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders an email address field.
=cut
sub toHtml {
my $self = shift;
WebGUI::Style::setScript($session{config}{extrasURL}.'/emailCheck.js',{ type=>'text/javascript' });
$self->{extras} .= ' onChange="emailCheck(this.value)" ';
return $self->SUPER::toHtml;
}
1;

81
lib/WebGUI/Form/hidden.pm Normal file
View file

@ -0,0 +1,81 @@
package WebGUI::Form::hidden;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::hidden
=head1 DESCRIPTION
Creates a hidden field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 toHtml ( )
A synonym for toHtmlAsHidden.
=cut
sub toHtml {
my $self = shift;
$self->toHtmlAsHidden;
}
#-------------------------------------------------------------------
=head2 toHtmlAsHidden ( )
Renders an input tag of type hidden.
=cut
sub toHtmlAsHidden {
my $self = shift;
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->{value})));
return '<input type="hidden" name="'.$self->{name}.'" value="'.$value.'" '.$self->{extras}.' />'."\n";
}
#-------------------------------------------------------------------
=head2 toHtmlWithWrapper ( )
A synonym for toHtmlAsHidden.
=cut
sub toHtmlWithWrapper {
my $self = shift;
return $self->toHtmlAsHidden;
}
1;

View file

@ -0,0 +1,146 @@
package WebGUI::Form::selectList;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::selectList
=head1 DESCRIPTION
Creates a select list, aka dropdown list form control.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 options
A hash reference containing key values that will be returned with the form post and displayable text pairs. Defaults to an empty hash reference.
=head4 defaultValue
An array reference of the items to be checked if no value is specified. Defaults to an empty array reference.
=head4 size
The number of characters tall this list should be. Defaults to '1'.
=head4 multiple
Boolean indicating whether the user can select multiple items from this list like a checkList. Defaults to "0".
=head4 sortByValue
A boolean value for whether or not the values in the options hash should be sorted. Defaults to "0".
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
options=>{
defaultValue=>{}
},
defaultValue=>{
defaultValue=>[],
},
multiple=>{
defaultValue=>0
},
sortByValue=>{
defaultValue=>0
},
size=>{
defaultValue=>1
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns an array or a carriage return ("\n") separated scalar depending upon whether you're returning the values into an array or a scalar.
=cut
sub getValueFromPost {
my $self = shift;
my @data = $session{cgi}->param($self->{name});
return wantarray ? @data : join("\n",@data);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders a select list form control.
=cut
sub toHtml {
my $self = shift;
my $multiple = ' multiple="1"' if ($self->{multiple});
my $output = '<select name="'.$self->{name}.'" size="'.$self->{size}.'" '.$self->{extras}.$multiple.'>';
my %options;
tie %options, 'Tie::IxHash';
if ($self->{sortByValue}) {
foreach my $optionKey (sort {"\L${$self->{options}}{$a}" cmp "\L${$self->{options}}{$b}" } keys %{$self->{options}}) {
$options{$optionKey} = $self->{options}{$optionKey};
}
} else {
%options = %{$self->{options}};
}
foreach my $key (keys %options) {
$output .= '<option value="'.$key.'"';
foreach my $item (@{$self->{value}}) {
if ($item eq $key) {
$output .= ' selected="selected"';
}
}
$output .= '>'.${$self->{options}}{$key}.'</option>';
}
$output .= '</select>'."\n";
return $output;
}
1;

89
lib/WebGUI/Form/text.pm Normal file
View file

@ -0,0 +1,89 @@
package WebGUI::Form::text;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::text
=head1 DESCRIPTION
Creates a text input box form field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 maxlength
Defaults to 255. Determines the maximum number of characters allowed in this field.
=head4 size
Defaults to the setting textBoxSize or 30 if that's not set. Specifies how big of a text box to display.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
maxlength=>{
defaultValue=> 255
},
size=>{
defaultValue=>$session{setting}{textBoxSize} || 30
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders an input tag of type text.
=cut
sub toHtml {
my $self = shift;
my $value = $self->fixMacros($self->fixQuotes($self->fixSpecialCharacters($self->{value})));
return '<input type="text" name="'.$self->{name}.'" value="'.$value.'" size="'.$self->{size}.'" maxlength="'.$self->{maxlength}.'" '.$self->{extras}.' />';
}
1;

100
lib/WebGUI/Form/textarea.pm Normal file
View file

@ -0,0 +1,100 @@
package WebGUI::Form::textarea;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::Control';
use WebGUI::Session;
=head1 NAME
Package WebGUI::Form::textarea
=head1 DESCRIPTION
Creates a text area form field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Control.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the super class for additional details.
=head3 additionalTerms
The following additional parameters have been added via this sub class.
=head4 rows
The number of rows (in characters) tall the box should be. Defaults to the setting textAreaRows or 5 if that's not specified.
=head4 columns
The number of columns (in characters) wide the box should be. Defaults to the setting textAreaCols or 50 if that's not specified.
=head4 wrap
The style of wrapping this form should use. Defaults to "virtual". Other possible values are "off" and "physical".
=head
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
rows=>{
defaultValue=> $session{setting}{textAreaRows} || 5
},
columns=>{
defaultValue=> $session{setting}{textAreaCols} || 50
},
wrap=>{
defaultValue=>"virtual"
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders an input tag of type text.
=cut
sub toHtml {
my $self = shift;
my $value = $self->fixMacros($self->fixTags($self->fixSpecialCharacters($self->{value})));
return '<textarea name="'.$self->{name}.'" cols="'.$self->{columns}.'" rows="'.$self->{rows}.'" wrap="'.
$self->{wrap}.'" '.$self->{extras}.'>'.$value.'</textarea>';
}
1;

100
lib/WebGUI/Form/zipcode.pm Normal file
View file

@ -0,0 +1,100 @@
package WebGUI::Form::zipcode;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2005 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
-------------------------------------------------------------------
=cut
use strict;
use base 'WebGUI::Form::text';
use WebGUI::Session;
use WebGUI::Style;
=head1 NAME
Package WebGUI::Form::zipcode
=head1 DESCRIPTION
Creates a zip code form field.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::text.
=head1 METHODS
The following methods are specifically available from this class. Check the superclass for additional methods.
=cut
#-------------------------------------------------------------------
=head2 definition ( [ additionalTerms ] )
See the superclass for additional details.
=head3 additionalTerms
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.
=cut
sub definition {
my $class = shift;
my $definition = shift || [];
push(@{$definition}, {
maxlength=>{
defaultValue=> 10
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
=cut
sub getValueFromPost {
my $self = shift;
my $value = $session{cgi}->param($self->{name});
if ($value =~ /^[A-Z\d\s\-]+$/) {
return $value;
}
return undef;
}
#-------------------------------------------------------------------
=head2 toHtml ( )
Renders an input tag of type text.
=cut
sub toHtml {
my $self = shift;
WebGUI::Style::setScript($session{config}{extrasURL}.'/inputCheck.js',{ type=>'text/javascript' });
$self->{extras} .= ' onkeyup="doInputCheck(this.form.'.$self->{name}.',\'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ- \')"';
return $self->SUPER::toHtml;
}
1;