$ifname) { $ifip = ($isv6ip) ? get_interface_ipv6($ifname) : get_interface_ip($ifname); if (is_null($ifip)) continue; if (is_null($bits)) { if ($ip == $ifip) { $int = get_real_interface($ifname); return $int; } } else { if (ip_in_subnet($ifip, $ip . "/" . $bits)) { $int = get_real_interface($ifname); return $int; } } } return false; } $stepid = '0'; if (isset($_POST['stepid'])) { $stepid = htmlspecialchars($_POST['stepid']); } elseif (isset($_GET['stepid'])) { $stepid = htmlspecialchars($_GET['stepid']); } $xml = ''; if (isset($_GET['xml'])) { $xml = htmlspecialchars($_GET['xml']); } elseif (isset($_POST['xml'])) { $xml = htmlspecialchars($_POST['xml']); } switch ($xml) { case 'openvpn': case 'system': break; default: print_info_box(gettext('ERROR: Could not find wizard file.')); die; } global $listtags; $listtags = array_flip(array( 'additional_files_needed', 'alias', 'build_port_path', 'columnitem', 'depends_on_package', 'field', 'file', 'item', 'menu', 'onetoone', 'option', 'package', 'package', 'queue', 'rowhelperfield', 'rule', 'servernat', 'service', 'step', 'tab', 'template', )); $pkg = parse_xml_config_raw("/usr/local/wizard/{$xml}.xml", 'wizard', false); if (!is_array($pkg)) { print_info_box(sprintf(gettext("ERROR: Could not parse %s wizard file."), $xml)); die; } $totalsteps = $pkg['totalsteps']; if ($pkg['includefile']) { require_once($pkg['includefile']); } if($pkg['step'][$stepid]['stepsubmitbeforesave']) { eval($pkg['step'][$stepid]['stepsubmitbeforesave']); } if ($_POST && !$input_errors) { foreach ($pkg['step'][$stepid]['fields']['field'] as $field) { if(!empty($field['bindstofield']) and $field['type'] <> "submit") { $fieldname = $field['name']; $fieldname = str_replace(" ", "", $fieldname); $fieldname = strtolower($fieldname); // update field with posted values. if($field['unsetfield'] <> "") $unset_fields = "yes"; else $unset_fields = ""; if($field['arraynum'] <> "") $arraynum = $field['arraynum']; else $arraynum = ""; update_config_field( $field['bindstofield'], $_POST[$fieldname], $unset_fields, $arraynum, $field['type']); } } // run custom php code embedded in xml config. if($pkg['step'][$stepid]['stepsubmitphpaction'] <> "") { eval($pkg['step'][$stepid]['stepsubmitphpaction']); } if (!$input_errors) { write_config(); } $stepid++; if($stepid > $totalsteps) { $stepid = $totalsteps; } } $extraBreadcrumb = $pkg['step'][$stepid]['title']; function update_config_field($field, $updatetext, $unset, $arraynum, $field_type) { global $config; $field_split = explode("->",$field); foreach ($field_split as $f) $field_conv .= "['" . $f . "']"; if($field_conv == "") return; if ($arraynum <> "") $field_conv .= "[" . $arraynum . "]"; if(($field_type == "checkbox" and $updatetext <> "on") || $updatetext == "") { /* * item is a checkbox, it should have the value "on" * if it was checked */ $var = "\$config{$field_conv}"; $text = "if (isset({$var})) unset({$var});"; eval($text); return; } if($field_type == "interfaces_selection") { $var = "\$config{$field_conv}"; $text = "if (isset({$var})) unset({$var});"; $text .= "\$config" . $field_conv . " = '" . addslashes($updatetext) . "';"; eval($text); return; } if($unset == "yes") { $text = "unset(\$config" . $field_conv . ");"; eval($text); } $text = "\$config" . $field_conv . " = '" . addslashes($updatetext) . "';"; eval($text); } function redirect_url() { global $config, $title; switch($config['system']['webgui']['protocol']) { case "http": $proto = "http"; break; case "https": $proto = "https"; break; default: $proto = "http"; break; } $port = $config['system']['webgui']['port']; if($port != "") { if(($port == "443" and $proto != "https") or ($port == "80" and $proto != "http")) { $urlport = ":" . $port; } elseif ($port != "80" and $port != "443") { $urlport = ":" . $port; } else { $urlport = ""; } } $http_host = $_SERVER['SERVER_NAME']; $urlhost = $http_host; // If finishing the setup wizard, check if accessing on a LAN or WAN address that changed if($title == "Reload in progress") { if (is_ipaddr($urlhost)) { $host_if = find_ip_interface($urlhost); if ($host_if) { $host_if = convert_real_interface_to_friendly_interface_name($host_if); if ($host_if && is_ipaddr($config['interfaces'][$host_if]['ipaddr'])) $urlhost = $config['interfaces'][$host_if]['ipaddr']; } } else if ($urlhost == $config['system']['hostname']) { $urlhost = $config['wizardtemp']['system']['hostname']; } else if ($urlhost == $config['system']['hostname'] . '.' . $config['system']['domain']) { $urlhost = $config['wizardtemp']['system']['hostname'] . '.' . $config['wizardtemp']['system']['domain']; } } if ($urlhost != $http_host) { file_put_contents('/tmp/setupwizard_lastreferrer', $proto . '://' . $http_host . $urlport . $_SERVER['REQUEST_URI']); } return $proto . '://' . $urlhost . $urlport; } // handle before form display event. do { $oldstepid = $stepid; if ($pkg['step'][$stepid]['stepbeforeformdisplay'] != '') { eval($pkg['step'][$stepid]['stepbeforeformdisplay']); } } while ($oldstepid != $stepid); include("head.inc"); ?> "") { ?>
0) print_input_errors($input_errors); if (isset($savemsg)) print_info_box($savemsg); if ($_GET['message'] != "") print_info_box(htmlspecialchars($_GET['message'])); if ($_POST['message'] != "") print_info_box(htmlspecialchars($_POST['message'])); ?>
"") { foreach ($pkg['step'][$stepid]['fields']['field'] as $field) { $value = $field['value']; $name = $field['name']; $name = preg_replace("/\s+/", "", $name); $name = strtolower($name); if($field['bindstofield'] <> "") { $arraynum = ""; $field_conv = ""; $field_split = explode("->", $field['bindstofield']); // arraynum is used in cases where there is an array of the same field // name such as dnsserver (2 of them) if($field['arraynum'] <> "") $arraynum = "[" . $field['arraynum'] . "]"; foreach ($field_split as $f) $field_conv .= "['" . $f . "']"; if($field['type'] == "checkbox") $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) { \$value = \$config" . $field_conv . $arraynum . "; if (empty(\$value)) \$value = true; }"; else $toeval = "if (isset(\$config" . $field_conv . $arraynum . ")) \$value = \$config" . $field_conv . $arraynum . ";"; eval($toeval); } if(!$field['combinefieldsend']) echo ""; switch ($field['type']) { case "input": if ($field['displayname']) { echo "\n"; } else if(!$field['dontdisplayname']) { echo "\n"; } if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo "\n"; } if(!$field['dontcombinecells']) echo ""; echo "\n"; } else if(!$field['dontdisplayname']) { echo "\n"; } if(!$field['dontcombinecells']) echo ""; echo ""; echo "\n"; } else if(!$field['dontdisplayname']) { echo "\n"; } if($field['size']) $size = " size='" . $field['size'] . "' "; if($field['multiple'] == "yes") $multiple = "multiple=\"multiple\" "; if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo ""; } if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo ""; } if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo ""; } if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo ""; } if(!$field['dontcombinecells']) echo "\n"; } else if(!$field['dontdisplayname']) { echo ""; } $checked = ""; if($value <> "") $checked = " checked=\"checked\""; echo ""; echo "\n"; } } } ?>
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":\n"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "text": echo "
\n"; if($field['description'] <> "") { echo "

" . gettext($field['description']) . "
"; } break; case "inputalias": if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":\n"; $inputaliases[] = $name; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "interfaces_selection": case "interface_select": $size = ""; $multiple = ""; $name = strtolower($name); echo "
\n"; echo ($field['displayname'] ? gettext($field['displayname']) : gettext($field['name'])) . ":\n"; echo "\n"; if($field['size'] <> "") $size = "size=\"{$field['size']}\""; if($field['multiple'] <> "" and $field['multiple'] <> "0") { $multiple = "multiple=\"multiple\""; $name .= "[]"; } echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "password": if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "certca_selection": $size = ""; $multiple = ""; $name = strtolower($name); echo "
\n"; echo ($field['displayname'] ? gettext($field['displayname']) : gettext($field['name'])) . ":\n"; echo "\n"; if($field['size'] <> "") $size = "size=\"{$field['size']}\""; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "cert_selection": $size = ""; $multiple = ""; $name = strtolower($name); echo "
\n"; echo ($field['displayname'] ? gettext($field['displayname']) : gettext($field['name'])) . ":\n"; echo "\n"; if($field['size'] <> "") $size = "size=\"{$field['size']}\""; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "select": if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":\n"; $onchange = ""; foreach ($field['options']['option'] as $opt) { if($opt['enablefields'] <> "") { $onchange = "onchange=\"enableitems(this.selectedIndex);\" "; } } echo "\n"; echo "\n"; if($field['description'] <> "") { echo gettext($field['description']); } break; case "textarea": if ($field['displayname']) { echo "\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "submit": echo "
"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "listtopic": echo "
" . gettext($field['name']) . "
\n"; break; case "subnet_select": if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "language_select": $languagelist = get_locale_list(); if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "timezone_select": $timezonelist = get_zoneinfo(); if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":"; echo "\n"; if($field['description'] <> "") { echo "
" . gettext($field['description']); } break; case "checkbox": if ($field['displayname']) { echo "
\n"; echo gettext($field['displayname']); echo ":\n"; echo gettext($field['name']); echo ":\n"; if($field['description'] <> "") { echo gettext($field['description']); } break; } if($field['typehint'] <> "") { echo $field['typehint']; } if($field['warning'] <> "") { echo "
" . $field['warning'] . ""; } if(!$field['combinefieldsbegin']) { if (!$field['dontcombinecells']) echo "
"") { foreach ($pkg['step'][$stepid]['fields']['field'] as $field) { switch ($field['type']) { case "refresh": if($field['page'] <> "" && $field['time'] <> "") { echo ''; } break 2; } } } ?>
"") { // create a fieldname loop that can be used with javascript // hide and enable features. echo "\n\n\n"; } ?> "") { // handle after form display event. eval($pkg['step'][$stepid]['stepafterformdisplay']); } if($pkg['step'][$stepid]['javascriptafterformdisplay'] <> "") { // handle after form display event. echo "\n\n\n"; } include('foot.inc');