Handle hostnames with upper-case letters
[webmin.git] / Webmin / InputTable.pm
1 package Webmin::InputTable;
2 use Webmin::Table;
3 use WebminCore;
4 @ISA = ( "Webmin::Table" );
5
6 =head2 new Webmin::InputTable(&headings, [width], [name], [heading])
7 A table containing multiple rows of inputs, each of which is the same
8 =cut
9 sub new
10 {
11 if (defined(&Webmin::Theme::InputTable::new) &&
12     caller() !~ /Webmin::Theme::InputTable/) {
13         return new Webmin::Theme::InputTable(@_[1..$#_]);
14         }
15 my $self = defined(&Webmin::Theme::Table::new) ? Webmin::Theme::Table::new(@_)
16                                                : Webmin::Table::new(@_);
17 bless($self);
18 $self->{'rowcount'} = 0;
19 return $self;
20 }
21
22 =head2 set_inputs(&inputs)
23 Sets the objects to be used for each row
24 =cut
25 sub set_inputs
26 {
27 my ($self, $classes) = @_;
28 $self->{'classes'} = $classes;
29 }
30
31 =head2 add_values(&values)
32 Adds a row of inputs, with the given values
33 =cut
34 sub add_values
35 {
36 my ($self, $values) = @_;
37 my @row;
38 for(my $i=0; $i<@$values; $i++) {
39         my $cls = $self->{'classes'}->[$i];
40         my $newin = { %$cls };
41         bless($newin, ref($cls));
42         $newin->set_value($values->[$i]);
43         $newin->set_name($newin->get_name()."_".$self->{'rowcount'});
44         $newin->set_form($self->{'form'}) if ($self->{'form'});
45         push(@row, $newin);
46         }
47 $self->add_row(\@row);
48 $self->{'rowcount'}++;
49 }
50
51 =head2 get_values(row)
52 Returns the values of the inputs in the given row
53 =cut
54 sub get_values
55 {
56 my ($self, $row) = @_;
57 my @rv;
58 foreach my $i (@{$self->{'rows'}->[$row]}) {
59         if (ref($i) && $i->isa("Webmin::Input")) {
60                 push(@rv, $i->get_value());
61                 }
62         }
63 return @rv;
64 }
65
66 =head2 list_inputs()
67 =cut
68 sub list_inputs
69 {
70 my ($self) = @_;
71 my @rv = Webmin::Table::list_inputs($self);
72 foreach my $r (@{$self->{'rows'}}) {
73         foreach my $i (@$r) {
74                 if ($i && ref($i) && $i->isa("Webmin::Input")) {
75                         push(@rv, $i);
76                         }
77                 }
78         }
79 return @rv;
80 }
81
82 sub get_rowcount
83 {
84 my ($self) = @_;
85 return $self->{'rowcount'};
86 }
87
88 =head2 validate()
89 Validates all inputs, and returns a list of error messages
90 =cut
91 sub validate
92 {
93 my ($self) = @_;
94 my $seli = $self->{'selectinput'};
95 my @errs;
96 if ($seli) {
97         push(@errs, map { [ $seli->get_name(), $_ ] } $seli->validate());
98         }
99 foreach my $i (@{$self->{'inputs'}}) {
100         foreach my $e ($i->validate()) {
101                 push(@errs, [ $i->get_name(), $e ]);
102                 }
103         }
104 my $k = 1;
105 foreach my $r (@{$self->{'rows'}}) {
106         my $j = 0;
107         my $skip;
108         if (defined($self->{'control'})) {
109                 if ($r->[$self->{'control'}]->get_value() eq "") {
110                         $skip = 1;
111                         }
112                 }
113         foreach my $i (@$r) {
114                 if ($i && ref($i) && $i->isa("Webmin::Input") && !$skip) {
115                         my $label = &text('ui_rowlabel', $k, $self->{'headings'}->[$j]);
116                         foreach my $e ($i->validate()) {
117                                 push(@errs, [ $i->get_name(), $label." ".$e ]);
118                                 }
119                         }
120                 $j++;
121                 }
122         $k++;
123         }
124 return @errs;
125 }
126
127 =head2 set_control(column)
128 Sets the column for which an empty value means no validation should be done
129 =cut
130 sub set_control
131 {
132 my ($self, $control) = @_;
133 $self->{'control'} = $control;
134 }
135
136 1;
137