1 package Webmin::Select;
4 @ISA = ( "Webmin::Input" );
6 =head2 new Webmin::Select(name, value|&values, &options, [multiple-size],
7 [add-missing], [disabled])
8 Create a menu or multiple-selection field
12 if (defined(&Webmin::Theme::Select::new)) {
13 return new Webmin::Theme::Select(@_[1..$#_]);
15 my ($self, $name, $value, $options, $size, $missing, $disabled) = @_;
16 $self = { 'size' => 1 };
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);
27 =head2 add_option(name, [label])
31 my ($self, $name, $label) = @_;
32 push(@{$self->{'options'}}, [ $name, $label ]);
36 Returns the HTML for this menu or multi-select input
41 my $dis = $self->{'form'}->get_changefunc($self);
42 return &ui_select($self->get_name(), $self->get_value(),
44 $self->get_size() > 1 ? $self->get_size() : undef,
45 $self->get_size() > 1 ? 1 : 0,
47 $self->get_disabled(),
48 $dis ? "onChange='$dis'" : undef).
49 ($self->get_size() > 1 ?
50 &ui_hidden("ui_exists_".$self->get_name(), 1) : "");
54 For a multi-select field, returns an array ref of all values. For a menu,
55 return just the one value.
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'}}) ];
67 return $in->{$self->{'name'}};
70 elsif ($in && defined($in->{"ui_value_".$self->{'name'}})) {
71 if ($self->get_size() > 1) {
72 return [ split(/\0/, $in->{"ui_value_".$self->{'name'}}) ];
75 return $in->{"ui_value_".$self->{'name'}};
79 return $self->{'value'};
85 my ($self, $options) = @_;
86 $self->{'options'} = $options;
91 my ($self, $size) = @_;
92 $self->{'size'} = $size;
97 my ($self, $missing) = @_;
98 $self->{'missing'} = $missing;
104 return $self->{'options'};
110 return $self->{'size'};
116 return $self->{'missing'};
120 Returns a list of error messages for this field
125 if ($self->{'size'} > 1) {
126 my $value = $self->get_value();
127 if ($self->{'mandatory'} && !@$value) {
128 return ( $self->{'mandatorymsg'} || $text{'ui_mandatory'} );