Additional features in preparation for final checkin of Calendar rewrite.
This commit is contained in:
parent
3b4943177f
commit
d805a6a310
8 changed files with 515 additions and 29 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue