user_setting_edit.php 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. <?php
  2. /*
  3. FusionPBX
  4. Version: MPL 1.1
  5. The contents of this file are subject to the Mozilla Public License Version
  6. 1.1 (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.mozilla.org/MPL/
  9. Software distributed under the License is distributed on an "AS IS" basis,
  10. WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. for the specific language governing rights and limitations under the
  12. License.
  13. The Original Code is FusionPBX
  14. The Initial Developer of the Original Code is
  15. Mark J Crane <[email protected]>
  16. Portions created by the Initial Developer are Copyright (C) 2008-2023
  17. the Initial Developer. All Rights Reserved.
  18. Contributor(s):
  19. Mark J Crane <[email protected]>
  20. */
  21. //includes files
  22. require_once dirname(__DIR__, 2) . "/resources/require.php";
  23. require_once "resources/check_auth.php";
  24. //check permissions
  25. if (permission_exists('user_setting_add') || permission_exists('user_setting_edit')) {
  26. //access granted
  27. }
  28. else {
  29. echo "access denied";
  30. exit;
  31. }
  32. //connect to the database
  33. $database = new database;
  34. //add multi-lingual support
  35. $language = new text;
  36. $text = $language->get();
  37. //retrieve allowed setting categories
  38. if (!permission_exists('user_setting_category_edit')) {
  39. if (!empty($_SESSION['settings'])) {
  40. foreach ($_SESSION['groups'] as $index => $group) {
  41. $group_name = $group['group_name'];
  42. if (!empty($_SESSION['settings'][$group_name])) {
  43. foreach ($_SESSION['settings'][$group_name] as $category) {
  44. $categories[] = strtolower($category);
  45. }
  46. }
  47. }
  48. }
  49. if (!empty($categories)) {
  50. $allowed_categories = array_unique($categories);
  51. sort($allowed_categories, SORT_NATURAL);
  52. }
  53. unset($group, $group_name, $index, $category, $categories);
  54. }
  55. //action add or update
  56. if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) {
  57. $action = "update";
  58. $user_setting_uuid = $_REQUEST["id"];
  59. }
  60. else {
  61. $action = "add";
  62. }
  63. //set the user_uuid
  64. if (!empty($_GET["user_uuid"]) && is_uuid($_GET["user_uuid"])) {
  65. $user_uuid = $_GET["user_uuid"];
  66. }
  67. //get http post variables and set them to php variables
  68. if (!empty($_REQUEST)) {
  69. $user_setting_category = strtolower($_REQUEST["user_setting_category"] ?? '');
  70. $user_setting_subcategory = strtolower($_POST["user_setting_subcategory"] ?? '');
  71. $user_setting_name = strtolower($_POST["user_setting_name"] ?? '');
  72. $user_setting_value = $_POST["user_setting_value"] ?? '';
  73. $user_setting_order = $_POST["user_setting_order"] ?? '';
  74. $user_setting_enabled = strtolower($_POST["user_setting_enabled"] ?? 'false');
  75. $user_setting_description = $_POST["user_setting_description"] ?? '';
  76. }
  77. if (!empty($_POST) && empty($_POST["persistformvar"])) {
  78. $msg = '';
  79. if ($action == "update") {
  80. $user_setting_uuid = $_POST["user_setting_uuid"];
  81. }
  82. //validate the token
  83. $token = new token;
  84. if (!$token->validate($_SERVER['PHP_SELF'])) {
  85. message::add($text['message-invalid_token'],'negative');
  86. header('Location: ../users/user_edit.php?id='.$user_uuid);
  87. exit;
  88. }
  89. //check for all required/authorized data
  90. if (empty($user_setting_category) || (!empty($allowed_categories) && is_array($allowed_categories) && sizeof($allowed_categories) > 0 && !in_array(strtolower($user_setting_category), $allowed_categories))) { $msg .= $text['message-required'].$text['label-category']."<br>\n"; }
  91. if (empty($user_setting_subcategory)) { $msg .= $text['message-required'].$text['label-subcategory']."<br>\n"; }
  92. if (empty($user_setting_name)) { $msg .= $text['message-required'].$text['label-type']."<br>\n"; }
  93. //if (empty($user_setting_value)) { $msg .= $text['message-required'].$text['label-value']."<br>\n"; }
  94. if (empty($user_setting_order)) { $msg .= $text['message-required'].$text['label-order']."<br>\n"; }
  95. if (empty($user_setting_enabled)) { $msg .= $text['message-required'].$text['label-enabled']."<br>\n"; }
  96. //if (empty($user_setting_description)) { $msg .= $text['message-required'].$text['label-description']."<br>\n"; }
  97. if (!empty($msg) && empty($_POST["persistformvar"])) {
  98. require_once "resources/header.php";
  99. require_once "resources/persist_form_var.php";
  100. echo "<div align='center'>\n";
  101. echo "<table><tr><td>\n";
  102. echo $msg."<br />";
  103. echo "</td></tr></table>\n";
  104. persistformvar($_POST);
  105. echo "</div>\n";
  106. require_once "resources/footer.php";
  107. return;
  108. }
  109. //add or update the database
  110. if (empty($_POST["persistformvar"])) {
  111. // fix null
  112. $user_setting_order = ($user_setting_order != '') ? $user_setting_order : 'null';
  113. //update switch timezone variables
  114. if ($user_setting_category == "domain" && $user_setting_subcategory == "time_zone" && $user_setting_name == "name" ) {
  115. //get the dialplan_uuid
  116. $sql = "select dialplan_uuid from v_dialplans ";
  117. $sql .= "where domain_uuid = :domain_uuid ";
  118. $sql .= "and app_uuid = '9f356fe7-8cf8-4c14-8fe2-6daf89304458' ";
  119. $parameters['domain_uuid'] = $domain_uuid;
  120. $dialplan_uuid = $database->select($sql, $parameters, 'column');
  121. unset($sql, $parameters);
  122. //get the action
  123. $sql = "select dialplan_detail_uuid from v_dialplan_details ";
  124. $sql .= "where domain_uuid = :domain_uuid ";
  125. $sql .= "and dialplan_uuid = :dialplan_uuid ";
  126. $sql .= "and dialplan_detail_tag = 'action' ";
  127. $sql .= "and dialplan_detail_type = 'set' ";
  128. $sql .= "and dialplan_detail_data like 'timezone=%' ";
  129. $parameters['domain_uuid'] = $domain_uuid;
  130. $parameters['dialplan_uuid'] = $dialplan_uuid;
  131. $dialplan_detail_uuid = $database->select($sql, $parameters, 'column');
  132. if (is_uuid($dialplan_detail_uuid)) {
  133. $detail_action = "update";
  134. }
  135. unset($sql, $parameters);
  136. //update the timezone
  137. if ($detail_action == "update") {
  138. $p = permissions::new();
  139. $p->add('dialplan_detail_edit', 'temp');
  140. $array['dialplan_details'][0]['dialplan_detail_uuid'] = $dialplan_detail_uuid;
  141. $array['dialplan_details'][0]['dialplan_detail_data'] = 'timezone='.$user_setting_value;
  142. }
  143. else {
  144. $p = permissions::new();
  145. $p->add('dialplan_detail_add', 'temp');
  146. $array['dialplan_details'][0]['domain_uuid'] = $domain_uuid;
  147. $array['dialplan_details'][0]['dialplan_detail_uuid'] = uuid();
  148. $array['dialplan_details'][0]['dialplan_uuid'] = $dialplan_uuid;
  149. $array['dialplan_details'][0]['dialplan_detail_tag'] = 'action';
  150. $array['dialplan_details'][0]['dialplan_detail_type'] = 'set';
  151. $array['dialplan_details'][0]['dialplan_detail_data'] = 'timezone='.$user_setting_value;
  152. $array['dialplan_details'][0]['dialplan_detail_inline'] = 'true';
  153. $array['dialplan_details'][0]['dialplan_detail_group'] = 0;
  154. }
  155. if (is_array($array) && sizeof($array) != 0) {
  156. $database->app_name = 'user_settings';
  157. $database->app_uuid = '3a3337f7-78d1-23e3-0cfd-f14499b8ed97';
  158. $database->save($array);
  159. unset($array);
  160. $p->delete('dialplan_detail_edit', 'temp');
  161. $p->delete('dialplan_detail_add', 'temp');
  162. }
  163. }
  164. //add the user setting
  165. if ($action == "add" && permission_exists('user_setting_add')) {
  166. $array['user_settings'][0]['user_setting_uuid'] = uuid();
  167. }
  168. //update the user setting
  169. if ($action == "update" && permission_exists('user_setting_edit')) {
  170. $array['user_settings'][0]['user_setting_uuid'] = $user_setting_uuid;
  171. }
  172. //execute add or update
  173. if (is_array($array) && sizeof($array) != 0) {
  174. $array['user_settings'][0]['user_uuid'] = $user_uuid;
  175. $array['user_settings'][0]['domain_uuid'] = $domain_uuid;
  176. $array['user_settings'][0]['user_setting_category'] = $user_setting_category;
  177. $array['user_settings'][0]['user_setting_subcategory'] = $user_setting_subcategory;
  178. $array['user_settings'][0]['user_setting_name'] = $user_setting_name;
  179. $array['user_settings'][0]['user_setting_value'] = $user_setting_value;
  180. $array['user_settings'][0]['user_setting_order'] = $user_setting_order;
  181. $array['user_settings'][0]['user_setting_enabled'] = $user_setting_enabled;
  182. $array['user_settings'][0]['user_setting_description'] = $user_setting_description;
  183. $database->app_name = 'user_settings';
  184. $database->app_uuid = '3a3337f7-78d1-23e3-0cfd-f14499b8ed97';
  185. $database->save($array);
  186. unset($array);
  187. }
  188. //update time zone
  189. if ($user_setting_category == "domain" && $user_setting_subcategory == "time_zone" && $user_setting_name == "name" && !empty($user_setting_value) ) {
  190. $sql = "select * from v_dialplans ";
  191. $sql .= "where app_uuid = '34dd307b-fffe-4ead-990c-3d070e288126' ";
  192. $sql .= "and domain_uuid = :domain_uuid ";
  193. $parameters['domain_uuid'] = $_SESSION["domain_uuid"];
  194. $result = $database->select($sql, $parameters, 'all');
  195. unset($sql, $parameters);
  196. $time_zone_found = false;
  197. if (is_array($result) && sizeof($result) != 0) {
  198. foreach ($result as $row) {
  199. //get the dialplan_uuid
  200. $dialplan_uuid = $row["dialplan_uuid"];
  201. //get the dialplan details
  202. $sql = "select * from v_dialplan_details ";
  203. $sql .= "where dialplan_uuid = :dialplan_uuid ";
  204. $sql .= "and domain_uuid = :domain_uuid ";
  205. $parameters['dialplan_uuid'] = $dialplan_uuid;
  206. $parameters['domain_uuid'] = $_SESSION["domain_uuid"];
  207. $sub_result = $database->select($sql, $parameters, 'all');
  208. if (is_array($sub_result) && sizeof($sub_result) != 0) {
  209. foreach ($sub_result as $sub_row) {
  210. $dialplan_detail_uuid = $sub_row["dialplan_detail_uuid"];
  211. $dialplan_detail_tag = $sub_row["dialplan_detail_tag"]; //action //condition
  212. $dialplan_detail_type = $sub_row["dialplan_detail_type"]; //set
  213. $dialplan_detail_data = $sub_row["dialplan_detail_data"];
  214. $dialplan_detail_group = $sub_row["dialplan_detail_group"];
  215. if ($dialplan_detail_tag == "action" && $dialplan_detail_type == "set") {
  216. $data_array = explode("=", $dialplan_detail_data);
  217. if ($data_array[0] == "timezone") {
  218. $time_zone_found = true;
  219. break;
  220. }
  221. }
  222. }
  223. }
  224. unset($sql, $parameters, $sub_result, $sub_row);
  225. //add the time zone
  226. if (!$time_zone_found) {
  227. $dialplan_detail_uuid = "eb3b3a4e-88ea-4306-b2a8-9f52d3c95f2f";
  228. $array['dialplan_details'][0]['domain_uuid'] = $_SESSION["domain_uuid"];
  229. $array['dialplan_details'][0]['dialplan_uuid'] = $dialplan_uuid;
  230. $array['dialplan_details'][0]['dialplan_detail_uuid'] = $dialplan_detail_uuid;
  231. $array['dialplan_details'][0]['dialplan_detail_tag'] = 'action';
  232. $array['dialplan_details'][0]['dialplan_detail_type'] = 'set';
  233. $array['dialplan_details'][0]['dialplan_detail_data'] = 'timezone='.$user_setting_value;
  234. $array['dialplan_details'][0]['dialplan_detail_group'] = !empty($dialplan_detail_group) ? $dialplan_detail_group : 'null';
  235. $array['dialplan_details'][0]['dialplan_detail_order'] = '15';
  236. $p = permissions::new();
  237. $p->add('dialplan_detail_add', 'temp');
  238. $database->app_name = 'user_settings';
  239. $database->app_uuid = '3a3337f7-78d1-23e3-0cfd-f14499b8ed97';
  240. $database->save($array);
  241. unset($array);
  242. $p->delete('dialplan_detail_add', 'temp');
  243. }
  244. //update the time zone
  245. if ($time_zone_found) {
  246. $array['dialplan_details'][0]['dialplan_detail_uuid'] = $dialplan_detail_uuid;
  247. $array['dialplan_details'][0]['dialplan_detail_data'] = 'timezone='.$user_setting_value;
  248. $array['dialplan_details'][0]['domain_uuid'] = $_SESSION["domain_uuid"];
  249. $array['dialplan_details'][0]['dialplan_uuid'] = $dialplan_uuid;
  250. $p = permissions::new();
  251. $p->add('dialplan_detail_edit', 'temp');
  252. $database->app_name = 'user_settings';
  253. $database->app_uuid = '3a3337f7-78d1-23e3-0cfd-f14499b8ed97';
  254. $database->save($array);
  255. unset($array);
  256. $p->delete('dialplan_detail_edit', 'temp');
  257. }
  258. }
  259. }
  260. }
  261. //redirect the browser
  262. if ($action == "update") {
  263. message::add($text['message-update']);
  264. }
  265. if ($action == "add") {
  266. message::add($text['message-add']);
  267. }
  268. header("Location: /core/users/user_edit.php?id=".$user_uuid);
  269. return;
  270. }
  271. }
  272. //pre-populate the form
  273. if (!empty($_GET["id"]) && empty($_POST["persistformvar"])) {
  274. $user_setting_uuid = $_GET["id"];
  275. $sql = "select user_setting_category, user_setting_subcategory, user_setting_name, user_setting_value, user_setting_order, cast(user_setting_enabled as text), user_setting_description ";
  276. $sql .= "from v_user_settings ";
  277. $sql .= "where user_setting_uuid = :user_setting_uuid ";
  278. $sql .= "and user_uuid = :user_uuid ";
  279. $parameters['user_setting_uuid'] = $user_setting_uuid;
  280. $parameters['user_uuid'] = $user_uuid;
  281. $row = $database->select($sql, $parameters, 'row');
  282. if (is_array($row) && sizeof($row) != 0) {
  283. $user_setting_category = $row["user_setting_category"];
  284. $user_setting_subcategory = $row["user_setting_subcategory"];
  285. $user_setting_name = $row["user_setting_name"];
  286. $user_setting_value = $row["user_setting_value"];
  287. $user_setting_order = $row["user_setting_order"];
  288. $user_setting_enabled = $row["user_setting_enabled"];
  289. $user_setting_description = $row["user_setting_description"];
  290. }
  291. unset($sql, $parameters, $row);
  292. }
  293. //create token
  294. $object = new token;
  295. $token = $object->create($_SERVER['PHP_SELF']);
  296. //show the header
  297. require_once "resources/header.php";
  298. if ($action == "update") {
  299. $document['title'] = $text['title-user_setting-edit'];
  300. }
  301. else if ($action == "add") {
  302. $document['title'] = $text['title-user_setting-add'];
  303. }
  304. //show the content
  305. echo "<form name='frm' id='frm' method='post'>\n";
  306. echo "<div class='action_bar' id='action_bar'>\n";
  307. echo " <div class='heading'>";
  308. if ($action == "update") {
  309. echo "<b>".$text['header-user_setting-edit']."</b>";
  310. }
  311. if ($action == "add") {
  312. echo "<b>".$text['header-user_setting-add']."</b>";
  313. }
  314. echo "</div>\n";
  315. echo " <div class='actions'>\n";
  316. echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'style'=>'margin-right: 15px;','link'=>'/core/users/user_edit.php?id='.urlencode($user_uuid)]);
  317. echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save']);
  318. echo " </div>\n";
  319. echo " <div style='clear: both;'></div>\n";
  320. echo "</div>\n";
  321. if ($action == "update") {
  322. echo $text['description-user_setting-edit']."\n";
  323. }
  324. if ($action == "add") {
  325. echo $text['description-user_setting-add']."\n";
  326. }
  327. echo "<br /><br />\n";
  328. echo "<div class='card'>\n";
  329. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
  330. echo "<tr>\n";
  331. echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  332. echo " ".$text['label-category']."\n";
  333. echo "</td>\n";
  334. echo "<td width='70%' class='vtable' align='left'>\n";
  335. if (permission_exists('user_setting_category_edit')) {
  336. echo " <input type='text' class='formfld' name='user_setting_category' id='user_setting_category' maxlength='255' value=\"".escape($user_setting_category)."\">\n";
  337. }
  338. else {
  339. echo " <select class='formfld' name='user_setting_category' id='user_setting_category' onchange=\"$('#user_setting_subcategory').trigger('focus');\">\n";
  340. echo " <option value=''></option>\n";
  341. if (is_array($allowed_categories) && sizeof($allowed_categories) > 0) {
  342. foreach ($allowed_categories as $category) {
  343. $selected = ($user_setting_category == $category) ? 'selected' : null;
  344. echo " <option value='".$category."' ".$selected.">".ucwords(str_replace('_',' ',$category))."</option>\n";
  345. }
  346. }
  347. echo " </select>";
  348. }
  349. echo "<br />\n";
  350. echo $text['description-category']."\n";
  351. echo "</td>\n";
  352. echo "</tr>\n";
  353. echo "<tr>\n";
  354. echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  355. echo " ".$text['label-subcategory']."\n";
  356. echo "</td>\n";
  357. echo "<td class='vtable' align='left'>\n";
  358. echo " <input class='formfld lowercase' type='text' name='user_setting_subcategory' id='user_setting_subcategory' maxlength='255' value=\"".escape($user_setting_subcategory)."\">\n";
  359. echo "<br />\n";
  360. echo $text['description-subcategory']."\n";
  361. echo "</td>\n";
  362. echo "</tr>\n";
  363. echo "<tr>\n";
  364. echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  365. echo " ".$text['label-type']."\n";
  366. echo "</td>\n";
  367. echo "<td class='vtable' align='left'>\n";
  368. $setting_types = ['Array','Boolean','Code','Dir','Name','Numeric','Text','UUID'];
  369. echo " <select class='formfld' id='user_setting_name' name='user_setting_name' required='required'>\n";
  370. echo " <option value=''></option>\n";
  371. foreach ($setting_types as $setting_type) {
  372. echo " <option value='".strtolower($setting_type)."' ".($user_setting_name == strtolower($setting_type) ? "selected='selected'" : null).">".$setting_type."</option>\n";
  373. }
  374. echo " </select>\n";
  375. unset($setting_types, $setting_type);
  376. echo "<br />\n";
  377. echo $text['description-type']."\n";
  378. echo "</td>\n";
  379. echo "</tr>\n";
  380. echo "<tr>\n";
  381. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  382. echo " ".$text['label-value']."\n";
  383. echo "</td>\n";
  384. echo "<td class='vtable' align='left'>\n";
  385. if ($user_setting_category == "domain" && $user_setting_subcategory == "menu" && $user_setting_name == "uuid" ) {
  386. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  387. echo " <option value=''></option>\n";
  388. $sql = "select * from v_menus ";
  389. $sql .= "order by menu_language, menu_name asc ";
  390. $result = $database->select($sql, null, 'all');
  391. if (is_array($result) && sizeof($result) != 0) {
  392. foreach ($result as $row) {
  393. if (strtolower($user_setting_value) == strtolower($row["menu_uuid"])) {
  394. echo " <option value='".strtolower($row["menu_uuid"])."' selected='selected'>".escape($row["menu_language"])." - ".escape($row["menu_name"])."\n";
  395. }
  396. else {
  397. echo " <option value='".strtolower($row["menu_uuid"])."'>".escape($row["menu_language"])." - ".escape($row["menu_name"])."</option>\n";
  398. }
  399. }
  400. }
  401. unset($sql, $result, $row);
  402. echo " </select>\n";
  403. }
  404. else if ($user_setting_category == "domain" && $user_setting_subcategory == "template" && $user_setting_name == "name" ) {
  405. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  406. echo " <option value=''></option>\n";
  407. //add all the themes to the list
  408. $theme_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/themes';
  409. if ($handle = opendir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/themes')) {
  410. while (false !== ($dir_name = readdir($handle))) {
  411. if ($dir_name != "." && $dir_name != ".." && $dir_name != ".svn" && $dir_name != ".git" && is_dir($theme_dir.'/'.$dir_name)) {
  412. $dir_label = str_replace('_', ' ', $dir_name);
  413. $dir_label = str_replace('-', ' ', $dir_label);
  414. if ($dir_name == $user_setting_value) {
  415. echo " <option value='".escape($dir_name)."' selected='selected'>".ucwords($dir_label)."</option>\n";
  416. }
  417. else {
  418. echo " <option value='".escape($dir_name)."'>".ucwords($dir_label)."</option>\n";
  419. }
  420. }
  421. }
  422. closedir($handle);
  423. }
  424. echo " </select>\n";
  425. }
  426. else if ($user_setting_category == "domain" && $user_setting_subcategory == "language" && $user_setting_name == "code" ) {
  427. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  428. echo " <option value=''></option>\n";
  429. foreach ($_SESSION['app']['languages'] as $key => $value) {
  430. if ($user_setting_value == $key) {
  431. echo " <option value='$value' selected='selected'>$value</option>\n";
  432. }
  433. else {
  434. echo " <option value='$value'>$value</option>\n";
  435. }
  436. }
  437. echo " </select>\n";
  438. }
  439. else if ($user_setting_category == "domain" && $user_setting_subcategory == "time_zone" && $user_setting_name == "name" ) {
  440. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  441. echo " <option value=''></option>\n";
  442. //$list = DateTimeZone::listAbbreviations();
  443. $time_zone_identifiers = DateTimeZone::listIdentifiers();
  444. $previous_category = '';
  445. $x = 0;
  446. foreach ($time_zone_identifiers as $key => $val) {
  447. $time_zone = explode("/", $val);
  448. $category = $time_zone[0];
  449. if ($category != $previous_category) {
  450. if ($x > 0) {
  451. echo " </optgroup>\n";
  452. }
  453. echo " <optgroup label='".$category."'>\n";
  454. }
  455. if (!empty($val)) {
  456. $time_zone_offset = get_time_zone_offset($val)/3600;
  457. $time_zone_offset_hours = floor($time_zone_offset);
  458. $time_zone_offset_minutes = ($time_zone_offset - $time_zone_offset_hours) * 60;
  459. $time_zone_offset_minutes = number_pad($time_zone_offset_minutes, 2);
  460. if ($time_zone_offset > 0) {
  461. $time_zone_offset_hours = number_pad($time_zone_offset_hours, 2);
  462. $time_zone_offset_hours = "+".$time_zone_offset_hours;
  463. }
  464. else {
  465. $time_zone_offset_hours = str_replace("-", "", $time_zone_offset_hours);
  466. $time_zone_offset_hours = "-".number_pad($time_zone_offset_hours, 2);
  467. }
  468. }
  469. if ($val == $user_setting_value) {
  470. echo " <option value='".$val."' selected='selected'>(UTC ".$time_zone_offset_hours.":".$time_zone_offset_minutes.") ".$val."</option>\n";
  471. }
  472. else {
  473. echo " <option value='".$val."'>(UTC ".escape($time_zone_offset_hours).":".escape($time_zone_offset_minutes).") ".$val."</option>\n";
  474. }
  475. $previous_category = $category;
  476. $x++;
  477. }
  478. echo " </select>\n";
  479. }
  480. else if ($user_setting_category == "domain" && $user_setting_subcategory == "time_format" && $user_setting_name == "text" ) {
  481. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  482. echo " <option value='24h' ".(($user_setting_value == "24h") ? "selected='selected'" : null).">".$text['label-24-hour']."</option>\n";
  483. echo " <option value='12h' ".(($user_setting_value == "12h") ? "selected='selected'" : null).">".$text['label-12-hour']."</option>\n";
  484. echo " </select>\n";
  485. }
  486. else if ($user_setting_category == "domain" && $user_setting_subcategory == "setting_value_input_type" && $user_setting_name == "text" ) {
  487. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  488. echo " <option value='input'>Input</option>\n";
  489. echo " <option value='textarea' ".($user_setting_value == "textarea" ? "selected='selected'" : null).">TextArea</option>\n";
  490. echo " </select>\n";
  491. }
  492. else if ($user_setting_subcategory == 'password' || substr_count($user_setting_subcategory, '_password') > 0 || $user_setting_category == "login" && $user_setting_subcategory == "password_reset_key" && $user_setting_name == "text") {
  493. echo " <input class='formfld' type='password' id='user_setting_value' name='user_setting_value' maxlength='255' onmouseover=\"this.type='text';\" onfocus=\"this.type='text';\" onmouseout=\"if (!$(this).is(':focus')) { this.type='password'; }\" onblur=\"this.type='password';\" value=\"".escape($user_setting_value)."\">\n";
  494. }
  495. else if ($user_setting_category == "theme" && substr_count($user_setting_subcategory, "_color") > 0 && ($user_setting_name == "text" || $user_setting_name == 'array')) {
  496. echo " <input type='text' class='formfld colorpicker' id='user_setting_value' name='user_setting_value' value=\"".$user_setting_value."\">\n";
  497. }
  498. else if ($user_setting_category == "theme" && substr_count($user_setting_subcategory, "_font") > 0 && $user_setting_name == "text") {
  499. $user_setting_value = str_replace('"', "'", $user_setting_value);
  500. if ($fonts = get_available_fonts('alpha')) {
  501. echo " <select class='formfld' id='sel_user_setting_value' onchange=\"if (this.selectedIndex == $('select#sel_user_setting_value option').length - 1) { $('#txt_user_setting_value').val('').fadeIn('fast'); $('#txt_user_setting_value').trigger('focus'); } else { $('#txt_user_setting_value').fadeOut('fast', function(){ $('#txt_user_setting_value').val($('#sel_user_setting_value').val()) }); } \">\n";
  502. echo " <option value=''></option>\n";
  503. echo " <optgroup label='".$text['label-web_fonts']."'>\n";
  504. $option_found = false;
  505. foreach ($fonts as $n => $font) {
  506. if ($user_setting_value == $font) {
  507. $selected = 'selected';
  508. $option_found = true;
  509. }
  510. else {
  511. unset($selected);
  512. }
  513. echo " <option value='".$font."' ".$selected.">".$font."</option>\n";
  514. }
  515. echo " </optgroup>\n";
  516. echo " <option value='' disabled='disabled'></option>\n";
  517. echo " <option value='' ".(($user_setting_value != '' && $option_found == false) ? 'selected' : null).">".$text['label-other']."...</option>\n";
  518. echo " </select>";
  519. echo " <input type='text' class='formfld' ".(($user_setting_value == '' || $option_found) ? "style='display: none;'" : null)." id='txt_user_setting_value' name='user_setting_value' value=\"".escape($user_setting_value)."\">\n";
  520. }
  521. else {
  522. echo " <input type='text' class='formfld' id='user_setting_value' name='user_setting_value' value=\"".escape($user_setting_value)."\">\n";
  523. }
  524. }
  525. else if ($user_setting_category == "fax" && $user_setting_subcategory == "page_size" && $user_setting_name == "text" ) {
  526. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  527. echo " <option value='letter' ".(($user_setting_value == 'letter') ? 'selected' : null).">Letter</option>";
  528. echo " <option value='legal' ".(($user_setting_value == 'legal') ? 'selected' : null).">Legal</option>";
  529. echo " <option value='a4' ".(($user_setting_value == 'a4') ? 'selected' : null).">A4</option>";
  530. echo " </select>";
  531. }
  532. else if ($user_setting_category == "fax" && $user_setting_subcategory == "resolution" && $user_setting_name == "text" ) {
  533. echo " <select class='formfld' id='user_setting_value' name='user_setting_value' style=''>\n";
  534. echo " <option value='normal' ".(($user_setting_value == 'normal') ? 'selected' : null).">".$text['label-normal']."</option>";
  535. echo " <option value='fine' ".(($user_setting_value == 'fine') ? 'selected' : null).">".$text['label-fine']."</option>";
  536. echo " <option value='superfine' ".(($user_setting_value == 'superfine') ? 'selected' : null).">".$text['label-superfine']."</option>";
  537. echo " </select>";
  538. }
  539. else if ($user_setting_category == "theme" && $user_setting_subcategory == "domain_visible" && $user_setting_name == "text" ) {
  540. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  541. echo " <option value='false' ".(($user_setting_value == "false") ? "selected='selected'" : null).">".$text['label-false']."</option>\n";
  542. echo " <option value='true' ".(($user_setting_value == "true") ? "selected='selected'" : null).">".$text['label-true']."</option>\n";
  543. echo " </select>\n";
  544. }
  545. else if ($user_setting_category == "theme" && $user_setting_subcategory == "menu_brand_type" && $user_setting_name == "text" ) {
  546. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  547. echo " <option value='image' ".(($user_setting_value == "image") ? "selected='selected'" : null).">".$text['label-image']."</option>\n";
  548. echo " <option value='text' ".(($user_setting_value == "text") ? "selected='selected'" : null).">".$text['label-text']."</option>\n";
  549. echo " <option value='image_text' ".(($user_setting_value == "image_text") ? "selected='selected'" : null).">".$text['label-image_text']."</option>\n";
  550. echo " <option value='none' ".(($user_setting_value == "none") ? "selected='selected'" : null).">".$text['label-none']."</option>\n";
  551. echo " </select>\n";
  552. }
  553. else if ($user_setting_category == "theme" && $user_setting_subcategory == "menu_style" && $user_setting_name == "text" ) {
  554. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  555. echo " <option value='fixed' ".(($user_setting_value == "fixed") ? "selected='selected'" : null).">".$text['label-fixed']."</option>\n";
  556. echo " <option value='static' ".(($user_setting_value == "static") ? "selected='selected'" : null).">".$text['label-static']."</option>\n";
  557. echo " <option value='inline' ".(($user_setting_value == "inline") ? "selected='selected'" : null).">".$text['label-inline']."</option>\n";
  558. echo " </select>\n";
  559. }
  560. else if ($user_setting_category == "theme" && $user_setting_subcategory == "menu_position" && $user_setting_name == "text" ) {
  561. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  562. echo " <option value='top' ".(($user_setting_value == "top") ? "selected='selected'" : null).">".$text['label-top']."</option>\n";
  563. echo " <option value='bottom' ".(($user_setting_value == "bottom") ? "selected='selected'" : null).">".$text['label-bottom']."</option>\n";
  564. echo " </select>\n";
  565. }
  566. else if ($user_setting_category == "theme" && $user_setting_subcategory == "logo_align" && $user_setting_name == "text" ) {
  567. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  568. echo " <option value='left' ".(($user_setting_value == "left") ? "selected='selected'" : null).">".$text['label-left']."</option>\n";
  569. echo " <option value='center' ".(($user_setting_value == "center") ? "selected='selected'" : null).">".$text['label-center']."</option>\n";
  570. echo " <option value='right' ".(($user_setting_value == "right") ? "selected='selected'" : null).">".$text['label-right']."</option>\n";
  571. echo " </select>\n";
  572. }
  573. elseif ($user_setting_category == "theme" && $user_setting_subcategory == "menu_side_state" && $user_setting_name == "text" ) {
  574. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  575. echo " <option value='expanded'>".$text['option-expanded']."</option>\n";
  576. echo " <option value='contracted' ".($user_setting_value == "contracted" ? "selected='selected'" : null).">".$text['option-contracted']."</option>\n";
  577. echo " <option value='hidden' ".($user_setting_value == "hidden" ? "selected='selected'" : null).">".$text['option-hidden']."</option>\n";
  578. echo " </select>\n";
  579. }
  580. elseif ($user_setting_category == "theme" && $user_setting_subcategory == "menu_side_toggle" && $user_setting_name == "text" ) {
  581. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  582. echo " <option value='hover'>".$text['option-hover']."</option>\n";
  583. echo " <option value='click' ".($user_setting_value == "click" ? "selected='selected'" : null).">".$text['option-click']."</option>\n";
  584. echo " </select>\n";
  585. }
  586. elseif ($user_setting_category == "theme" && $user_setting_subcategory == "menu_side_toggle_body_width" && $user_setting_name == "text" ) {
  587. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  588. echo " <option value='shrink'>".$text['option-shrink']."</option>\n";
  589. echo " <option value='fixed' ".($user_setting_value == "fixed" ? "selected='selected'" : null).">".$text['option-fixed']."</option>\n";
  590. echo " </select>\n";
  591. }
  592. elseif ($user_setting_category == "theme" && $user_setting_subcategory == "menu_side_item_main_sub_close" && $user_setting_name == "text" ) {
  593. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  594. echo " <option value='automatic'>".$text['option-automatic']."</option>\n";
  595. echo " <option value='manual' ".($user_setting_value == "manual" ? "selected='selected'" : null).">".$text['option-manual']."</option>\n";
  596. echo " </select>\n";
  597. }
  598. else if ($user_setting_category == "theme" && $user_setting_subcategory == "body_header_brand_type" && $user_setting_name == "text" ) {
  599. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  600. echo " <option value='image' ".(($user_setting_value == "image") ? "selected='selected'" : null).">".$text['label-image']."</option>\n";
  601. echo " <option value='text' ".(($user_setting_value == "text") ? "selected='selected'" : null).">".$text['label-text']."</option>\n";
  602. echo " <option value='image_text' ".(($user_setting_value == "image_text") ? "selected='selected'" : null).">".$text['label-image_text']."</option>\n";
  603. echo " <option value='none' ".(($user_setting_value == "none") ? "selected='selected'" : null).">".$text['label-none']."</option>\n";
  604. echo " </select>\n";
  605. }
  606. elseif ($user_setting_category == "theme" && $user_setting_subcategory == "input_toggle_style" && $user_setting_name == "text" ) {
  607. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  608. echo " <option value='select'>".$text['option-select']."</option>\n";
  609. echo " <option value='switch_round' ".(($user_setting_value == "switch_round") ? "selected='selected'" : null).">".$text['option-switch_round']."</option>\n";
  610. echo " <option value='switch_square' ".(($user_setting_value == "switch_square") ? "selected='selected'" : null).">".$text['option-switch_square']."</option>\n";
  611. echo " </select>\n";
  612. }
  613. elseif ($user_setting_category == "users" && $user_setting_subcategory == "username_format" && $user_setting_name == "text" ) {
  614. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  615. echo " <option value='any' ".($user_setting_value == 'any' ? "selected='selected'" : null).">".$text['option-username_format_any']."</option>\n";
  616. echo " <option value='email' ".($user_setting_value == 'email' ? "selected='selected'" : null).">".$text['option-username_format_email']."</option>\n";
  617. echo " <option value='no_email' ".($user_setting_value == 'no_email' ? "selected='selected'" : null).">".$text['option-username_format_no_email']."</option>\n";
  618. echo " </select>\n";
  619. }
  620. elseif ($user_setting_category == "destinations" && $user_setting_subcategory == "dialplan_mode" && $user_setting_name == "text" ) {
  621. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  622. echo " <option value='multiple'>".$text['label-multiple']."</option>\n";
  623. echo " <option value='single' ".(($user_setting_value == "single") ? "selected='selected'" : null).">".$text['label-single']."</option>\n";
  624. echo " </select>\n";
  625. }
  626. elseif ($user_setting_category == "destinations" && $user_setting_subcategory == "select_mode" && $user_setting_name == "text" ) {
  627. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  628. echo " <option value='default'>".$text['label-default']."</option>\n";
  629. echo " <option value='dynamic' ".(($user_setting_value == "dynamic") ? "selected='selected'" : null).">".$text['label-dynamic']."</option>\n";
  630. echo " </select>\n";
  631. }
  632. elseif (is_json($user_setting_value)) {
  633. echo " <textarea class='formfld' style='width: 100%; height: 80px; font-family: courier, monospace; overflow: auto;' id='user_setting_value' name='user_setting_value' wrap='off'>".$user_setting_value."</textarea>\n";
  634. }
  635. elseif ($user_setting_name == "boolean") {
  636. echo " <select class='formfld' id='user_setting_value' name='user_setting_value'>\n";
  637. if ($user_setting_category == "provision" && is_numeric($user_setting_value)) {
  638. echo " <option value='0'>".$text['label-false']."</option>\n";
  639. echo " <option value='1' ".(($user_setting_value == 1) ? "selected='selected'" : null).">".$text['label-true']."</option>\n";
  640. }
  641. else {
  642. echo " <option value='false'>".$text['label-false']."</option>\n";
  643. echo " <option value='true' ".((strtolower($user_setting_value) == "true") ? "selected='selected'" : null).">".$text['label-true']."</option>\n";
  644. }
  645. echo " </select>\n";
  646. }
  647. else {
  648. if (!empty($_SESSION['domain']['setting_value_input_type']) && $_SESSION['domain']['setting_value_input_type']['text'] == 'textarea') {
  649. echo " <textarea class='formfld' style='width: 185px; height: 80px;' id='user_setting_value' name='user_setting_value'>".($user_setting_value ?? '')."</textarea>\n";
  650. }
  651. else {
  652. echo " <input class='formfld' type='text' id='user_setting_value' name='user_setting_value' value=\"".escape($user_setting_value ?? '')."\">\n";
  653. }
  654. }
  655. echo "<br />\n";
  656. echo $text['description-value']."\n";
  657. if ($user_setting_category == "theme" && substr_count($user_setting_subcategory, "_font") > 0 && $user_setting_name == "text") {
  658. echo "&nbsp;&nbsp;".$text['label-reference'].": <a href='https://www.google.com/fonts' target='_blank'>".$text['label-web_fonts']."</a>\n";
  659. }
  660. echo "</td>\n";
  661. echo "</tr>\n";
  662. echo "</table>\n";
  663. echo "<div id='tr_order' ".(($user_setting_name != 'array') ? "style='display: none;'" : null).">\n";
  664. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
  665. echo "<tr>\n";
  666. echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  667. echo " ".$text['label-order']."\n";
  668. echo "</td>\n";
  669. echo "<td width='70%' class='vtable' align='left'>\n";
  670. echo " <select name='user_setting_order' class='formfld'>\n";
  671. $i=0;
  672. while($i<=999) {
  673. $selected = ($i == $user_setting_order) ? "selected" : null;
  674. if (strlen($i) == 1) {
  675. echo " <option value='00$i' ".$selected.">00$i</option>\n";
  676. }
  677. if (strlen($i) == 2) {
  678. echo " <option value='0$i' ".$selected.">0$i</option>\n";
  679. }
  680. if (strlen($i) == 3) {
  681. echo " <option value='$i' ".$selected.">$i</option>\n";
  682. }
  683. $i++;
  684. }
  685. echo " </select>\n";
  686. echo " <br />\n";
  687. echo $text['description-order'] ?? ''."\n";
  688. echo "</td>\n";
  689. echo "</tr>\n";
  690. echo "</table>\n";
  691. echo "</div>\n";
  692. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
  693. echo "<tr>\n";
  694. echo "<td width='30%' class='vncellreq' valign='top' align='left' nowrap>\n";
  695. echo " ".$text['label-enabled']."\n";
  696. echo "</td>\n";
  697. echo "<td width='70%' class='vtable' align='left'>\n";
  698. if (substr($_SESSION['theme']['input_toggle_style']['text'], 0, 6) == 'switch') {
  699. echo " <label class='switch'>\n";
  700. echo " <input type='checkbox' id='user_setting_enabled' name='user_setting_enabled' value='true' ".($user_setting_enabled == 'true' ? "checked='checked'" : null).">\n";
  701. echo " <span class='slider'></span>\n";
  702. echo " </label>\n";
  703. }
  704. else {
  705. echo " <select class='formfld' id='user_setting_enabled' name='user_setting_enabled'>\n";
  706. echo " <option value='true' ".($user_setting_enabled == 'true' ? "selected='selected'" : null).">".$text['option-true']."</option>\n";
  707. echo " <option value='false' ".($user_setting_enabled == 'false' ? "selected='selected'" : null).">".$text['option-false']."</option>\n";
  708. echo " </select>\n";
  709. }
  710. echo "<br />\n";
  711. //echo $text['description-setting_enabled']."\n";
  712. echo "</td>\n";
  713. echo "</tr>\n";
  714. echo "<tr>\n";
  715. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  716. echo " ".$text['label-description']."\n";
  717. echo "</td>\n";
  718. echo "<td class='vtable' align='left'>\n";
  719. echo " <textarea class='formfld' style='width: 185px; height: 80px;' name='user_setting_description'>".escape($user_setting_description)."</textarea>\n";
  720. echo "<br />\n";
  721. echo $text['description-description']."\n";
  722. echo "</td>\n";
  723. echo "</tr>\n";
  724. echo " <tr>\n";
  725. echo " <td colspan='2' align='right'>\n";
  726. echo " <input type='hidden' name='user_uuid' value='".escape($user_uuid)."'>\n";
  727. if ($action == "update") {
  728. echo " <input type='hidden' name='user_setting_uuid' value='".escape($user_setting_uuid)."'>\n";
  729. }
  730. echo " <input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
  731. echo " </td>\n";
  732. echo " </tr>";
  733. echo "</table>";
  734. echo "</div>\n";
  735. echo "<br />";
  736. echo "</form>";
  737. echo "<script>\n";
  738. echo " //hide/convert password fields then submit form\n";
  739. echo " function submit_form() {\n";
  740. echo " hide_password_fields();\n";
  741. echo " $('form#frm').submit();\n";
  742. echo " }\n";
  743. echo "\n";
  744. echo " //define lowercase class\n";
  745. echo " $('.lowercase').on('blur',function(){ this.value = this.value.toLowerCase(); });";
  746. echo "\n";
  747. echo " //show order if array\n";
  748. echo " $('#user_setting_name').on('keyup',function(){ \n";
  749. echo " (this.value.toLowerCase() == 'array') ? $('#tr_order').slideDown('fast') : $('#tr_order').slideUp('fast');\n";
  750. echo " });\n";
  751. echo "</script>\n";
  752. //include the footer
  753. require_once "resources/footer.php";
  754. ?>