From 9dfa47cccbf6cf4f98d807c1c61400fc138e18ff Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Thu, 29 Nov 2007 08:20:05 +0000 Subject: Bug 397099: Date/Time Fields should have a JavaScript widget for picking a date Patch By Max Kanat-Alexander r=LpSolit, r=glob, a=mkanat --- Bugzilla/Bug.pm | 6 ++++++ Bugzilla/Install/Filesystem.pm | 29 +++++++++++++++++++---------- Bugzilla/Object.pm | 14 +++++++++++++- Bugzilla/Util.pm | 6 +++--- 4 files changed, 41 insertions(+), 14 deletions(-) (limited to 'Bugzilla') diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index eaf6a9a83..a8f1ede5d 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -201,6 +201,12 @@ use constant NUMERIC_COLUMNS => qw( remaining_time ); +sub DATE_COLUMNS { + my @fields = Bugzilla->get_fields( + { custom => 1, type => FIELD_TYPE_DATETIME }); + return map { $_->name } @fields; +} + # This is used by add_comment to know what we validate before putting in # the DB. use constant UPDATE_COMMENT_COLUMNS => qw( diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm index c96e8d12f..a24dc28ca 100644 --- a/Bugzilla/Install/Filesystem.pm +++ b/Bugzilla/Install/Filesystem.pm @@ -211,16 +211,13 @@ sub FILESYSTEM { foreach my $skin_dir ("$skinsdir/custom", <$skinsdir/contrib/*>) { next unless -d $skin_dir; next if basename($skin_dir) =~ /^cvs$/i; - foreach (<$skinsdir/standard/*.css>) { - my $standard_css_file = basename($_); - my $custom_css_file = "$skin_dir/$standard_css_file"; - $create_files{$custom_css_file} = { perms => $ws_readable, contents => <) { + _add_custom_css($skin_dir, basename($base_css), \%create_files, $ws_readable); + } + foreach my $dir_css (<$skinsdir/standard/*/*.css>) { + $dir_css =~ s{.+?([^/]+/[^/]+)$}{$1}; + _add_custom_css($skin_dir, $dir_css, \%create_files, $ws_readable); } } @@ -378,6 +375,18 @@ EOT } +# A simple helper for creating "empty" CSS files. +sub _add_custom_css { + my ($skin_dir, $path, $create_files, $perms) = @_; + $create_files->{"$skin_dir/$path"} = { perms => $perms, contents => <{htaccess}}); diff --git a/Bugzilla/Object.pm b/Bugzilla/Object.pm index 9e155bc10..2cf671bc2 100644 --- a/Bugzilla/Object.pm +++ b/Bugzilla/Object.pm @@ -27,12 +27,15 @@ use Bugzilla::Constants; use Bugzilla::Util; use Bugzilla::Error; +use Date::Parse; + use constant NAME_FIELD => 'name'; use constant ID_FIELD => 'id'; use constant LIST_ORDER => NAME_FIELD; use constant UPDATE_VALIDATORS => {}; use constant NUMERIC_COLUMNS => (); +use constant DATE_COLUMNS => (); ############################### #### Initialization #### @@ -237,6 +240,7 @@ sub update { my $old_self = $self->new($self->id); my %numeric = map { $_ => 1 } $self->NUMERIC_COLUMNS; + my %date = map { $_ => 1 } $self->DATE_COLUMNS; my (@update_columns, @values, %changes); foreach my $column ($self->UPDATE_COLUMNS) { my ($old, $new) = ($old_self->{$column}, $self->{$column}); @@ -246,7 +250,9 @@ sub update { if (!defined $new || !defined $old) { next if !defined $new && !defined $old; } - elsif ( ($numeric{$column} && $old == $new) || $old eq $new ) { + elsif ( ($numeric{$column} && $old == $new) + || ($date{$column} && str2time($old) == str2time($new)) + || $old eq $new ) { next; } @@ -474,6 +480,12 @@ current value in the database. It only updates columns that have changed. Any column listed in NUMERIC_COLUMNS is treated as a number, not as a string, during these comparisons. +=item C + +This is much like L, except that it treats strings as +dates when being compared. So, for example, C<2007-01-01> would be +equal to C<2007-01-01 00:00:00>. + =back =head1 METHODS diff --git a/Bugzilla/Util.pm b/Bugzilla/Util.pm index 40065c5c9..aad2c5672 100644 --- a/Bugzilla/Util.pm +++ b/Bugzilla/Util.pm @@ -465,9 +465,9 @@ sub validate_time { my $ts = str2time($time); if ($ts) { $time2 = time2str("%H:%M:%S", $ts); - - $time =~ s/(\d+):(\d+?):(\d+?)/$1:$2:$3/; - $time2 =~ s/(\d+):(\d+?):(\d+?)/$1:$2:$3/; + if (trim($time) =~ /^\d\d:\d\d$/) { + $time .= ':00'; + } } my $ret = ($ts && $time eq $time2); return $ret ? 1 : 0; -- cgit v1.2.3-24-g4f1b