Added dateTime and time field types.
This commit is contained in:
parent
3966d0803a
commit
c954ff636c
7 changed files with 353 additions and 77 deletions
|
|
@ -42,9 +42,9 @@ This package provides easy to use date math functions, which are normally a comp
|
|||
($startEpoch, $endEpoch) = WebGUI::DateTime::dayStartEnd($epoch);
|
||||
$dateString = WebGUI::DateTime::epochToHuman($epoch, $formatString);
|
||||
$setString = WebGUI::DateTime::epochToSet($epoch);
|
||||
($setString, $timeString) = WebGUI::DateTime::epochToSetTime($epoch);
|
||||
$day = WebGUI::DateTime::getDayName($dayInteger);
|
||||
$month = WebGUI::DateTime::getMonthName($monthInteger);
|
||||
$seconds = WebGUI::DateTime::getSecondsFromEpoch($seconds);
|
||||
$epoch = WebGUI::DateTime::humanToEpoch($dateString);
|
||||
$seconds = WebGUI::DateTime::intervalToSeconds($interval, $units);
|
||||
@date = WebGUI::DateTime::localtime($epoch);
|
||||
|
|
@ -52,7 +52,6 @@ This package provides easy to use date math functions, which are normally a comp
|
|||
($interval, $units) = WebGUI::DateTime::secondsToInterval($seconds);
|
||||
$timeString = WebGUI::DateTime::secondsToTime($seconds);
|
||||
$epoch = WebGUI::DateTime::setToEpoch($setString);
|
||||
$epoch = WebGUI::DateTime::setTimeToEpoch($setTimeString);
|
||||
$epoch = WebGUI::DateTime::time();
|
||||
$seconds = WebGUI::DateTime::timeToSeconds($timeString);
|
||||
|
||||
|
|
@ -307,26 +306,6 @@ sub epochToSet {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 epochToSetTime ( epoch )
|
||||
|
||||
Returns a set date (used by WebGUI::HTMLForm->date) in the format of MM/DD/YYYY and a time string in the format of HH:MM:SS.
|
||||
|
||||
=over
|
||||
|
||||
=item epoch
|
||||
|
||||
The number of seconds since January 1, 1970.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub epochToSetTime {
|
||||
return (epochToHuman($_[0],"%m/%d/%y"), epochToHuman($_[0],"%j:%n:%s"));
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getMonthName ( month )
|
||||
|
||||
Returns a string containing the calendar month name in the language of the current user.
|
||||
|
|
@ -404,6 +383,28 @@ sub getDayName {
|
|||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 getSecondsFromEpoch ( epoch )
|
||||
|
||||
Calculates the number of seconds into the day of an epoch date the epoch datestamp is.
|
||||
|
||||
=over
|
||||
|
||||
=item epoch
|
||||
|
||||
The number of seconds since January 1, 1970 00:00:00.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub getSecondsFromEpoch {
|
||||
return timeToSeconds(epochToHuman($_[0],"%j:%n:%s"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 humanToEpoch ( date )
|
||||
|
|
@ -598,7 +599,7 @@ Returns a time string of the format HH::MM::SS on a 24 hour clock. See also time
|
|||
|
||||
=item seconds
|
||||
|
||||
A number of seconds.
|
||||
A number of seconds.
|
||||
|
||||
=back
|
||||
|
||||
|
|
@ -606,11 +607,11 @@ A number of seconds.
|
|||
|
||||
sub secondsToTime {
|
||||
my $seconds = $_[0];
|
||||
my $timeString = int($seconds / 3600).":";
|
||||
my $timeString = sprintf("%02d",int($seconds / 3600)).":";
|
||||
$seconds = $seconds % 3600;
|
||||
$timeString = int($seconds / 60).":";
|
||||
$timeString .= sprintf("%02d",int($seconds / 60)).":";
|
||||
$seconds = $seconds % 60;
|
||||
$timeString .= $seconds;
|
||||
$timeString .= sprintf("%02d",$seconds);
|
||||
return $timeString;
|
||||
}
|
||||
|
||||
|
|
@ -649,33 +650,7 @@ sub setToEpoch {
|
|||
} else {
|
||||
$day = $date[2];
|
||||
}
|
||||
return Date::Calc::Date_to_Time($year,$month,$day,12,0,0);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 setTimeToEpoch ( setString, timeString )
|
||||
|
||||
Returns an epoch date.
|
||||
|
||||
=over
|
||||
|
||||
=item setString
|
||||
|
||||
A string in the format of MM/DD/YYYY.
|
||||
|
||||
=item timeString
|
||||
|
||||
A string in the format of HH:MM:SS.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub setTimeToEpoch {
|
||||
my $epoch = setToEpoch($_[0]);
|
||||
$epoch += timeToSeconds($_[1]);
|
||||
return $epoch;
|
||||
return Date::Calc::Date_to_Time($year,$month,$day,0,0,0);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -293,12 +293,13 @@ sub date {
|
|||
$value = epochToSet($_[0]->{value});
|
||||
$size = $_[0]->{size} || 10;
|
||||
$value = "" if ($_[0]->{noDate});
|
||||
$output = text({
|
||||
my $output = _javascriptFile('inputCheck.js');
|
||||
$output .= text({
|
||||
name=>$_[0]->{name},
|
||||
value=>$value,
|
||||
size=>$size,
|
||||
maxlength=>10,
|
||||
extras=>$_[0]->{extras}
|
||||
extras=>'onKeyUp="doInputCheck(this.form.'.$_[0]->{name}.',\'0123456789\')" '.$_[0]->{extras},
|
||||
maxlength=>10
|
||||
});
|
||||
$output .= '<input type="button" style="font-size: 8pt;" onClick="window.dateField = this.form.'.
|
||||
$_[0]->{name}.';calendar = window.open(\''.$session{config}{extrasURL}.
|
||||
|
|
@ -309,6 +310,40 @@ sub date {
|
|||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 dateTime ( hashRef )
|
||||
|
||||
Returns a date/time field.
|
||||
|
||||
=over
|
||||
|
||||
=item name
|
||||
|
||||
The the base name for this form element. This form element actually returns two values under different names. They are name_date and name_time.
|
||||
|
||||
=item value
|
||||
|
||||
The date and time. Pass as an epoch value. Defaults to today and now.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub dateTime {
|
||||
my $output = date({
|
||||
name=>$_[0]->{name}."_date",
|
||||
value=>$_[0]->{value}
|
||||
});
|
||||
$output .= time({
|
||||
name=>$_[0]->{name}."_time",
|
||||
value=>WebGUI::DateTime::getSecondsFromEpoch($_[0]->{value})
|
||||
});
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 email ( hashRef )
|
||||
|
|
@ -400,11 +435,15 @@ sub fieldType {
|
|||
# without adult supervision. =) It was done this way because a huge
|
||||
# if/elsif construct executes much more quickly than a bunch of
|
||||
# unnecessary database hits.
|
||||
my @types = qw(zipcode text textarea HTMLArea url date email phone integer yesNo selectList radioList checkboxList);
|
||||
my @types = qw(dateTime time zipcode text textarea HTMLArea url date email phone integer yesNo selectList radioList checkboxList);
|
||||
$_[0]->{types} = \@types unless ($_[0]->{types});
|
||||
foreach $type (@{$_[0]->{types}}) {
|
||||
if ($type eq "text") {
|
||||
$hash{text} = WebGUI::International::get(475);
|
||||
} elsif ($type eq "time") {
|
||||
$hash{time} = WebGUI::International::get(971);
|
||||
} elsif ($type eq "dateTime") {
|
||||
$hash{dateTime} = WebGUI::International::get(972);
|
||||
} elsif ($type eq "textarea") {
|
||||
$hash{textarea} = WebGUI::International::get(476);
|
||||
} elsif ($type eq "HTMLArea") {
|
||||
|
|
@ -1364,6 +1403,57 @@ sub textarea {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 time ( hashRef )
|
||||
|
||||
Returns a time field, 24 hour format.
|
||||
|
||||
=over
|
||||
|
||||
=item name
|
||||
|
||||
The name field for this form element.
|
||||
|
||||
=item value
|
||||
|
||||
The default value for this form element. Defaults to the current time (like "15:03:42").
|
||||
|
||||
=item maxlength
|
||||
|
||||
The maximum number of characters to allow in this form element. Defaults to 8.
|
||||
|
||||
=item extras
|
||||
|
||||
If you want to add anything special to this form element like javascript actions, or stylesheet information, you'd add it in here as follows:
|
||||
|
||||
'onChange="this.form.submit()"'
|
||||
|
||||
=item size
|
||||
|
||||
The number of characters wide this form element should be. There should be no reason for anyone to specify this. Defaults to 8.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub time {
|
||||
my $value = WebGUI::DateTime::secondsToTime($_[0]->{value});
|
||||
my $output = _javascriptFile('inputCheck.js');
|
||||
$output .= text({
|
||||
name=>$_[0]->{name},
|
||||
value=>$value,
|
||||
size=>$_[0]->{size} || 8,
|
||||
extras=>'onKeyUp="doInputCheck(this.form.'.$_[0]->{name}.',\'0123456789:\')" '.$_[0]->{extras},
|
||||
maxlength=>$_[0]->{maxlength} || 8
|
||||
});
|
||||
$output .= '<input type="button" style="font-size: 8pt;" onClick="window.timeField = this.form.'.
|
||||
$_[0]->{name}.';clockSet = window.open(\''.$session{config}{extrasURL}.
|
||||
'/timeChooser.html\',\'timeChooser\',\'WIDTH=220,HEIGHT=100\');return false" value="'.
|
||||
WebGUI::International::get(970).'">';
|
||||
return $output;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 url ( hashRef )
|
||||
|
||||
Returns a URL field.
|
||||
|
|
|
|||
|
|
@ -170,10 +170,12 @@ The name of the form variable to retrieve.
|
|||
=cut
|
||||
|
||||
sub dateTime {
|
||||
return (date($_[0]."_date")+time($_[0]."_time"));
|
||||
my $date = WebGUI::FormProcessor::date($_[0]."_date");
|
||||
my $time = WebGUI::FormProcessor::time($_[0]."_time");
|
||||
my $epoch = $date+$time;
|
||||
return $epoch;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 email ( name )
|
||||
|
|
@ -469,9 +471,8 @@ sub process {
|
|||
my ($name, $type, $default) = @_;
|
||||
my $value;
|
||||
$type = "text" if ($type eq "");
|
||||
if (exists $session{form}{$name}) {
|
||||
$value = &$type($name);
|
||||
} else {
|
||||
$value = &$type($name);
|
||||
unless (defined $value) {
|
||||
$value = $default;
|
||||
}
|
||||
if ($value =~ /^[\s]+$/) {
|
||||
|
|
@ -627,7 +628,7 @@ The name of the form variable to retrieve.
|
|||
=cut
|
||||
|
||||
sub time {
|
||||
return WebGUI::DateTime::timeToEpoch($session{form}{$_[0]});
|
||||
return WebGUI::DateTime::timeToSeconds($session{form}{$_[0]});
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -480,6 +480,63 @@ sub date {
|
|||
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 dateTime ( name [ label, value, subtext, uiLevel ] )
|
||||
|
||||
Adds a date time row to this form.
|
||||
|
||||
=over
|
||||
|
||||
=item name
|
||||
|
||||
The name field for this form element.
|
||||
|
||||
=item label
|
||||
|
||||
The left column label for this form row.
|
||||
|
||||
=item value
|
||||
|
||||
The default date and time. Pass as an epoch value. Defaults to today and now.
|
||||
|
||||
=item subtext
|
||||
|
||||
Extra text to describe this form element or to provide special instructions.
|
||||
|
||||
=item uiLevel
|
||||
|
||||
The UI level for this field. See the WebGUI developer's site for details. Defaults to "0".
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub dateTime {
|
||||
my ($output);
|
||||
my ($self, @p) = @_;
|
||||
my ($name, $label, $value, $subtext, $uiLevel) = rearrange([qw(name label value subtext uiLevel)], @p);
|
||||
if (_uiLevelChecksOut($uiLevel)) {
|
||||
$output = WebGUI::Form::dateTime({
|
||||
"name"=>$name,
|
||||
"value"=>$value
|
||||
});
|
||||
$output .= _subtext($subtext);
|
||||
$output = $self->_tableFormRow($label,$output);
|
||||
} else {
|
||||
$output = WebGUI::Form::hidden({
|
||||
"name"=>$name."_date",
|
||||
"value"=>epochToSet($value)
|
||||
});
|
||||
$output .= WebGUI::Form::hidden({
|
||||
"name"=>$name."_time",
|
||||
"value"=>epochToHuman($value,"%j:%n:%s")
|
||||
});
|
||||
}
|
||||
$self->{_data} .= $output;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 email ( name [ label, value, maxlength, extras, subtext, size, uiLevel ] )
|
||||
|
|
@ -1919,6 +1976,72 @@ sub textarea {
|
|||
$self->{_data} .= $output;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 time ( name [ label, value, extras, subtext, size, noDate, uiLevel ] )
|
||||
|
||||
Adds a date row to this form.
|
||||
|
||||
=over
|
||||
|
||||
=item name
|
||||
|
||||
The name field for this form element.
|
||||
|
||||
=item label
|
||||
|
||||
The left column label for this form row.
|
||||
|
||||
=item value
|
||||
|
||||
The default time. Pass as a number of seconds. Defaults to 0.
|
||||
|
||||
=item extras
|
||||
|
||||
If you want to add anything special to this form element like javascript actions, or stylesheet information, you'd add it in here as follows:
|
||||
|
||||
'onChange="this.form.submit()"'
|
||||
|
||||
=item subtext
|
||||
|
||||
Extra text to describe this form element or to provide special instructions.
|
||||
|
||||
=item size
|
||||
|
||||
The number of characters wide this form element should be. There should be no reason for anyone to specify this.
|
||||
|
||||
=item uiLevel
|
||||
|
||||
The UI level for this field. See the WebGUI developer's site for details. Defaults to "0".
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub time {
|
||||
my ($output);
|
||||
my ($self, @p) = @_;
|
||||
my ($name, $label, $value, $extras, $subtext, $size, $uiLevel) =
|
||||
rearrange([qw(name label value extras subtext size uiLevel)], @p);
|
||||
if (_uiLevelChecksOut($uiLevel)) {
|
||||
$output = WebGUI::Form::time({
|
||||
"name"=>$name,
|
||||
"value"=>$value,
|
||||
"size"=>$size,
|
||||
"extras"=>$extras
|
||||
});
|
||||
$output .= _subtext($subtext);
|
||||
$output = $self->_tableFormRow($label,$output);
|
||||
} else {
|
||||
$output = WebGUI::Form::hidden({
|
||||
"name"=>$name,
|
||||
"value"=>secondsToTime($value)
|
||||
});
|
||||
}
|
||||
$self->{_data} .= $output;
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 url ( name [ label, value, maxlength, extras, subtext, size, uiLevel ] )
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ sub www_editProfileCategorySave {
|
|||
if ($session{form}{cid} eq "new") {
|
||||
$session{form}{cid} = getNextId("profileCategoryId");
|
||||
($sequenceNumber) = WebGUI::SQL->quickArray("select max(sequenceNumber) from userProfileCategory");
|
||||
WebGUI::SQL->write("insert into userProfileCategory values ($session{form}{cid}, "
|
||||
WebGUI::SQL->write("insert into userProfileCategory (profileCategoryId,sequenceNumber) values ($session{form}{cid}, "
|
||||
.($sequenceNumber+1).")");
|
||||
}
|
||||
WebGUI::SQL->write("update userProfileCategory set categoryName=".quote($session{form}{categoryName}).",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue