Additional features in preparation for final checkin of Calendar rewrite.

This commit is contained in:
Doug Bell 2006-12-01 22:26:09 +00:00
parent 3b4943177f
commit d805a6a310
8 changed files with 515 additions and 29 deletions

View file

@ -17,7 +17,6 @@ package WebGUI::Form::Date;
use strict;
use base 'WebGUI::Form::Text';
use WebGUI::Form::Hidden;
use WebGUI::Form::Text;
use WebGUI::International;
=head1 NAME
@ -28,6 +27,10 @@ Package WebGUI::Form::Date
Accepts and returns and epoch date and creates a date picker control.
If the current or default value is a MySQL date string, accepts and returns
a MySQL date string. Note: Cannot do time zone conversion since it is not a
complete date/time string.
=head1 SEE ALSO
This is a subclass of WebGUI::Form::Text.
@ -64,6 +67,9 @@ A default date is placed in the value field. Set this to "1" to leave it empty.
If no value is specified, this will be used. Defaults to today and now.
If the defaultValue is a MySQL date string, this form control will return MySQL
date strings instead of epoch times.
=head4 profileEnabled
Flag that tells the User Profile system that this is a valid form element in a User Profile
@ -108,20 +114,38 @@ Return the date in a human readable format for the Profile system.
sub displayValue {
my ($self) = @_;
return $self->session->datetime->epochToHuman($self->get("value"),"%z");
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) {
return $self->session->datetime->epochToHuman($self->get("value"),"%z");
} else {
# MySQL format
my $value = $self->get("value");
}
}
#-------------------------------------------------------------------
=head2 getValueFromPost ( )
Returns a validated form post result. If the result does not pass validation, it returns undef instead.
Returns a validated form post result. If the result does not pass validation,
it returns undef instead.
=cut
sub getValueFromPost {
my $self = shift;
return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name")));
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) {
# Epoch format
return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name")));
} else {
# MySQL format
# YY(YY)?-MM-DD
my $value = $self->session->form->param($self->get("name"));
# NOTE: Cannot fix time zone since we don't have a complete date/time
return $1
if ($value =~ m/((?:\d{2}|\d{4})\D\d{2}\D\d{2})/);
}
}
#-------------------------------------------------------------------
@ -134,11 +158,17 @@ Renders a date picker control.
sub toHtml {
my $self = shift;
my $value;
if ($self->get("_defaulted") && $self->get("noDate") ) {
$self->set("value",'');
}
else {
$self->set("value",$self->session->datetime->epochToSet($self->get("value")));
# No default date
$value = $self->set("value",'');
} elsif (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) {
# Epoch format
$value = $self->set("value",$self->session->datetime->epochToSet($self->get("value")));
} else {
# MySQL format
$value = $self->get("value");
# NOTE: Cannot fix time zone since we don't have a complete date/time
}
my $language = WebGUI::International->new($self->session)->getLanguage($self->session->user->profileField("language"),"languageAbbreviation");
@ -150,7 +180,14 @@ sub toHtml {
$self->session->style->setScript($self->session->url->extras('calendar/calendar-setup.js'),{ type=>'text/javascript' });
$self->session->style->setLink($self->session->url->extras('calendar/calendar-win2k-1.css'), { rel=>"stylesheet", type=>"text/css", media=>"all" });
my $mondayFirst = $self->session->user->profileField("firstDayOfWeek") ? "1" : "0";
return $self->SUPER::toHtml. '<script type="text/javascript">
return WebGUI::Form::Text->new($self->session,
name=>$self->get("name"),
value=>$value,
size=>$self->get("size"),
extras=>$self->get("extras"),
id=>$self->get('id'),
maxlength=>$self->get("maxlength")
)->toHtml . '<script type="text/javascript">
Calendar.setup({
inputField : "'.$self->get('id').'",
ifFormat : "%Y-%m-%d",
@ -172,9 +209,19 @@ Renders the form field to HTML as a hidden field rather than whatever field type
sub toHtmlAsHidden {
my $self = shift;
my $value;
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) {
$value = $self->session->datetime->epochToSet($self->get("value"),"%z");
} else {
# MySQL format
$value = $self->get("value");
# NOTE: Cannot fix time zone since we don't have a complete date/time
}
return WebGUI::Form::Hidden->new($self->session,
name=>$self->get("name"),
value=>$self->session->datetime->epochToSet($self->get("value"))
name => $self->get("name"),
value => $value,
)->toHtmlAsHidden;
}