edit_web.html 27 KB

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