Handle hostnames with upper-case letters
[webmin.git] / Webmin / Select.pm
1 package Webmin::Select;
2 use Webmin::Input;
3 use WebminCore;
4 @ISA = ( "Webmin::Input" );
5
6 =head2 new Webmin::Select(name, value|&values, &options, [multiple-size],
7                           [add-missing], [disabled])
8 Create a menu or multiple-selection field
9 =cut
10 sub new
11 {
12 if (defined(&Webmin::Theme::Select::new)) {
13         return new Webmin::Theme::Select(@_[1..$#_]);
14         }
15 my ($self, $name, $value, $options, $size, $missing, $disabled) = @_;
16 $self = { 'size' => 1 };
17 bless($self);
18 $self->set_name($name);
19 $self->set_value($value);
20 $self->set_options($options);
21 $self->set_size($size) if (defined($size));
22 $self->set_missing($missing);
23 $self->set_disabled($disabled);
24 return $self;
25 }
26
27 =head2 add_option(name, [label])
28 =cut
29 sub add_option
30 {
31 my ($self, $name, $label) = @_;
32 push(@{$self->{'options'}}, [ $name, $label ]);
33 }
34
35 =head2 html()
36 Returns the HTML for this menu or multi-select input
37 =cut
38 sub html
39 {
40 my ($self) = @_;
41 my $dis = $self->{'form'}->get_changefunc($self);
42 return &ui_select($self->get_name(), $self->get_value(),
43                         $self->get_options(), 
44                         $self->get_size() > 1 ? $self->get_size() : undef,
45                         $self->get_size() > 1 ? 1 : 0,
46                         undef,
47                         $self->get_disabled(),
48                         $dis ? "onChange='$dis'" : undef).
49        ($self->get_size() > 1 ? 
50                &ui_hidden("ui_exists_".$self->get_name(), 1) : "");
51 }
52
53 =head2 get_value()
54 For a multi-select field, returns an array ref of all values. For a menu,
55 return just the one value.
56 =cut
57 sub get_value
58 {
59 my ($self) = @_;
60 my $in = $self->{'form'} ? $self->{'form'}->{'in'} : undef;
61 if ($in && (defined($in->{$self->{'name'}}) ||
62             defined($in->{"ui_exists_".$self->{'name'}}))) {
63         if ($self->get_size() > 1) {
64                 return [ split(/\0/, $in->{$self->{'name'}}) ];
65                 }
66         else {
67                 return $in->{$self->{'name'}};
68                 }
69         }
70 elsif ($in && defined($in->{"ui_value_".$self->{'name'}})) {
71         if ($self->get_size() > 1) {
72                 return [ split(/\0/, $in->{"ui_value_".$self->{'name'}}) ];
73                 }
74         else {
75                 return $in->{"ui_value_".$self->{'name'}};
76                 }
77         }
78 else {
79         return $self->{'value'};
80         }
81 }
82
83 sub set_options
84 {
85 my ($self, $options) = @_;
86 $self->{'options'} = $options;
87 }
88
89 sub set_size
90 {
91 my ($self, $size) = @_;
92 $self->{'size'} = $size;
93 }
94
95 sub set_missing
96 {
97 my ($self, $missing) = @_;
98 $self->{'missing'} = $missing;
99 }
100
101 sub get_options
102 {
103 my ($self) = @_;
104 return $self->{'options'};
105 }
106
107 sub get_size
108 {
109 my ($self) = @_;
110 return $self->{'size'};
111 }
112
113 sub get_missing
114 {
115 my ($self) = @_;
116 return $self->{'missing'};
117 }
118
119 =head2 validate()
120 Returns a list of error messages for this field
121 =cut
122 sub validate
123 {
124 my ($self) = @_;
125 if ($self->{'size'} > 1) {
126         my $value = $self->get_value();
127         if ($self->{'mandatory'} && !@$value) {
128                 return ( $self->{'mandatorymsg'} || $text{'ui_mandatory'} );
129                 }
130         }
131 return ( );
132 }
133
134 1;
135