edit_web.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. <!-- Begin toolbar -->
  2. <div class="l-center edit">
  3. <div class="l-sort clearfix">
  4. <div class="l-unit-toolbar__buttonstrip">
  5. <a class="ui-button cancel" dir="ltr" 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 float-right">
  8. <a href="/delete/web/cache/?domain=<?=htmlentities($v_domain);?>&token=<?=$_SESSION['token'];?>" class="ui-button cancel <?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 "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="ui-button cancel" dir="ltr">
  13. <i class="fas fa-magic status-icon blue"></i> <?=_('Quick Install App');?>
  14. </a>
  15. <?php } ?>
  16. <a href="#" class="ui-button" data-action="submit" data-id="vstobjects"><i class="fas fa-save status-icon purple"></i><?=_('Save');?></a>
  17. </div>
  18. </div>
  19. </div>
  20. <!-- End toolbar -->
  21. <div class="l-separator"></div>
  22. <div class="l-center animated fadeIn">
  23. <form id="vstobjects" name="v_edit_web" method="post" class="<?=$v_status?>">
  24. <input type="hidden" name="token" value="<?=$_SESSION['token']?>" />
  25. <input type="hidden" name="save" value="save" />
  26. <table class='data'>
  27. <tr class="data-add">
  28. <td class="data-dotted">
  29. <table class="data-col1">
  30. <tr>
  31. <td>
  32. </td>
  33. </tr>
  34. </table>
  35. </td>
  36. <td class="data-dotted">
  37. <table class="data-col2">
  38. <tr>
  39. <td class="step-top">
  40. <span class="page-title"><?=_('Editing Domain');?></span>
  41. </td>
  42. </tr>
  43. <tr>
  44. <td>
  45. <?php show_error_panel($_SESSION);?>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td class="vst-text step-top">
  50. <?=_('Domain');?>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td>
  55. <input type="text" size="20" class="vst-input" name="v_domain" value="<?=htmlentities(trim($v_domain, "'"))?>" disabled>
  56. <input type="hidden" name="v_domain" value="<?=htmlentities(trim($v_domain, "'"))?>">
  57. </td>
  58. </tr>
  59. <tr>
  60. <td class="vst-text input-label">
  61. <?=_('Aliases');?>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td>
  66. <textarea size="20" class="vst-textinput short" name="v_aliases"><?=htmlentities(trim($v_aliases, "'"))?></textarea>
  67. </td>
  68. </tr>
  69. <?php if ($v_letsencrypt == 'yes' || $v_letsencrypt == 'on') {?>
  70. <tr>
  71. <td>
  72. <span class="alert alert-info alert-with-icon">
  73. <i class="fas fa-exclamation"></i>
  74. <?=_('Lets Encrypt will obtain a new SSL certificate if web domain aliases are changed.');?>
  75. </span>
  76. </td>
  77. </tr>
  78. <?php } ?>
  79. <tr>
  80. <td class="vst-text input-label">
  81. <?=_('IP Address');?>
  82. </td>
  83. </tr>
  84. <tr>
  85. <td>
  86. <select class="vst-list" name="v_ip">
  87. <?php
  88. foreach ($ips as $ip => $value) {
  89. $display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}");
  90. $ip_selected = ((!empty($v_ip) && $ip == $v_ip) || $v_ip == "'{$ip}'") ? 'selected' : '';
  91. echo "\n\t\t\t\t\t\t\t\t\t\t\t\t<option value=\"{$ip}\" {$ip_selected}>{$display_ip}</option>\n";
  92. }
  93. ?>
  94. </select>
  95. </td>
  96. <tr>
  97. <td class="vst-text step-top">
  98. <?=_('Web Statistics');?>
  99. </td>
  100. </tr>
  101. <tr>
  102. <td>
  103. <select class="vst-list" name="v_stats">
  104. <?php
  105. foreach ($stats as $key => $value) {
  106. $svalue = "'".$value."'";
  107. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  108. if (empty($v_stats)) $v_stats = 'none';
  109. if (( $value == $v_stats ) || ($svalue == $v_stats )){
  110. echo ' selected' ;
  111. }
  112. echo ">". htmlentities(_($value)) ."</option>\n";
  113. }
  114. ?>
  115. </select>
  116. </td>
  117. </tr>
  118. <tr class="stats-auth" style="<?php if ($v_stats == 'none') { ?>display:none<?php } ?>">
  119. <td class="vst-text input-label">
  120. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_stats_auth" <?php if (!empty($v_stats_user)) echo "checked=yes" ?> onclick="javascript:elementHideShow('statstable');"><?=_('Statistics Authorization');?></label>
  121. </td>
  122. </tr>
  123. <tr class="stats-auth">
  124. <td class="step-left">
  125. <table style="display:<?php if (empty($v_stats_user)) { echo 'none';} else {echo 'block';}?> ;" id="statstable" name="v-add-web-domain-stats-user">
  126. <tr>
  127. <td class="vst-text input-label">
  128. <?=_('Username');?>
  129. </td>
  130. </tr>
  131. <tr>
  132. <td>
  133. <input type="text" size="20" class="vst-input" name="v_stats_user" value="<?=htmlentities(trim($v_stats_user, "'"))?>">
  134. </td>
  135. </tr>
  136. <tr>
  137. <td class="vst-text input-label">
  138. <?=_('Password');?> / <a href="javascript:WEBrandom();" class="generate"><?=_('generate');?></a>
  139. </td>
  140. </tr>
  141. <tr>
  142. <td>
  143. <input type="text" size="20" class="vst-input password" name="v_stats_password" value="<?=htmlentities(trim($v_stats_password, "'"))?>" id="v_password">
  144. </td>
  145. </tr>
  146. </table>
  147. </td>
  148. </tr>
  149. <tr>
  150. <td class="vst-text input-label">
  151. <label><input type="checkbox" size="20" class="vst-checkbox" name="v-redirect-checkbox" <?php if (!empty($v_redirect)) echo "checked=yes" ?> onclick="javascript:elementHideShow('v_redirect');"><?=_('Enable domain redirection');?></label>
  152. </td>
  153. </tr>
  154. <tr>
  155. <td class="step-left">
  156. <table style="display:<?php if (empty($v_redirect)) { echo 'none';} else {echo 'block';}?> ;" id="v_redirect">
  157. <tr>
  158. <td>
  159. <label><input type="radio" name="v-redirect" value="<?='www.'.htmlentities($v_domain);?>" <?php if ($v_redirect == "www.".$v_domain) echo "checked"; ?> class="v-redirect-custom-value"><?=sprintf(_('Redirect visitors to %s'),"www.".htmlentities($v_domain));?></label></input><br />
  160. <label><input type="radio" name="v-redirect" value="<?=htmlentities($v_domain);?>" <?php if( $v_redirect == $v_domain) echo "checked";?> class="v-redirect-custom-value"><?=sprintf(_('Redirect visitors to %s'),htmlentities($v_domain));?></label></input><br />
  161. <label><input type="radio" name="v-redirect" value="custom" <?php if( !empty($v_redirect_custom)) echo "checked";?> class="v-redirect-custom-value"><?=_("Redirect visitors to a custom domain or web address");?></label></input>
  162. </td>
  163. </tr>
  164. <tr>
  165. <td>
  166. <table id="custom_redirect" style="margin-left: 22px; display:<?php if (empty($v_redirect_custom)) { echo 'none';} else {echo 'block';}?> ;">
  167. <tr>
  168. <td class="vst-text input-label">
  169. <?=_('Target domain or URL');?>:
  170. </td>
  171. </tr>
  172. <tr>
  173. <td class="vst-text input-label">
  174. <input type="text" name="v-redirect-custom" class="vst-input" value="<?=$v_redirect_custom;?>" />
  175. </td>
  176. </tr>
  177. <tr>
  178. <td class="vst-text input-label">
  179. <?=_('Status code');?>:
  180. </td>
  181. </tr>
  182. <tr>
  183. <td class="vst-text input-label">
  184. <select class="vst-list" name="v-redirect-code">
  185. <?php foreach ($redirect_code_options as $status_code): ?>
  186. <option value="<?=$status_code;?>"
  187. <?=($v_redirect_code === $status_code || (empty($v_redirect_code) && $status_code === $v_redirect_code))?' selected="selected" ':''; ?>>
  188. <?=$status_code;?>
  189. </option>
  190. <?php endforeach; ?>
  191. </select>
  192. </td>
  193. </tr>
  194. </table>
  195. </td>
  196. </tr>
  197. </table>
  198. </td>
  199. </tr>
  200. <tr>
  201. <td class="vst-text input-label">
  202. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_ssl" <?php if ($v_ssl == 'yes') echo "checked=yes" ?> onclick="javascript:App.Actions.WEB.toggle_ssl(this);"><?=_('SSL Support');?></label>
  203. </td>
  204. </tr>
  205. <tr>
  206. <td class="step-left">
  207. <table style="display:<?php if ($v_ssl == 'no' ) { echo 'none';} else {echo 'block';}?> ;" id="ssltable">
  208. <tr>
  209. <td class="input-label vst-text">
  210. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_letsencrypt" id="letsencrypt" <?php if($v_letsencrypt == 'yes' || $v_letsencrypt == 'on') echo "checked=yes" ?> onclick="elementHideShow('letsinfo');App.Actions.WEB.toggle_letsencrypt(this)"><?=_('Lets Encrypt Support');?></label>
  211. </td>
  212. </tr>
  213. <tr>
  214. <td class="input-label vst-text">
  215. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_ssl_forcessl" id="v_ssl_forcessl" <?php if($v_ssl_forcessl == 'yes') echo "checked=yes" ?> onclick=""><?=_('Force SSL/HTTPS');?></label>
  216. </td>
  217. </tr>
  218. <tr>
  219. <td class="input-label vst-text">
  220. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_ssl_hsts" id="ssl_hsts" <?php if($v_ssl_hsts == 'yes') echo "checked=yes" ?> onclick="App.Actions.WEB.toggle_hsts(this)"><?=_('Enable SSL HSTS');?></label>
  221. </td>
  222. </tr>
  223. <tr style="display: none;">
  224. <td class="vst-text input-label">
  225. <?=_('Home Directory');?>
  226. </td>
  227. </tr>
  228. <tr style="display: none;">
  229. <td>
  230. <select class="vst-list" name="v_ssl_home">
  231. <option value='same'>
  232. public_html
  233. </option>
  234. </select>
  235. </td>
  236. </tr>
  237. <tr>
  238. <td>
  239. <table id="ssl-details" style="<?php if ($v_letsencrypt == 'yes' || $v_letsencrypt == 'on') { echo 'display: none;'; } ?>">
  240. <tr>
  241. <td class="vst-text input-label step-top">
  242. <?=_('SSL Certificate');?>
  243. <span id="generate-csr"> / <a class="generate" target="_blank" href="/generate/ssl/?domain=<?=htmlentities($v_domain)?>"><?=_('Generate CSR');?></a></span>
  244. </td>
  245. </tr>
  246. <tr>
  247. <td>
  248. <textarea size="20" class="vst-textinput short console" name="v_ssl_crt" id="ssl_crt"><?=htmlentities(trim($v_ssl_crt, "'"))?></textarea>
  249. </td>
  250. </tr>
  251. <tr>
  252. <td class="vst-text input-label">
  253. <?=_('SSL Key');?>
  254. </td>
  255. </tr>
  256. <tr>
  257. <td>
  258. <textarea size="20" class="vst-textinput short console" name="v_ssl_key"><?=htmlentities(trim($v_ssl_key, "'"))?></textarea>
  259. </td>
  260. </tr>
  261. <tr>
  262. <td class="vst-text input-label">
  263. <?=_('SSL Certificate Authority / Intermediate');?> <span class="optional">(<?=_('optional');?>)</span>
  264. </td>
  265. </tr>
  266. <tr>
  267. <td>
  268. <textarea size="20" class="vst-textinput short console" name="v_ssl_ca"><?=htmlentities(trim($v_ssl_ca, "'"))?></textarea>
  269. </td>
  270. </tr>
  271. </table>
  272. </td>
  273. </tr>
  274. <?php if ($v_ssl != 'no' ) { ?>
  275. <tr>
  276. <td>
  277. <table class="additional-info">
  278. <tr>
  279. <td>
  280. <b><?=_('SUBJECT');?>:</b>
  281. </td>
  282. <td class="details">
  283. <?=$v_ssl_subject?>
  284. </td>
  285. </tr>
  286. <?php if ($v_ssl_aliases){?>
  287. <tr>
  288. <td>
  289. <b><?=_('ALIASES');?>:</b>
  290. </td>
  291. <td class="details">
  292. <?=$v_ssl_aliases?>
  293. </td>
  294. </tr>
  295. <?php } ?>
  296. <tr>
  297. <td>
  298. <b><?=_('NOT_BEFORE');?>:</b>
  299. </td>
  300. <td class="details">
  301. <?=$v_ssl_not_before?>
  302. </td>
  303. </tr>
  304. <tr>
  305. <td>
  306. <b><?=_('NOT_AFTER');?>:</b>
  307. </td>
  308. <td class="details">
  309. <?=$v_ssl_not_after?>
  310. </td>
  311. </tr>
  312. <tr>
  313. <td>
  314. <b><?=_('SIGNATURE');?>:</b>
  315. </td>
  316. <td class="details">
  317. <?=$v_ssl_signature?>
  318. </td>
  319. </tr>
  320. <tr>
  321. <td>
  322. <b><?=_('PUB_KEY');?>:</b>
  323. </td>
  324. <td class="details">
  325. <?=$v_ssl_pub_key?>
  326. </td>
  327. </tr>
  328. <tr>
  329. <td>
  330. <b><?=_('ISSUER');?>:</b>
  331. </td>
  332. <td class="details">
  333. <?=$v_ssl_issuer?>
  334. </td>
  335. </tr>
  336. <tr id="letsinfo" style="display:<?php if ($v_letsencrypt == 'yes' || $v_letencrypt == 'on' ) { echo 'block';} else {echo 'none';} ?>">
  337. <td><a href="#" onclick="elementHideShow('ssl-details'); return false;" class="generate"><?=_('Show Certificate');?></a></td>
  338. </tr>
  339. </table>
  340. </td>
  341. </tr>
  342. <? } // if ssl is enabled ?>
  343. </table>
  344. </td>
  345. </tr>
  346. <tr>
  347. <td class="step-top vst-text" style="/*padding: 32px 0 20px 0;*/">
  348. <a href="javascript:elementHideShow('advanced-opts');" class="vst-advanced"><?=_('Advanced options');?></a>
  349. </td>
  350. </tr>
  351. <tr>
  352. <td class="step-top">
  353. <table id="advanced-opts" style="display: none;">
  354. <?php if (($_SESSION['userContext'] === 'admin') || ($_SESSION['userContext'] === 'user') && ($_SESSION['POLICY_USER_EDIT_WEB_TEMPLATES'] === 'yes')) { ?>
  355. <tr>
  356. <td class="vst-text input-label">
  357. <?=_('Web Template') . "<span class='optional'>" .strtoupper($_SESSION['WEB_SYSTEM']) . "</span>";?>
  358. </td>
  359. </tr>
  360. <tr>
  361. <td>
  362. <select class="vst-list" name="v_template">
  363. <?php
  364. foreach ($templates as $key => $value) {
  365. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  366. $svalue = "'".$value."'";
  367. if ((!empty($v_template)) && ( $value == $v_template ) || ($svalue == $v_template)){
  368. echo ' selected' ;
  369. }
  370. echo ">".htmlentities($value)."</option>\n";
  371. }
  372. ?>
  373. </select>
  374. </td>
  375. </tr>
  376. <?php if($_SESSION['WEB_SYSTEM'] == 'nginx'){?>
  377. <tr>
  378. <td class="vst-text">
  379. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_nginx_cache_check" <?php if ($v_nginx_cache == 'yes') echo "checked=yes" ?> onclick="javascript:elementHideShow('v_nginx_duration');"><?=_('Enable FastCGI Cache'); ?> <a href="https://docs.hestiacp.com/admin_docs/web/fastcgi.html#nginx-fastcgi-cache" target="_blank"><i class="fas fa-question-circle"></i></a></label>
  380. </td>
  381. </tr>
  382. <tr>
  383. <td class="step-left">
  384. <table id="v_nginx_duration" style="display:<?php if ($v_nginx_cache != 'yes' ) { echo 'none';} else {echo 'block';}?> ;">
  385. <td class="vst-text input-label">
  386. <?=_('Cache Duration'); ?> <span class="optional"><?=_('For example: 30s, 10m or 1d');?>
  387. </td>
  388. <tr>
  389. <td><input type="text" size="20" class="vst-input" name="v_nginx_cache_duration" value="<?=htmlentities(trim($v_nginx_cache_duration, "'"))?>"></td>
  390. </tr>
  391. </table>
  392. </td>
  393. </tr>
  394. <?php } ?>
  395. <?php if (!empty($_SESSION['WEB_BACKEND'])) { ?>
  396. <tr>
  397. <td class="vst-text input-label">
  398. <?=_('Backend Template') . " <span class='optional'>" . strtoupper($_SESSION['WEB_BACKEND']) . "</span>";?>
  399. </td>
  400. </tr>
  401. <tr>
  402. <td>
  403. <select class="vst-list" name="v_backend_template">
  404. <?php
  405. foreach ($backend_templates as $key => $value) {
  406. echo "\t\t\t\t<option value=\"".$value."\"";
  407. $svalue = "'".$value."'";
  408. if ((!empty($v_backend_template)) && ( $value == $v_backend_template ) || ($svalue == $v_backend_template)){
  409. echo ' selected' ;
  410. }
  411. if ((empty($v_backend_template)) && ($value == 'default')){
  412. echo ' selected' ;
  413. }
  414. echo ">".htmlentities($value)."</option>\n";
  415. }
  416. ?>
  417. </select>
  418. </td>
  419. </tr>
  420. <?php }?>
  421. <?php if (!empty($_SESSION['PROXY_SYSTEM'])) { ?>
  422. <tr style="display: none;">
  423. <td class="vst-text input-label">
  424. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_proxy" <?php if (!empty($v_proxy)) echo "checked=yes" ?> onclick="javascript:elementHideShow('proxytable');"><?=_('Proxy Support') . "<span class='optional'>" . strtoupper($_SESSION['PROXY_SYSTEM']) . "</span>";?></label>
  425. </td>
  426. </tr>
  427. <tr>
  428. <td>
  429. <table style="display:<?php if (empty($v_proxy)) { echo 'none';} else {echo 'block';}?> ;" id="proxytable">
  430. <tr>
  431. <td class="vst-text input-label">
  432. <?=_('Proxy Template');?>
  433. </td>
  434. </tr>
  435. <tr>
  436. <td>
  437. <select class="vst-list" name="v_proxy_template">
  438. <?php
  439. foreach ($proxy_templates as $key => $value) {
  440. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  441. $svalue = "'".$value."'";
  442. if ((!empty($v_proxy_template)) && ( $value == $v_proxy_template ) || ($svalue == $v_proxy_template)){
  443. echo ' selected' ;
  444. }
  445. if ((empty($v_proxy_template)) && ($value == 'default')){
  446. echo ' selected' ;
  447. }
  448. echo ">".htmlentities($value)."</option>\n";
  449. }
  450. ?>
  451. </select>
  452. </td>
  453. </tr>
  454. <tr>
  455. <td class="vst-text input-label">
  456. <?=_('Proxy Extensions');?>
  457. </td>
  458. </tr>
  459. <tr>
  460. <td>
  461. <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 '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>
  462. </td>
  463. </tr>
  464. </table>
  465. </td>
  466. </tr>
  467. <?php } ?>
  468. <?php } ?>
  469. <tr>
  470. <td class="vst-text input-label">
  471. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_custom_doc_root_check" <?php if (!empty($v_custom_doc_root)) echo "checked=yes" ?> onclick="javascript:elementHideShow('v_custom_doc_root');"><?=_('Custom document root');?></label>
  472. </td>
  473. </tr>
  474. <tr>
  475. <td class="step-left">
  476. <table style="display:<?php if (empty($v_custom_doc_root)) { echo 'none';} else {echo 'block';}?> ;" id="v_custom_doc_root">
  477. <tr>
  478. <td class="vst-text input-label">
  479. <?=_('Point to');?>
  480. </td>
  481. </tr>
  482. <tr>
  483. <td>
  484. <input type="hidden" name="v-custom-doc-root_prepath" value="<?=$v_custom_doc_root_prepath;?>">
  485. <select class="vst-list" name="v-custom-doc-domain">
  486. <?php foreach ($user_domains as $domain): ?>
  487. <option value="<?=htmlentities($domain);?>"
  488. <?=($v_custom_doc_domain === $domain || (empty($v_custom_doc_domain) && $domain === $v_domain))?' selected="selected" ':''; ?>>
  489. <?=htmlentities($domain);?>
  490. </option>
  491. <?php endforeach; ?>
  492. </select>
  493. </td>
  494. </tr>
  495. <tr>
  496. <td class="vst-text input-label">
  497. <?php print( _('Directory'));?> <span class="optional">(<?=_('optional');?>)</span>
  498. </td>
  499. </tr>
  500. <tr>
  501. <td>
  502. <input type="text" size="20" class="vst-input"
  503. name="v-custom-doc-folder" value="<?=htmlentities(trim($v_custom_doc_folder, "'"))?>">
  504. </td>
  505. </tr>
  506. <tr>
  507. <td>
  508. <small class="custom_docroot_hint"></small>
  509. </td>
  510. </tr>
  511. </table>
  512. </td>
  513. </tr>
  514. <?php if (in_array($_SESSION['FTP_SYSTEM'], array('vsftpd', 'proftpd'))) { ?>
  515. <tr>
  516. <td class="vst-text input-label">
  517. <label><input type="checkbox" size="20" class="vst-checkbox" name="v_ftp" <?php if (!empty($v_ftp_user)) echo "checked=yes" ?> onclick="App.Actions.WEB.toggle_additional_ftp_accounts(this)"><?=_('Additional FTP Account');?></label>
  518. </td>
  519. </tr>
  520. <tr>
  521. <td id="ftp_users">
  522. <?php foreach ($v_ftp_users as $i => $ftp_user): ?>
  523. <?php
  524. $v_ftp_user = $ftp_user['v_ftp_user'];
  525. $v_ftp_password = $ftp_user['v_ftp_password'];
  526. $v_ftp_path = $ftp_user['v_ftp_path'];
  527. $v_ftp_email = $ftp_user['v_ftp_email'];
  528. $v_ftp_pre_path = $ftp_user['v_ftp_pre_path'];
  529. ?>
  530. <table style="display:<?php if (empty($v_ftp_user)) { echo 'none';} else {echo 'block';}?> ;" class="ftptable ftptable-nrm" name="v_add_domain_ftp">
  531. <tr>
  532. <td class="vst-text input-label">
  533. <?=_('FTP');?> #<span class="ftp-user-number"><?=$i + 1; ?></span> <a class="ftp-remove-user additional-control" onCLick="App.Actions.WEB.remove_ftp_user(this)"><?=_('delete');?></a>
  534. <input type="hidden" class="v-ftp-user-deleted" name="v_ftp_user[<?=$i ?>][delete]" value="0" />
  535. <input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[<?=$i ?>][is_new]" value="<?=htmlentities($ftp_user['is_new']) ?>" />
  536. </td>
  537. </tr>
  538. <tr>
  539. <td class="vst-text step-left input-label">
  540. <?=_('Username');?><br>
  541. <span style="font-size: 10pt; color:#777;"><?=sprintf(_('Prefix %s will be added to username automatically'),$user_plain."_");?></span>
  542. </td>
  543. </tr>
  544. <tr>
  545. <td class="step-left">
  546. <input type="text" size="20" class="vst-input v-ftp-user" <?=$ftp_user['is_new'] != 1 ? 'disabled="disabled"' : '' ?>
  547. name="v_ftp_user[<?=$i ?>][v_ftp_user]" value="<?=htmlentities(trim($v_ftp_user, "'"))?>">
  548. <small class="hint"></small>
  549. </td>
  550. </tr>
  551. <tr>
  552. <td class="vst-text step-left input-label">
  553. <?=_('Password');?> / <a href="javascript:void(0);" onClick="FTPrandom(this)" ; class="generate"><?=_('generate');?></a>
  554. </td>
  555. </tr>
  556. <tr>
  557. <td class="step-left">
  558. <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, "'"))?>">
  559. </td>
  560. </tr>
  561. <tr>
  562. <td class="vst-text step-left input-label">
  563. <?=_('Path');?>
  564. </td>
  565. </tr>
  566. <tr>
  567. <td class="step-left">
  568. <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, "'")) : '/'; ?>">
  569. <input type="hidden" class="vst-input v-ftp-path" 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, "'")) ?>">
  570. <input type="text" class="vst-input v-ftp-path" name="v_ftp_user[<?=$i ?>][v_ftp_path]" value="<?php if (!empty($v_ftp_path)) echo ($v_ftp_path[0] != '/' ? '/' : '').htmlentities(trim($v_ftp_path, "'")); ?>">
  571. <br /><span class="ftp-path-prefix"><?=htmlentities(trim($v_ftp_pre_path, "'"))?></span><span class="ftp-path-value v-ftp-path-hint"></span>
  572. </td>
  573. </tr>
  574. <?php if ($ftp_user['is_new'] == 1): ?>
  575. <tr>
  576. <td class="vst-text step-left input-label">
  577. <?=_('Send FTP credentials to email');?>
  578. </td>
  579. </tr>
  580. <tr>
  581. <td class="step-left">
  582. <input type="text" class="vst-input vst-email-alert-on-psw" name="v_ftp_user[<?=$i ?>][v_ftp_email]" value="<?=htmlentities(trim($v_ftp_email, "'"))?>">
  583. </td>
  584. </tr>
  585. <?php endif; ?>
  586. </table>
  587. <?php endforeach; ?>
  588. </td>
  589. </tr>
  590. <tr class="add-new-ftp-user-button" style="<?=!empty($v_ftp_user) ? '' : 'display:none;' ?>">
  591. <td class="vst-text step-top v-add-new-user step-bottom">
  592. <a class="additional-control vst-advanced" onClick="App.Actions.WEB.add_ftp_user_form()"><?=_('Add one more FTP Account');?></a>
  593. </td>
  594. </tr>
  595. <?php } ?>
  596. </table>
  597. </td>
  598. </tr>
  599. </table>
  600. <table class="data-col2">
  601. </table>
  602. </td>
  603. </tr>
  604. </table>
  605. </form>
  606. <div id="templates" class="hidden">
  607. <table class="ftptable ftptable-nrm" name="v_add_domain_ftp">
  608. <tr>
  609. <td class="vst-text input-label">
  610. <?=_('FTP') ?> #<span class="ftp-user-number"></span> <a class="ftp-remove-user additional-control" onCLick="App.Actions.WEB.remove_ftp_user(this)"><?=_('delete');?></a>
  611. <input type="hidden" class="v-ftp-user-deleted" name="v_ftp_user[%INDEX%][delete]" value="0" />
  612. <input type="hidden" class="v-ftp-user-is-new" name="v_ftp_user[%INDEX%][is_new]" value="1" />
  613. </td>
  614. </tr>
  615. <tr>
  616. <td class="vst-text step-left input-label">
  617. <?=_('Username');?><br>
  618. <span style="font-size: 10pt; color:#777;"><?=sprintf(_('Prefix %s will be added to username automatically'),$user_plain."_");?></span>
  619. </td>
  620. </tr>
  621. <tr>
  622. <td class="step-left">
  623. <input type="text" size="20" class="vst-input v-ftp-user" name="v_ftp_user[%INDEX%][v_ftp_user]" value="">
  624. <small class="hint"></small>
  625. </td>
  626. </tr>
  627. <tr>
  628. <td class="vst-text step-left input-label">
  629. <?=_('Password');?> / <a href="javascript:void(0);" onClick="FTPrandom(this)" ; class="generate"><?=_('generate');?></a>
  630. </td>
  631. </tr>
  632. <tr>
  633. <td class="step-left">
  634. <input type="text" class="vst-input v-ftp-user-psw password" name="v_ftp_user[%INDEX%][v_ftp_password]" value="">
  635. </td>
  636. </tr>
  637. <tr>
  638. <td class="vst-text step-left input-label">
  639. <?=_('Path');?>
  640. </td>
  641. </tr>
  642. <tr>
  643. <td class="step-left">
  644. <input type="hidden" class="vst-input v-ftp-pre-path" name="v_ftp_pre_path" value="">
  645. <input type="text" class="vst-input v-ftp-path" name="v_ftp_user[%INDEX%][v_ftp_path]" value="">
  646. <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>
  647. </td>
  648. </tr>
  649. <tr>
  650. <td class="vst-text step-left input-label">
  651. <?=_('Send FTP credentials to email');?>
  652. </td>
  653. </tr>
  654. <tr>
  655. <td class="step-left">
  656. <input type="text" class="vst-input vst-email-alert-on-psw" name="v_ftp_user[%INDEX%][v_ftp_email]" value="">
  657. </td>
  658. </tr>
  659. </table>
  660. </div>
  661. </div>
  662. <script>
  663. GLOBAL.FTP_USER_PREFIX = "<?=$user_plain.'_';?>";
  664. </script>