edit_web.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. <!-- Begin toolbar -->
  2. <div class="toolbar">
  3. <div class="toolbar-inner">
  4. <div class="toolbar-buttons">
  5. <a class="button button-secondary" id="btn-back" href="/list/web/">
  6. <i class="fas fa-arrow-left icon-blue"></i><?= _("Back") ?>
  7. </a>
  8. </div>
  9. <div class="toolbar-buttons">
  10. <a href="/delete/web/cache/?domain=<?=htmlentities($v_domain);?>&token=<?=$_SESSION['token'];?>" class="button button-secondary <?php if ( $v_nginx_cache == 'yes' || (($v_proxy_template == 'caching' || is_int(strpos($v_proxy_template, 'caching-'))) && $_SESSION['PROXY_SYSTEM'] == 'nginx')) { echo "block"; } else{ echo "u-hidden"; }?>" id="v-clear-cache">
  11. <i class="fas fa-trash icon-red"></i><?= _("Purge Nginx Cache") ?>
  12. </a>
  13. <?php if ($_SESSION["PLUGIN_APP_INSTALLER"] !== "false") { ?>
  14. <a href="/add/webapp/?domain=<?= htmlentities($v_domain) ?>" class="button button-secondary">
  15. <i class="fas fa-magic icon-blue"></i> <?= _("Quick Install App") ?>
  16. </a>
  17. <?php } ?>
  18. <button class="button" type="submit" form="vstobjects">
  19. <i class="fas fa-floppy-disk icon-purple"></i><?= _("Save") ?>
  20. </button>
  21. </div>
  22. </div>
  23. </div>
  24. <!-- End toolbar -->
  25. <div class="container animate__animated animate__fadeIn">
  26. <form
  27. x-data="{
  28. statsAuthEnabled: <?= !empty($v_stats_user) ? "true" : "false" ?>,
  29. redirectEnabled: <?= !empty($v_redirect) ? "true" : "false" ?>,
  30. sslEnabled: <?= $v_ssl == "yes" ? "true" : "false" ?>,
  31. letsEncryptEnabled: <?= $v_letsencrypt == "yes" || $v_letsencrypt == "on" ? "true" : "false" ?>,
  32. showCertificates: <?= $v_letsencrypt == "yes" || $v_letsencrypt == "on" ? "false" : "true" ?>,
  33. showAdvanced: false,
  34. nginxCacheEnabled: <?= $v_nginx_cache == "yes" ? "true" : "false" ?>,
  35. proxySupportEnabled: <?= !empty($v_proxy) ? "true" : "false" ?>,
  36. customDocumentRootEnabled: <?= !empty($v_custom_doc_root) ? "true" : "false" ?>
  37. }"
  38. id="vstobjects"
  39. name="v_edit_web"
  40. method="post"
  41. class="<?= $v_status ?>"
  42. >
  43. <input type="hidden" name="token" value="<?= $_SESSION["token"] ?>">
  44. <input type="hidden" name="save" value="save">
  45. <div class="form-container">
  46. <h1 class="form-title"><?= _("Editing Domain") ?></h1>
  47. <?php show_alert_message($_SESSION); ?>
  48. <div class="u-mb10">
  49. <label for="v_domain" class="form-label"><?= _("Domain") ?></label>
  50. <input type="text" class="form-control" name="v_domain" id="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>" disabled>
  51. <input type="hidden" name="v_domain" value="<?= htmlentities(trim($v_domain, "'")) ?>">
  52. </div>
  53. <div class="u-mb10">
  54. <label for="v_aliases" class="form-label"><?= _("Aliases") ?></label>
  55. <textarea class="form-control" name="v_aliases" id="v_aliases"><?= htmlentities(trim($v_aliases, "'")) ?></textarea>
  56. </div>
  57. <?php if ($v_letsencrypt == "yes" || $v_letsencrypt == "on") { ?>
  58. <div class="u-mb10">
  59. <div class="alert alert-info" role="alert">
  60. <i class="fas fa-exclamation"></i>
  61. <p><?= _("Lets Encrypt will obtain a new SSL certificate if web domain aliases are changed.") ?></p>
  62. </div>
  63. </div>
  64. <?php } ?>
  65. <div class="u-mb20">
  66. <label for="v_ip" class="form-label"><?= _("IP Address") ?></label>
  67. <select class="form-select" name="v_ip" id="v_ip">
  68. <?php
  69. foreach ($ips as $ip => $value) {
  70. $display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}");
  71. $ip_selected = ((!empty($v_ip) && $ip == $v_ip) || $v_ip == "'{$ip}'") ? 'selected' : '';
  72. echo "\n\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"{$ip}\" {$ip_selected}>{$display_ip}</option>\n";
  73. }
  74. ?>
  75. </select>
  76. </div>
  77. <div class="u-mb10">
  78. <label for="v_stats" class="form-label"><?= _("Web Statistics") ?></label>
  79. <select class="form-select" name="v_stats" id="v_stats">
  80. <?php
  81. foreach ($stats as $key => $value) {
  82. $svalue = "'".$value."'";
  83. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  84. if (empty($v_stats)) $v_stats = 'none';
  85. if (( $value == $v_stats ) || ($svalue == $v_stats )){
  86. echo ' selected' ;
  87. }
  88. echo ">". htmlentities(_($value)) ."</option>\n";
  89. }
  90. ?>
  91. </select>
  92. </div>
  93. <div class="stats-auth u-mb10" style="<?php if ($v_stats == 'none') { ?>display:none<?php } ?>">
  94. <div class="form-check">
  95. <input x-model="statsAuthEnabled" class="form-check-input" type="checkbox" name="v_stats_auth" id="v_stats_auth">
  96. <label for="v_stats_auth">
  97. <?= _("Statistics Authorization") ?>
  98. </label>
  99. </div>
  100. </div>
  101. <div class="stats-auth">
  102. <div class="u-pl30">
  103. <div x-cloak x-show="statsAuthEnabled" id="statstable" name="v-add-web-domain-stats-user">
  104. <div class="u-mb10">
  105. <label for="v_stats_user" class="form-label"><?= _("Username") ?></label>
  106. <input type="text" class="form-control" name="v_stats_user" id="v_stats_user" value="<?= htmlentities(trim($v_stats_user, "'")) ?>">
  107. </div>
  108. <div class="u-mb20">
  109. <label for="v_password" class="form-label">
  110. <?= _("Password") ?> / <a href="javascript:WEBrandom();" class="form-link"><?= _("generate") ?></a>
  111. </label>
  112. <div class="u-pos-relative">
  113. <input type="text" class="form-control js-password-input" name="v_stats_password" id="v_password" value="<?= trim($v_stats_password, "'") ?>">
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. <div class="form-check u-mb10">
  120. <input x-model="redirectEnabled" class="form-check-input" type="checkbox" name="v-redirect-checkbox" id="v-redirect-checkbox">
  121. <label for="v-redirect-checkbox">
  122. <?= _("Enable domain redirection") ?>
  123. </label>
  124. </div>
  125. <div x-cloak x-show="redirectEnabled" id="v_redirect" class="u-pl30 u-mb10">
  126. <div class="form-check">
  127. <input class="form-check-input v-redirect-custom-value" type="radio" name="v-redirect" id="v-redirect-radio-1" value="<?='www.'.htmlentities($v_domain);?>" <?php if ($v_redirect == "www.".$v_domain) echo 'checked'; ?>>
  128. <label for="v-redirect-radio-1">
  129. <?=sprintf(_('Redirect visitors to %s'),"www.".htmlentities($v_domain));?>
  130. </label>
  131. </div>
  132. <div class="form-check">
  133. <input class="form-check-input v-redirect-custom-value" type="radio" name="v-redirect" id="v-redirect-radio-2" value="<?=htmlentities($v_domain);?>" <?php if( $v_redirect == $v_domain) echo 'checked';?> >
  134. <label for="v-redirect-radio-2">
  135. <?=sprintf(_('Redirect visitors to %s'),htmlentities($v_domain));?>
  136. </label>
  137. </div>
  138. <div class="form-check">
  139. <input class="form-check-input v-redirect-custom-value" type="radio" name="v-redirect" id="v-redirect-radio-3" value="custom" <?php if( !empty($v_redirect_custom)) echo 'checked';?>>
  140. <label for="v-redirect-radio-3">
  141. <?= _("Redirect visitors to a custom domain or web address") ?>
  142. </label>
  143. </div>
  144. <div id="custom_redirect" class="u-pl30" style="display:<?php if (empty($v_redirect_custom)) { echo 'none';} else {echo 'block';}?> ;">
  145. <div class="u-mt15 u-mb10">
  146. <label for="v-redirect-custom" class="form-label"><?= _("Target domain or URL") ?></label>
  147. <input type="text" class="form-control" name="v-redirect-custom" id="v-redirect-custom" value="<?=$v_redirect_custom;?>">
  148. </div>
  149. <div class="u-mb20">
  150. <label for="v-redirect-code" class="form-label"><?= _("Status code") ?>:</label>
  151. <select class="form-select" name="v-redirect-code" id="v-redirect-code">
  152. <?php foreach ($redirect_code_options as $status_code): ?>
  153. <option value="<?=$status_code;?>"
  154. <?=($v_redirect_code === $status_code || (empty($v_redirect_code) && $status_code === $v_redirect_code))?' selected="selected" ':''; ?>>
  155. <?=$status_code;?>
  156. </option>
  157. <?php endforeach; ?>
  158. </select>
  159. </div>
  160. </div>
  161. </div>
  162. <div class="form-check u-mb10">
  163. <input x-model="sslEnabled" class="form-check-input" type="checkbox" name="v_ssl" id="v_ssl">
  164. <label for="v_ssl">
  165. <?= _("SSL Support") ?>
  166. </label>
  167. </div>
  168. <div x-cloak x-show="sslEnabled" id="ssltable" class="u-pl30">
  169. <div class="form-check u-mb10">
  170. <input x-model="letsEncryptEnabled" class="form-check-input" type="checkbox" name="v_letsencrypt" id="letsencrypt">
  171. <label for="letsencrypt">
  172. <?= _("Lets Encrypt Support") ?>
  173. </label>
  174. </div>
  175. <div class="form-check u-mb10">
  176. <input class="form-check-input" type="checkbox" name="v_ssl_forcessl" id="v_ssl_forcessl" <?php if($v_ssl_forcessl == 'yes') echo 'checked' ?>>
  177. <label for="v_ssl_forcessl">
  178. <?= _("Force SSL/HTTPS") ?>
  179. </label>
  180. </div>
  181. <div class="form-check u-mb20">
  182. <input class="form-check-input" type="checkbox" name="v_ssl_hsts" id="ssl_hsts" <?php if($v_ssl_hsts == 'yes') echo 'checked' ?>>
  183. <label for="ssl_hsts">
  184. <?= _("Enable SSL HSTS") ?>
  185. </label>
  186. </div>
  187. <div x-cloak x-show="showCertificates" id="ssl-details">
  188. <div class="u-mb10">
  189. <label for="ssl_crt" class="form-label">
  190. <?= _("SSL Certificate") ?>
  191. <span id="generate-csr"> / <a class="form-link" target="_blank" href="/generate/ssl/?domain=<?= htmlentities($v_domain) ?>"><?= _("Generate CSR") ?></a></span>
  192. </label>
  193. <textarea class="form-control u-min-height100 u-console" name="v_ssl_crt" id="ssl_crt"><?= htmlentities(trim($v_ssl_crt, "'")) ?></textarea>
  194. </div>
  195. <div class="u-mb10">
  196. <label for="v_ssl_key" class="form-label"><?= _("SSL Key") ?></label>
  197. <textarea class="form-control u-min-height100 u-console" name="v_ssl_key" id="v_ssl_key"><?= htmlentities(trim($v_ssl_key, "'")) ?></textarea>
  198. </div>
  199. <div class="u-mb20">
  200. <label for="v_ssl_ca" class="form-label">
  201. <?= _("SSL Certificate Authority / Intermediate") ?> <span class="optional">(<?= _("optional") ?>)</span>
  202. </label>
  203. <textarea class="form-control u-min-height100 u-console" name="v_ssl_ca" id="v_ssl_ca"><?= htmlentities(trim($v_ssl_ca, "'")) ?></textarea>
  204. </div>
  205. </div>
  206. <?php if ($v_ssl != "no") { ?>
  207. <ul class="values-list">
  208. <li class="values-list-item">
  209. <span class="values-list-label"><?= _("SUBJECT") ?></span>
  210. <span class="values-list-value"><?= $v_ssl_subject ?></span>
  211. </li>
  212. <?php if ($v_ssl_aliases) { ?>
  213. <li class="values-list-item">
  214. <span class="values-list-label"><?= _("ALIASES") ?></span>
  215. <span class="values-list-value"><?= $v_ssl_aliases ?></span>
  216. </li>
  217. <?php } ?>
  218. <li class="values-list-item">
  219. <span class="values-list-label"><?= _("NOT_BEFORE") ?></span>
  220. <span class="values-list-value"><?= $v_ssl_not_before ?></span>
  221. </li>
  222. <li class="values-list-item">
  223. <span class="values-list-label"><?= _("NOT_AFTER") ?></span>
  224. <span class="values-list-value"><?= $v_ssl_not_after ?></span>
  225. </li>
  226. <li class="values-list-item">
  227. <span class="values-list-label"><?= _("SIGNATURE") ?></span>
  228. <span class="values-list-value"><?= $v_ssl_signature ?></span>
  229. </li>
  230. <li class="values-list-item">
  231. <span class="values-list-label"><?= _("PUB_KEY") ?></span>
  232. <span class="values-list-value"><?= $v_ssl_pub_key ?></span>
  233. </li>
  234. <li class="values-list-item">
  235. <span class="values-list-label"><?= _("ISSUER") ?></span>
  236. <span class="values-list-value"><?= $v_ssl_issuer ?></span>
  237. </li>
  238. <p x-cloak x-show="letsEncryptEnabled" id="letsinfo">
  239. <a x-on:click="showCertificates = !showCertificates" href="#" class="form-link"><?= _("Show Certificate") ?></a>
  240. </p>
  241. </ul>
  242. <?php } ?>
  243. </div>
  244. <div class="u-mt15 u-mb20">
  245. <button x-on:click="showAdvanced = !showAdvanced" type="button" class="button button-secondary">
  246. <?= _("Advanced options") ?>
  247. </button>
  248. </div>
  249. <div x-cloak x-show="showAdvanced">
  250. <?php if (($_SESSION['userContext'] === 'admin') || ($_SESSION['userContext'] === 'user') && ($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] === 'yes')) { ?>
  251. <div class="u-mb10">
  252. <label for="v_template" class="form-label">
  253. <?= _("Web Template") . "<span class='optional'>" . strtoupper($_SESSION['WEB_SYSTEM']) . "</span>";?>
  254. </label>
  255. <select class="form-select" name="v_template" id="v_template">
  256. <?php
  257. foreach ($templates as $key => $value) {
  258. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  259. $svalue = "'".$value."'";
  260. if ((!empty($v_template)) && ( $value == $v_template ) || ($svalue == $v_template)){
  261. echo ' selected' ;
  262. }
  263. echo ">".htmlentities($value)."</option>\n";
  264. }
  265. ?>
  266. </select>
  267. </div>
  268. <?php if($_SESSION['WEB_SYSTEM'] == 'nginx'){?>
  269. <div class="form-check u-mb10">
  270. <input x-model="nginxCacheEnabled" class="form-check-input" type="checkbox" name="v_nginx_cache_check" id="v_nginx_cache_check">
  271. <label for="v_nginx_cache_check">
  272. <?= _("Enable FastCGI Cache") ?>
  273. <a href="https://docs.hestiacp.com/admin_docs/web/fastcgi.html#nginx-fastcgi-cache" target="_blank" class="u-ml5">
  274. <i class="fas fa-circle-question"></i>
  275. </a>
  276. </label>
  277. </div>
  278. <div x-cloak x-show="nginxCacheEnabled" id="v_nginx_duration" class="u-pl30">
  279. <div class="u-mb10">
  280. <label for="v_nginx_cache_duration" class="form-label">
  281. <?= _("Cache Duration") ?> <span class="optional"><?= _("For example: 30s, 10m or 1d") ?>
  282. </label>
  283. <input type="text" class="form-control" name="v_nginx_cache_duration" id="v_nginx_cache_duration" value="<?=htmlentities(trim($v_nginx_cache_duration, "'"))?>">
  284. </div>
  285. </div>
  286. <?php } ?>
  287. <?php if (!empty($_SESSION['WEB_BACKEND'])) { ?>
  288. <div class="u-mb10">
  289. <label for="v_backend_template" class="form-label">
  290. <?= _("Backend Template") . " <span class='optional'>" . strtoupper($_SESSION['WEB_BACKEND']) . "</span>";?>
  291. </label>
  292. <select class="form-select" name="v_backend_template" id="v_backend_template">
  293. <?php
  294. foreach ($backend_templates as $key => $value) {
  295. echo "\t\t\t\t<option value=\"".$value."\"";
  296. $svalue = "'".$value."'";
  297. if ((!empty($v_backend_template)) && ( $value == $v_backend_template ) || ($svalue == $v_backend_template)){
  298. echo ' selected' ;
  299. }
  300. if ((empty($v_backend_template)) && ($value == 'default')){
  301. echo ' selected' ;
  302. }
  303. echo ">".htmlentities($value)."</option>\n";
  304. }
  305. ?>
  306. </select>
  307. </div>
  308. <?php }?>
  309. <?php if (!empty($_SESSION['PROXY_SYSTEM'])) { ?>
  310. <div style="display: none;">
  311. <div class="form-check u-mb10">
  312. <input x-model="proxySupportEnabled" class="form-check-input" type="checkbox" name="v_proxy" id="v_proxy">
  313. <label for="v_proxy">
  314. <?= _("Proxy Support") . "<span class='optional'>" . strtoupper($_SESSION['PROXY_SYSTEM']) . "</span>";?>
  315. </label>
  316. </div>
  317. </div>
  318. <div x-cloak x-show="proxySupportEnabled" id="proxytable">
  319. <div class="u-mb10">
  320. <label for="v_proxy_template" class="form-label"><?= _("Proxy Template") ?></label>
  321. <select class="form-select" name="v_proxy_template" id="v_proxy_template">
  322. <?php
  323. foreach ($proxy_templates as $key => $value) {
  324. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  325. $svalue = "'".$value."'";
  326. if ((!empty($v_proxy_template)) && ( $value == $v_proxy_template ) || ($svalue == $v_proxy_template)){
  327. echo ' selected' ;
  328. }
  329. if ((empty($v_proxy_template)) && ($value == 'default')){
  330. echo ' selected' ;
  331. }
  332. echo ">".htmlentities($value)."</option>\n";
  333. }
  334. ?>
  335. </select>
  336. </div>
  337. <div class="u-mb10">
  338. <label for="v_proxy_ext" class="form-label"><?= _("Proxy Extensions") ?></label>
  339. <textarea class="form-control" name="v_proxy_ext" id="v_proxy_ext"><?php if (!empty($v_proxy_ext)) { echo htmlentities(trim($v_proxy_ext, "'"));} else { echo 'jpg, jpeg, gif, png, ico, svg, css, zip, tgz, gz, rar, bz2, exe, pdf, doc, xls, ppt, txt, odt, ods, odp, odf, tar, bmp, rtf, js, mp3, avi, mpeg, flv, html, htm'; } ?></textarea>
  340. </div>
  341. </div>
  342. <?php } ?>
  343. <?php } ?>
  344. <div class="form-check u-mb10">
  345. <input x-model="customDocumentRootEnabled" class="form-check-input" type="checkbox" name="v_custom_doc_root_check" id="v_custom_doc_root_check">
  346. <label for="v_custom_doc_root_check">
  347. <?= _("Custom document root") ?>
  348. </label>
  349. </div>
  350. <div x-cloak x-show="customDocumentRootEnabled" id="v_custom_doc_root" class="u-pl30">
  351. <div class="u-mb10">
  352. <label for="v-custom-doc-domain" class="form-label"><?= _("Point to") ?></label>
  353. <input type="hidden" name="v-custom-doc-root_prepath" value="<?= $v_custom_doc_root_prepath ?>">
  354. <select class="form-select" name="v-custom-doc-domain" id="v-custom-doc-domain">
  355. <?php foreach ($user_domains as $domain): ?>
  356. <option value="<?= htmlentities($domain) ?>"
  357. <?= $v_custom_doc_domain === $domain || (empty($v_custom_doc_domain) && $domain === $v_domain) ? ' selected="selected" ' : "" ?>>
  358. <?= htmlentities($domain) ?>
  359. </option>
  360. <?php endforeach; ?>
  361. </select>
  362. </div>
  363. <div class="u-mb10">
  364. <label for="v-custom-doc-folder" class="form-label">
  365. <?php print _("Directory"); ?> <span class="optional">(<?= _("optional") ?>)</span>
  366. </label>
  367. <input type="text" class="form-control" name="v-custom-doc-folder" id="v-custom-doc-folder" value="<?= htmlentities(trim($v_custom_doc_folder, "'")) ?>">
  368. <small class="custom_docroot_hint"></small>
  369. </div>
  370. </div>
  371. <?php if (in_array($_SESSION["FTP_SYSTEM"], ["vsftpd", "proftpd"])) { ?>
  372. <div class="form-check u-mb10">
  373. <input class="form-check-input" type="checkbox" name="v_ftp" id="v_ftp" <?php if (!empty($v_ftp_user)) echo 'checked' ?> onclick="App.Actions.WEB.toggle_additional_ftp_accounts(this)">
  374. <label for="v_ftp">
  375. <?= _("Additional FTP Account") ?>
  376. </label>
  377. </div>
  378. <div id="ftp_users">
  379. <?php foreach ($v_ftp_users as $i => $ftp_user): ?>
  380. <?php
  381. $v_ftp_user = $ftp_user['v_ftp_user'];
  382. $v_ftp_password = $ftp_user['v_ftp_password'];
  383. $v_ftp_path = $ftp_user['v_ftp_path'];
  384. $v_ftp_email = $ftp_user['v_ftp_email'];
  385. $v_ftp_pre_path = $ftp_user['v_ftp_pre_path'];
  386. ?>
  387. <div class="js-ftp-account js-ftp-account-nrm" name="v_add_domain_ftp" style="display:<?php if (empty($v_ftp_user)) { echo 'none';} else {echo 'block';}?> ;">
  388. <div class="u-mb10">
  389. <?= _("FTP") ?> #<span class="ftp-user-number"><?=$i + 1; ?></span>
  390. <a class="form-link form-link-danger" href="#" onclick="App.Actions.WEB.remove_ftp_user(this)"><?= _("delete") ?></a>
  391. <input type="hidden" class="v-ftp-user-deleted" name="v_ftp_user[<?=$i ?>][delete]" value="0">
  392. <input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[<?=$i ?>][is_new]" value="<?=htmlentities($ftp_user['is_new']) ?>">
  393. </div>
  394. <div class="u-pl30 u-mb10">
  395. <label for="v_ftp_user[<?=$i ?>][v_ftp_user]" class="form-label">
  396. <?= _("Username") ?><br>
  397. <span style="color:#777;"><?=sprintf(_('Prefix %s will be added to username automatically'),$user_plain."_");?></span>
  398. </label>
  399. <input type="text" class="form-control v-ftp-user" <?=$ftp_user['is_new'] != 1 ? 'disabled="disabled"' : '' ?>
  400. name="v_ftp_user[<?=$i ?>][v_ftp_user]" id="v_ftp_user[<?=$i ?>][v_ftp_user]" value="<?=htmlentities(trim($v_ftp_user, "'"))?>">
  401. <input type="hidden" name="v_record_id" value="<?=htmlentities(trim($v_record_id, "'"))?>">
  402. <small class="hint"></small>
  403. </div>
  404. <div class="u-pl30 u-mb10">
  405. <label for="v_ftp_user[<?=$i ?>][v_ftp_password]" class="form-label">
  406. <?= _("Password") ?> / <a href="javascript:void(0);" onclick="FTPrandom(this)" ; class="form-link"><?= _("generate") ?></a>
  407. </label>
  408. <input type="text" class="form-control v-ftp-user-psw" name="v_ftp_user[<?=$i ?>][v_ftp_password]" id="v_ftp_user[<?=$i ?>][v_ftp_password]" value="<?=htmlentities(trim($v_ftp_password, "'"))?>">
  409. </div>
  410. <div class="u-pl30 u-mb10">
  411. <label for="v_ftp_user[<?=$i ?>][v_ftp_path]" class="form-label"><?= _("Path") ?></label>
  412. <input type="hidden" name="v_ftp_pre_path" value="<?=!empty($v_ftp_pre_path) ? htmlentities(trim($v_ftp_pre_path, "'")) : '/'; ?>">
  413. <input type="hidden" name="v_ftp_user[<?=$i ?>][v_ftp_path_prev]" value="<?php if (!empty($v_ftp_path)) echo ($v_ftp_path[0] != '/' ? '/' : '').htmlentities(trim($v_ftp_path, "'")) ?>">
  414. <input type="text" class="form-control js-ftp-path" name="v_ftp_user[<?=$i ?>][v_ftp_path]" id="v_ftp_user[<?=$i ?>][v_ftp_path]" value="<?php if (!empty($v_ftp_path)) echo ($v_ftp_path[0] != '/' ? '/' : '').htmlentities(trim($v_ftp_path, "'")) ?>">
  415. <span class="hint-prefix js-ftp-path-prefix"><?=htmlentities(trim($v_ftp_pre_path, "'"))?></span><span class="hint js-ftp-path-hint"></span>
  416. </div>
  417. <?php if ($ftp_user['is_new'] == 1): ?>
  418. <div class="u-pl30 u-mb10">
  419. <label for="v_ftp_user[<?=$i ?>][v_ftp_email]" class="form-label"><?= _("Send FTP credentials to email") ?></label>
  420. <input type="email" class="form-control js-email-alert-on-psw" name="v_ftp_user[<?=$i ?>][v_ftp_email]" id="v_ftp_user[<?=$i ?>][v_ftp_email]" value="<?=htmlentities(trim($v_ftp_email, "'"))?>">
  421. </div>
  422. <?php endif; ?>
  423. </div>
  424. <?php endforeach; ?>
  425. </div>
  426. <div class="js-add-new-ftp-user-button" style="<?=!empty($v_ftp_user) ? '' : 'display:none;' ?>">
  427. <div class="u-pt18 v-add-new-user">
  428. <a class="form-link" onclick="App.Actions.WEB.add_ftp_user_form()"><?= _("Add one more FTP Account") ?></a>
  429. </div>
  430. </div>
  431. <?php } ?>
  432. </div>
  433. </div>
  434. </form>
  435. </div>
  436. <div id="templates" class="u-hidden">
  437. <div class="js-ftp-account js-ftp-account-nrm" name="v_add_domain_ftp">
  438. <div class="u-mb10">
  439. <?= _("FTP") ?> #<span class="ftp-user-number"></span>
  440. <a class="form-link form-link-danger" onclick="App.Actions.WEB.remove_ftp_user(this)"><?= _("delete") ?></a>
  441. <input type="hidden" class="v-ftp-user-deleted" name="v_ftp_user[%INDEX%][delete]" value="0">
  442. <input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[%INDEX%][is_new]" value="1">
  443. </div>
  444. <div class="u-pl30 u-mb10">
  445. <label for="v_ftp_user[%INDEX%][v_ftp_user]" class="form-label">
  446. <?= _("Username") ?><br>
  447. <span style="color:#777;"><?= sprintf(_("Prefix %s will be added to username automatically"), $user_plain . "_") ?></span>
  448. </label>
  449. <input type="text" class="form-control v-ftp-user" name="v_ftp_user[%INDEX%][v_ftp_user]" id="v_ftp_user[%INDEX%][v_ftp_user]" value="">
  450. <small class="hint"></small>
  451. </div>
  452. <div class="u-pl30 u-mb10">
  453. <label for="v_ftp_user[%INDEX%][v_ftp_password]" class="form-label">
  454. <?= _("Password") ?> / <a href="javascript:void(0);" onclick="FTPrandom(this)" ; class="form-link"><?= _("generate") ?></a>
  455. </label>
  456. <input type="text" class="form-control v-ftp-user-psw" name="v_ftp_user[%INDEX%][v_ftp_password]" id="v_ftp_user[%INDEX%][v_ftp_password]">
  457. </div>
  458. <div class="u-pl30 u-mb10">
  459. <label for="v_ftp_user[%INDEX%][v_ftp_path]" class="form-label"><?= _("Path") ?></label>
  460. <input type="hidden" name="v_ftp_pre_path" value="">
  461. <input type="text" class="form-control js-ftp-path" name="v_ftp_user[%INDEX%][v_ftp_path]" id="v_ftp_user[%INDEX%][v_ftp_path]" value="">
  462. <span class="hint-prefix js-ftp-path-prefix"><?= htmlentities(trim($v_ftp_pre_path_new_user, "'")) ?></span><span class="hint js-ftp-path-hint"></span>
  463. </div>
  464. <div class="u-pl30 u-mb10">
  465. <label for="v_ftp_user[%INDEX%][v_ftp_email]" class="form-label"><?= _("Send FTP credentials to email") ?></label>
  466. <input type="email" class="form-control js-email-alert-on-psw" name="v_ftp_user[%INDEX%][v_ftp_email]" id="v_ftp_user[%INDEX%][v_ftp_email]" value="">
  467. </div>
  468. </div>
  469. </div>