From 304cae43d76159962d6400106173cfc63e15f3e1 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 23 Jan 2007 23:59:27 +0000 Subject: [PATCH] fix: Applied Martin's Date field fix to other fields + other fixes in the form fields --- docs/changelog/7.x.x.txt | 2 ++ lib/WebGUI/Form/Date.pm | 39 +++++++++++++++++++++++++++--------- lib/WebGUI/Form/DateTime.pm | 20 ++++++++++++++---- lib/WebGUI/Form/TimeField.pm | 20 ++++++++++++++---- 4 files changed, 63 insertions(+), 18 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 0e79df8d7..2b88a73af 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -12,6 +12,8 @@ first post of the thread in stead of the current post. (Martin Kamerbeek / Oqapi) - fix: Non-existant variables in CS templates (perlDreamer Consulting, LLC) - fix: Slash_Gateway macro (perlDreamer Consulting, LLC) + - fix: Applied Martin Kamerbeek's fix for Date fields to DateTime and + TimeField fields. Also added a couple fixes for other possible circumstances. 7.3.5 diff --git a/lib/WebGUI/Form/Date.pm b/lib/WebGUI/Form/Date.pm index ec8f08eba..2ca7299fd 100644 --- a/lib/WebGUI/Form/Date.pm +++ b/lib/WebGUI/Form/Date.pm @@ -28,8 +28,9 @@ 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. +a MySQL date string. + +NOTE: Does not do time-zone conversion. =head1 SEE ALSO @@ -114,11 +115,16 @@ Return the date in a human readable format for the Profile system. sub displayValue { my ($self) = @_; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { return $self->session->datetime->epochToHuman($self->get("value"),"%z"); } else { # MySQL format my $value = $self->get("value"); + return $value; } } @@ -133,8 +139,11 @@ it returns undef instead. sub getValueFromPost { my $self = shift; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { - # Epoch format + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name"))); } else { # MySQL format @@ -159,13 +168,19 @@ Renders a date picker control. sub toHtml { my $self = shift; my $value; - if ($self->get("_defaulted") && $self->get("noDate") ) { + # This should probably be rewritten as a cascading ternary + if ($self->get("_defaulted") && $self->get("noDate") ) { # No default date $value = $self->set("value",''); - } elsif (!$self->get("defaultValue") || $self->get("value") =~ m/^\d+$/) { + } + elsif (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # Epoch format $value = $self->set("value",$self->session->datetime->epochToSet($self->get("value"))); - } else { + } + else { # MySQL format $value = $self->get("value"); # NOTE: Cannot fix time zone since we don't have a complete date/time @@ -208,10 +223,14 @@ Renders the form field to HTML as a hidden field rather than whatever field type =cut sub toHtmlAsHidden { - my $self = shift; + my $self = shift; my $value; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { $value = $self->session->datetime->epochToSet($self->get("value"),"%z"); } else { # MySQL format diff --git a/lib/WebGUI/Form/DateTime.pm b/lib/WebGUI/Form/DateTime.pm index c883d3d7a..625ea2325 100644 --- a/lib/WebGUI/Form/DateTime.pm +++ b/lib/WebGUI/Form/DateTime.pm @@ -110,9 +110,13 @@ Returns a validated form post result. If the result does not pass validation, it sub getValueFromPost { my $self = shift; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # Epoch format - return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name")),1); + return $self->session->datetime->setToEpoch($self->session->form->param($self->get("name"))); } else { # MySQL format # YY(YY)?-MM-DD HH:MM:SS @@ -142,7 +146,11 @@ Renders a date picker control. sub toHtml { my $self = shift; my $value; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # Epoch format $value = $self->session->datetime->epochToSet($self->get("value"),1); } else { @@ -194,7 +202,11 @@ sub toHtmlAsHidden { my $self = shift; my $value; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ m/^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { $value = $self->session->datetime->epochToSet($self->get("value"),1); } else { # MySQL format diff --git a/lib/WebGUI/Form/TimeField.pm b/lib/WebGUI/Form/TimeField.pm index ea4a8f4ca..aaf810b5a 100644 --- a/lib/WebGUI/Form/TimeField.pm +++ b/lib/WebGUI/Form/TimeField.pm @@ -108,7 +108,11 @@ adjusted for the user's time zone.. sub getValueFromPost { my $self = shift; - if (!$self->get("defaultValue") || $self->get("defaultValue") =~ /^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # epoch format return $self->session->datetime->timeToSeconds($self->session->form->param($self->get("name")))-($self->session->user->profileField("timeOffset")*3600); } else { @@ -128,9 +132,13 @@ Renders a time field. =cut sub toHtml { - my $self = shift; + my $self = shift; my $value; - if ($self->get("value") =~ /^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # Epoch format $value = $self->session->datetime->secondsToTime($self->get("value")); } else { @@ -159,7 +167,11 @@ Renders the field as a hidden field. sub toHtmlAsHidden { my $self = shift; my $value; - if ($self->get("value") =~ /^\d+$/) { + # This should probably be rewritten as a cascading ternary + if (!$self->get("defaultValue") + || $self->get("defaultValue") =~ m/^\d+$/ + || !$self->get("value") + || $self->get("value") =~ m/^\d+$/) { # Epoch format $value = $self->session->datetime->secondsToTime($self->get("value")); } else {