default_settings.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  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('default_setting_view')) {
  26. //access granted
  27. }
  28. else {
  29. echo "access denied";
  30. exit;
  31. }
  32. //add multi-lingual support
  33. $language = new text;
  34. $text = $language->get();
  35. //get the http post data
  36. $search = $_REQUEST['search'] ?? '';
  37. $default_setting_category = $_REQUEST['default_setting_category'] ?? '';
  38. if (!empty($_POST['default_settings'])) {
  39. $action = $_POST['action'];
  40. $domain_uuid = $_POST['domain_uuid'];
  41. $default_settings = $_POST['default_settings'];
  42. } else {
  43. $action = '';
  44. $domain_uuid = '';
  45. $default_settings = '';
  46. }
  47. //set additional variables
  48. $search = !empty($_GET["search"]) ? $_GET["search"] : '';
  49. $show = !empty($_GET["show"]) ? $_GET["show"] : '';
  50. //sanitize the variables
  51. $action = preg_replace('#[^a-zA-Z0-9_\-\.]#', '', $action);
  52. $search = preg_replace('#[^a-zA-Z0-9_\-\. ]#', '', $search);
  53. $default_setting_category = preg_replace('#[^a-zA-Z0-9_\-\.]#', '', $default_setting_category);
  54. //set from session variables
  55. $list_row_edit_button = !empty($_SESSION['theme']['list_row_edit_button']['boolean']) ? $_SESSION['theme']['list_row_edit_button']['boolean'] : 'false';
  56. //build the query string
  57. $query_string = '';
  58. if (!empty($search)) {
  59. $query_string .= 'search='.urlencode($search);
  60. }
  61. if (!empty($default_setting_category)) {
  62. if ($query_string == '') { $query_string = ''; } else { $query_string .= '&'; }
  63. $query_string .= 'default_setting_category='.urlencode($default_setting_category);
  64. }
  65. //process the http post data by action
  66. if (!empty($action) && !empty($default_settings)) {
  67. switch ($action) {
  68. case 'copy':
  69. if (permission_exists('default_setting_add')) {
  70. $obj = new default_settings;
  71. $obj->domain_uuid = $domain_uuid;
  72. $obj->copy($default_settings);
  73. }
  74. break;
  75. case 'toggle':
  76. if (permission_exists('default_setting_edit')) {
  77. $obj = new default_settings;
  78. $obj->toggle($default_settings);
  79. }
  80. break;
  81. case 'delete':
  82. if (permission_exists('default_setting_delete')) {
  83. $obj = new default_settings;
  84. $obj->delete($default_settings);
  85. }
  86. break;
  87. }
  88. header('Location: default_settings.php?'.(!empty($query_string) ? $query_string : null));
  89. exit;
  90. }
  91. //get order and order by and sanitize the values
  92. $order_by = (!empty($_GET["order_by"])) ? $_GET["order_by"] : '';
  93. $order = (!empty($_GET["order"])) ? $_GET["order"] : '';
  94. //get the count
  95. $sql = "select count(default_setting_uuid) from v_default_settings ";
  96. if (!empty($search)) {
  97. $sql .= "where (";
  98. $sql .= " lower(default_setting_category) like :search ";
  99. $sql .= " or lower(default_setting_subcategory) like :search ";
  100. $sql .= " or lower(default_setting_name) like :search ";
  101. $sql .= " or lower(default_setting_value) like :search ";
  102. $sql .= " or lower(default_setting_description) like :search ";
  103. $sql .= ") ";
  104. $parameters['search'] = '%'.$search.'%';
  105. }
  106. if (!empty($default_setting_category) && !empty($default_setting_category)) {
  107. $sql .= (stripos($sql,'WHERE') === false) ? 'where ' : 'and ';
  108. $sql .= "lower(default_setting_category) = :default_setting_category ";
  109. $parameters['default_setting_category'] = strtolower($default_setting_category);
  110. }
  111. $database = new database;
  112. $num_rows = $database->select($sql, $parameters ?? null, 'column');
  113. //get the list
  114. $sql = "select default_setting_uuid, default_setting_category, default_setting_subcategory, default_setting_name, ";
  115. $sql .= "default_setting_value, cast(default_setting_enabled as text), default_setting_description ";
  116. $sql .= "from v_default_settings ";
  117. if (!empty($search)) {
  118. $sql .= "where (";
  119. $sql .= " lower(default_setting_category) like :search ";
  120. $sql .= " or lower(default_setting_subcategory) like :search ";
  121. $sql .= " or lower(default_setting_name) like :search ";
  122. $sql .= " or lower(default_setting_value) like :search ";
  123. $sql .= " or lower(default_setting_description) like :search ";
  124. $sql .= ") ";
  125. $parameters['search'] = '%'.$search.'%';
  126. }
  127. if (!empty($default_setting_category) && !empty($default_setting_category)) {
  128. $sql .= (stripos($sql,'WHERE') === false) ? 'where ' : 'and ';
  129. $sql .= "lower(default_setting_category) = :default_setting_category ";
  130. $parameters['default_setting_category'] = strtolower($default_setting_category);
  131. }
  132. $sql .= order_by($order_by, $order, 'default_setting_category, default_setting_subcategory, default_setting_order', 'asc');
  133. //$sql .= limit_offset($rows_per_page, $offset ?? ''); //$offset is always null
  134. $database = new database;
  135. $default_settings = $database->select($sql, $parameters ?? null, 'all');
  136. unset($sql, $parameters);
  137. //get default setting categories
  138. $sql = "select ";
  139. $sql .= "distinct(d1.default_setting_category), ";
  140. $sql .= "( ";
  141. $sql .= " select ";
  142. $sql .= " count(d2.default_setting_category) ";
  143. $sql .= " from v_default_settings as d2 ";
  144. $sql .= " where d2.default_setting_category = d1.default_setting_category ";
  145. if (!empty($search)) {
  146. $sql .= " and (";
  147. $sql .= " lower(d2.default_setting_category) like :search ";
  148. $sql .= " or lower(d2.default_setting_subcategory) like :search ";
  149. $sql .= " or lower(d2.default_setting_name) like :search ";
  150. $sql .= " or lower(d2.default_setting_value) like :search ";
  151. $sql .= " or lower(d2.default_setting_description) like :search ";
  152. $sql .= " ) ";
  153. $parameters['search'] = '%'.$search.'%';
  154. }
  155. $sql .= ") as quantity ";
  156. $sql .= "from v_default_settings as d1 ";
  157. $sql .= "order by d1.default_setting_category asc ";
  158. $database = new database;
  159. $rows = $database->select($sql, $parameters ?? null, 'all');
  160. if (!empty($rows) && @sizeof($rows) != 0) {
  161. foreach ($rows as $row) {
  162. if (!empty($row['default_setting_category']) && !empty($row['quantity'])) {
  163. $default_setting_categories[$row['default_setting_category']] = $row['quantity'];
  164. }
  165. }
  166. }
  167. unset($sql, $rows, $row);
  168. //get the list of categories
  169. if (!empty($default_setting_categories)) {
  170. foreach ($default_setting_categories as $default_setting_category => $quantity) {
  171. $category = strtolower($default_setting_category);
  172. switch ($category) {
  173. case "api" : $category = "API"; break;
  174. case "cdr" : $category = "CDR"; break;
  175. case "ldap" : $category = "LDAP"; break;
  176. case "ivr_menu" : $category = "IVR Menu"; break;
  177. default:
  178. $category = str_replace("_", " ", $category);
  179. $category = str_replace("-", " ", $category);
  180. $category = ucwords($category);
  181. }
  182. $categories[$default_setting_category]['formatted'] = $category;
  183. $categories[$default_setting_category]['count'] = $quantity;
  184. }
  185. ksort($categories);
  186. unset($default_setting_categories, $default_setting_category, $category);
  187. }
  188. //get the list of installed apps from the core and mod directories
  189. $config_list = glob($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/*/*/app_config.php");
  190. $x=0;
  191. foreach ($config_list as $config_path) {
  192. include($config_path);
  193. $x++;
  194. }
  195. $x = 0;
  196. foreach ($apps as $app) {
  197. if (!empty($app['default_settings'])) {
  198. foreach ($app['default_settings'] as $setting) {
  199. $setting_array[$x] = ($setting);
  200. $setting_array[$x]['app_uuid'] = $app['uuid'] ?? null;
  201. $x++;
  202. }
  203. }
  204. }
  205. //create a function to find matching row in array and return the row or boolean
  206. function find_in_array($search_array, $field, $value, $type = 'boolean') {
  207. foreach($search_array as $row) {
  208. if ($row[$field] == $value) {
  209. if ($type == 'boolean') {
  210. return true;
  211. }
  212. if ($type == 'row') {
  213. return $row;
  214. }
  215. break;
  216. }
  217. }
  218. if ($type == 'boolean') {
  219. return false;
  220. }
  221. }
  222. //create token
  223. $object = new token;
  224. $token = $object->create($_SERVER['PHP_SELF']);
  225. //include the header
  226. $document['title'] = $text['title-default_settings'];
  227. require_once "resources/header.php";
  228. //copy settings javascript
  229. if (permission_exists("domain_select") && permission_exists("domain_setting_add") && count($_SESSION['domains']) > 1) {
  230. echo "<script language='javascript' type='text/javascript'>\n";
  231. echo " function show_domains() {\n";
  232. echo " document.getElementById('action').value = 'copy';\n";
  233. echo " document.getElementById('btn_copy').style.display = 'none'; \n";
  234. echo " document.getElementById('btn_copy_cancel').style.display = 'inline'; \n";
  235. echo " document.getElementById('target_domain_uuid').style.display = 'inline'; \n";
  236. echo " document.getElementById('btn_paste').style.display = 'inline'; \n";
  237. echo " }";
  238. echo " function hide_domains() {\n";
  239. echo " document.getElementById('action').value = '';\n";
  240. echo " document.getElementById('btn_copy_cancel').style.display = 'none'; \n";
  241. echo " document.getElementById('target_domain_uuid').style.display = 'none'; \n";
  242. echo " document.getElementById('target_domain_uuid').selectedIndex = 0;\n";
  243. echo " document.getElementById('btn_paste').style.display = 'none'; \n";
  244. echo " document.getElementById('btn_copy').style.display = 'inline'; \n";
  245. echo " }\n";
  246. echo "</script>";
  247. }
  248. //show the content
  249. echo "<div class='action_bar' id='action_bar'>\n";
  250. echo " <div class='heading'><b>".$text['title-default_settings']." (".number_format($num_rows).")</b></div>\n";
  251. echo " <div class='actions'>\n";
  252. echo button::create(['type'=>'button','label'=>$text['label-domain'],'icon'=>$_SESSION['theme']['button_icon_domain'],'style'=>'','link'=>PROJECT_PATH.'/core/domain_settings/domain_settings.php?id='.$domain_uuid]);
  253. echo button::create(['label'=>$text['button-reload'],'icon'=>$_SESSION['theme']['button_icon_reload'],'type'=>'button','id'=>'button_reload','link'=>'default_settings_reload.php'.(!empty($search) ? '?search='.urlencode($search) : null),'style'=>'margin-right: 15px;']);
  254. if (permission_exists('default_setting_add')) {
  255. echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','link'=>'default_setting_edit.php?'.$query_string]);
  256. }
  257. if (permission_exists('default_setting_add') && !empty($default_settings)) {
  258. if (permission_exists("domain_select") && permission_exists("domain_setting_add") && count($_SESSION['domains']) > 1) {
  259. echo button::create(['type'=>'button','label'=>$text['button-copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','onclick'=>'show_domains();']);
  260. echo button::create(['type'=>'button','label'=>$text['button-cancel'],'id'=>'btn_copy_cancel','icon'=>$_SESSION['theme']['button_icon_cancel'],'style'=>'display: none;','onclick'=>'hide_domains();']);
  261. echo "<select name='domain_uuid' class='formfld' style='display: none; width: auto;' id='target_domain_uuid' onchange=\"document.getElementById('domain_uuid').value = this.options[this.selectedIndex].value;\">\n";
  262. echo " <option value=''>(".$text['label-duplicate'].")</option>\n";
  263. echo " <option value='' selected='selected' disabled='disabled'>".$text['label-domain']."...</option>\n";
  264. foreach ($_SESSION['domains'] as $domain) {
  265. echo " <option value='".escape($domain["domain_uuid"])."'>".escape($domain["domain_name"])."</option>\n";
  266. }
  267. echo " </select>";
  268. echo button::create(['type'=>'button','label'=>$text['button-paste'],'icon'=>$_SESSION['theme']['button_icon_paste'],'id'=>'btn_paste','style'=>'display: none;','onclick'=>"if (confirm('".$text['confirm-copy']."')) { list_action_set('copy'); list_form_submit('form_list'); } else { this.blur(); return false; }"]);
  269. }
  270. }
  271. if (permission_exists('default_setting_edit') && $default_settings) {
  272. echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','style'=>'display: none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]);
  273. }
  274. if (permission_exists('default_setting_delete') && $default_settings) {
  275. echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
  276. }
  277. echo "<form id='form_search' class='inline' method='get'>\n";
  278. if (!empty($categories)) {
  279. echo "<select name='default_setting_category' class='formfld' style='width: auto; margin-left: 15px;' id='select_category' onchange='this.form.submit();'>\n";
  280. echo " <option value=''>".$text['label-category']."...</option>\n";
  281. echo " <option value=''>".$text['label-all']."</option>\n";
  282. foreach ($categories as $category_name => $category) {
  283. $selected = (!empty($_GET['default_setting_category']) && $_GET['default_setting_category'] == $category_name) ? " selected='selected'" : null;
  284. echo " <option value='".escape($category_name)."' $selected>".escape($category['formatted']).($category['count'] ? " (".$category['count'].")" : null)."</option>\n";
  285. }
  286. echo " <option disabled='disabled'>\n";
  287. echo " <option value=''>".$text['label-all']."</option>\n";
  288. echo " </select>";
  289. }
  290. echo "<input type='text' class='txt list-search' name='search' id='search' style='margin-left: 0 !important;' value=\"".escape($search)."\" placeholder=\"".$text['label-search']."\" onkeydown=''>";
  291. echo button::create(['label'=>$text['button-search'],'icon'=>$_SESSION['theme']['button_icon_search'],'type'=>'submit','id'=>'btn_search']);
  292. //echo button::create(['label'=>$text['button-reset'],'icon'=>$_SESSION['theme']['button_icon_reset'],'type'=>'button','id'=>'btn_reset','link'=>'default_settings.php','style'=>($search == '' ? 'display: none;' : null)]);
  293. //if (!empty($paging_controls_mini)) {
  294. // echo "<span style='margin-left: 15px;'>".$paging_controls_mini."</span>\n";
  295. //}
  296. echo " </form>\n";
  297. echo " </div>\n";
  298. echo " <div style='clear: both;'></div>\n";
  299. echo "</div>\n";
  300. if (permission_exists('default_setting_edit') && $default_settings) {
  301. echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('toggle'); list_form_submit('form_list');"])]);
  302. }
  303. if (permission_exists('default_setting_delete') && $default_settings) {
  304. echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('delete'); list_form_submit('form_list');"])]);
  305. }
  306. echo $text['description-default_settings']."\n";
  307. echo "<br /><br />\n";
  308. echo "<form id='form_list' method='post'>\n";
  309. echo "<input type='hidden' id='action' name='action' value=''>\n";
  310. echo "<input type='hidden' name='search' value=\"".escape($search)."\">\n";
  311. echo "<input type='hidden' name='domain_uuid' id='domain_uuid'>";
  312. if (!empty($default_settings)) {
  313. //define the variable
  314. $previous_default_setting_category = '';
  315. $x = 0;
  316. foreach ($default_settings as $row) {
  317. $default_setting_category = strtolower($row['default_setting_category']);
  318. $default_setting_category = preg_replace('#[^a-zA-Z0-9_\-\.]#', '', $default_setting_category);
  319. $label_default_setting_category = $row['default_setting_category'];
  320. $label_default_setting_category = preg_replace('#[^a-zA-Z0-9_\-\. ]#', '', $label_default_setting_category);
  321. //check if the default setting uuid exists in the array
  322. $field = find_in_array($setting_array, 'default_setting_uuid', $row['default_setting_uuid'], 'row');
  323. //set default empty string
  324. $setting_bold = '';
  325. $enabled_bold = '';
  326. $default_value = '';
  327. $default_enabled = '';
  328. //set empty default setting enabled to false by default
  329. if (empty($row['default_setting_enabled'])) {
  330. $row['default_setting_enabled'] = 'false';
  331. }
  332. if (!empty($field)) {
  333. if ($row['default_setting_value'] !== $field['default_setting_value']) {
  334. $setting_bold = 'font-weight:bold;';
  335. }
  336. if (!empty($field['default_setting_value'])) {
  337. $default_value = 'Default: '.$field['default_setting_value'];
  338. }
  339. else {
  340. $default_value = 'Default: null';
  341. }
  342. if ($row['default_setting_enabled'] != $field['default_setting_enabled']) {
  343. $default_enabled = $field['default_setting_enabled'];
  344. $enabled_bold = true;
  345. }
  346. }
  347. else {
  348. $default_value = 'Custom';
  349. $setting_bold = 'font-weight:bold;';
  350. }
  351. unset($field);
  352. switch (strtolower($label_default_setting_category)) {
  353. case "api" : $label_default_setting_category = "API"; break;
  354. case "cdr" : $label_default_setting_category = "CDR"; break;
  355. case "ldap" : $label_default_setting_category = "LDAP"; break;
  356. case "ivr_menu" : $label_default_setting_category = "IVR Menu"; break;
  357. default:
  358. $label_default_setting_category = str_replace("_", " ", $label_default_setting_category);
  359. $label_default_setting_category = str_replace("-", " ", $label_default_setting_category);
  360. $label_default_setting_category = ucwords($label_default_setting_category);
  361. }
  362. if ($previous_default_setting_category != $row['default_setting_category']) {
  363. if (!empty($previous_default_setting_category)) {
  364. echo "</table>\n";
  365. echo "<br />\n";
  366. echo "</div>\n";
  367. }
  368. echo "<div class='category' id='category_".$default_setting_category."'>\n";
  369. echo "<b>".escape($label_default_setting_category)."</b><br>\n";
  370. echo "<table class='list'>\n";
  371. echo "<tr class='list-header'>\n";
  372. if (permission_exists('default_setting_add') || permission_exists('default_setting_edit') || permission_exists('default_setting_delete')) {
  373. echo " <th class='checkbox'>\n";
  374. echo " <input type='checkbox' id='checkbox_all_".$default_setting_category."' name='checkbox_all' onclick=\"list_all_toggle('".$default_setting_category."'); checkbox_on_change(this);\">\n";
  375. echo " </th>\n";
  376. }
  377. if ($show == 'all' && permission_exists('default_setting_all')) {
  378. echo th_order_by('domain_name', $text['label-domain'], $order_by, $order);
  379. }
  380. echo th_order_by('default_setting_subcategory', $text['label-subcategory'], $order_by, $order, null, "class='pct-35'");
  381. echo th_order_by('default_setting_name', $text['label-type'], $order_by, $order, null, "class='pct-10 hide-sm-dn'");
  382. echo th_order_by('default_setting_value', $text['label-value'], $order_by, $order, null, "class='pct-30'");
  383. echo th_order_by('default_setting_enabled', $text['label-enabled'], $order_by, $order, null, "class='center'");
  384. echo " <th class='pct-25 hide-sm-dn'>".$text['label-description']."</th>\n";
  385. if (permission_exists('default_setting_edit') && $list_row_edit_button == 'true') {
  386. echo " <td class='action-button'>&nbsp;</td>\n";
  387. }
  388. echo "</tr>\n";
  389. }
  390. if (permission_exists('default_setting_edit')) {
  391. $list_row_url = "default_setting_edit.php?id=".urlencode($row['default_setting_uuid']).'&'.$query_string;
  392. }
  393. echo "<tr class='list-row' href='".$list_row_url."'>\n";
  394. if (permission_exists('default_setting_add') || permission_exists('default_setting_edit') || permission_exists('default_setting_delete')) {
  395. echo " <td class='checkbox'>\n";
  396. echo " <input type='checkbox' name='default_settings[$x][checked]' id='checkbox_".$x."' class='checkbox_".$default_setting_category."' value='true' onclick=\"checkbox_on_change(this); if (!this.checked) { document.getElementById('checkbox_all_".$default_setting_category."').checked = false; }\">\n";
  397. echo " <input type='hidden' name='default_settings[$x][uuid]' value='".escape($row['default_setting_uuid'])."' />\n";
  398. echo " </td>\n";
  399. }
  400. if ($show == 'all' && permission_exists('default_setting_all')) {
  401. echo " <td>".escape($_SESSION['domains'][$row['domain_uuid']]['domain_name'])."</td>\n";
  402. }
  403. echo " <td class='overflow no-wrap'>";
  404. if (permission_exists('default_setting_edit')) {
  405. echo "<a href='".$list_row_url."'>".escape($row['default_setting_subcategory'])."</a>";
  406. }
  407. else {
  408. echo escape($row['default_setting_subcategory']);
  409. }
  410. echo " </td>\n";
  411. $setting_types = ['Array','Boolean','Code','Dir','Name','Numeric','Text','UUID'];
  412. echo " <td class='hide-sm-dn'>".$setting_types[array_search(strtolower($row['default_setting_name']), array_map('strtolower',$setting_types))]."</td>\n";
  413. echo " <td class='overflow no-wrap' title=\"".escape($default_value)."\" style=\"".$setting_bold."\">\n";
  414. $category = $row['default_setting_category'] ?? '';
  415. $subcategory = $row['default_setting_subcategory'] ?? '';
  416. $name = $row['default_setting_name'] ?? '';
  417. if ($category == "domain" && $subcategory == "menu" && $name == "uuid" ) {
  418. $sql = "select * from v_menus ";
  419. $sql .= "where menu_uuid = :menu_uuid ";
  420. $parameters['menu_uuid'] = $row['default_setting_value'];
  421. $database = new database;
  422. $sub_result = $database->select($sql, $parameters ?? null, 'all');
  423. foreach ($sub_result as &$sub_row) {
  424. echo $sub_row["menu_language"]." - ".$sub_row["menu_name"]."\n";
  425. }
  426. unset($sql, $sub_result, $sub_row);
  427. }
  428. else if ($category == "domain" && $subcategory == "template" && $name == "name" ) {
  429. echo " ".ucwords($row['default_setting_value']);
  430. }
  431. else if ($category == "domain" && $subcategory == "time_format" && $name == "text" ) {
  432. switch ($row['default_setting_value']) {
  433. case '12h': echo $text['label-12-hour']; break;
  434. case '24h': echo $text['label-24-hour']; break;
  435. }
  436. }
  437. else if (
  438. ( $category == "theme" && $subcategory == "menu_main_icons" && $name == "boolean" ) ||
  439. ( $category == "theme" && $subcategory == "menu_sub_icons" && $name == "boolean" ) ||
  440. ( $category == "theme" && $subcategory == "menu_brand_type" && $name == "text" ) ||
  441. ( $category == "theme" && $subcategory == "menu_style" && $name == "text" ) ||
  442. ( $category == "theme" && $subcategory == "menu_position" && $name == "text" ) ||
  443. ( $category == "theme" && $subcategory == "body_header_brand_type" && $name == "text" ) ||
  444. ( $category == "theme" && $subcategory == "logo_align" && $name == "text" )
  445. ) {
  446. echo " ".$text['label-'.$row['default_setting_value']];
  447. }
  448. else if ($category == 'theme' && $subcategory == 'custom_css_code' && $name == 'text') {
  449. echo " [...]\n";
  450. }
  451. else if ($subcategory == 'password' || substr_count($subcategory, '_password') > 0 || $category == "login" && $subcategory == "password_reset_key" && $name == "text" || substr_count($subcategory, '_secret') > 0) {
  452. echo " ".str_repeat('*', strlen($row['default_setting_value'] ?? ''));
  453. }
  454. else if ($category == 'theme' && $subcategory == 'button_icons' && $name == 'text') {
  455. echo " ".$text['option-button_icons_'.$row['default_setting_value']]."\n";
  456. }
  457. else if ($category == 'theme' && $subcategory == 'menu_side_state' && $name == 'text') {
  458. echo " ".$text['option-'.$row['default_setting_value']]."\n";
  459. }
  460. else if ($category == 'theme' && $subcategory == 'menu_side_toggle' && $name == 'text') {
  461. echo " ".$text['option-'.$row['default_setting_value']]."\n";
  462. }
  463. else if ($category == 'theme' && $subcategory == 'menu_side_toggle_body_width' && $name == 'text') {
  464. echo " ".$text['option-'.$row['default_setting_value']]."\n";
  465. }
  466. else if ($category == 'theme' && $subcategory == 'menu_side_item_main_sub_close' && $name == 'text') {
  467. echo " ".$text['option-'.$row['default_setting_value']]."\n";
  468. }
  469. else if ($category == 'theme' && $subcategory == 'input_toggle_style' && $name == 'text') {
  470. echo " ".$text['option-'.$row['default_setting_value']]."\n";
  471. }
  472. else if (substr_count($subcategory, "_color") > 0 && ($name == "text" || $name == 'array')) {
  473. echo " ".(img_spacer('15px', '15px', 'background: '.escape($row['default_setting_value']).'; margin-right: 4px; vertical-align: middle; border: 1px solid '.(color_adjust($row['default_setting_value'], -0.18)).'; padding: -1px;'));
  474. echo "<span style=\"font-family: 'Courier New'; line-height: 6pt;\">".escape($row['default_setting_value'])."</span>\n";
  475. }
  476. else if ($category == 'users' && $subcategory == 'username_format' && $name == 'text') {
  477. echo " ".$text['option-username_format_'.$row['default_setting_value']]."\n";
  478. }
  479. else if ($category == 'recordings' && $subcategory == 'storage_type' && $name == 'text') {
  480. echo " ".$text['label-'.$row['default_setting_value']]."\n";
  481. }
  482. else if ($category == 'destinations' && $subcategory == 'dialplan_mode' && $name == 'text') {
  483. echo " ".$text['label-'.$row['default_setting_value']]."\n";
  484. }
  485. else if ($category == 'destinations' && $subcategory == 'select_mode' && $name == 'text') {
  486. echo " ".$text['label-'.$row['default_setting_value']]."\n";
  487. }
  488. else if ($category == 'voicemail' && ($subcategory == 'message_caller_id_number' || $subcategory == 'message_date_time') && $name == 'text') {
  489. echo " ".$text['label-'.$row['default_setting_value']]."\n";
  490. }
  491. else if ($row['default_setting_value'] == 'true' || $row['default_setting_value'] == 'false') {
  492. echo " ".$text['label-'.$row['default_setting_value']]."\n";
  493. }
  494. else {
  495. echo " ".escape($row['default_setting_value'])."\n";
  496. }
  497. echo " </td>\n";
  498. if (permission_exists('default_setting_edit')) {
  499. echo " <td class='no-link center'>\n";
  500. if (!empty($enabled_bold)) {
  501. echo button::create(['type'=>'submit','class'=>'link','style'=>'font-weight:bold', 'label'=>$text['label-'.$row['default_setting_enabled']],'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); list_form_submit('form_list')"]);
  502. }
  503. else {
  504. echo button::create(['type'=>'submit','class'=>'link','label'=>$text['label-'.$row['default_setting_enabled']],'title'=>$text['button-toggle'],'onclick'=>"list_self_check('checkbox_".$x."'); list_action_set('toggle'); list_form_submit('form_list')"]);
  505. }
  506. }
  507. else {
  508. echo " <td class='center' title=\"".escape($default_enabled)."\" style=\"".$setting_bold."\">\n";
  509. echo $text['label-'.$row['default_setting_enabled']];
  510. }
  511. echo " </td>\n";
  512. echo " <td class='description overflow hide-sm-dn' title=\"".escape($row['default_setting_description'])."\">".escape($row['default_setting_description'])."</td>\n";
  513. if (permission_exists('default_setting_edit') && $list_row_edit_button == 'true') {
  514. echo " <td class='action-button'>\n";
  515. echo button::create(['type'=>'button','title'=>$text['button-edit'],'icon'=>$_SESSION['theme']['button_icon_edit'],'link'=>$list_row_url]);
  516. echo " </td>\n";
  517. }
  518. echo "</tr>\n";
  519. //set the previous category
  520. $previous_default_setting_category = $row['default_setting_category'];
  521. $x++;
  522. }
  523. unset($default_settings);
  524. }
  525. echo "</table>\n";
  526. echo "<br />\n";
  527. echo "</div>\n";
  528. //echo "<div align='center'>".$paging_controls."</div>\n";
  529. echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
  530. echo "</form>\n";
  531. //include the footer
  532. require_once "resources/footer.php";
  533. ?>