Added dateTime and time field types.

This commit is contained in:
JT Smith 2003-05-19 04:00:46 +00:00
parent 3966d0803a
commit c954ff636c
7 changed files with 353 additions and 77 deletions

View file

@ -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);
}
#-------------------------------------------------------------------

View file

@ -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.

View file

@ -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]});
}

View file

@ -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 ] )

View file

@ -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}).",