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;
}

View file

@ -18,6 +18,7 @@ use strict;
use base 'WebGUI::Form::Text';
use WebGUI::Form::Hidden;
use WebGUI::International;
use WebGUI::DateTime;
=head1 NAME
@ -25,7 +26,13 @@ Package WebGUI::Form::DateTime
=head1 DESCRIPTION
Accepts and returns and epoch date and creates a date picker control.
Accepts and returns an epoch date and creates a date picker control.
If the default value is a MySQL date/time string, accepts and returns MySQL
date/time strings.
NOTE: Does not adjust for the user's time zone unless using MySQL date/time
strings.
=head1 SEE ALSO
@ -63,6 +70,9 @@ Flag that tells the User Profile system that this is a valid form element in a U
If no value is specified, this will be used. Defaults to today and now.
If the defaultValue is a MySQL date/time string, this form control will return
MySQL date/time strings adjusted for the user's time zone.
=cut
sub definition {
@ -100,7 +110,25 @@ Returns a validated form post result. If the result does not pass validation, it
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")),1);
} else {
# MySQL format
# YY(YY)?-MM-DD HH:MM:SS
my $value = $self->session->form->param($self->get("name"));
$self->session->errorHandler->warn("Date value: $value");
# Verify format
return undef
unless ($value =~ m/(?:\d{2}|\d{4})\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{2}/);
# Fix time zone
$value = WebGUI::DateTime->new(mysql => $value, time_zone => $self->session->user->profileField("timeZone"))
->set_time_zone("UTC")->toMysql;
return $value;
}
}
#-------------------------------------------------------------------
@ -113,7 +141,18 @@ Renders a date picker control.
sub toHtml {
my $self = shift;
my $value = $self->session->datetime->epochToSet($self->get("value"),1);
my $value;
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) {
# Epoch format
$value = $self->session->datetime->epochToSet($self->get("value"),1);
} else {
# MySQL format
$value = $self->get("value");
# Fix time zone
$value = WebGUI::DateTime->new($value)
->set_time_zone($self->session->user->profileField("timeZone"))
->toMysql;
}
my $i18n = WebGUI::International->new($self->session);
my $language = $i18n->getLanguage($self->session->user->profileField("language"),"languageAbbreviation");
unless ($language) {
@ -153,9 +192,22 @@ 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"),1);
} else {
# MySQL format
$value = $self->get("value");
# Fix Time zone
$value = WebGUI::DateTime->new($value)
->set_time_zone($self->session->user->profileField("timeZone"))
->toMysql;
}
return WebGUI::Form::Hidden->new(
name=>$self->get("name"),
value=>$self->session->datetime->epochToSet($self->get("value"),1)
name => $self->get("name"),
value => $value,
)->toHtmlAsHidden;
}

View file

@ -26,7 +26,13 @@ Package WebGUI::Form::TimeField
=head1 DESCRIPTION
Creates a time form field.
Creates a time form field.
If the default value is a MySQL time, the value returned by this form element
will be a MySQL time. Note: Will not be adjusted for the user's time zone.
Otherwise, the value returned by this form element will be a number of seconds,
adjusted for the user's time zone..
=head1 SEE ALSO
@ -48,6 +54,10 @@ See the superclass for additional details.
The following additional parameters have been added via this sub class.
=head4 defaultValue
Either a number of seconds or a MySQL time.
=head4 maxlength
Defaults to 8. Determines the maximum number of characters allowed in this field.
@ -88,13 +98,25 @@ sub definition {
=head2 getValueFromPost ( )
Returns the number of seconds since 00:00:00 on a 24 hour clock. Note, this will adjust for the user's time offset in the reverse manner that the form field adjusts for it in order to make the times come out appropriately.
If the defaultValue is a MySQL time, the value returned by this form element
will be a MySQL time. Note: Will not be adjusted for the user's time zone.
Otherwise, the value returned by this form element will be a number of seconds,
adjusted for the user's time zone..
=cut
sub getValueFromPost {
my $self = shift;
return $self->session->datetime->timeToSeconds($self->session->form->param($self->get("name")))-($self->session->user->profileField("timeOffset")*3600);
if (!$self->get("defaultValue") || $self->get("defaultValue") =~ /^\d+$/) {
# epoch format
return $self->session->datetime->timeToSeconds($self->session->form->param($self->get("name")))-($self->session->user->profileField("timeOffset")*3600);
} else {
# Mysql format
my $value = $self->session->form->param($self->get("name"));
return undef unless $value =~ /^\d{2}\D\d{2}(\D\d{2})?$/;
return $value;
}
}
#-------------------------------------------------------------------
@ -107,7 +129,14 @@ Renders a time field.
sub toHtml {
my $self = shift;
my $value = $self->session->datetime->secondsToTime($self->get("value"));
my $value;
if ($self->get("value") =~ /^\d+$/) {
# Epoch format
$value = $self->session->datetime->secondsToTime($self->get("value"));
} else {
# MySQL format
$value = $self->get("value");
}
my $i18n = WebGUI::International->new($self->session);
$self->session->style->setScript($self->session->url->extras('inputCheck.js'),{ type=>'text/javascript' });
$self->set("extras", $self->get('extras') . ' onkeyup="doInputCheck(document.getElementById(\''.$self->get("id").'\'),\'0123456789:\')"');
@ -129,9 +158,17 @@ Renders the field as a hidden field.
sub toHtmlAsHidden {
my $self = shift;
my $value;
if ($self->get("value") =~ /^\d+$/) {
# Epoch format
$value = $self->session->datetime->secondsToTime($self->get("value"));
} else {
# MySQL format
$value = $self->get("value");
}
return WebGUI::Form::Hidden->new($self->session,
name=>$self->get("name"),
value=>$self->session->datetime->secondsToTime($self->get("value"))
value=>$value
)->toHtmlAsHidden;
}