Handle hostnames with upper-case letters
[webmin.git] / Webmin / Date.pm
1 package Webmin::Date;
2 use Webmin::Input;
3 use Time::Local;
4 use WebminCore;
5 @ISA = ( "Webmin::Input" );
6
7 =head2 new Webmin::Date(name, time, [disabled])
8 Create a new field for selecting a date
9 =cut
10 sub new
11 {
12 if (defined(&Webmin::Theme::Date::new)) {
13         return new Webmin::Theme::Date(@_[1..$#_]);
14         }
15 my ($self, $name, $value, $disabled) = @_;
16 bless($self = { });
17 $self->set_name($name);
18 $self->set_value($value);
19 $self->set_disabled($disabled) if (defined($disabled));
20 return $self;
21 }
22
23 =head2 html()
24 Returns the HTML for the date chooser
25 =cut
26 sub html
27 {
28 my ($self) = @_;
29 my $rv;
30 my @tm = localtime($self->get_value());
31 my $name = $self->get_name();
32 $rv .= &ui_date_input($tm[3], $tm[4]+1, $tm[5]+1900,
33                             "day_".$name, "month_".$name, "year_".$name,
34                             $self->get_disabled())." ".
35        &date_chooser_button("day_".$name, "month_".$name, "year_".$name);
36 return $rv;
37 }
38
39 =head2 get_value()
40 Returns the date as a Unix time number (for zero o'clock)
41 =cut
42 sub get_value
43 {
44 my ($self) = @_;
45 my $in = $self->{'form'} ? $self->{'form'}->{'in'} : undef;
46 if ($in && defined($in->{"day_".$self->{'name'}})) {
47         my $rv = $self->to_time($in);
48         return defined($rv) ? $rv : $self->{'value'};
49         }
50 elsif ($in && defined($in->{"ui_value_".$self->{'name'}})) {
51         return $in->{"ui_value_".$self->{'name'}};
52         }
53 else {
54         return $self->{'value'};
55         }
56 }
57
58 sub to_time
59 {
60 my ($self, $in) = @_;
61 my $day = $in->{"day_".$self->{'name'}};
62 return undef if ($day !~ /^\d+$/);
63 my $month = $in->{"month_".$self->{'name'}}-1;
64 my $year = $in->{"year_".$self->{'name'}}-1900;
65 return undef if ($year !~ /^\d+$/);
66 my $rv = eval { timelocal(0, 0, 0, $day, $month, $year) };
67 return $@ ? undef : $rv;
68 }
69
70 sub set_validation_func
71 {
72 my ($self, $func) = @_;
73 $self->{'validation_func'} = $func;
74 }
75
76 =head2 validate()
77 Ensures that the date is valid
78 =cut
79 sub validate
80 {
81 my ($self) = @_;
82 my $tm = $self->to_time($self->{'form'}->{'in'});
83 if (!defined($tm)) {
84         return ( $text{'ui_edate'} );
85         }
86 if ($self->{'validation_func'}) {
87         my $err = &{$self->{'validation_func'}}($self->get_value(),
88                                                 $self->{'name'},
89                                                 $self->{'form'});
90         return ( $err ) if ($err);
91         }
92 return ( );
93 }
94
95 1;
96