]>
git.proxmox.com Git - pve-manager.git/blob - lib/PVE.old/HTMLForm.pm
9 my ($type, $formdata, $name) = @_;
12 $self->{formdata
} = $formdata;
13 $self->{elements
} = 0;# internal element counter
15 $self->{name
} = $name ?
$name : "frm";
19 $self->{action
} = $self->{formdata
}->{"form_$self->{name}_submit"};
31 # Rebuild Date for IP, Bool and Time fields
32 foreach $key (sort keys (%{$self->{formdata
}})) {
33 if ($key =~ m/ip_[0-9]+_(.*)/) {
34 if (!(exists ($d{$1}))) {
36 defined ($self->{formdata
}->{"ip_0_$1"}) ||
37 ($self->{formdata
}->{"ip_0_$1"} = '0');
38 defined ($self->{formdata
}->{"ip_1_$1"}) ||
39 ($self->{formdata
}->{"ip_1_$1"} = '0');
40 defined ($self->{formdata
}->{"ip_2_$1"}) ||
41 ($self->{formdata
}->{"ip_2_$1"} = '0');
42 defined ($self->{formdata
}->{"ip_3_$1"}) ||
43 ($self->{formdata
}->{"ip_3_$1"} = '0');
44 $self->{formdata
}->{"$1"} =
45 $self->{formdata
}->{"ip_0_$1"} . "." .
46 $self->{formdata
}->{"ip_1_$1"} . "." .
47 $self->{formdata
}->{"ip_2_$1"} . "." .
48 $self->{formdata
}->{"ip_3_$1"};
51 if ($key =~ m/time_[0-9]+_(.*)/) {
52 if (!(exists ($d{$1}))) {
54 defined ($self->{formdata
}->{"time_0_$1"}) ||
55 ($self->{formdata
}->{"time_0_$1"} = '00');
56 defined ($self->{formdata
}->{"time_1_$1"}) ||
57 ($self->{formdata
}->{"time_1_$1"} = '00');
58 $self->{formdata
}->{"$1"} =
59 $self->{formdata
}->{"time_0_$1"} . ":" .
60 $self->{formdata
}->{"time_1_$1"};
63 if ($key =~ m/cb_n_(.*)/) {
64 if (!(exists ($d{$1}))) {
69 foreach my $k (keys (%{$self->{formdata
}})) {
70 if ($k =~ m/cb__(\w+)_$name/) {
74 foreach my $k (keys (%$tmp)) {
78 $self->{formdata
}->{"$1"} = $val;
81 if ($key =~ m/bool_n_(.*)/) {
82 if (!(exists ($d{$1}))) {
85 if ($self->{formdata
}->{"bool_$1"}) {
88 $self->{formdata
}->{"$1"} = $val;
96 return $self->{action
};
100 my ($self, $name, $type, $value, $opt, $width) = @_;
104 my $class = 'normal';
106 my $encvalue = encode_entities
($value);
108 $width = 200 if !$width;
110 my $innerwidth = $width - 5; # width - margin - border - padding
112 my $widthstr = "style='width:${innerwidth}px;'";
115 if ($type eq "text") {
116 $out .= "<input $widthstr class='$class' type='text' name=$name value='$encvalue'/>";
118 elsif ($type eq "textarea") {
119 my $rows = $opt || 4;
120 my $rh = int ($rows*int(1.2*12+1));
121 $out .= "<textarea class='$class' name=$name style='width:${innerwidth}px;height:${rh}px;' ROWS=$rows>$value</textarea>";
123 elsif ($type eq "viewonly") {
124 $out .= "<input $widthstr disabled class='$class' readonly type='text' value='$encvalue'></input>";
127 elsif ($type eq "rotext") {
128 $out .= "<input readonly $widthstr class='$class rotext' type='text' " .
129 "name=${name} title='$encvalue' value='$encvalue'/>";
132 elsif ($type eq "rotime") {
133 my $uid = PVE
::HTMLControls
::get_uid
('mytimer');
134 $out .= "<div $widthstr class='bool input' id='$uid'>$encvalue</div>";
135 $out .= PVE
::HTMLControls
::create_time_viewer
($uid);
138 elsif ($type eq "time") {
139 my @tmp = split(/:/, $value);
141 $out .= "<input type=text name=time_${i}_$name class='$class time' value='$tmp[$i]' />";
142 $out .= " : " if !$i;
146 elsif ($type eq "password") {
147 $out .= "<input $widthstr class='$class' type='password' name=$name value='$encvalue'/>";
150 elsif ($type eq "number") {
151 $out .= "<input $widthstr class='$class' type='text' id='$name' name='$name' value='$encvalue'/>";
154 elsif ($type eq "float") {
155 $out .= "<input $widthstr class='$class' type='text' id='$name' name='$name' value='$encvalue'/>";
157 # boolean value (0, 1)
158 elsif ($type eq "bool" || $type eq "robool" || $type eq 'dynamicbool' || $type eq "nbool") {
159 my $checked = $value ?
'checked' : '';
160 my $id = "bool_$name";
162 $out .= "<label><div class='$class bool' style='width:${innerwidth}px;text-align:center;vertical-align:bottom;'>";
164 if ($type eq 'dynamicbool') {
165 $out .= "<input type='checkbox' name='$id' id='$id' $checked " .
166 "onClick='javascript:pve_form_save(\"$self->{name}\", \"post\");'/>";
167 } elsif ($type eq "robool") {
168 $out .= "<input type='checkbox' disabled name='${id}_ro' $checked/>";
170 $out .= "<input type='checkbox' name='$id' id='$id' $checked/>";
174 $out .= "</div></label>";
175 if ($type eq "robool") {
176 $out .= "<input type='hidden' name='$id' id='$id' $checked/>";
178 $out .= "<input type='hidden' name='bool_n_$name' id='bool_n_$name' value='1'/>";
181 elsif ($type eq "dropdown" || $type eq "dynamicdropdown") {
183 my $table = PVE
::HTMLTable-
>new ([]);
188 if (ref($opt) eq 'ARRAY') {
191 $values = $opt->{values};
192 $defvalue = $opt->{default};
193 foreach my $head (@{$opt->{titles
}}) {
194 push @$titles, 1, undef, $head;
198 $table->add_headline ($titles) if $titles;
200 if (defined($value)) {
203 foreach my $elem (@$values) {
205 if (ref ($elem) eq 'ARRAY') {
206 ($ev, $et, @da) = @$elem;
210 $first = $ev if !$first;
211 $found = 1 if $ev eq $value;
214 $value = defined ($defvalue) ?
$defvalue : $first;
218 foreach my $elem (@$values) {
220 if (ref ($elem) eq 'ARRAY') {
221 ($ev, $et, @da) = @$elem;
226 push @da, $et if !scalar (@da);
228 if (!defined($value)) {
229 $value = defined ($defvalue) ?
$defvalue : $ev;
232 my $checked = ($ev eq $value) ?
'checked="checked"' : '';
234 my $inp = "<input type='radio' short='$et' name='$name' value='$ev' $checked />";
236 foreach my $dv (@da) {
238 push @line, "$inp$dv";
245 $table->add_row ('', @line);
248 my $width1 = $width - 25;
249 $out .= "<div class='selectblock' style='width:${width}px;position:relative;' id='selectblock_$name'>";
250 $out .= "<div class='$class bool' style='white-space:nowrap;overflow:hidden;'><div style='display:block;float:right;'><img alt='' src='/images/tarrdown.png'></div><div style='width:${width1}px;overflow:hidden;'><span>$value</span></div></div>";
252 $out .= "<div class='selectbox'>";
253 $out .= $table->out_table();
257 $out .= "<script language='javascript' type='text/javascript'>";
258 if ($type eq "dynamicdropdown") {
259 $out .= "new Selectbox('selectblock_$name','$self->{name}');";
261 $out .= "new Selectbox('selectblock_$name');";
266 elsif ($type eq "checkbox") {
267 my ($rows, $elref) = @$opt;
269 my @element = @$elref;
270 map { $sel->{$_} = 1; } split ('\s', $value);
271 $out .= "<table cellspacing=2 style='width:${width}px;' class='checkbox'>";
272 for my $i (0 .. $#element/$rows) {
274 for (my $j = 0; $j < $rows; $j++) {
275 my $ind = $i*$rows + $j;
276 last if $ind > $#element;
277 my ($ev, $et) = ($element[$ind][0], $element[$ind][1]);
278 my $val = $sel->{$ev} ?
'checked=true' : '';
279 $out .= "<td><label>$et <input $val type=checkbox name='cb__${ev}_$name'></input></label></td>";
284 $out .= "<input type=hidden name='cb_n_$name' value='$#element'/>";
287 elsif ($type eq "ip") {
288 my @tmp = split(/\./, $value);
290 $out .= "<table border=0 cellspacing=0 cellpadding=0><tr>";
292 my $id = "ip_${i}_$name";
293 my $nextid = $i < 3 ?
"ip_" . ($i+1) . "_$name" : '';
294 my $float = "style='float:left;";
296 <td><input class='$class ip' type='text' id='$id' name='$id' value='$tmp[$i]'
297 onKeyUp="pve_form_validate_natural('$id', 255);"
298 onKeyDown="return pve_form_ip_keyfilter(event,'$id','$nextid');"
302 $out .= "<td align=center style='width:8px;font-family:ARIAL;" .
303 "font-weight:bold; font-size:14px;'>.</td>";
306 $out .= "</tr></table>";
310 elsif ($type eq "file") {
311 # most wrowsers (firefox) ignore setting 'width', dont know how to fix
312 $out .= "<input $widthstr class='$class' type='file' id='$name' name='$name'/>";
315 elsif ($type eq "hidden") {
316 if (defined ($value)) {
317 $out .= "<input type='hidden' id='$name' name=$name value='$encvalue'/>";
321 elsif ($type eq "dow") {
322 my $cl = { mon
=> '', tue
=> '', wed
=> '', thu
=> '',
323 fri
=> '', sat
=> '', sun
=> '' };
324 foreach my $day (split (/\s+/, $value)) {
325 $cl->{$day} = 'checked';
327 my @dn = split (/\s+/, __
("Mon Tue Wed Thu Fri Sat Sun"));
329 $out .= "<div $widthstr class='bool'><table border=0 cellspacing=2 cellpadding=0>";
330 $out .= "<tr align=center><td width='$w'>$dn[0]<td width='$w'>$dn[1]<td width='$w'>$dn[2]";
331 $out .= "<td width='$w'>$dn[3]<td width='$w'>$dn[4]<td width='$w'>$dn[5]<td width='$w'>$dn[6]</tr>";
332 $out .= "<tr align=center>";
333 $out .= "<td><input type=checkbox $cl->{mon} name='$name' value=mon>";
334 $out .= "<td><input type=checkbox $cl->{tue} name='$name' value=tue>";
335 $out .= "<td><input type=checkbox $cl->{wed} name='$name' value=wed>";
336 $out .= "<td><input type=checkbox $cl->{thu} name='$name' value=thu>";
337 $out .= "<td><input type=checkbox $cl->{fri} name='$name' value=fri>";
338 $out .= "<td><input type=checkbox $cl->{sat} name='$name' value=sat>";
339 $out .= "<td><input type=checkbox $cl->{sun} name='$name' value=sun>";
340 $out .= "</tr></table></div>";
343 die "unknown elemet type '$type'";
351 sub create_cmdbutton
{
352 my ($self, $type, $text) = @_;
354 my $href = "javascript:pve_form_save(\"$self->{name}\", \"$type\");";
356 my $out = "<img alt
='' style
='vertical-align:text-bottom;width:15px; height:15px;' src
='/images/tarrright.png'> 
;";
358 $text = $type if !$text;
360 if ($type eq "save
") {
362 } elsif ($type eq "search
") {
363 $text = __('search');
364 } elsif ($type eq "create
") {
365 $text = __('create');
366 } elsif ($type eq "upload
") {
367 $text = __('upload');
370 $out .= "<a href
='$href' class='frmsubmit'>$text</a
>";
376 my ($self, $action) = @_;
378 $action = '' if !$action;
380 return "<form style
='margin:0px;' id
='$self->{name}' action
='$action' method='POST' ENCTYPE
='multipart/form-data' accept-charset
='UTF-8'>";
386 my $out = $self->create_element("form_
$self->{name
}_submit
", 'hidden', 'post');