Просмотр исходного кода

Start refactoring <select> (#2907)

* Add new <select> HTML/CSS and apply to Edit User form

* Apply new selects to Edit Cron form

* Apply new selects to Add Cron form

* Apply new selects to Add User form

* Apply new selects to Add/Edit Web forms

* Remove hidden/unused field

* Due to change in last commit

* Apply new selects to Edit Server form

* Time to clean up a lot of old code

Co-authored-by: Jaap Marcus <9754650+jaapmarcus@users.noreply.github.com>
Alec Rust 3 лет назад
Родитель
Сommit
d06e10258b

+ 15 - 452
web/add/web/index.php

@@ -20,12 +20,7 @@ if (!empty($_POST['ok'])) {
     if (empty($_POST['v_ip'])) {
         $errors[] = _('ip');
     }
-    if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))&& (empty($_POST['v_letsencrypt']))) {
-        $errors[] = _('ssl certificate');
-    }
-    if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))&& (empty($_POST['v_letsencrypt']))) {
-        $errors[] = _('ssl key');
-    }
+    
     if (!empty($errors[0])) {
         foreach ($errors as $i => $error) {
             if ($i == 0) {
@@ -37,16 +32,6 @@ if (!empty($_POST['ok'])) {
         $_SESSION['error_msg'] = sprintf(_('Field "%s" can not be blank.'), $error_msg);
     }
 
-    // Check stats password length
-    if ((!empty($v_stats)) && (empty($_SESSION['error_msg']))) {
-        if (!empty($_POST['v_stats_user'])) {
-            $pw_len = strlen($_POST['v_stats_password']);
-            if ($pw_len < 6) {
-                $_SESSION['error_msg'] = _('Password is too short.', $error_msg);
-            }
-        }
-    }
-
     // Set domain to lowercase and remove www prefix
     $v_domain = preg_replace("/^www\./i", "", $_POST['v_domain']);
     $v_domain = strtolower($v_domain);
@@ -67,84 +52,10 @@ if (!empty($_POST['ok'])) {
     }
 
     // Define domain aliases
-    if (empty($_POST['v_aliases'])) {
-        $v_aliases = '';
-    } else {
-        $v_aliases = $_POST['v_aliases'];
-    }
-
-    $aliases = preg_replace("/\n/", ",", $v_aliases);
-    $aliases = preg_replace("/\r/", ",", $aliases);
-    $aliases = preg_replace("/\t/", ",", $aliases);
-    $aliases = preg_replace("/ /", ",", $aliases);
-    $aliases_arr = explode(",", $aliases);
-    $aliases_arr = array_unique($aliases_arr);
-    $aliases_arr = array_filter($aliases_arr);
-    $aliases = implode(",", $aliases_arr);
-    $aliases = quoteshellarg($aliases);
-
-
+    $v_aliases = '';
+    
     // Define proxy extensions
-    if (empty($_POST['v_proxy_ext'])) {
-        # not set on nginx only
-        $_POST['v_proxy_ext'] = '';
-    }
-    $v_proxy_ext = $_POST['v_proxy_ext'];
-    $proxy_ext = preg_replace("/\n/", ",", $v_proxy_ext);
-    $proxy_ext = preg_replace("/\r/", ",", $proxy_ext);
-    $proxy_ext = preg_replace("/\t/", ",", $proxy_ext);
-    $proxy_ext = preg_replace("/ /", ",", $proxy_ext);
-    $proxy_ext_arr = explode(",", $proxy_ext);
-    $proxy_ext_arr = array_unique($proxy_ext_arr);
-    $proxy_ext_arr = array_filter($proxy_ext_arr);
-    $proxy_ext = implode(",", $proxy_ext_arr);
-    $proxy_ext = quoteshellarg($proxy_ext);
-
-    // Define other options
-    if (empty($_POST['v_ssl'])) {
-        $_POST['v_ssl'] = '';
-    }
-    $v_ssl = $_POST['v_ssl'];
-    $v_ssl_crt = $_POST['v_ssl_crt'];
-    $v_ssl_key = $_POST['v_ssl_key'];
-    $v_ssl_ca = $_POST['v_ssl_ca'];
-    if (empty($_POST['v_letsencrypt'])) {
-        $_POST['v_letsencrypt'] = '';
-    }
-    $v_letsencrypt = $_POST['v_letsencrypt'];
-    if (empty($_POST['v_stats'])) {
-        $_POST['v_stats'] = '';
-    }
-    $v_stats = quoteshellarg($_POST['v_stats']);
-    $v_stats_user = $_POST['v_stats_user'];
-    $v_stats_password = $_POST['v_stats_user'];
-    $v_custom_doc_domain = $_POST['v-custom-doc-domain'];
-    $v_custom_doc_folder = $_POST['v-custom-doc-folder'];
-    $v_custom_doc_root_prepath = '/home/'.$user_plain.'/web/';
-
-    if (empty($_POST['v_ftp'])) {
-        $_POST['v_ftp'] = '';
-    }
-    $v_ftp = $_POST['v_ftp'];
-    if (empty($_POST['v_ftp_user'])) {
-        $_POST['v_ftp_user'] = '';
-    }
-    $v_ftp_user = $_POST['v_ftp_user'];
-    if (empty($_POST['v_ftp_password'])) {
-        $_POST['v_ftp_password'] = '';
-    }
-    $v_ftp_password = $_POST['v_ftp_password'];
-    if (empty($_POST['v_ftp_email'])) {
-        $_POST['v_ftp_email'] = '';
-    }
-    $v_ftp_email = $_POST['v_ftp_email'];
-
-    if (!empty($v_domain)) {
-        if (empty($v_ftp_user_prepath)) {
-            $v_ftp_user_prepath = '/home/'. $user_plain . "/web";
-        }
-        $v_ftp_user_prepath .= $v_domain;
-    }
+    $_POST['v_proxy_ext'] = '';
 
     exec(HESTIA_CMD."v-list-user ".$user." json", $output, $return_var);
     $user_config = json_decode(implode('', $output), true);
@@ -153,60 +64,21 @@ if (!empty($_POST['ok'])) {
     $v_template = $user_config[$user_plain]['WEB_TEMPLATE'];
     $v_backend_template = $user_config[$user_plain]['BACKEND_TEMPLATE'];
     $v_proxy_template = $user_config[$user_plain]['PROXY_TEMPLATE'];
-
-    // Set advanced option checkmark
-    if (!empty($_POST['v_proxy'])) {
-        $v_adv = 'yes';
-    }
-    $v_proxy = "yes";
-    if (!empty($_POST['v_ftp'])) {
-        $v_adv = 'yes';
-    }
-    if ($_POST['v_proxy_ext'] != $v_proxy_ext) {
-        $v_adv = 'yes';
-    }
-
-    if ((!empty($_POST['v_aliases'])) && ($_POST['v_aliases'] != 'www.'.$_POST['v_domain'])) {
-        $v_adv = 'yes';
-    }
-    if (!empty($_POST['v_ssl'])) {
-        $v_adv = 'yes';
-    }
-    if ((!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key']))) {
-        $v_adv = 'yes';
-    }
-    if ((!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none')) {
-        $v_adv = 'yes';
-    }
-    if ((!empty($_POST['v_letsencrypt']))) {
-        $v_adv = 'yes';
-    }
-    if (!empty($_POST['v_custom_doc_root_check'])) {
-        $v_adv = 'yes';
-        $v_custom_doc_root = 1;
-    }
-
-    // Check advanced features
-    if (empty($_POST['v_dns'])) {
-        $v_dns = 'off';
-        $_POST['v_dns'] = '';
-    }
-    if (empty($_POST['v_mail'])) {
-        $v_mail = 'off';
-        $_POST['v_mail'] = '';
-    }
-    if (empty($_POST['v_proxy'])) {
-        $v_proxy = 'off';
-    }
-
+    
     // Add web domain
     if (empty($_SESSION['error_msg'])) {
-        exec(HESTIA_CMD."v-add-web-domain ".$user." ".quoteshellarg($v_domain)." ".$v_ip." 'yes' ".$aliases." ".$proxy_ext, $output, $return_var);
+        exec(HESTIA_CMD."v-add-web-domain ".$user." ".quoteshellarg($v_domain)." ".$v_ip." 'yes'", $output, $return_var);
         check_return_code($return_var, $output);
         unset($output);
         $domain_added = empty($_SESSION['error_msg']);
     }
-
+    
+    if (empty($_POST['v_dns'])){
+        $_POST['v_dns'] = 'no';
+    }
+    if (empty($_POST['v_mail'])){
+        $_POST['v_mail'] = 'no';
+    }
     // Add DNS domain
     if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
         exec(HESTIA_CMD."v-add-dns-domain ".$user." ".quoteshellarg($v_domain)." ".$v_public_ip." '' '' '' '' '' '' '' '' 'no'", $output, $return_var);
@@ -214,18 +86,6 @@ if (!empty($_POST['ok'])) {
         unset($output);
     }
 
-    // Add DNS for domain aliases
-    if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
-        foreach ($aliases_arr as $alias) {
-            if ($alias != "www.".$v_domain) {
-                $alias = quoteshellarg($alias);
-                exec(HESTIA_CMD."v-add-dns-on-web-alias ".$user." ".$alias." ".$v_ip." 'no'", $output, $return_var);
-                check_return_code($return_var, $output);
-                unset($output);
-            }
-        }
-    }
-
     // Add mail domain
     if (($_POST['v_mail'] == 'on') && (empty($_SESSION['error_msg']))) {
         exec(HESTIA_CMD."v-add-mail-domain ".$user." ".quoteshellarg($v_domain), $output, $return_var);
@@ -233,309 +93,15 @@ if (!empty($_POST['ok'])) {
         unset($output);
     }
 
-    // Change template
-    if (($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) {
-        exec(HESTIA_CMD."v-change-web-domain-tpl ".$user." ".quoteshellarg($v_domain)." ".quoteshellarg($_POST['v_template'])." 'no'", $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-        $restart_web = 'yes';
-    }
-    // Change backend template
-    if ((!empty($_SESSION['WEB_BACKEND'])) && ($v_backend_template != $_POST['v_backend_template']) && (empty($_SESSION['error_msg']))) {
-        $v_backend_template = $_POST['v_backend_template'];
-        exec(HESTIA_CMD."v-change-web-domain-backend-tpl ".$user." ".quoteshellarg($v_domain)." ".quoteshellarg($v_backend_template), $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-    }
-    // Change proxy template / Update extension list
-    if ((!empty($_SESSION['PROXY_SYSTEM'])) && (!empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) {
-        $ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']);
-        $ext = preg_replace("/,/", " ", $ext);
-        $ext = preg_replace('/\s+/', ' ', $ext);
-        $ext = trim($ext);
-        $ext = str_replace(' ', ", ", $ext);
-        if (($v_proxy_template != $_POST['v_proxy_template']) || ($v_proxy_ext != $ext)) {
-            $ext = str_replace(', ', ",", $ext);
-            if (!empty($_POST['v_proxy_template'])) {
-                $v_proxy_template = $_POST['v_proxy_template'];
-            }
-            exec(HESTIA_CMD."v-change-web-domain-proxy-tpl ".$user." ".quoteshellarg($v_domain)." ".quoteshellarg($v_proxy_template)." ".quoteshellarg($ext)." 'no'", $output, $return_var);
-            check_return_code($return_var, $output);
-            $v_proxy_ext = str_replace(',', ', ', $ext);
-            unset($output);
-            $restart_proxy = 'yes';
-        }
-    }
-
-
-    // Add Lets Encrypt support
-    if ((!empty($_POST['v_letsencrypt'])) && (empty($_SESSION['error_msg']))) {
-        exec(HESTIA_CMD."v-schedule-letsencrypt-domain ".$user." ".quoteshellarg($v_domain), $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-
-        if (!empty($_POST['v_ssl_forcessl']) && $_POST['v_ssl_forcessl'] = 'yes') {
-            exec(HESTIA_CMD."v-add-web-domain-ssl-preset ".$user." ".quoteshellarg($v_domain)." 'yes'", $output, $return_var);
-            check_return_code($return_var, $output);
-            unset($output);
-        }
-    } else {
-        // Add SSL certificates only if Lets Encrypt is off
-        if ((!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
-            exec('mktemp -d', $output, $return_var);
-            $tmpdir = $output[0];
-            unset($output);
-
-            // Save certificate
-            if (!empty($_POST['v_ssl_crt'])) {
-                $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w');
-                fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
-                fwrite($fp, "\n");
-                fclose($fp);
-            }
-
-            // Save private key
-            if (!empty($_POST['v_ssl_key'])) {
-                $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w');
-                fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
-                fwrite($fp, "\n");
-                fclose($fp);
-            }
-
-            // Save CA bundle
-            if (!empty($_POST['v_ssl_ca'])) {
-                $fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w');
-                fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca']));
-                fwrite($fp, "\n");
-                fclose($fp);
-            }
-
-            $v_ssl_home = quoteshellarg($_POST['v_ssl_home']);
-            exec(HESTIA_CMD."v-add-web-domain-ssl ".$user." ".quoteshellarg($v_domain)." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var);
-            check_return_code($return_var, $output);
-            unset($output);
-
-            if (!empty($_POST['v_ssl_forcessl']) && $_POST['v_ssl_forcessl'] = 'yes') {
-                exec(HESTIA_CMD."v-add-web-domain-ssl-force ".$user." ".quoteshellarg($v_domain), $output, $return_var);
-                check_return_code($return_var, $output);
-                unset($output);
-            }
-
-            // Cleanup certificate tempfiles
-            if (!empty($_POST['v_ssl_crt'])) {
-                unlink($tmpdir."/".$v_domain.".crt");
-            }
-            if (!empty($_POST['v_ssl_key'])) {
-                unlink($tmpdir."/".$v_domain.".key");
-            }
-            if (!empty($_POST['v_ssl_ca'])) {
-                unlink($tmpdir."/".$v_domain.".ca");
-            }
-            rmdir($tmpdir);
-        }
-    }
-
-    // Add web stats
-    if ((!empty($_POST['v_stats'])) && ($_POST['v_stats'] != 'none') && (empty($_SESSION['error_msg']))) {
-        $v_stats = quoteshellarg($_POST['v_stats']);
-        exec(HESTIA_CMD."v-add-web-domain-stats ".$user." ".quoteshellarg($v_domain)." ".$v_stats, $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-    }
-
-    // Add web stats password
-    if ((!empty($_POST['v_stats_user'])) && (empty($_SESSION['error_msg']))) {
-        $v_stats_user = quoteshellarg($_POST['v_stats_user']);
-        $v_stats_password = tempnam("/tmp", "vst");
-        $fp = fopen($v_stats_password, "w");
-        fwrite($fp, $_POST['v_stats_password']."\n");
-        fclose($fp);
-        exec(HESTIA_CMD."v-add-web-domain-stats-user ".$user." ".quoteshellarg($v_domain)." ".$v_stats_user." ".$v_stats_password, $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-        unlink($v_stats_password);
-        $v_stats_password = quoteshellarg($_POST['v_stats_password']);
-    }
-
-    if (!empty($_POST['v-custom-doc-domain']) && !empty($_POST['v_custom_doc_root_check']) && $v_custom_doc_root_prepath.$v_custom_doc_domain.'/public_html'.$v_custom_doc_folder != $v_custom_doc_root) {
-        if ($_POST['v-custom-doc-domain'] == $v_domain && empty($_POST['v-custom-doc-folder'])) {
-        } else {
-            $v_custom_doc_domain = quoteshellarg($_POST['v-custom-doc-domain']);
-            if (substr($_POST['v-custom-doc-folder'], -1) == '/') {
-                $v_custom_doc_folder = quoteshellarg(substr($_POST['v-custom-doc-folder'], 0, -1));
-            } else {
-                $v_custom_doc_folder = quoteshellarg($_POST['v-custom-doc-folder']);
-            }
-            $v_custom_doc_folder = quoteshellarg($_POST['v-custom-doc-folder']);
-            $v_domain = quoteshellarg(trim($_POST['v_domain']));
-
-            exec(HESTIA_CMD."v-change-web-domain-docroot ".$user." ".$v_domain." ".$v_custom_doc_domain." ".$v_custom_doc_folder." yes", $output, $return_var);
-            check_return_code($return_var, $output);
-            unset($output);
-            $v_custom_doc_root = 1;
-        }
-    } else {
-        unset($v_custom_doc_root);
-    }
-
-
-    // Restart DNS server
-    if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
-        exec(HESTIA_CMD."v-restart-dns", $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-    }
-
-    // Restart web server
-    if (empty($_SESSION['error_msg'])) {
-        exec(HESTIA_CMD."v-restart-web", $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-    }
-
-    // Restart proxy server
-    if ((!empty($_SESSION['PROXY_SYSTEM'])) && ($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) {
-        exec(HESTIA_CMD."v-restart-proxy", $output, $return_var);
-        check_return_code($return_var, $output);
-        unset($output);
-    }
-
-    // Add FTP
-    if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) {
-        $v_ftp_users_updated = array();
-        foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) {
-            if ($v_ftp_user_data['is_new'] == 1) {
-                if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) {
-                    $_SESSION['error_msg'] = _('Please enter valid email address.');
-                }
-                if (empty($v_ftp_user_data['v_ftp_user'])) {
-                    $errors[] = 'ftp user';
-                }
-                if (empty($v_ftp_user_data['v_ftp_password'])) {
-                    $errors[] = 'ftp user password';
-                }
-                if (!empty($errors[0])) {
-                    foreach ($errors as $i => $error) {
-                        if ($i == 0) {
-                            $error_msg = $error;
-                        } else {
-                            $error_msg = $error_msg.", ".$error;
-                        }
-                    }
-                    $_SESSION['error_msg'] = sprintf(_('Field "%s" can not be blank.'), $error_msg);
-                }
-
-                // Validate email
-                if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) {
-                    $_SESSION['error_msg'] = _('Please enter valid email address.');
-                }
-
-                // Check ftp password length
-                if ((!empty($v_ftp_user_data['v_ftp']))) {
-                    if (!empty($v_ftp_user_data['v_ftp_user'])) {
-                        $pw_len = strlen($v_ftp_user_data['v_ftp_password']);
-                        if ($pw_len < 6) {
-                            $_SESSION['error_msg'] =  sprintf(_('Password is too short.'), $error_msg);
-                        }
-                    }
-                }
-
-                $v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user_plain."_/i", "", $v_ftp_user_data['v_ftp_user']);
-                $v_ftp_username      = $v_ftp_user_data['v_ftp_user'];
-                $v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user'];
-                $v_ftp_user = quoteshellarg($v_ftp_user_data['v_ftp_user']);
-                if ($domain_added) {
-                    $v_ftp_path = quoteshellarg(trim($v_ftp_user_data['v_ftp_path']));
-                    $v_ftp_password = tempnam("/tmp", "vst");
-                    $fp = fopen($v_ftp_password, "w");
-                    fwrite($fp, $v_ftp_user_data['v_ftp_password']."\n");
-                    fclose($fp);
-                    exec(HESTIA_CMD."v-add-web-domain-ftp ".$user." ".quoteshellarg($v_domain)." ".$v_ftp_user." ".$v_ftp_password . " " . $v_ftp_path, $output, $return_var);
-                    check_return_code($return_var, $output);
-                    unset($output);
-                    unlink($v_ftp_password);
-                    if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) {
-                        $to = $v_ftp_user_data['v_ftp_email'];
-                        $subject = _("FTP login credentials");
-                        $from = "noreply@".$v_domain;
-                        $from_name = _('Hestia Control Panel');
-                        $mailtext = sprintf(_('FTP_ACCOUNT_READY'), $v_domain, $user_plain, $v_ftp_user_data['v_ftp_user'], $v_ftp_user_data['v_ftp_password']);
-                        send_email($to, $subject, $mailtext, $from, $from_name);
-                        unset($v_ftp_email);
-                    }
-                } else {
-                    $return_var = -1;
-                }
-
-                if ($return_var == 0) {
-                    $v_ftp_password = "••••••••";
-                    $v_ftp_user_data['is_new'] = 0;
-                } else {
-                    $v_ftp_user_data['is_new'] = 1;
-                }
-
-                $v_ftp_username = $user.'_'.$v_ftp_user_data['v_ftp_user'];
-                $v_ftp_users_updated[] = array(
-                    'is_new'            => $v_ftp_user_data['is_new'],
-                    'v_ftp_user'        => $return_var == 0 ? $v_ftp_username_full : $v_ftp_username,
-                    'v_ftp_password'    => $v_ftp_password,
-                    'v_ftp_path'        => $v_ftp_user_data['v_ftp_path'],
-                    'v_ftp_email'       => $v_ftp_user_data['v_ftp_email'],
-                    'v_ftp_pre_path'    => $v_ftp_user_prepath
-                );
-                continue;
-            }
-        }
-
-        if (!empty($_SESSION['error_msg']) && $domain_added) {
-            $_SESSION['ok_msg'] = sprintf(_('WEB_DOMAIN_CREATED_OK'), htmlentities($v_domain), htmlentities($v_domain));
-            $_SESSION['flash_error_msg'] = $_SESSION['error_msg'];
-            $url = '/edit/web/?domain='.strtolower(preg_replace("/^www\./i", "", $v_domain));
-            header('Location: ' . $url);
-            exit;
-        }
-    }
-
     // Flush field values on success
     if (empty($_SESSION['error_msg'])) {
         $_SESSION['ok_msg'] = sprintf(_('WEB_DOMAIN_CREATED_OK'), htmlentities($v_domain), htmlentities($v_domain));
         unset($v_domain);
         unset($v_aliases);
-        unset($v_ssl);
-        unset($v_ssl_crt);
-        unset($v_ssl_key);
-        unset($v_ssl_ca);
-        unset($v_stats_user);
-        unset($v_stats_password);
-        unset($v_ftp);
     }
 }
 // Define user variables
 $v_aliases = '';
-$v_stats_user = '';
-$v_stats_password = '';
-$v_domain = '';
-$v_custom_doc_domain = '';
-$v_custom_doc_folder = '';
-$v_ssl = '';
-$v_ssl_crt = '';
-$v_ssl_key = '';
-$v_ssl_ca = '';
-$v_ftp_users = array();
-$v_letsencrypt = '';
-$v_ftp_pre_path_new_user = '';
-
-$v_ftp_user_prepath = '/home/'. $user_plain . "/web";
-$v_ftp_email = '';
-$v_custom_doc_root_prepath = '/home/'.$user_plain.'/web/';
-
-if (empty($_POST['v_ssl_forcessl'])) {
-    $v_ssl_forcessl = 'no';
-} elseif ($_POST['v_ssl_forcessl'] == 'no') {
-    $v_ssl_forcessl = 'no';
-} else {
-    $v_ssl_forcessl = 'yes';
-}
 
 // List user package
 exec(HESTIA_CMD."v-list-user ".$user." json", $output, $return_var);
@@ -567,11 +133,6 @@ exec(HESTIA_CMD."v-list-user-ips ".$user." json", $output, $return_var);
 $ips = json_decode(implode('', $output), true);
 unset($output);
 
-// List web stat engines
-exec(HESTIA_CMD."v-list-web-stats json", $output, $return_var);
-$stats = json_decode(implode('', $output), true);
-unset($output);
-
 // Get all user domains
 exec(HESTIA_CMD."v-list-web-domains ".$user." json", $output, $return_var);
 $user_domains = json_decode(implode('', $output), true);
@@ -582,6 +143,8 @@ if (empty($_GET['accept'])) {
     $_GET['accept'] = false;
 }
 
+$v_domain=$_POST['domain'] ?? '';
+
 // Render page
 render_page($user, $TAB, 'add_web');
 

+ 8 - 28
web/css/src/themes/dark.css

@@ -678,6 +678,7 @@ label:hover {
 
 .vst-input:disabled,
 .vst-list:disabled,
+.form-select:disabled,
 .vst-textinput:disabled {
   background-color: #303030;
   text-shadow: 1px 1px rgb(0 0 0 / 30%);
@@ -690,6 +691,7 @@ label:hover {
 
 .vst-input:disabled:hover,
 .vst-list:disabled:hover,
+.form-select:disabled:hover,
 .vst-textinput:disabled:hover {
   border-color: #606060 !important;
 }
@@ -711,7 +713,8 @@ label:hover {
   box-shadow: none !important;
 }
 
-.vst-list {
+.vst-list,
+.form-select {
   background-color: #454545;
   border: 1px solid #606060;
   color: #d4d4d4;
@@ -735,43 +738,20 @@ textarea:focus::placeholder {
   color: #909090 !important;
 }
 
-select.vst-list:-moz-focusring {
-
-}
-
-.vst-list.long-2 {
-
-}
-
-.vst-list option {
-
-}
-
-.vst-list:hover {
+.vst-list:hover,
+.form-select:hover {
   border-color: #0090ff;
   background-color: #494949;
 }
 
-.vst-list:focus {
+.vst-list:focus,
+.form-select:focus {
   background-color: #222;
   border-color: #0080df;
   color: #fff;
   box-shadow: 0 1px 6px rgb(0 52 91 / 75%);
 }
 
-.vst-list.flat {
-  border: 1px solid #454545;
-  color: #fff;
-}
-
-.vst-list.flat:hover {
-  color: #ff3478;
-}
-
-.vst-list.flat option {
-  color: #d4d4d4;
-}
-
 a.vst-text,
 a.vst-text b {
   color: #fff;

+ 54 - 43
web/css/src/themes/default.css

@@ -2322,6 +2322,7 @@ label:hover {
 
 .vst-input:disabled,
 .vst-list:disabled,
+.form-select:disabled,
 .vst-textinput:disabled {
   background-color: #e7e7e7;
   text-shadow: 1px 1px rgb(255 255 255 / 100%);
@@ -2335,7 +2336,9 @@ label:hover {
 }
 
 .vst-input:disabled:hover,
-.vst-list:disabled:hover .vst-textinput:disabled:hover {
+.vst-list:disabled:hover,
+.form-select:disabled:hover,
+.vst-textinput:disabled:hover {
   border-color: #cfcfcf;
 }
 
@@ -2359,7 +2362,7 @@ label:hover {
 }
 
 .vst-input.vst-list-editor:focus {
-  background-color: white;
+  background-color: #fff;
 }
 
 .vst-list {
@@ -2384,19 +2387,6 @@ label:hover {
   box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
 }
 
-select.vst-list:-moz-focusring {
-  color: transparent;
-}
-
-.vst-list.long-2 {
-  width: 486px;
-  background-position: 465px;
-}
-
-.vst-list option {
-  padding: 6px 1px 6px 15px;
-}
-
 .vst-list:hover {
   border: 1px solid #94c8f0;
 }
@@ -2406,25 +2396,6 @@ select.vst-list:-moz-focusring {
   color: #333;
 }
 
-.vst-list.flat {
-  border: 1px solid #fff;
-  color: #326b9b;
-  text-transform: uppercase;
-  font-weight: 600;
-  font-size: 0.8rem;
-  margin-left: -10px;
-  text-shadow: none !important;
-  box-shadow: none !important;
-}
-
-.vst-list.flat:hover {
-  color: #c36;
-}
-
-.vst-list.flat option {
-  color: #4e4e4e;
-}
-
 .vst-text {
   cursor: default;
 }
@@ -2586,6 +2557,39 @@ a.vst-text:active b {
   border: none !important;
 }
 
+.form-label {
+  margin-bottom: 6px;
+  display: inline-block;
+}
+
+.form-select {
+  display: block;
+  cursor: pointer;
+  width: 100%;
+  font-weight: normal;
+  font-size: .8rem;
+  padding: 8px 35px 7px 10px;
+  line-height: 1.5;
+  border-radius: 4px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  color: #4e4e4e;
+  appearance: none;
+  background-image: url(/images/arrow.png);
+  background-repeat: no-repeat;
+  background-position: right 8px center;
+  text-shadow: 0 0 0 #4b4b4b;
+  box-shadow: 0 1px 4px rgb(0 0 0 / 15%);
+}
+
+.form-select:hover {
+  border: 1px solid #94c8f0;
+}
+
+.form-select:focus {
+  border: 1px solid #008fee;
+}
+
 .form-check {
   padding-left: 20px;
   margin-bottom: 2px;
@@ -3793,29 +3797,32 @@ li[aria-expanded="true"] a {
   color: #c36;
 }
 
-.cron-helper-tabs select.short {
-  background-position: -388px -604px;
-  min-width: 30px;
-  width: 70px;
-}
-
 .cron-helper-tabs p {
   color: #777;
   font-size: 0.8rem;
 }
 
-.cron-helper-tabs p span {
+.cron-helper-tabs .form-label {
   padding-right: 15px;
   padding-left: 25px;
 }
 
-.cron-helper-tabs p span.first {
+.cron-helper-tabs .form-label.first {
   display: inline-block;
-  padding-right: 15px;
   width: 100px;
   padding-left: 0;
 }
 
+.cron-helper-tabs .form-select {
+  display: inline-block;
+  width: 379px;
+}
+
+.cron-helper-tabs .form-select.short {
+  min-width: 30px;
+  width: 70px;
+}
+
 .cron-helper-tabs .button {
   width: auto;
   background-color: #3b9de8;
@@ -3995,3 +4002,7 @@ meter[value="4"]::-moz-meter-bar { background: green; }
 .u-mt15 {
   margin-top: 15px !important;
 }
+
+.u-mb20 {
+  margin-bottom: 20px !important;
+}

+ 2 - 1
web/css/src/themes/flat.css

@@ -93,7 +93,8 @@ strong {
   box-shadow: none;
 }
 
-.vst-list {
+.vst-list,
+.form-select {
   box-shadow: none;
 }
 

+ 8 - 10
web/css/src/themes/vestia.css

@@ -283,7 +283,8 @@ strong {
   border-radius: 0 !important;
 }
 
-.vst-list {
+.vst-list,
+.form-select {
   box-shadow: none;
   border-radius: 0 !important;
 }
@@ -363,14 +364,16 @@ a.vst-text:hover b,
   color: #333;
 }
 
-.vst-list:focus {
+.vst-list:focus,
+.form-select:focus {
   border: 1px solid #ff6701;
   color: #333;
 }
 
 .vst-input:hover,
-.vst-textinput:hover,
-.vst-list:hover {
+.vst-list:hover,
+.form-select:hover,
+.vst-textinput:hover {
   border: 1px solid #e95e00;
 }
 
@@ -512,6 +515,7 @@ meter {
 
 .vst-input,
 .vst-list,
+.form-select,
 .vst-textinput {
   font-family: Arial, Helvetica, sans-serif !important;
 }
@@ -617,12 +621,6 @@ a#btn-back:focus {
   text-transform: none !important;
 }
 
-.vst-list.flat:hover,
-.vst-list.flat:focus {
-  color: #ff6701 !important;
-  border: 1px solid #fff !important;
-}
-
 a.ui-button:hover,
 a.ui-button:active,
 a.ui-button:focus {

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web/css/themes/dark.min.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web/css/themes/default.min.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web/css/themes/flat.min.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
web/css/themes/vestia.min.css


+ 0 - 13
web/edit/web/index.php

@@ -407,19 +407,6 @@ if (!empty($_POST['save'])) {
         }
     }
 
-    // Change document root for ssl domain
-    if (($v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
-        if ($v_ssl_home != $_POST['v_ssl_home']) {
-            $v_ssl_home = quoteshellarg($_POST['v_ssl_home']);
-            exec(HESTIA_CMD."v-change-web-domain-sslhome ".$user." ".quoteshellarg($v_domain)." ".$v_ssl_home." 'no'", $output, $return_var);
-            check_return_code($return_var, $output);
-            $v_ssl_home = $_POST['v_ssl_home'];
-            $restart_web = 'yes';
-            $restart_proxy = 'yes';
-            unset($output);
-        }
-    }
-
     // Change SSL certificate
     if (($v_letsencrypt == 'no') && (empty($_POST['v_letsencrypt'])) && ($v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
         if (($v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ($v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key'])) || ($v_ssl_ca != str_replace("\r\n", "\n", $_POST['v_ssl_ca']))) {

+ 36 - 27
web/templates/pages/add_cron.html

@@ -30,8 +30,9 @@
 					<input type="hidden" name="h_day" value="*" />
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_min" class="vst-list">
+					<p>
+						<label for="h_min_1" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_min" id="h_min_1">
 							<option value="*" selected="selected"><?=_('every minute');?></option>
 							<option value="*/2"><?=_('every two minutes');?></option>
 							<option value="*/5"><?=_('every');?> 5</option>
@@ -51,16 +52,18 @@
 					<input type="hidden" name="h_day" value="*" />
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_hour" class="vst-list">
+					<p>
+						<label for="h_hour_2" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_hour" id="h_hour_2">
 							<option value="*" selected="selected"><?=_('every hour');?></option>
 							<option value="*/2"><?=_('every two hours');?></option>
 							<option value="*/6"><?=_('every');?> 6</option>
 							<option value="*/12"><?=_('every');?> 12</option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+					<p>
+						<label for="h_min_2" class="form-label first"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_2">
 							<option value="0" selected="selected">00</option>
 							<option value="15">15</option>
 							<option value="30">30</option>
@@ -77,8 +80,9 @@
 				<form>
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_day" class="vst-list">
+					<p>
+						<label for="h_day_3" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_day" id="h_day_3">
 							<option value="*" selected="selected"><?=_('every day');?></option>
 							<option value="1-31/2"><?=_('every odd day');?></option>
 							<option value="*/2"><?=_('every even day');?></option>
@@ -88,8 +92,9 @@
 							<option value="*/15"><?=_('every');?> 15</option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+					<p>
+						<label for="h_hour_3" class="form-label first"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_3">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -115,8 +120,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list  short">
+						<label for="h_min_3" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_3">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -143,8 +148,9 @@
 				<form>
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_day" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_wday" class="vst-list">
+					<p>
+						<label for="h_wday_4" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_wday" id="h_wday_4">
 							<option value="*" selected="selected"><?=_('every day');?></option>
 							<option value="1,2,3,4,5"><?=_('weekdays (5 days)');?></option>
 							<option value="0,6"><?=_('weekend (2 days)');?></option>
@@ -157,8 +163,9 @@
 							<option value="0"><?=_('Sunday');?></option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+					<p>
+						<label for="h_hour_4" class="form-label first"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_4">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -184,8 +191,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+						<label for="h_min_4" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_4">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -211,8 +218,9 @@
 			<div id="tabs-5">
 				<form>
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_month" class="vst-list">
+					<p>
+						<label for="h_month_5" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_month" id="h_month_5">
 							<option value="*" selected="selected"><?=_('every month');?></option>
 							<option value="1-11/2"><?=_('every odd month');?></option>
 							<option value="*/2"><?=_('every even month');?></option>
@@ -232,8 +240,9 @@
 							<option value="12"><?=_('Dec');?></option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Date');?>:</span>
-						<select name="h_day" class="vst-list short">
+					<p>
+						<label for="h_day_5" class="form-label first"><?=_('Date');?>:</label>
+						<select class="form-select short" name="h_day" id="h_day_5">
 							<option value="1" selected="selected">1</option>
 							<option value="2">2</option>
 							<option value="3">3</option>
@@ -266,8 +275,8 @@
 							<option value="30">30</option>
 							<option value="31">31</option>
 						</select>
-						<span><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+						<label for="h_hour_5" class="form-label"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_5">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -293,8 +302,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+						<label for="h_min_5" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_5">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -411,4 +420,4 @@
 			</tr>
 		</table>
 	</form>
-</div>
+</div>

+ 9 - 21
web/templates/pages/add_user.html

@@ -112,13 +112,9 @@
 							</td>
 						</tr>
 						<tr>
-							<td class="vst-text input-label">
-								<?=_('Language');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_language" tabindex="6">
+							<td class="input-label">
+								<label for="v_language" class="form-label"><?=_('Language');?></label>
+								<select class="form-select" name="v_language" id="v_language" tabindex="6">
 									<?php
 										foreach ($languages as $key => $value) {
 											echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".htmlentities($key)."\"";
@@ -137,26 +133,18 @@
 							</td>
 						</tr>
 						<tr>
-							<td class="vst-text input-label">
-								<?=_('Role');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_role" tabindex="7">
+							<td class="input-label">
+								<label for="v_role" class="form-label"><?=_('Role');?></label>
+								<select class="form-select" name="v_role" id="v_role">
 									<option value="user"><?=_('User');?>
 									<option value="admin" <?php if($v_role == "admin" ){ echo "selected"; } ?>><?=_('Administrator');?>
 								</select>
 							</td>
 						</tr>
 						<tr>
-							<td class="vst-text input-label" name="v_package">
-								<?=_('Package');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_package" tabindex="8">
+							<td class="input-label">
+								<label for="v_package" class="form-label"><?=_('Package');?></label>
+								<select class="form-select" name="v_package" id="v_package" tabindex="8">
 									<?php
 										foreach ($data as $key => $value) {
 											echo "\n\t\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"".htmlentities($key)."\"";

+ 9 - 466
web/templates/pages/add_web.html

@@ -73,20 +73,16 @@
 								</td>
 							</tr>
 							<tr>
-								<td class="vst-text input-label">
-									<?=_('IP address');?>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<select class="vst-list" name="v_ip">
+								<td class="input-label">
+									<label for="v_ip" class="form-label"><?=_('IP Address');?></label>
+									<select class="form-select" name="v_ip" id="v_ip">
 										<?php
-												foreach ($ips as $ip => $value) {
-													$display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}");
-													$ip_selected = (!empty($v_ip) && $ip == $_POST['v_ip']) ? 'selected' : '';
-													echo "\t\t\t\t<option value=\"{$ip}\" {$ip_selected}>{$display_ip}</option>\n";
-												}
-											?>
+											foreach ($ips as $ip => $value) {
+												$display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}");
+												$ip_selected = (!empty($v_ip) && $ip == $_POST['v_ip']) ? 'selected' : '';
+												echo "\t\t\t\t<option value=\"{$ip}\" {$ip_selected}>{$display_ip}</option>\n";
+											}
+										?>
 									</select>
 								</td>
 							</tr>
@@ -122,465 +118,12 @@
 								<?php } ?>
 							<?php } ?>
 						<?php } ?>
-						<!-- OPTION DISABLED
-						<tr>
-							<td class="step-top vst-text" style="/*padding: 32px 0 20px 0;*/">
-								<a href="javascript:elementHideShow('advtable');" class="vst-advanced"><?=_('Advanced options');?>&nbsp;<i class="fas fa-arrow-circle-right"></i></a>
-							</td>
-						</tr>
-						-->
 					</table>
-
-					<!--
-						THE FOLLOWING SECTION OF CODE IS NO LONGER EXPOSED VIA USER INTERFACE
-						BUT VALUES ARE REQUIRED FOR DOMAINS TO BE CREATED CORRECTLY UNTIL BACKEND CALLS ARE MODIFIED
-					-->
-					<table class="data-col2" width="600px" style="display: none;">
-						<tr>
-							<td class="vst-text input-label">
-								<?=_('Aliases');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<textarea size="20" class="vst-textinput short" name="v_aliases" id="v_aliases"><?=htmlentities(trim($v_aliases, "'"))?></textarea>
-							</td>
-						</tr>
-						<tr>
-							<td class="vst-text input-label">
-								<?=_('Web Template')  . "<span class='optional'>" .strtoupper($_SESSION['WEB_SYSTEM']) . "</span>";?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_template">
-									<?php
-										foreach ($templates as $key => $value) {
-											echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
-											$svalue = "'".$value."'";
-											if ((!empty($v_template)) && ( $value == $v_template ) || ($svalue == $v_template)){
-												echo ' selected' ;
-											}
-											echo ">".htmlentities($value)."</option>\n";
-										}
-									?>
-								</select>
-							</td>
-						</tr>
-						<?php if (!empty($_SESSION['WEB_BACKEND'])) { ?>
-							<tr>
-								<td class="vst-text input-label">
-									<?=_('Backend Template') . " <span class='optional'>" . strtoupper($_SESSION['WEB_BACKEND']) . "</span>";?>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<select class="vst-list" name="v_backend_template">
-										<?php
-											foreach ($backend_templates as $key => $value) {
-												echo "\t\t\t\t<option value=\"".$value."\"";
-												$svalue = "'".$value."'";
-												if ((!empty($v_backend_template)) && ( $value == $v_backend_template ) || ($svalue == $v_backend_template)){
-													echo ' selected' ;
-												}
-												if ((empty($v_backend_template)) && ($value == 'default')){
-													echo ' selected' ;
-												}
-												echo ">".htmlentities($value)."</option>\n";
-											}
-										?>
-									</select>
-								</td>
-							</tr>
-						<?php }?>
-						<?php if (!empty($_SESSION['PROXY_SYSTEM'])) { echo ""; ?>
-							<tr>
-								<td class="step-top">
-									<div class="form-check">
-										<input class="form-check-input" type="checkbox" name="v_proxy" id="v_proxy" <?php if ($v_proxy !== 'off') echo "checked=yes" ?> onclick="javascript:elementHideShow('proxytable');">
-										<label for="v_proxy">
-											<?=_('Proxy Support');?>
-										</label>
-									</div>
-								</td>
-							</tr>
-							<tr>
-								<td class="vst-text input-label">
-									<?=_('Proxy Template');?>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<select class="vst-list" name="v_proxy_template">
-										<?php
-											foreach ($proxy_templates as $key => $value) {
-												echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
-												$svalue = "'".$value."'";
-												if ((!empty($v_proxy_template)) && ( $value == $v_proxy_template ) || ($svalue == $v_proxy_template)){
-													echo ' selected' ;
-												}
-												if ((empty($v_proxy_template)) && ($value == 'default')){
-													echo ' selected' ;
-												}
-												echo ">".htmlentities($value)."</option>\n";
-											}
-										?>
-									</select>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<table style="display:<?php if ($v_proxy == 'off') { echo 'none';} else {echo 'block';}?>;" id="proxytable">
-										<tr>
-											<td class="vst-text input-label step-left">
-												<?=_('Proxy Extensions');?>
-											</td>
-										</tr>
-										<tr>
-											<td class="step-left">
-												<textarea size="20" class="vst-textinput short" name="v_proxy_ext"><?php if (!empty($v_proxy_ext)) { echo htmlentities(trim($v_proxy_ext, "'"));} else { echo 'jpeg, jpg, png, gif, bmp, ico, svg, tif, tiff, css, js, htm, html, ttf, otf, webp, woff, txt, csv, rtf, doc, docx, xls, xlsx, ppt, pptx, odf, odp, ods, odt, pdf, psd, ai, eot, eps, ps, zip, tar, tgz, gz, rar, bz2, 7z, aac, m4a, mp3, mp4, ogg, wav, wma, 3gp, avi, flv, m4v, mkv, mov, mp4, mpeg, mpg, wmv, exe, iso, dmg, swf'; }  ?></textarea>
-											</td>
-										</tr>
-									</table>
-								</td>
-							</tr>
-						<?=""; }?>
-						<tr>
-							<td class="vst-text step-top">
-								<?=_('Web Statistics');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_stats">
-									<?php
-										foreach ($stats as $key => $value) {
-											$svalue = "'".$value."'";
-											echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
-											if (empty($v_stats)) $v_stats = 'none';
-											if (( $value == $v_stats ) || ($svalue == $v_stats )){
-												echo ' selected' ;
-											}
-											echo ">" . htmlentities(_($value)) . "</option>\n";
-										}
-									?>
-								</select>
-							</td>
-						</tr>
-						<tr class="stats-auth" style="<?php if (trim($v_stats, "'") == ' none') { echo 'display:none;'; } ?>">
-							<td class="step-left input-label">
-								<div class="form-check">
-									<input class="form-check-input" type="checkbox" name="v_stats_auth" id="v_stats_auth" <?php if (!empty($v_stats_user)) echo "checked=yes" ?> onclick="javascript:elementHideShow('statstable');">
-									<label for="v_proxy">
-										<?=_('Statistics Authorization');?>
-									</label>
-								</div>
-							</td>
-						</tr>
-						<tr>
-							<td class="step-left">
-								<table style="display:<?php if (empty($v_stats_user)) { echo 'none';} else {echo 'block';}?> ;" id="statstable" name="v-add-web-domain-stats-user">
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Username');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<input type="text" size="20" class="vst-input" name="v_stats_user" value="<?=htmlentities(trim($v_stats_user, "'"))?>">
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Password');?> / <a href="javascript:WEBrandom();" class="generate"><?=_('generate');?></a>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<input type="text" size="20" class="vst-input password" name="v_stats_password" value="<?=htmlentities(trim($v_stats_password, "'"))?>" id="v_password">
-										</td>
-									</tr>
-								</table>
-							</td>
-						</tr>
-						<tr>
-							<td class="step-top">
-								<div class="form-check">
-									<input class="form-check-input" type="checkbox" name="v_custom_doc_root_check" id="v_custom_doc_root_check" <?php if (!empty($v_custom_doc_root)) echo "checked=yes" ?> onclick="javascript:elementHideShow('v_custom_doc_root');">
-									<label for="v_custom_doc_root_check">
-										<?=_('Custom document root');?>
-									</label>
-								</div>
-							</td>
-						</tr>
-						<tr>
-							<td class="step-left">
-								<table style="display:<?php if (empty($v_custom_doc_root)) { echo 'none';} else {echo 'block';}?> ;" id="v_custom_doc_root">
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Point to');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<input type="hidden" name="v-custom-doc-root_prepath" value="<?=htmlentities($v_custom_doc_root_prepath);?>">
-											<select class="vst-list" name="v-custom-doc-domain">
-												<option value="<?=htmlentities(trim($v_domain, "'"))?>" id="v-custom-doc-domain-main"><?=htmlentities(trim($v_domain, "'"))?></option>
-												<?php
-													foreach ($user_domains  as $domain) {
-														if($domain != $v_domain ){
-														if($v_custom_doc_domain == $domain){
-													?>
-													<option value="<?=htmlentities($domain);?>" selected="selected"><?=htmlentities($domain);?></option>
-												<?php } else{ ?>
-													<option value="<?=htmlentities($domain);?>"><?=htmlentities($domain);?></option>
-												<?php } } } ?>
-											</select>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?php print( _('Directory'));?> <span class="optional">(<?=_('optional');?>)</span>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<input type="text" size="20" class="vst-input"
-												name="v-custom-doc-folder" value="<?=htmlentities(trim($v_custom_doc_folder, "'"))?>">
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<small class="custom_docroot_hint"></small>
-										</td>
-									</tr>
-
-								</table>
-							</td>
-						</tr>
-
-						<tr>
-							<td class="step-top">
-								<div class="form-check">
-									<input class="form-check-input" type="checkbox" name="v_ssl" id="v_ssl" <?php if($v_ssl == 'yes' || $v_ssl == 'on') echo "checked=yes" ?> onclick="javascript:elementHideShow('ssltable');">
-									<label for="v_ssl">
-										<?=_('SSL Support');?>
-									</label>
-								</div>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<table style="display:<?php if (empty($v_ssl)) { echo 'none';} else {echo 'block';}?>;" id="ssltable">
-									<tr>
-										<td class="step-left input-label">
-											<div class="form-check">
-												<input class="form-check-input" type="checkbox" name="v_letsencrypt" id="v_letsencrypt" <?php if($v_letsencrypt == 'yes' || $v_letsencrypt == 'on') echo "checked=yes" ?> onclick="App.Actions.WEB.toggle_letsencrypt(this)">
-												<label for="v_letsencrypt">
-													<?=_('Lets Encrypt Support');?>
-												</label>
-											</div>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label lets-encrypt-note step-left">
-											<?= _('Your certificate will be automatically issued in 5 minutes');?>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left input-label">
-											<div class="form-check">
-												<input class="form-check-input" type="checkbox" name="v_ssl_forcessl" id="v_ssl_forcessl" <?php if($v_ssl_forcessl != 'no') echo "checked=yes" ?> onclick="App.Actions.WEB.toggle_forcessl(this)">
-												<label for="v_ssl_forcessl">
-													<?=_('Force SSL/HTTPS');?>
-												</label>
-											</div>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label step-left">
-											<?=_('SSL Certificate');?>
-											<span id="generate-csr"> / <a class="generate" target="_blank" href="/generate/ssl/?domain=<?=htmlentities(trim($v_domain, "'")) ?>"><?=_('Generate CSR') ?></a></span>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<textarea size="20" class="vst-textinput short console" name="v_ssl_crt"><?=htmlentities(trim($v_ssl_crt, "'"))?></textarea>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label step-left">
-											<?=_('SSL Key');?>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<textarea size="20" class="vst-textinput short console" name="v_ssl_key"><?=htmlentities(trim($v_ssl_key, "'"))?></textarea>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label step-left">
-											<?=_('SSL Certificate Authority / Intermediate');?> <span class="optional">(<?=_('optional');?>)</span>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<textarea size="20" class="vst-textinput short console" name="v_ssl_ca"><?=htmlentities(trim($v_ssl_ca, "'"))?></textarea>
-										</td>
-									</tr>
-								</table>
-							</td>
-						</tr>
-						<tr>
-							<td class="step-top">
-								<div class="form-check">
-									<input class="form-check-input" type="checkbox" name="v_ftp" id="v_ftp" <?php if (!empty($v_ftp) && count($v_ftp_users)) echo "checked=yes" ?> onclick="App.Actions.WEB.toggle_additional_ftp_accounts(this)">
-									<label for="v_ftp">
-										<?=_('Additional FTP Account');?>
-									</label>
-								</div>
-							</td>
-						</tr>
-						<tr>
-							<td id="ftp_users">
-								<?php foreach ($v_ftp_users as $i => $ftp_user): ?>
-								<?php
-									$v_ftp_user     = $ftp_user['v_ftp_user'];
-									$v_ftp_password = $ftp_user['v_ftp_password'];
-									$v_ftp_path     = $ftp_user['v_ftp_path'];
-									$v_ftp_email    = $ftp_user['v_ftp_email'];
-									$v_ftp_pre_path = $ftp_user['v_ftp_pre_path'];
-								?>
-								<table <?=(!empty($v_ftp)) ? "style='display: block'" : "style='display:none;'"  ?> class="ftptable ftptable-nrm" name="v_add_domain_ftp">
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('FTP') ?> #<span class="ftp-user-number"><?=$i + 1; ?></span> <a class="ftp-remove-user additional-control do_delete" onCLick="App.Actions.WEB.remove_ftp_user(this)">(<?=_('delete') ?>)</a>
-											<input type="hidden" class="v-ftp-user-deleted" name="v_ftp_user[<?=$i ?>][delete]" value="0" />
-											<input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[<?=$i ?>][is_new]" value="<?=htmlentities($ftp_user['is_new']) ?>" />
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text step-left input-label">
-											<?=_('Username');?><br>
-											<span style="font-size: 10pt; color:#777;"><?=sprintf(_('Prefix %s will be added to username automatically'),$user."_");?></span>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<input type="text" size="20" class="vst-input v-ftp-user" <?=$ftp_user['is_new'] != 1 ? 'disabled="disabled"' : '' ?> name="v_ftp_user[<?=$i ?>][v_ftp_user]" value="<?=htmlentities(trim($v_ftp_user, "'"))?>">
-											<small class="hint"></small>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text step-left  input-label">
-											<?=_('Password');?> / <a href="javascript:void(0);" onClick="FTPrandom(this)" ; class="generate"><?=_('generate');?></a>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<input type="text" class="vst-input v-ftp-user-psw password" name="v_ftp_user[<?=$i ?>][v_ftp_password]" value="<?=htmlentities(trim($v_ftp_password, "'"))?>">
-										</td>
-									</tr>
-
-									<tr>
-										<td class="vst-text step-left input-label">
-											<?=_('Path');?>
-										</td>
-									</tr>
-									<tr>
-										<td class="step-left">
-											<input type="hidden" class="vst-input v-ftp-pre-path" name="v_ftp_pre_path" value="<?=!empty($v_ftp_pre_path) ? htmlentities(trim($v_ftp_pre_path, "'")) : '/'; ?>">
-											<input type="text" class="vst-input v-ftp-path" name="v_ftp_user[<?=$i ?>][v_ftp_path]" value=".htmlentities(trim($v_ftp_path, "'"))?>">
-												<br /><span class="ftp-path-prefix"><?=htmlentities(trim($v_ftp_pre_path, "'"))?></span><span class="ftp-path-value v-ftp-path-hint"></span>
-											</td>
-										</tr>
-
-										<tr>
-											<td class="vst-text step-left input-label">
-												 <?=_('Send FTP credentials to email');?>
-											</td>
-										</tr>
-										<tr>
-											<td class="step-left">
-												<input type="text"  class="vst-input" name="v_ftp_user[<?=$i ?>][v_ftp_email]" value="<?=htmlentities(trim($v_ftp_email, "'"))?>">
-											</td>
-										</tr>
-								</table>
-									<?php endforeach; ?>
-								</td>
-							</tr>
-							<tr>
-								<td class="vst-text step-top v-add-new-user step-bottom"  style="display: none;">
-									<a class="additional-control" onClick="App.Actions.WEB.add_ftp_user_form()"><?=_('Add one more FTP Account');?></a>
-								</td>
-							</tr>
-						</table>
 					<table class="data-col2">
 					</table>
 				</td>
 			</tr>
 		</table>
 	</form>
-
-	<div id="templates" class="hidden">
-		<table class="ftptable ftptable-nrm" name="v_add_domain_ftp">
-			<tr>
-				<td class="vst-text input-label">
-					<?=_('FTP') ?> #<span class="ftp-user-number"></span> <a class="ftp-remove-user additional-control do_delete" onCLick="App.Actions.WEB.remove_ftp_user(this)">(<?=_('delete');?>)</a>
-					<input type="hidden"  class="v-ftp-user-deleted" name="v_ftp_user[%INDEX%][delete]" value="0" />
-					<input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[%INDEX%][is_new]" value="1" />
-				</td>
-			</tr>
-			<tr>
-				<td class="vst-text step-left input-label">
-					<?=_('Username');?><br>
-					<span style="font-size: 10pt; color:#777;"><?=sprintf(_('Prefix %s will be added to username automatically'),$user_plain."_");?></span>
-				</td>
-			</tr>
-			<tr>
-				<td class="step-left">
-					<input type="text" size="20" class="vst-input v-ftp-user" name="v_ftp_user[%INDEX%][v_ftp_user]" value="">
-					<small class="hint"></small>
-				</td>
-			</tr>
-			<tr>
-				<td class="vst-text step-left  input-label">
-					<?=_('Password');?> / <a href="javascript:void(0);" onClick="FTPrandom(this)"; class="generate" ><?=_('generate');?></a>
-				</td>
-			</tr>
-			<tr>
-				<td class="step-left">
-					<input type="text" class="vst-input v-ftp-user-psw password" name="v_ftp_user[%INDEX%][v_ftp_password]" value="">
-				</td>
-			</tr>
-
-			<tr>
-				<td class="vst-text step-left input-label">
-						<?=_('Path');?>
-				</td>
-			</tr>
-			<tr>
-				<td class="step-left">
-					<input type="hidden" class="vst-input v-ftp-pre-path" name="v_ftp_pre_path" value="">
-					<input type="text"  class="vst-input v-ftp-path" name="v_ftp_user[%INDEX%][v_ftp_path]" value="">
-					<br /><span class="ftp-path-prefix"><?=htmlentities(trim($v_ftp_pre_path_new_user, "'")) ?></span><span class="ftp-path-value v-ftp-path-hint"></span>
-				</td>
-			</tr>
-			<tr>
-				<td class="vst-text step-left input-label">
-						<?=_('Send FTP credentials to email');?>
-				</td>
-			</tr>
-			<tr>
-				<td class="step-left">
-					<input type="text" class="vst-input" name="v_ftp_user[%INDEX%][v_ftp_email]" value="">
-				</td>
-			</tr>
-		</table>
-	</div>
 </div>
 
-<script>
-	GLOBAL.FTP_USER_PREFIX =  "<?=$user_plain.'_';?>";
-	GLOBAL.FTP_USER_PREPATH = "<?=htmlentities($v_ftp_user_prepath);?>";
-</script>

+ 36 - 28
web/templates/pages/edit_cron.html

@@ -30,8 +30,9 @@
 					<input type="hidden" name="h_day" value="*" />
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_min" class="vst-list">
+					<p>
+						<label for="h_min_1" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_min" id="h_min_1">
 							<option value="*" selected="selected"><?=_('every minute');?></option>
 							<option value="*/2"><?=_('every two minutes');?></option>
 							<option value="*/5"><?=_('every');?> 5</option>
@@ -51,16 +52,18 @@
 					<input type="hidden" name="h_day" value="*" />
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_hour" class="vst-list">
+					<p>
+						<label for="h_hour_2" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_hour" id="h_hour_2">
 							<option value="*" selected="selected"><?=_('every hour');?></option>
 							<option value="*/2"><?=_('every two hours');?></option>
 							<option value="*/6"><?=_('every');?> 6</option>
 							<option value="*/12"><?=_('every');?> 12</option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+					<p>
+						<label for="h_min_2" class="form-label first"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_2">
 							<option value="0" selected="selected">00</option>
 							<option value="15">15</option>
 							<option value="30">30</option>
@@ -77,8 +80,9 @@
 				<form>
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_day" class="vst-list">
+					<p>
+						<label for="h_day_3" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_day" id="h_day_3">
 							<option value="*" selected="selected"><?=_('every day');?></option>
 							<option value="1-31/2"><?=_('every odd day');?></option>
 							<option value="*/2"><?=_('every even day');?></option>
@@ -88,8 +92,9 @@
 							<option value="*/15"><?=_('every');?> 15</option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+					<p>
+						<label for="h_hour_3" class="form-label first"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_3">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -115,8 +120,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list  short">
+						<label for="h_min_3" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_3">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -143,9 +148,9 @@
 				<form>
 					<input type="hidden" name="h_month" value="*" />
 					<input type="hidden" name="h_day" value="*" />
-
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_wday" class="vst-list">
+					<p>
+						<label for="h_wday_4" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_wday" id="h_wday_4">
 							<option value="*" selected="selected"><?=_('every day');?></option>
 							<option value="1,2,3,4,5"><?=_('weekdays (5 days)');?></option>
 							<option value="0,6"><?=_('weekend (2 days)');?></option>
@@ -158,8 +163,9 @@
 							<option value="0"><?=_('Sunday');?></option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+					<p>
+						<label for="h_hour_4" class="form-label first"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_4">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -185,8 +191,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+						<label for="h_min_4" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_4">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -212,8 +218,9 @@
 			<div id="tabs-5">
 				<form>
 					<input type="hidden" name="h_wday" value="*" />
-					<p><span class="first"><?=_('Run Command');?>:</span>
-						<select name="h_month" class="vst-list">
+					<p>
+						<label for="h_month_5" class="form-label first"><?=_('Run Command');?>:</label>
+						<select class="form-select" name="h_month" id="h_month_5">
 							<option value="*" selected="selected"><?=_('every month');?></option>
 							<option value="1-11/2"><?=_('every odd month');?></option>
 							<option value="*/2"><?=_('every even month');?></option>
@@ -233,8 +240,9 @@
 							<option value="12"><?=_('Dec');?></option>
 						</select>
 					</p>
-					<p><span class="first"><?=_('Date');?>:</span>
-						<select name="h_day" class="vst-list short">
+					<p>
+						<label for="h_day_5" class="form-label first"><?=_('Date');?>:</label>
+						<select class="form-select short" name="h_day" id="h_day_5">
 							<option value="1" selected="selected">1</option>
 							<option value="2">2</option>
 							<option value="3">3</option>
@@ -267,8 +275,8 @@
 							<option value="30">30</option>
 							<option value="31">31</option>
 						</select>
-						<span><?=_('Hour');?>:</span>
-						<select name="h_hour" class="vst-list short">
+						<label for="h_hour_5" class="form-label"><?=_('Hour');?>:</label>
+						<select class="form-select short" name="h_hour" id="h_hour_5">
 							<option value="0">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -294,8 +302,8 @@
 							<option value="22">22</option>
 							<option value="23">23</option>
 						</select>
-						<span><?=_('Minute');?>:</span>
-						<select name="h_min" class="vst-list short">
+						<label for="h_min_5" class="form-label"><?=_('Minute');?>:</label>
+						<select class="form-select short" name="h_min" id="h_min_5">
 							<option value="0" selected="selected">00</option>
 							<option value="1">01</option>
 							<option value="2">02</option>
@@ -412,4 +420,4 @@
 			</tr>
 		</table>
 	</form>
-</div>
+</div>

+ 153 - 298
web/templates/pages/edit_server.html

@@ -63,17 +63,12 @@
 									<tr>
 										<td>
 											<input type="text" size="20" class="vst-input" name="v_hostname" value="<?=htmlentities(trim($v_hostname, "'"))?>">
-											<br><br>
 										</td>
 									</tr>
 									<tr>
-										<td class="vst-text input-label">
-											<?=_('Time Zone');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<select class="vst-list" name="v_timezone">
+										<td class="input-label">
+											<label for="v_timezone" class="form-label"><?=_('Time Zone');?></label>
+											<select class="form-select" name="v_timezone" id="v_timezone">
 												<?php
 													foreach ($v_timezones as $key => $value) {
 														echo "\t\t\t\t<option value=\"".$key."\"";
@@ -87,17 +82,12 @@
 													}
 												?>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Theme');?>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_theme">
+										<td class="input-label">
+											<label for="v_theme" class="form-label"><?=_('Theme');?></label>
+											<select class="form-select" name="v_theme" id="v_theme">
 												<?php
 													foreach ($theme as $key => $value) {
 														echo "\t\t\t\t<option value=\"".$value."\"";
@@ -121,13 +111,9 @@
 										</td>
 									</tr>
 									<tr>
-										<td class="vst-text input-label step-top">
-											<?=_('Default Language');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<select class="vst-list" name="v_language">
+										<td class="input-label step-top">
+											<label for="v_language" class="form-label"><?=_('Default Language');?></label>
+											<select class="form-select" name="v_language" id="v_language">
 												<?php
 													foreach ($languages as $key => $value) {
 														echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".$key."\"";
@@ -142,7 +128,7 @@
 									</tr>
 									<tr>
 										<td class="input-label">
-											<div class="form-check">
+											<div class="form-check u-mb20">
 												<input class="form-check-input" type="checkbox" name="v_language_update" id="v_language_update">
 												<label for="v_language_update">
 													<?=_('Set as default language for all users');?>
@@ -150,11 +136,6 @@
 											</div>
 										</td>
 									</tr>
-									<tr>
-										<td>
-											<br><br>
-										</td>
-									</tr>
 								</table>
 							</td>
 						</tr>
@@ -320,15 +301,12 @@
 									<?php if(!empty($_SESSION['WEB_BACKEND'])){
 									?>
 									<tr>
-										<td class="vst-text step-top">
-											<?=_('System PHP version');?></span>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<select class="vst-list" name="v_php_default_version">
-												<?php foreach($v_php_versions as $php_version){
-												if($php_version -> installed){
+										<td class="input-label step-top">
+											<label for="v_php_default_version" class="form-label"><?=_('System PHP version');?></label>
+											<select class="form-select" name="v_php_default_version" id="v_php_default_version">
+												<?php
+													foreach ($v_php_versions as $php_version) {
+													if ($php_version -> installed) {
 												?>
 												<option value="<?=$php_version->version; ?>" <?php if($php_version->name == DEFAULT_PHP_VERSION){ echo "selected" ;}?> ><?=$php_version->name; ?></option>
 												<?php
@@ -517,17 +495,14 @@
 								<td class="vst-text input-label step-left">
 									<table style="display:<?php if (empty($v_db_adv)) echo 'none';?> ;" id="db">
 										<tr>
-											<td class="vst-text step-top">
-												<?=_('MySQL Support');?> <a href="/edit/server/mysql/"><i class="fas fa-pencil-alt status-icon orange icon-pad-right"></i></a>
-											</td>
-										</tr>
-										<tr>
-											<td>
-												<select class="vst-list" name="v_mysql" disabled>
-													<option value='no'><?=_('No'); ?></option>
-													<option value='yes' <?php if($v_mysql == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
+											<td class="input-label step-top">
+												<label for="v_mysql" class="form-label">
+													<?=_('MySQL Support');?> <a href="/edit/server/mysql/"><i class="fas fa-pencil-alt status-icon orange icon-pad-right"></i></a>
+												</label>
+												<select class="form-select" name="v_mysql" id="v_mysql" disabled>
+													<option value="no"><?=_('No'); ?></option>
+													<option value="yes" <?php if($v_mysql == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
 												</select>
-												<br><br>
 											</td>
 										</tr>
 
@@ -545,18 +520,14 @@
 												</td>
 											</tr>
 											<tr>
-												<td class="vst-text">
-													<?=_('phpMyAdmin Single Sign On');?><span class="hint">(<a href="https://docs.hestiacp.com/admin_docs/database/phpmyadmin-sso.html" target="_blank"><?=_('More info');?>)</span>
-												</td>
-											</tr>
-											<tr>
-												<td>
-													<select class="vst-list" name="v_phpmyadmin_key" <?php if ($_SESSION['API'] != 'yes'){ echo "disabled"; }?>>
-														<option value='no'><?=_('Disabled'); ?></option>
+												<td class="input-label">
+													<label for="v_phpmyadmin_key" class="form-label">
+														<?=_('phpMyAdmin Single Sign On');?><span class="hint">(<a href="https://docs.hestiacp.com/admin_docs/database/phpmyadmin-sso.html" target="_blank"><?=_('More info');?></a>)</span>
+													</label>
+													<select class="form-select" name="v_phpmyadmin_key" id="v_phpmyadmin_key" <?php if ($_SESSION['API'] != 'yes'){ echo "disabled"; }?>>
+														<option value="no"><?=_('Disabled'); ?></option>
 														<option value='yes' <?php if($_SESSION['PHPMYADMIN_KEY'] != ''){ echo 'selected="selected"'; }; ?>><?=_('Enabled'); ?></option>
 													</select>
-													<br />
-													<br />
 												</td>
 											</tr>
 										<?php } ?>
@@ -615,17 +586,14 @@
 										<!-- PostgreSQL Options-->
 										<?php if ($v_pgsql == 'yes') { ?>
 											<tr>
-												<td class="vst-text input-label">
-													<?=_('PostgreSQL Support');?> <a href="/edit/server/postgresql/"><i class="fas fa-pencil-alt status-icon orange icon-pad-right"></i></a>
-												</td>
-											</tr>
-											<tr>
-												<td>
-													<select class="vst-list" name="v_pgsql" disabled>
-														<option value='no'><?=_('No'); ?></option>
+												<td class="input-label">
+													<label for="v_pgsql" class="form-label">
+														<?=_('PostgreSQL Support');?> <a href="/edit/server/postgresql/"><i class="fas fa-pencil-alt status-icon orange icon-pad-right"></i></a>
+													</label>
+													<select class="form-select" name="v_pgsql" id="v_pgsql" disabled>
+														<option value="no"><?=_('No'); ?></option>
 														<option value='yes' <?php if($v_pgsql == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
 													</select>
-													<br><br>
 												</td>
 											</tr>
 											<tr>
@@ -694,46 +662,35 @@
 							<td class="vst-text input-label step-left">
 								<table style="<?php if (empty($v_backup_adv)) echo 'display:none';?> ;" id="backup">
 									<tr>
-										<td class="vst-text step-top">
-											<?=_('Local backup');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<select class="vst-list" name="v_backup">
-												<option value='no'><?=_('No'); ?></option>
-												<option value='yes' <?php if($v_backup == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
+										<td class="input-label step-top">
+											<label for="v_backup" class="form-label"><?=_('Local backup');?></label>
+											<select class="form-select" name="v_backup" id="v_backup">
+												<option value="no"><?=_('No'); ?></option>
+												<option value="yes" <?php if($v_backup == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text">
-											<?=_('Compression');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-is-the-difference-between-zstd-and-gzip"><i class="fas fa-question-circle"></i></a>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_backup_mode">
-												<option value='gzip' <?php if($v_backup_mode != 'zstd') echo 'selected' ?>>gzip</option>
-												<option value='zstd' <?php if($v_backup_mode == 'zstd') echo 'selected' ?>>zstd</option>
+										<td class="input-label">
+											<label for="v_backup_mode" class="form-label">
+												<?=_('Compression');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-is-the-difference-between-zstd-and-gzip"><i class="fas fa-question-circle"></i></a>
+											</label>
+											<select class="form-select" name="v_backup_mode" id="v_backup_mode">
+												<option value="gzip" <?php if($v_backup_mode != 'zstd') echo 'selected' ?>>gzip</option>
+												<option value="zstd" <?php if($v_backup_mode == 'zstd') echo 'selected' ?>>zstd</option>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text">
-											<?=_('Compression level');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-is-the-optimal-compression-ratio"><i class="fas fa-question-circle"></i></a>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_backup_gzip">
+										<td class="input-label">
+											<label for="v_backup_gzip" class="form-label">
+												<?=_('Compression level');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-is-the-optimal-compression-ratio"><i class="fas fa-question-circle"></i></a>
+											</label>
+											<select class="form-select" name="v_backup_gzip" id="v_backup_gzip">
 												<?php for ($level = 1; $level < 20; $level++) { ?>
 													<option value='<?=$level;?>' <?php if($v_backup_gzip == $level) echo 'selected' ?>><?=$level;?><?php if($level > 9){ echo sprintf(' (%s)', _('zstd only')); } ?></option>
 												<?php } ?>
 											</select>
-											<br><br>
 										</td>
 									</tr>
 									<tr>
@@ -761,18 +718,15 @@
 										<td class="vst-text input-label step-left">
 											<table style="display:<?php if (empty($v_backup_remote_adv)) echo 'none';?> ;" id="remote_backup">
 												<tr>
-													<td class="vst-text">
-														<?=_('Protocol');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-kind-of-protocols-are-currently-supported"><i class="fas fa-question-circle"></i></a>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_backup_type" id="backup_type">
+													<td class="input-label">
+														<label for="backup_type" class="form-label">
+															<?=_('Protocol');?> <a target="_blank" href="http://docs.hestiacp.com/admin_docs/backups.html#what-kind-of-protocols-are-currently-supported"><i class="fas fa-question-circle"></i></a>
+														</label>
+														<select class="form-select" name="v_backup_type" id="backup_type">
 															<option value='ftp'><?=_('ftp'); ?></option>
 															<option value='sftp' <?php if((!empty($v_backup_type)) && (trim($v_backup_type,"'")  == 'sftp' )) echo 'selected="selected"'; ?>><?=_('sftp'); ?></option>
 															<option value="b2" <?php if((!empty($v_backup_type)) && (trim($v_backup_type,"'")  == 'b2' )) echo 'selected="selected"'; ?>><?=_('Backblaze'); ?>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<tr style="display: <?php if ((!empty($v_backup_type)) && !in_array(trim($v_backup_type, "'"),array('ftp','sftp'))){ echo 'none';} else {echo 'block';} ?>" id="backup_sftp">
@@ -1002,32 +956,22 @@
 													<?=_('API');?>
 												</td>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Enable legacy API access');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_api" id="api">
-															<option value='yes'><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['API'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="api" class="form-label"><?=_('Enable legacy API access');?></label>
+														<select class="form-select" name="v_api" id="api">
+															<option value="yes"><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['API'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
-													</td>
-												</tr>
-												<tr>
-													<td class="vst-text input-label">
-															<?=_('Enable API access');?>
 													</td>
 												</tr>
 												<tr>
-													<td>
-														<select class="vst-list" name="v_api_system" id="api-system">
-																<option value='0' <?php if(empty($_SESSION['API_SYSTEM']) || $_SESSION['API_SYSTEM'] == '0') echo 'selected' ?>><?=_('Disabled'); ?></option>
-																<option value='1' <?php if($_SESSION['API_SYSTEM'] == '1') echo 'selected' ?>><?=_('Enabled for admin'); ?></option>
-																<option value='2' <?php if($_SESSION['API_SYSTEM'] == '2') echo 'selected' ?>><?=_('Enabled for all users'); ?></option>
+													<td class="input-label">
+														<label for="api-system" class="form-label"><?=_('Enable API access');?></label>
+														<select class="form-select" name="v_api_system" id="api-system">
+															<option value='0' <?php if(empty($_SESSION['API_SYSTEM']) || $_SESSION['API_SYSTEM'] == '0') echo 'selected' ?>><?=_('Disabled'); ?></option>
+															<option value='1' <?php if($_SESSION['API_SYSTEM'] == '1') echo 'selected' ?>><?=_('Enabled for admin'); ?></option>
+															<option value='2' <?php if($_SESSION['API_SYSTEM'] == '2') echo 'selected' ?>><?=_('Enabled for all users'); ?></option>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<tr>
@@ -1055,31 +999,21 @@
 													<?=_('Login');?>
 												</td>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Login screen style');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_login_style">
-															<option value='default'><?=_('Default'); ?></option>
-															<option value='old' <?php if($_SESSION['LOGIN_STYLE'] == 'old') echo 'selected' ?>><?=_('Old Style'); ?></option>
+													<td class="input-label">
+														<label for="v_login_style" class="form-label"><?=_('Login screen style');?></label>
+														<select class="form-select" name="v_login_style" id="v_login_style">
+															<option value="default"><?=_('Default'); ?></option>
+															<option value="old" <?php if($_SESSION['LOGIN_STYLE'] == 'old') echo 'selected' ?>><?=_('Old Style'); ?></option>
 														</select>
-														<br><br>
-													</td>
-												</tr>
-												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to reset their passwords');?>
 													</td>
 												</tr>
 												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_system_password_reset">
-															<option value='yes'><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_SYSTEM_PASSWORD_RESET'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_system_password_reset" class="form-label"><?=_('Allow users to reset their passwords');?></label>
+														<select class="form-select" name="v_policy_system_password_reset" id="v_policy_system_password_reset">
+															<option value="yes"><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_SYSTEM_PASSWORD_RESET'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<tr>
@@ -1094,19 +1028,13 @@
 													</td>
 												</tr>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Prevent CSRF');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_csrf_strictness">
+													<td class="input-label">
+														<label for="v_policy_csrf_strictness" class="form-label"><?=_('Prevent CSRF');?></label>
+														<select class="form-select" name="v_policy_csrf_strictness" id="v_policy_csrf_strictness">
 															<option value="0"  <?php if($_SESSION['POLICY_CSRF_STRICTNESS'] == '0') echo 'selected' ?>><?=_('Disabled');?></option>
 															<option value="1"  <?php if($_SESSION['POLICY_CSRF_STRICTNESS'] == '1') echo 'selected' ?>><?=_('Enabled');?></option>
 															<option value="2"  <?php if($_SESSION['POLICY_CSRF_STRICTNESS'] == '2') echo 'selected' ?>><?=_('Strict');?></option>
-
 														</select>
-														<br><br>
 													</td>
 												</tr>
 											</table>
@@ -1126,48 +1054,32 @@
 														<td class="vst-text input-label step-top" style="font-size:1rem;padding-bottom:12px;">
 															<?=_('System Administrator account');?>
 														</td>
-
 													</tr>
 													<tr>
-														<td class="vst-text input-label">
-															<?=_('Restrict access to read-only for other administrators');?>
-														</td>
-													</tr>
-													<tr>
-														<td>
-															<select class="vst-list" name="v_policy_system_protected_admin">
-																<option value='yes'><?=_('Yes'); ?></option>
-																<option value='no' <?php if($_SESSION['POLICY_SYSTEM_PROTECTED_ADMIN'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
+														<td class="input-label">
+															<label for="v_policy_system_protected_admin" class="form-label"><?=_('Restrict access to read-only for other administrators');?></label>
+															<select class="form-select" name="v_policy_system_protected_admin" id="v_policy_system_protected_admin">
+																<option value="yes"><?=_('Yes'); ?></option>
+																<option value="no" <?php if($_SESSION['POLICY_SYSTEM_PROTECTED_ADMIN'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
 															</select>
-															<br><br>
-														</td>
-													</tr>
-													<tr>
-														<td class="vst-text input-label">
-															<?=_('Hide account from other administrators');?>
 														</td>
 													</tr>
 													<tr>
-														<td>
-															<select class="vst-list" name="v_policy_system_hide_admin">
-																<option value='yes'><?=_('Yes'); ?></option>
-																<option value='no' <?php if($_SESSION['POLICY_SYSTEM_HIDE_ADMIN'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
+														<td class="input-label">
+															<label for="v_policy_system_hide_admin" class="form-label"><?=_('Hide account from other administrators');?></label>
+															<select class="form-select" name="v_policy_system_hide_admin" id="v_policy_system_hide_admin">
+																<option value="yes"><?=_('Yes'); ?></option>
+																<option value="no" <?php if($_SESSION['POLICY_SYSTEM_HIDE_ADMIN'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
 															</select>
-															<br><br>
 														</td>
 													</tr>
 													<tr>
-														<td class="vst-text input-label">
-															<?=_('Do not allow other administrators to access Server Settings');?>
-														</td>
-													</tr>
-													<tr>
-														<td>
-															<select class="vst-list" name="v_policy_system_hide_services">
-																<option value='yes'><?=_('Yes'); ?></option>
-																<option value='no' <?php if($_SESSION['POLICY_SYSTEM_HIDE_SERVICES'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
+														<td class="input-label">
+															<label for="v_policy_system_hide_services" class="form-label"><?=_('Do not allow other administrators to access Server Settings');?></label>
+															<select class="form-select" name="v_policy_system_hide_services" id="v_policy_system_hide_services">
+																<option value="yes"><?=_('Yes'); ?></option>
+																<option value="no" <?php if($_SESSION['POLICY_SYSTEM_HIDE_SERVICES'] !== 'yes') echo 'selected' ?>><?=_('No'); ?></option>
 															</select>
-															<br><br>
 														</td>
 													</tr>
 												</table>
@@ -1190,88 +1102,60 @@
 												</tr>
 												<?php if ($_SESSION['POLICY_SYSTEM_ENABLE_BACON'] === 'true') { ?>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow suspended users to log in with read-only access');?> <span class="hint">(<?=_('Preview');?>)</span>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_view_suspended">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_VIEW_SUSPENDED'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_VIEW_SUSPENDED'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_view_suspended" class="form-label">
+															<?=_('Allow suspended users to log in with read-only access');?> <span class="hint">(<?=_('Preview');?>)</span>
+														</label>
+														<select class="form-select" name="v_policy_user_view_suspended" id="v_policy_user_view_suspended">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_VIEW_SUSPENDED'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_VIEW_SUSPENDED'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<?php } ?>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to edit their account details');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_edit_details">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_EDIT_DETAILS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_edit_details" class="form-label"><?=_('Allow users to edit their account details');?></label>
+														<select class="form-select" name="v_policy_user_edit_details" id="v_policy_user_edit_details">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_EDIT_DETAILS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
-													</td>
-												</tr>
-												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to change templates when editing web domains');?>
 													</td>
 												</tr>
 												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_edit_web_templates">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_edit_web_templates" class="form-label"><?=_('Allow users to change templates when editing web domains');?></label>
+														<select class="form-select" name="v_policy_user_edit_web_templates" id="v_policy_user_edit_web_templates">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
-													</td>
-												</tr>
-												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to change templates when editing DNS zones');?>
 													</td>
 												</tr>
 												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_edit_dns_templates">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_EDIT_DNS_TEMPLATES'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_EDIT_DNS_TEMPLATES'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_edit_dns_templates" class="form-label"><?=_('Allow users to change templates when editing DNS zones');?></label>
+														<select class="form-select" name="v_policy_user_edit_dns_templates" id="v_policy_user_edit_dns_templates">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_EDIT_DNS_TEMPLATES'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_EDIT_DNS_TEMPLATES'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to view action and login history logs');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_view_logs">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_VIEW_LOGS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_VIEW_LOGS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_view_logs" class="form-label"><?=_('Allow users to view action and login history logs');?></label>
+														<select class="form-select" name="v_policy_user_view_logs" id="v_policy_user_view_logs">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_VIEW_LOGS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_VIEW_LOGS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
-													</td>
-												</tr>
-												<tr>
-													<td class="vst-text input-label">
-														<?=_('Allow users to delete log history');?>
 													</td>
 												</tr>
 												<tr>
-													<td>
-														<select class="vst-list" name="v_policy_user_delete_logs">
-															<option value='yes' <?php if($_SESSION['POLICY_USER_DELETE_LOGS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['POLICY_USER_DELETE_LOGS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_policy_user_delete_logs" class="form-label"><?=_('Allow users to delete log history');?></label>
+														<select class="form-select" name="v_policy_user_delete_logs" id="v_policy_user_delete_logs">
+															<option value="yes" <?php if($_SESSION['POLICY_USER_DELETE_LOGS'] !== 'no') echo 'selected' ?>><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['POLICY_USER_DELETE_LOGS'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
-														<br><br>
 													</td>
 												</tr>
 												<tr>
@@ -1280,26 +1164,17 @@
 													</td>
 												</tr>
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Enforce subdomain ownership');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
-														<select class="vst-list" name="v_enforce_subdomain_ownership">
-															<option value='yes'><?=_('Yes'); ?></option>
-															<option value='no' <?php if($_SESSION['ENFORCE_SUBDOMAIN_OWNERSHIP'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
+													<td class="input-label">
+														<label for="v_enforce_subdomain_ownership" class="form-label"><?=_('Enforce subdomain ownership');?></label>
+														<select class="form-select u-mb20" name="v_enforce_subdomain_ownership" id="v_enforce_subdomain_ownership">
+															<option value="yes"><?=_('Yes'); ?></option>
+															<option value="no" <?php if($_SESSION['ENFORCE_SUBDOMAIN_OWNERSHIP'] == 'no') echo 'selected' ?>><?=_('No'); ?></option>
 														</select>
 													</td>
 												</tr>
 											</table>
 										</td>
 									</tr>
-									<tr>
-										<td>
-											<br><br>
-										</td>
-									</tr>
 								</table>
 							</td>
 						</tr>
@@ -1314,59 +1189,39 @@
 							<td class="vst-text input-label step-left">
 								<table style="display:<?php if (empty($v_adv)) echo 'none';?> ;" id="hestia">
 									<tr>
-										<td class="vst-text step-top">
-											<?=_('Quick App Installer');?>
-										</td>
-									</tr>
-									<tr>
-										<td>
-											<select class="vst-list" name="v_plugin_app_installer">
-												<option value='false'><?=_('No'); ?></option>
-												<option value='true' <?php if($_SESSION['PLUGIN_APP_INSTALLER'] == 'true') echo 'selected' ?>><?=_('Yes'); ?></option>
+										<td class="input-label step-top">
+											<label for="v_plugin_app_installer" class="form-label"><?=_('Quick App Installer');?></label>
+											<select class="form-select" name="v_plugin_app_installer" id="v_plugin_app_installer">
+												<option value="false"><?=_('No'); ?></option>
+												<option value="true" <?php if($_SESSION['PLUGIN_APP_INSTALLER'] == 'true') echo 'selected' ?>><?=_('Yes'); ?></option>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Filemanager');?>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_filemanager">
-												<option value='false'><?=_('No'); ?></option>
-												<option value='true' <?php if($_SESSION['FILE_MANAGER'] == 'true') echo 'selected' ?>><?=_('Yes'); ?></option>
+										<td class="input-label">
+											<label for="v_filemanager" class="form-label"><?=_('Filemanager');?></label>
+											<select class="form-select" name="v_filemanager" id="v_filemanager">
+												<option value="false"><?=_('No'); ?></option>
+												<option value="true" <?php if($_SESSION['FILE_MANAGER'] == 'true') echo 'selected' ?>><?=_('Yes'); ?></option>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('FileSystem Disk Quota');?>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_quota">
-												<option value='no'><?=_('No'); ?></option>
-												<option value='yes' <?php if($_SESSION['DISK_QUOTA'] == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
+										<td class="input-label">
+											<label for="v_quota" class="form-label"><?=_('FileSystem Disk Quota');?></label>
+											<select class="form-select" name="v_quota" id="v_quota">
+												<option value="no"><?=_('No'); ?></option>
+												<option value="yes" <?php if($_SESSION['DISK_QUOTA'] == 'yes') echo 'selected' ?>><?=_('Yes'); ?></option>
 											</select>
-											<br><br>
-										</td>
-									</tr>
-									<tr>
-										<td class="vst-text input-label">
-											<?=_('Firewall');?>
 										</td>
 									</tr>
 									<tr>
-										<td>
-											<select class="vst-list" name="v_firewall">
-												<option value='no'><?=_('No'); ?></option>
-												<option value='yes' <?php if($_SESSION['FIREWALL_SYSTEM'] == 'iptables') echo 'selected' ?>><?=_('Yes'); ?></option>
+										<td class="input-label">
+											<label for="v_firewall" class="form-label"><?=_('Firewall');?></label>
+											<select class="form-select u-mb20" name="v_firewall" id="v_firewall">
+												<option value="no"><?=_('No'); ?></option>
+												<option value="yes" <?php if($_SESSION['FIREWALL_SYSTEM'] == 'iptables') echo 'selected' ?>><?=_('Yes'); ?></option>
 											</select>
-											<br><br>
 										</td>
 									</tr>
 								</table>

+ 33 - 61
web/templates/pages/edit_user.html

@@ -187,26 +187,22 @@
 							</td>
 						</tr>
 						<tr>
-							<td class="vst-text input-label">
-								<?=_('Language');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_language">
+							<td class="input-label">
+								<label for="v_language" class="form-label"><?=_('Language');?></label>
+								<select class="form-select" name="v_language" id="v_language">
 									<?php
-											foreach ($languages as $key => $value) {
-												echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".$key."\"";
-												$skey = "'".$key."'";
-												if (( $key == $v_language ) || ( $skey == $v_language)){
-													echo 'selected' ;
-												}
-												if (( $key == detect_user_language() ) && (empty($v_language))){
-													echo 'selected' ;
-												}
-												echo ">".htmlentities($value)."</option>\n";
+										foreach ($languages as $key => $value) {
+											echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".$key."\"";
+											$skey = "'".$key."'";
+											if (( $key == $v_language ) || ( $skey == $v_language)){
+												echo 'selected' ;
 											}
-										?>
+											if (( $key == detect_user_language() ) && (empty($v_language))){
+												echo 'selected' ;
+											}
+											echo ">".htmlentities($value)."</option>\n";
+										}
+									?>
 								</select>
 							</td>
 						</tr>
@@ -215,13 +211,9 @@
 						<?php } else { ?>
 							<?php if (($_SESSION['userContext'] === 'admin') && ($_SESSION['user'] != $v_username)) {?>
 							<tr>
-								<td class="vst-text input-label">
-									<?=_('Role');?>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<select class="vst-list" name="v_role">
+								<td class="input-label">
+									<label for="v_role" class="form-label"><?=_('Role');?></label>
+									<select class="form-select" name="v_role" id="v_role">
 										<option value="user"><?=_('User');?>
 										<option value="admin" <?php if($v_role == "admin" ){ echo "selected"; } ?>><?=_('Administrator');?>
 									</select>
@@ -231,13 +223,9 @@
 						<?php } ?>
 						<?php if ($_SESSION['POLICY_USER_CHANGE_THEME'] !== 'no') {?>
 						<tr>
-							<td class="vst-text input-label">
-								<?=_('Theme') ?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_user_theme">
+							<td class="input-label">
+								<label for="v_user_theme" class="form-label"><?=_('Theme') ?></label>
+								<select class="form-select" name="v_user_theme" id="v_user_theme">
 									<?php
 										foreach ($themes as $key => $value) {
 											echo "\t\t\t\t<option value=\"".$value."\"";
@@ -255,27 +243,19 @@
 						</tr>
 						<?php } ?>
 							<tr>
-								<td class="vst-text input-label">
-									<?=_('Default list sort order');?>
-								</td>
-							</tr>
-							<tr>
-								<td>
-									<select class="vst-list" name="v_sort_order">
+								<td class="input-label">
+									<label for="v_sort_order" class="form-label"><?=_('Default list sort order');?></label>
+									<select class="form-select" name="v_sort_order" id="v_sort_order">
 										<option value='date' <?php if($v_sort_order === 'date') echo 'selected' ?>><?=_('Date'); ?></option>
 										<option value='name' <?php if($v_sort_order === 'name') echo 'selected' ?>><?=_('Name'); ?></option>
 									</select>
 								</td>
-								</tr>
-						<?php if ($_SESSION['userContext'] === 'admin') {?>
-							<tr>
-								<td class="vst-text input-label">
-										<?=_('Package');?>
-								</td>
 							</tr>
+						<?php if ($_SESSION['userContext'] === 'admin') {?>
 							<tr>
-								<td>
-									<select class="vst-list" name="v_package">
+								<td class="input-label">
+									<label for="v_package" class="form-label"><?=_('Package');?></label>
+									<select class="form-select" name="v_package" id="v_package">
 										<?php
 											foreach ($packages as $key => $value) {
 												echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".htmlentities($key)."\"";
@@ -298,13 +278,9 @@
 								<td class="step-top">
 									<table id="advanced-opts" style="display: none;">
 										<tr>
-											<td class="vst-text input-label">
-												<?=_('SSH Access');?>
-											</td>
-										</tr>
-										<tr>
-											<td>
-												<select class="vst-list" name="v_shell">
+											<td class="input-label">
+												<label for="v_shell" class="form-label"><?=_('SSH Access');?></label>
+												<select class="form-select" name="v_shell" id="v_shell">
 													<?php
 														foreach ($shells as $key => $value) {
 															echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
@@ -319,13 +295,9 @@
 											</td>
 										</tr>
 										<tr>
-											<td class="vst-text input-label">
-												<?=_('PHP CLI Version');?>
-											</td>
-										</tr>
-										<tr>
-											<td>
-												<select class="vst-list" name="v_phpcli">
+											<td class="input-label">
+												<label for="v_phpcli" class="form-label"><?=_('PHP CLI Version');?></label>
+												<select class="form-select" name="v_phpcli" id="v_phpcli">
 													<?php
 														foreach ($php_versions as $key => $value) {
 															$php = explode('-',$value);

+ 37 - 74
web/templates/pages/edit_web.html

@@ -81,13 +81,9 @@
 						</tr>
 						<?php } ?>
 						<tr>
-							<td class="vst-text input-label">
-								<?=_('IP Address');?>
-							</td>
-						</tr>
-						<tr>
-							<td>
-								<select class="vst-list" name="v_ip">
+							<td class="input-label">
+								<label for="v_ip" class="form-label"><?=_('IP Address');?></label>
+								<select class="form-select" name="v_ip" id="v_ip">
 									<?php
 										foreach ($ips as $ip => $value) {
 											$display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}");
@@ -97,14 +93,11 @@
 									?>
 								</select>
 							</td>
-						<tr>
-							<td class="vst-text step-top">
-								<?=_('Web Statistics');?>
-							</td>
 						</tr>
 						<tr>
-							<td>
-								<select class="vst-list" name="v_stats">
+							<td class="step-top">
+								<label for="v_stats" class="form-label"><?=_('Web Statistics');?></label>
+								<select class="form-select" name="v_stats" id="v_stats">
 									<?php
 										foreach ($stats as $key => $value) {
 											$svalue = "'".$value."'";
@@ -198,13 +191,9 @@
 											</td>
 										</tr>
 										<tr>
-											<td class="vst-text input-label">
-												<?=_('Status code');?>:
-											</td>
-										</tr>
-										<tr>
-											<td class="vst-text input-label">
-												<select class="vst-list" name="v-redirect-code">
+											<td class="input-label">
+												<label for="v-redirect-code" class="form-label"><?=_('Status code');?>:</label>
+												<select class="form-select" name="v-redirect-code" id="v-redirect-code">
 													<?php foreach ($redirect_code_options as $status_code): ?>
 													<option value="<?=$status_code;?>"
 														<?=($v_redirect_code === $status_code || (empty($v_redirect_code) && $status_code === $v_redirect_code))?' selected="selected" ':''; ?>>
@@ -261,20 +250,6 @@
 											</div>
 										</td>
 									</tr>
-									<tr style="display: none;">
-										<td class="vst-text input-label">
-											<?=_('Home Directory');?>
-										</td>
-									</tr>
-									<tr style="display: none;">
-										<td>
-											<select class="vst-list" name="v_ssl_home">
-												<option value='same'>
-													public_html
-												</option>
-											</select>
-										</td>
-									</tr>
 									<tr>
 										<td>
 											<table id="ssl-details" style="<?php if ($v_letsencrypt == 'yes' || $v_letsencrypt == 'on') { echo 'display: none;'; } ?>">
@@ -396,13 +371,11 @@
 								<table id="advanced-opts" style="display: none;">
 									<?php if (($_SESSION['userContext'] === 'admin') || ($_SESSION['userContext'] === 'user') && ($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] === 'yes')) { ?>
 										<tr>
-											<td class="vst-text input-label">
-												<?=_('Web Template')  . "<span class='optional'>" .strtoupper($_SESSION['WEB_SYSTEM']) . "</span>";?>
-											</td>
-										</tr>
-										<tr>
-											<td>
-												<select class="vst-list" name="v_template">
+											<td class="input-label">
+												<label for="v_template" class="form-label">
+													<?=_('Web Template') . "<span class='optional'>" . strtoupper($_SESSION['WEB_SYSTEM']) . "</span>";?>
+												</label>
+												<select class="form-select" name="v_template" id="v_template">
 													<?php
 														foreach ($templates as $key => $value) {
 															echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
@@ -445,26 +418,24 @@
 										<?php } ?>
 										<?php if (!empty($_SESSION['WEB_BACKEND'])) { ?>
 											<tr>
-												<td class="vst-text input-label">
-													<?=_('Backend Template') . " <span class='optional'>" . strtoupper($_SESSION['WEB_BACKEND']) . "</span>";?>
-												</td>
-											</tr>
-											<tr>
-												<td>
-													<select class="vst-list" name="v_backend_template">
+												<td class="input-label">
+													<label for="v_backend_template" class="form-label">
+														<?=_('Backend Template') . " <span class='optional'>" . strtoupper($_SESSION['WEB_BACKEND']) . "</span>";?>
+													</label>
+													<select class="form-select" name="v_backend_template" id="v_backend_template">
 														<?php
-																	foreach ($backend_templates as $key => $value) {
-																		echo "\t\t\t\t<option value=\"".$value."\"";
-																		$svalue = "'".$value."'";
-																		if ((!empty($v_backend_template)) && ( $value == $v_backend_template ) || ($svalue == $v_backend_template)){
-																			echo ' selected' ;
-																		}
-																		if ((empty($v_backend_template)) && ($value == 'default')){
-																			echo ' selected' ;
-																		}
-																		echo ">".htmlentities($value)."</option>\n";
-																	}
-																?>
+															foreach ($backend_templates as $key => $value) {
+																echo "\t\t\t\t<option value=\"".$value."\"";
+																$svalue = "'".$value."'";
+																if ((!empty($v_backend_template)) && ( $value == $v_backend_template ) || ($svalue == $v_backend_template)){
+																	echo ' selected' ;
+																}
+																if ((empty($v_backend_template)) && ($value == 'default')){
+																	echo ' selected' ;
+																}
+																echo ">".htmlentities($value)."</option>\n";
+															}
+														?>
 													</select>
 												</td>
 											</tr>
@@ -484,13 +455,9 @@
 												<td>
 													<table style="display:<?php if (empty($v_proxy)) { echo 'none';} else {echo 'block';}?> ;" id="proxytable">
 														<tr>
-															<td class="vst-text input-label">
-																<?=_('Proxy Template');?>
-															</td>
-														</tr>
-														<tr>
-															<td>
-																<select class="vst-list" name="v_proxy_template">
+															<td class="input-label">
+																<label for="v_proxy_template" class="form-label"><?=_('Proxy Template');?></label>
+																<select class="form-select" name="v_proxy_template" id="v_proxy_template">
 																	<?php
 																		foreach ($proxy_templates as $key => $value) {
 																			echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
@@ -536,14 +503,10 @@
 										<td class="step-left">
 											<table style="display:<?php if (empty($v_custom_doc_root)) { echo 'none';} else {echo 'block';}?> ;" id="v_custom_doc_root">
 												<tr>
-													<td class="vst-text input-label">
-														<?=_('Point to');?>
-													</td>
-												</tr>
-												<tr>
-													<td>
+													<td class="input-label">
+														<label for="v-custom-doc-domain" class="form-label"><?=_('Point to');?></label>
 														<input type="hidden" name="v-custom-doc-root_prepath" value="<?=$v_custom_doc_root_prepath;?>">
-														<select class="vst-list" name="v-custom-doc-domain">
+														<select class="form-select" name="v-custom-doc-domain" id="v-custom-doc-domain">
 															<?php foreach ($user_domains as $domain): ?>
 															<option value="<?=htmlentities($domain);?>"
 																<?=($v_custom_doc_domain === $domain || (empty($v_custom_doc_domain) && $domain === $v_domain))?' selected="selected" ':''; ?>>

Некоторые файлы не были показаны из-за большого количества измененных файлов