default_settings.php 29 KB

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