edit_user.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  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/user/"><i class="fas fa-arrow-left status-icon blue"></i><?=_('Back');?></a>
  6. <?php
  7. if (($_SESSION['userContext'] === 'admin') && (!isset($_SESSION['look'])) && ($_SESSION['user'] !== $v_username)) {
  8. $ssh_key_url = "/list/key/?user=".$user."&token=".$_SESSION['token']."";
  9. $log_url = "/list/log/?user=".$user."&token=".$_SESSION['token']."";
  10. } else {
  11. $ssh_key_url = "/list/key/";
  12. $log_url = "/list/log/";
  13. }
  14. ?>
  15. <a href="<?=$ssh_key_url; ?>" id="btn-create" class="ui-button cancel" dir="ltr" title="<?=_('Manage SSH keys');?>"><i class="fas fa-key status-icon orange"></i><?=_('Manage SSH keys');?></a>
  16. <?php if (($_SESSION['userContext'] == 'admin') || ($_SESSION['userContext'] !== 'admin') && ($_SESSION['POLICY_USER_VIEW_LOGS'] !== 'no')) {?>
  17. <a href="<?=$log_url; ?>" id="btn-create" class="ui-button cancel" dir="ltr" title="<?=_('Logs');?>"><i class="fas fa-history status-icon maroon"></i><?=_('Logs');?></a>
  18. <?php } ?>
  19. </div>
  20. <div class="l-unit-toolbar__buttonstrip float-right">
  21. <?php if (($_SESSION['user'] == $v_username) || (isset($_SESSION['look']))) {?>
  22. <!-- Do not show delete button for currently logged in user-->
  23. <?} else {?>
  24. <a href="/login/?loginas=<?=$v_username?>&token=<?=$_SESSION['token']?>" id="btn-create" class="ui-button cancel" dir="ltr" title="<?=_('login as');?>"><i class="fas fa-sign-in-alt status-icon maroon"></i><?=_('login as');?></a>
  25. <div class="display-inline-block" key-action="js">
  26. <a class="data-controls do_delete ui-button danger cancel">
  27. <i class="do_delete fas fa-times-circle status-icon red"></i>
  28. <?=_('Delete');?>
  29. <input type="hidden" name="delete_url" value="/delete/user/?user=<?=$v_username?>&token=<?=$_SESSION['token']?>" />
  30. <div class="confirmation-text-delete hidden" title="<?=_('Confirmation');?>">
  31. <p class="confirmation"><?=sprintf(_('DELETE_USER_CONFIRMATION'),$v_username)?></p>
  32. </div>
  33. </a>
  34. </div>
  35. <?php } ?>
  36. <a href="#" class="ui-button" data-action="submit" data-id="vstobjects"><i class="fas fa-save status-icon purple"></i> <?=_('Save');?></a>
  37. </div>
  38. </div>
  39. </div>
  40. <!-- End toolbar -->
  41. <div class="l-separator"></div>
  42. <div class="l-center animated fadeIn">
  43. <form id="vstobjects" method="post" name="v_edit_user" class="<?=$v_status?>">
  44. <input type="hidden" name="token" value="<?=$_SESSION['token']?>" />
  45. <input type="hidden" name="save" value="save" />
  46. <table class='data'>
  47. <tr class="data-add">
  48. <td class="data-dotted">
  49. <table class="data-col1">
  50. <tr>
  51. <td>
  52. </td>
  53. </tr>
  54. </table>
  55. </td>
  56. <td class="data-dotted">
  57. <table class="data-col2">
  58. <tr>
  59. <td class="step-top">
  60. <span class="page-title"><?=_('Editing User');?></span>
  61. </td>
  62. </tr>
  63. <tr>
  64. <td>
  65. <?php
  66. if (!empty($_SESSION['error_msg'])) {
  67. $msg_icon = 'fa-exclamation-circle status-icon red';
  68. $msg_text = htmlentities($_SESSION['error_msg']);
  69. $msg_id = 'vst-error';
  70. } else {
  71. if (!empty($_SESSION['ok_msg'])) {
  72. $msg_icon = 'fa-check-circle status-icon green';
  73. $msg_text = $_SESSION['ok_msg'];
  74. $msg_id = 'vst-ok';
  75. }
  76. }
  77. ?>
  78. <span class="<?=$msg_id;?>"> <i class="fas <?=$msg_icon;?>"></i> <?=$msg_text;?></span>
  79. </td>
  80. </tr>
  81. <tr>
  82. <td class="vst-text step-top">
  83. <?=_('Username');?>
  84. </td>
  85. </tr>
  86. <tr>
  87. <td>
  88. <input type="text" size="20" class="vst-input" name="v_user" value="<?=htmlentities(trim($v_username, "'"))?>" disabled>
  89. <input type="hidden" name="v_username" value="<?=htmlentities(trim($v_username, "'"))?>">
  90. </td>
  91. </tr>
  92. <tr>
  93. <td class="vst-text input-label">
  94. <?=_('Contact');?>
  95. </td>
  96. </tr>
  97. <tr>
  98. <td>
  99. <input type="text" size="20" class="vst-input" name="v_name" value="<?=htmlentities(trim($v_name, "'"))?>" <?php if (($_SESSION['userContext'] !=='admin' ) && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !=='yes' )) { echo 'disabled' ; }?> >
  100. <?php if (($_SESSION['userContext'] !== 'admin') && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'yes')) {?>
  101. <input type="hidden" name="v_name" value="<?=htmlentities(trim($v_name, "'"))?>">
  102. <?php } ?>
  103. </td>
  104. </tr>
  105. <tr>
  106. <td class="vst-text input-label">
  107. <?=_('Email');?>
  108. </td>
  109. </tr>
  110. <tr>
  111. <td>
  112. <input type="text" size="20" class="vst-input" name="v_email" value="<?=htmlentities(trim($v_email, "'"))?>" <?php if (($_SESSION['userContext'] !=='admin' ) && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !=='yes' )) { echo 'disabled' ; }?>>
  113. <?php if (($_SESSION['userContext'] !== 'admin') && ($_SESSION['POLICY_USER_EDIT_DETAILS'] !== 'yes')) {?>
  114. <input type="hidden" name="v_email" value="<?=htmlentities(trim($v_email, "'"))?>">
  115. <?php } ?>
  116. </td>
  117. </tr>
  118. <tr>
  119. <td class="vst-text input-label">
  120. <?=_('Password');?> <a href="javascript:randomString();" title="<?=_('generate');?>"><i class="fas fa-sync status-icon green icon-large"></i></a>
  121. </td>
  122. </tr>
  123. <tr>
  124. <td>
  125. <input type="text" size="20" class="vst-input password" name="v_password" value="<?=htmlentities(trim($v_password, "'"))?>"><br />
  126. <meter max="4" id="meter"></meter>
  127. </td>
  128. </tr>
  129. <tr>
  130. <td>
  131. <table id="password-details">
  132. <tr>
  133. <td class="vst-text">
  134. <?=_('Your password must have at least');?>:
  135. <ul>
  136. <li><?=_('8 characters long');?></li>
  137. <li><?=_('1 uppercase & 1 lowercase character');?></li>
  138. <li><?=_('1 number');?></li>
  139. </ul>
  140. </td>
  141. </tr>
  142. <?php if ($_SESSION['userContext'] === 'admin') {?>
  143. <tr>
  144. <td>
  145. <label><input type="checkbox" size="20" class="vst-checkbox" onclick="javascript:elementHideShow('password-options');elementHideShow('password-options-ip');" name="v_login_disabled" <?php if ($data[$user]['LOGIN_DISABLED'] == "yes") echo "checked=yes" ?>><?=_('Do not allow user to log in to Control Panel');?></label>
  146. </td>
  147. </tr>
  148. <?php } ?>
  149. <tr>
  150. <td id="password-options" style="<?php if ($data[$user]['LOGIN_DISABLED'] == "yes") { echo 'display: none;'; } else { echo 'display: table-cell;'; }?>">
  151. <label><input type="checkbox" class="vst-checkbox password-option" name="v_twofa" <?php if(!empty($v_twofa)) echo "checked=yes" ?>><?=_('Enable 2FA');?></label>
  152. <?php if (!empty($v_twofa)) { ?>
  153. <p><?=_('2FA Reset Code:').' '.$v_twofa; ?></br></p>
  154. <p><?=_('Please scan the code below in your 2FA application:'); ?></p>
  155. <div><img class="qr-code" src="<?=$v_qrcode; ?>"></div>
  156. <?php } ?>
  157. </td>
  158. </tr>
  159. <tr>
  160. <td id="password-options-ip" style="<?php if ($data[$user]['LOGIN_DISABLED'] == "yes") { echo 'display: none;'; } else { echo 'display: table-cell;'; }?>">
  161. <label><input type="checkbox" size="20" class="vst-checkbox" onclick="javascript:elementHideShow('ip-allowlist')" name="v_login_use_iplist" <?php if ($data[$user]['LOGIN_USE_IPLIST'] === "yes") echo "checked=yes" ?>><?=_('Use IP address allow list for login attempts');?></label>
  162. </td>
  163. </tr>
  164. <tr>
  165. <td>
  166. <table id="ip-allowlist" style="<?php if ($data[$user]['LOGIN_USE_IPLIST'] === 'yes') { echo 'display: table-cell;'; } else { echo 'display: none;'; } ?>">
  167. <tr>
  168. <td>
  169. <input type="text" size="20" class="vst-input" placeholder="<?=_('Example: 127.0.0.1,192.168.1.100');?>" name="v_login_allowed_ips" value="<?=htmlentities(trim($v_login_allowed_ips, "'"))?>">
  170. </td>
  171. </tr>
  172. </table>
  173. </td>
  174. </tr>
  175. </table>
  176. </td>
  177. </tr>
  178. <tr>
  179. <td class="vst-text input-label">
  180. <?=_('Language');?>
  181. </td>
  182. </tr>
  183. <tr>
  184. <td>
  185. <select class="vst-list" name="v_language">
  186. <?php
  187. foreach ($languages as $key => $value) {
  188. echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".$key."\"";
  189. $skey = "'".$key."'";
  190. if (( $key == $v_language ) || ( $skey == $v_language)){
  191. echo 'selected' ;
  192. }
  193. if (( $key == detect_user_language() ) && (empty($v_language))){
  194. echo 'selected' ;
  195. }
  196. echo ">".htmlentities($value)."</option>\n";
  197. }
  198. ?>
  199. </select>
  200. </td>
  201. </tr>
  202. <?php if ($v_username == 'admin') {?>
  203. <!-- Hide option to change 'admin' user's role-->
  204. <?php } else { ?>
  205. <?php if (($_SESSION['userContext'] === 'admin') && ($_SESSION['user'] != $v_username)) {?>
  206. <tr>
  207. <td class="vst-text input-label">
  208. <?=_('Role');?>
  209. </td>
  210. </tr>
  211. <tr>
  212. <td>
  213. <select class="vst-list" name="v_role">
  214. <option value="user"><?=_('User');?>
  215. <option value="admin" <?php if($v_role == "admin" ){ echo "selected"; } ?>><?=_('Administrator');?>
  216. </select>
  217. </td>
  218. </tr>
  219. <?php } ?>
  220. <?php } ?>
  221. <?php if ($_SESSION['POLICY_USER_CHANGE_THEME'] !== 'no') {?>
  222. <tr>
  223. <td class="vst-text input-label">
  224. <?=_('Theme') ?>
  225. </td>
  226. </tr>
  227. <tr>
  228. <td>
  229. <select class="vst-list" name="v_user_theme">
  230. <?php
  231. foreach ($themes as $key => $value) {
  232. echo "\t\t\t\t<option value=\"".$value."\"";
  233. if ((!empty($_SESSION['userTheme'])) && ( $value == $v_user_theme )) {
  234. echo ' selected' ;
  235. }
  236. if ((empty($v_user_theme) && (!empty($_SESSION['THEME']))) && ( $value == $_SESSION['THEME'] )) {
  237. echo ' selected' ;
  238. }
  239. if ((!empty($_SESSION['userTheme'])) && ( $value == $_POST['v_user_theme'])){
  240. echo ' selected' ;
  241. }
  242. echo ">".$value."</option>\n";
  243. }
  244. ?>
  245. </select>
  246. </td>
  247. </tr>
  248. <?php } ?>
  249. <?php if ($_GET['user'] === $_SESSION['user']) { ?>
  250. <tr>
  251. <td class="vst-text input-label">
  252. <?=_('Default list sort order');?>
  253. </td>
  254. </tr>
  255. <tr>
  256. <td>
  257. <select class="vst-list" name="v_sort_order">
  258. <option value='date' <?php if($_SESSION['userSortOrder'] === 'date') echo 'selected' ?>><?=_('Date'); ?></option>
  259. <option value='name' <?php if($_SESSION['userSortOrder'] === 'name') echo 'selected' ?>><?=_('Name'); ?></option>
  260. </select>
  261. </td>
  262. </tr>
  263. <?php } ?>
  264. <?php if ($_SESSION['userContext'] === 'admin') {?>
  265. <tr>
  266. <td class="vst-text input-label">
  267. <?=_('Package');?>
  268. </td>
  269. </tr>
  270. <tr>
  271. <td>
  272. <select class="vst-list" name="v_package">
  273. <?php
  274. foreach ($packages as $key => $value) {
  275. echo "\n\t\t\t\t\t\t\t\t\t<option value=\"".htmlentities($key)."\"";
  276. $skey = "'".$key."'";
  277. if (( $key == $v_package ) || ( $skey == $v_package)){
  278. echo 'selected' ;
  279. }
  280. echo ">".htmlentities($key)."</option>\n";
  281. }
  282. ?>
  283. </select>
  284. </td>
  285. </tr>
  286. <tr>
  287. <td class="step-top vst-text" style="/*padding: 32px 0 20px 0;*/">
  288. <a href="javascript:elementHideShow('advanced-opts');" class="vst-advanced"><?=_('Advanced options');?></a>
  289. </td>
  290. </tr>
  291. <tr>
  292. <td class="step-top">
  293. <table id="advanced-opts" style="display: none;">
  294. <tr>
  295. <td class="vst-text input-label">
  296. <?=_('SSH Access');?>
  297. </td>
  298. </tr>
  299. <tr>
  300. <td>
  301. <select class="vst-list" name="v_shell">
  302. <?php
  303. foreach ($shells as $key => $value) {
  304. echo "\t\t\t\t<option value=\"".htmlentities($value)."\"";
  305. $svalue = "'".$value."'";
  306. if (( $value == $v_shell ) || ($svalue == $v_shell )){
  307. echo 'selected' ;
  308. }
  309. echo ">".htmlentities($value)."</option>\n";
  310. }
  311. ?>
  312. </select>
  313. </td>
  314. </tr>
  315. <tr>
  316. <td class="vst-text input-label">
  317. <?=_('PHP CLI Version');?>
  318. </td>
  319. </tr>
  320. <tr>
  321. <td>
  322. <select class="vst-list" name="v_phpcli">
  323. <?php
  324. foreach ($php_versions as $key => $value) {
  325. $php = explode('-',$value);
  326. echo "\t\t\t\t<option value=\"".$value."\"";
  327. $svalue = "'".$value."'";
  328. if ((!empty($v_phpcli)) && ( $value == $v_phpcli ) || ($svalue == $v_phpcli)){
  329. echo ' selected' ;
  330. }
  331. if ((empty($v_phpcli)) && ($value == DEFAULT_PHP_VERSION)){
  332. echo ' selected' ;
  333. }
  334. echo ">".htmlentities($value)."</option>\n";
  335. }
  336. ?>
  337. </select>
  338. </td>
  339. </tr>
  340. <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {?>
  341. <tr>
  342. <td class="vst-text input-label">
  343. <?=_('Default Name Servers');?>
  344. </td>
  345. </tr>
  346. <tr>
  347. <td>
  348. <input type="text" size="20" class="vst-input" name="v_ns1" value="<?=htmlentities(trim($v_ns1, "'"))?>">
  349. <span class="remove-ns additional-control delete vst-advanced button danger"><?=_('delete');?></span>
  350. </td>
  351. </tr>
  352. <tr>
  353. <td>
  354. <input type="text" size="20" class="vst-input" name="v_ns2" value="<?=htmlentities(trim($v_ns2, "'"))?>">
  355. <span class="remove-ns additional-control delete vst-advanced button danger"><?=_('delete');?></span>
  356. </td>
  357. </tr>
  358. <?php
  359. if($v_ns3) {
  360. echo '<tr>
  361. <td>
  362. <input type="text" size="20" class="vst-input" name="v_ns3" value="'.htmlentities(trim($v_ns3, "'")).'">
  363. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  364. </td>
  365. </tr>';
  366. }
  367. if($v_ns4) {
  368. echo '<tr>
  369. <td>
  370. <input type="text" size="20" class="vst-input" name="v_ns4" value="'.htmlentities(trim($v_ns4, "'")).'">
  371. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  372. </td>
  373. </tr>';
  374. }
  375. if($v_ns5) {
  376. echo '<tr>
  377. <td>
  378. <input type="text" size="20" class="vst-input" name="v_ns5" value="'.htmlentities(trim($v_ns5, "'")).'">
  379. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  380. </td>
  381. </tr>';
  382. }
  383. if($v_ns6) {
  384. echo '<tr>
  385. <td>
  386. <input type="text" size="20" class="vst-input" name="v_ns6" value="'.htmlentities(trim($v_ns6, "'")).'">
  387. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  388. </td>
  389. </tr>';
  390. }
  391. if($v_ns7) {
  392. echo '<tr>
  393. <td>
  394. <input type="text" size="20" class="vst-input" name="v_ns7" value="'.htmlentities(trim($v_ns7, "'")).'">
  395. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  396. </td>
  397. </tr>';
  398. }
  399. if($v_ns8) {
  400. echo '<tr>
  401. <td>
  402. <input type="text" size="20" class="vst-input" name="v_ns8" value="'.htmlentities(trim($v_ns8, "'")).'">
  403. <span class="remove-ns additional-control delete vst-advanced button danger">'._('delete').'</span>
  404. </td>
  405. </tr>';
  406. }
  407. ?>
  408. <tr class="add-ns" <?php if ($v_ns8) echo 'style="display:none;"' ; ?> >
  409. <td class="step-top-small">
  410. <span class="add-ns-button vst-advanced button"><?=_('Add one more Name Server');?></span>
  411. </td>
  412. </tr>
  413. <?php } ?>
  414. </table>
  415. </td>
  416. </tr>
  417. <?php } ?>
  418. <?php if ($_SESSION['userContext'] !== 'admin') {?>
  419. <tr>
  420. <td class="step-top">
  421. </td>
  422. </tr>
  423. <?php } ?>
  424. </table>
  425. <table class="data-col2"></table>
  426. </td>
  427. </tr>
  428. </table>
  429. </form>
  430. </div>