provider_edit.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  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) 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('provider_add') || permission_exists('provider_edit')) {
  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. //connect to the database
  36. $database = database::new();
  37. //action add or update
  38. if (!empty($_REQUEST["id"]) && is_uuid($_REQUEST["id"])) {
  39. $action = "update";
  40. $provider_uuid = $_REQUEST["id"];
  41. $id = $_REQUEST["id"];
  42. $export = $_REQUEST["export"] ?? null;
  43. }
  44. else {
  45. $action = "add";
  46. }
  47. //get http post variables and set them to php variables
  48. if (!empty($_POST) && is_array($_POST)) {
  49. $provider_name = $_POST["provider_name"];
  50. $provider_settings = $_POST["provider_settings"];
  51. $provider_addresses = $_POST["provider_addresses"];
  52. $domain_uuid = $_POST["domain_uuid"];
  53. $provider_enabled = $_POST["provider_enabled"] ?? 'false';
  54. $provider_description = $_POST["provider_description"];
  55. }
  56. //process the user data and save it to the database
  57. if (!empty($_POST) && count($_POST) > 0 && (empty($_POST["persistformvar"]) || strlen($_POST["persistformvar"]) == 0)) {
  58. //validate the token
  59. $token = new token;
  60. if (!$token->validate($_SERVER['PHP_SELF'])) {
  61. message::add($text['message-invalid_token'],'negative');
  62. header('Location: providers.php');
  63. exit;
  64. }
  65. //process the http post data by submitted action
  66. if (!empty($_POST['action']) && strlen($_POST['action']) > 0) {
  67. //prepare the array(s)
  68. $x = 0;
  69. if (is_array($_POST['provider_settings'])) {
  70. foreach ($_POST['provider_settings'] as $row) {
  71. if (is_uuid($row['provider_setting_uuid']) && (!empty($row['checked']) && $row['checked'] === 'true')) {
  72. $array['providers'][$x]['checked'] = $row['checked'];
  73. $array['providers'][$x]['provider_settings'][]['provider_setting_uuid'] = $row['provider_setting_uuid'];
  74. $x++;
  75. }
  76. }
  77. }
  78. $x = 0;
  79. if (is_array($_POST['provider_addresses'])) {
  80. foreach ($_POST['provider_addresses'] as $row) {
  81. if (is_uuid($row['provider_address_uuid']) && (!empty($row['checked']) && $row['checked'] === 'true')) {
  82. $array['providers'][$x]['checked'] = $row['checked'];
  83. $array['providers'][$x]['provider_addresses'][]['provider_address_uuid'] = $row['provider_address_uuid'];
  84. $x++;
  85. }
  86. }
  87. }
  88. //send the array to the database class
  89. switch ($_POST['action']) {
  90. case 'copy':
  91. if (permission_exists('provider_add')) {
  92. $database->copy($array);
  93. }
  94. break;
  95. case 'delete':
  96. if (permission_exists('provider_delete')) {
  97. $database->delete($array);
  98. }
  99. break;
  100. case 'toggle':
  101. if (permission_exists('provider_update')) {
  102. $database->toggle($array);
  103. }
  104. break;
  105. }
  106. //redirect the user
  107. if (in_array($_POST['action'], array('copy', 'delete', 'toggle'))) {
  108. header('Location: provider_edit.php?id='.$id);
  109. exit;
  110. }
  111. }
  112. //check for all required data
  113. $msg = '';
  114. //if (strlen($provider_name) == 0) { $msg .= $text['message-required']." ".$text['label-provider_name']."<br>\n"; }
  115. //if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-domain_uuid']."<br>\n"; }
  116. //if (strlen($provider_enabled) == 0) { $msg .= $text['message-required']." ".$text['label-provider_enabled']."<br>\n"; }
  117. //if (strlen($provider_description) == 0) { $msg .= $text['message-required']." ".$text['label-provider_description']."<br>\n"; }
  118. if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
  119. require_once "resources/header.php";
  120. require_once "resources/persist_form_var.php";
  121. echo "<div align='center'>\n";
  122. echo "<table><tr><td>\n";
  123. echo $msg."<br>";
  124. echo "</td></tr></table>\n";
  125. persistformvar($_POST);
  126. echo "</div>\n";
  127. require_once "resources/footer.php";
  128. return;
  129. }
  130. //add the provider_uuid
  131. if (!is_uuid($_POST["provider_uuid"])) {
  132. $provider_uuid = uuid();
  133. }
  134. //prepare the array
  135. $array['providers'][0]['provider_uuid'] = $provider_uuid;
  136. $array['providers'][0]['domain_uuid'] = is_uuid($domain_uuid) ? $domain_uuid : null;
  137. $array['providers'][0]['provider_name'] = $provider_name;
  138. $array['providers'][0]['provider_enabled'] = $provider_enabled;
  139. $array['providers'][0]['provider_description'] = $provider_description;
  140. $y = 0;
  141. if (is_array($provider_settings)) {
  142. foreach ($provider_settings as $row) {
  143. if (strlen($row['provider_setting_category']) > 0) {
  144. $array['providers'][0]['provider_settings'][$y]['application_uuid'] = $row["application_uuid"];
  145. $array['providers'][0]['provider_settings'][$y]['provider_setting_uuid'] = $row["provider_setting_uuid"];
  146. $array['providers'][0]['provider_settings'][$y]['provider_setting_category'] = $row["provider_setting_category"];
  147. $array['providers'][0]['provider_settings'][$y]['provider_setting_subcategory'] = $row["provider_setting_subcategory"];
  148. $array['providers'][0]['provider_settings'][$y]['provider_setting_type'] = $row["provider_setting_type"];
  149. $array['providers'][0]['provider_settings'][$y]['provider_setting_name'] = $row["provider_setting_name"];
  150. $array['providers'][0]['provider_settings'][$y]['provider_setting_value'] = $row["provider_setting_value"];
  151. //$array['providers'][0]['provider_settings'][$y]['provider_setting_order'] = $row["provider_setting_order"];
  152. $array['providers'][0]['provider_settings'][$y]['provider_setting_enabled'] = $row["provider_setting_enabled"];
  153. $array['providers'][0]['provider_settings'][$y]['provider_setting_description'] = $row["provider_setting_description"];
  154. $y++;
  155. }
  156. }
  157. }
  158. $y++;
  159. if (is_array($provider_addresses)) {
  160. foreach ($provider_addresses as $row) {
  161. if (strlen($row['provider_address_cidr']) > 0) {
  162. $array['providers'][0]['provider_addresses'][$y]['provider_address_uuid'] = $row["provider_address_uuid"];
  163. $array['providers'][0]['provider_addresses'][$y]['provider_address_cidr'] = $row["provider_address_cidr"];
  164. $array['providers'][0]['provider_addresses'][$y]['provider_address_enabled'] = $row["provider_address_enabled"];
  165. $array['providers'][0]['provider_addresses'][$y]['provider_address_description'] = $row["provider_address_description"];
  166. $y++;
  167. }
  168. }
  169. }
  170. //save the data
  171. $database->app_name = 'providers';
  172. $database->app_uuid = '35187839-237e-4271-b8a1-9b9c45dc8833';
  173. $database->save($array);
  174. //redirect the user
  175. if (isset($action)) {
  176. if ($action == "add") {
  177. $_SESSION["message"] = $text['message-add'];
  178. }
  179. if ($action == "update") {
  180. $_SESSION["message"] = $text['message-update'];
  181. }
  182. //header('Location: providers.php');
  183. header('Location: provider_edit.php?id='.urlencode($provider_uuid));
  184. return;
  185. }
  186. }
  187. //pre-populate the form
  188. if (!empty($_GET) && is_array($_GET) && (empty($_POST["persistformvar"]) || $_POST["persistformvar"] != "true")) {
  189. $sql = "select ";
  190. $sql .= " provider_uuid, ";
  191. $sql .= " provider_name, ";
  192. //$sql .= " provider_settings, ";
  193. //$sql .= " provider_addresses, ";
  194. $sql .= " domain_uuid, ";
  195. $sql .= " cast(provider_enabled as text), ";
  196. $sql .= " provider_description ";
  197. $sql .= "from v_providers ";
  198. $sql .= "where provider_uuid = :provider_uuid ";
  199. //$sql .= "and domain_uuid = :domain_uuid ";
  200. //$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
  201. $parameters['provider_uuid'] = $provider_uuid;
  202. $row = $database->select($sql, $parameters, 'row');
  203. if (is_array($row) && @sizeof($row) != 0) {
  204. $provider_name = $row["provider_name"];
  205. //$provider_settings = $row["provider_settings"];
  206. //$provider_addresses = $row["provider_addresses"];
  207. $domain_uuid = $row["domain_uuid"];
  208. $provider_enabled = $row["provider_enabled"];
  209. $provider_description = $row["provider_description"];
  210. }
  211. unset($sql, $parameters, $row);
  212. }
  213. //get the child data
  214. if (!empty($provider_uuid) && is_uuid($provider_uuid)) {
  215. $sql = "select ";
  216. $sql .= " provider_address_uuid, ";
  217. $sql .= " provider_address_cidr, ";
  218. $sql .= " cast(provider_address_enabled as text), ";
  219. $sql .= " provider_address_description ";
  220. $sql .= "from v_provider_addresses ";
  221. $sql .= "where provider_uuid = :provider_uuid ";
  222. $sql .= "order by provider_address_cidr asc ";
  223. //$sql .= "and domain_uuid = '".$domain_uuid."' ";
  224. //$parameters['domain_uuid'] = $_SESSION['domain_uuid'];
  225. $parameters['provider_uuid'] = $provider_uuid;
  226. $provider_addresses = $database->select($sql, $parameters, 'all');
  227. unset ($sql, $parameters);
  228. }
  229. //add the $provider_address_uuid
  230. if (empty($provider_address_uuid) || !is_uuid($provider_address_uuid)) {
  231. $provider_address_uuid = uuid();
  232. }
  233. //add an empty row
  234. //$x = is_array($provider_addresses) ? count($provider_addresses) : 0;
  235. //$provider_addresses[$x]['domain_uuid'] = $_SESSION['domain_uuid'];
  236. //$provider_addresses[$x]['provider_uuid'] = $provider_uuid;
  237. //$provider_addresses[$x]['provider_address_uuid'] = uuid();
  238. //$provider_addresses[$x]['provider_address_cidr'] = '';
  239. //$provider_addresses[$x]['provider_address_enabled'] = '';
  240. //$provider_addresses[$x]['provider_address_description'] = '';
  241. //get the child data
  242. if (!empty($provider_uuid) && is_uuid($provider_uuid)) {
  243. $sql = "select ";
  244. $sql .= " provider_setting_uuid, ";
  245. $sql .= " application_uuid, ";
  246. $sql .= " provider_setting_category, ";
  247. $sql .= " provider_setting_subcategory, ";
  248. $sql .= " provider_setting_type, ";
  249. $sql .= " provider_setting_name, ";
  250. $sql .= " provider_setting_value, ";
  251. //$sql .= " provider_setting_order, ";
  252. $sql .= " cast(provider_setting_enabled as text), ";
  253. $sql .= " provider_setting_description ";
  254. $sql .= "from v_provider_settings ";
  255. $sql .= "where provider_uuid = :provider_uuid ";
  256. $sql .= "order by provider_setting_category, provider_setting_subcategory, provider_setting_name asc ";
  257. $parameters['provider_uuid'] = $provider_uuid;
  258. $provider_settings = $database->select($sql, $parameters, 'all');
  259. unset ($sql, $parameters);
  260. }
  261. //add the $provider_setting_uuid
  262. if (empty($provider_setting_uuid) || !is_uuid($provider_setting_uuid)) {
  263. $provider_setting_uuid = uuid();
  264. }
  265. //export provider settings
  266. if (isset($export) && $export == 'true') {
  267. //prepare the array
  268. $y = 0;
  269. $array['providers'][$y]['provider_uuid'] = $provider_uuid;
  270. $array['providers'][$y]['provider_name'] = $provider_name;
  271. $array['providers'][$y]['provider_enabled'] = $provider_enabled;
  272. $array['providers'][$y]['provider_description'] = $provider_description;
  273. if (is_array($provider_settings)) {
  274. $y = 0;
  275. foreach ($provider_settings as $row) {
  276. if (strlen($row['provider_setting_category']) > 0) {
  277. //export values except authentication details
  278. switch ($row['provider_setting_name']) {
  279. case "http_auth_username":
  280. $provider_setting_value = '';
  281. break;
  282. case "http_auth_password":
  283. $provider_setting_value = '';
  284. break;
  285. default:
  286. $provider_setting_value = $row["provider_setting_value"];
  287. }
  288. //add to the array
  289. $array['provider_settings'][$y]['provider_uuid'] = $provider_uuid;
  290. $array['provider_settings'][$y]['application_uuid'] = $row["application_uuid"];
  291. $array['provider_settings'][$y]['provider_setting_uuid'] = $row["provider_setting_uuid"];
  292. $array['provider_settings'][$y]['provider_setting_category'] = $row["provider_setting_category"];
  293. $array['provider_settings'][$y]['provider_setting_subcategory'] = $row["provider_setting_subcategory"];
  294. $array['provider_settings'][$y]['provider_setting_type'] = $row["provider_setting_type"];
  295. $array['provider_settings'][$y]['provider_setting_name'] = $row["provider_setting_name"];
  296. $array['provider_settings'][$y]['provider_setting_value'] = $provider_setting_value;
  297. $array['provider_settings'][$y]['provider_setting_order'] = $row["provider_setting_order"];
  298. $array['provider_settings'][$y]['provider_setting_enabled'] = $row["provider_setting_enabled"];
  299. $array['provider_settings'][$y]['provider_setting_description'] = $row["provider_setting_description"];
  300. $y++;
  301. }
  302. }
  303. }
  304. if (is_array($provider_addresses)) {
  305. $y = 0;
  306. foreach ($provider_addresses as $row) {
  307. if (strlen($row['provider_address_cidr']) > 0) {
  308. $array['provider_addresses'][$y]['provider_uuid'] = $provider_uuid;
  309. $array['provider_addresses'][$y]['provider_address_uuid'] = $row["provider_address_uuid"];
  310. $array['provider_addresses'][$y]['provider_address_cidr'] = $row["provider_address_cidr"];
  311. $array['provider_addresses'][$y]['provider_address_enabled'] = $row["provider_address_enabled"];
  312. $array['provider_addresses'][$y]['provider_address_description'] = $row["provider_address_description"];
  313. $y++;
  314. }
  315. }
  316. }
  317. //view_array($array);
  318. echo "<textarea style=\"width: 100%; max-width: 100%; height: 100%; max-height: 100%;\">\n";
  319. if (is_array($array['providers'])) {
  320. echo "\$x = 0;\n";
  321. foreach ($array['providers'] as $row) {
  322. foreach ($row as $key => $value) {
  323. echo "\$array['providers'][\$x]['{$key}'] = '{$value}';\n";
  324. }
  325. }
  326. }
  327. if (is_array($array['provider_settings'] )) {
  328. echo "\$y = 0;\n";
  329. $count = count($array['provider_settings']);
  330. $i = 1;
  331. foreach ($array['provider_settings'] as $row) {
  332. foreach ($row as $key => $value) {
  333. echo "\$array['providers'][\$x]['provider_settings'][\$y]['{$key}'] = '{$value}';\n";
  334. }
  335. if ($i < $count) {
  336. echo "\$y++;\n";
  337. }
  338. $i++;
  339. }
  340. }
  341. if (is_array($array['provider_addresses'] )) {
  342. $y = 0;
  343. echo "\$y = 0;\n";
  344. $count = count($array['provider_addresses']);
  345. $i = 1;
  346. foreach ($array['provider_addresses'] as $row) {
  347. foreach ($row as $key => $value) {
  348. echo "\$array['providers'][\$x]['provider_addresses'][\$y]['{$key}'] = '{$value}';\n";
  349. }
  350. if ($i < $count) {
  351. echo "\$y++;\n";
  352. }
  353. $i++;
  354. }
  355. }
  356. echo "</textarea>\n";
  357. exit;
  358. }
  359. //add an empty row
  360. //$x = is_array($provider_settings) ? count($provider_settings) : 0;
  361. //add an empty row(s) to the provider settings array
  362. if (!empty($provider_settings) && is_array($provider_settings) && count($provider_settings) == 0) {
  363. if (isset($_SESSION['providers']['setting_add_rows']['numeric'])) {
  364. $rows = $_SESSION['providers']['setting_add_rows']['numeric'];
  365. }
  366. else {
  367. $rows = 15;
  368. }
  369. $id = 0;
  370. }
  371. if (!empty($provider_settings) && is_array($provider_settings) && count($provider_settings) > 0) {
  372. if (isset($_SESSION['providers']['setting_edit_rows']['numeric'])) {
  373. $rows = $_SESSION['providers']['setting_edit_rows']['numeric'];
  374. }
  375. else {
  376. $rows = 1;
  377. }
  378. $id = count($provider_settings)+1;
  379. }
  380. if (!empty($rows) && is_array($rows) && @sizeof($rows) != 0) {
  381. for ($x = 0; $x < $rows; $x++) {
  382. $provider_settings[$id]['domain_uuid'] = null;
  383. $provider_settings[$id]['provider_uuid'] = $provider_uuid;
  384. $provider_settings[$id]['provider_setting_uuid'] = uuid();
  385. $provider_settings[$id]['provider_setting_category'] = '';
  386. $provider_settings[$id]['provider_setting_subcategory'] = '';
  387. $provider_settings[$id]['provider_setting_type'] = '';
  388. $provider_settings[$id]['provider_setting_name'] = '';
  389. $provider_settings[$id]['provider_setting_value'] = '';
  390. //$provider_settings[$id]['provider_setting_order'] = '';
  391. $provider_settings[$id]['provider_setting_enabled'] = 'true';
  392. $provider_settings[$id]['provider_setting_description'] = '';
  393. $id++;
  394. }
  395. }
  396. //add an empty row(s) to the provider addresses array
  397. if (!empty($provider_addresses) && is_array($provider_addresses) && count($provider_addresses) == 0) {
  398. if (isset($_SESSION['providers']['address_add_rows']['numeric'])) {
  399. $rows = $_SESSION['providers']['address_add_rows']['numeric'];
  400. }
  401. else {
  402. $rows = 5;
  403. }
  404. $id = 0;
  405. }
  406. if (!empty($provider_addresses) && is_array($provider_addresses) && count($provider_addresses) > 0) {
  407. if (isset($_SESSION['providers']['address_edit_rows']['numeric'])) {
  408. $rows = $_SESSION['providers']['address_edit_rows']['numeric'];
  409. }
  410. else {
  411. $rows = 1;
  412. }
  413. $id = count($provider_addresses)+1;
  414. }
  415. if (!empty($rows) && is_array($rows) && @sizeof($rows) != 0) {
  416. for ($x = 0; $x < $rows; $x++) {
  417. $provider_addresses[$id]['domain_uuid'] = is_uuid($domain_uuid) ? $domain_uuid : null;
  418. $provider_addresses[$id]['provider_uuid'] = $provider_uuid;
  419. $provider_addresses[$id]['provider_address_uuid'] = uuid();
  420. $provider_addresses[$id]['provider_address_cidr'] = '';
  421. $provider_addresses[$id]['provider_address_enabled'] = 'true';
  422. $provider_addresses[$id]['provider_address_description'] = '';
  423. $id++;
  424. }
  425. }
  426. //get the $apps array from the installed apps from the core and mod directories
  427. $config_list = glob($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH."/*/*/app_config.php");
  428. $x = 0;
  429. foreach ($config_list as &$config_path) {
  430. include($config_path);
  431. $x++;
  432. }
  433. //create token
  434. $object = new token;
  435. $token = $object->create($_SERVER['PHP_SELF']);
  436. //show the header
  437. $document['title'] = $text['title-provider'];
  438. require_once "resources/header.php";
  439. //show the content
  440. echo "<form name='frm' id='frm' method='post' action=''>\n";
  441. echo "<input class='formfld' type='hidden' name='provider_uuid' value='".escape($provider_uuid ?? '')."'>\n";
  442. echo "<div class='action_bar' id='action_bar'>\n";
  443. echo " <div class='heading'><b>".$text['title-provider']."</b></div>\n";
  444. echo " <div class='actions'>\n";
  445. echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','collapse'=>'hide-xs','style'=>'margin-right: 15px;','link'=>'providers.php']);
  446. if ($action == 'update') {
  447. if (permission_exists('provider_setting_add')) {
  448. echo button::create(['type'=>'button','label'=>$text['button-copy'],'icon'=>$_SESSION['theme']['button_icon_copy'],'id'=>'btn_copy','name'=>'btn_copy','style'=>'display: none;','onclick'=>"modal_open('modal-copy','btn_copy');"]);
  449. }
  450. if (permission_exists('provider_setting_delete')) {
  451. echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display: none; margin-right: 15px;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
  452. }
  453. }
  454. echo button::create(['type'=>'submit','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'id'=>'btn_save','collapse'=>'hide-xs']);
  455. echo " </div>\n";
  456. echo " <div style='clear: both;'></div>\n";
  457. echo "</div>\n";
  458. echo $text['description-providers']."\n";
  459. echo "<br><br>\n";
  460. if ($action == 'update') {
  461. if (permission_exists('provider_add')) {
  462. echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'copy','onclick'=>"modal_close();"])]);
  463. }
  464. if (permission_exists('provider_delete')) {
  465. echo modal::create(['id'=>'modal-delete','type'=>'delete','actions'=>button::create(['type'=>'submit','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_delete','style'=>'float: right; margin-left: 15px;','collapse'=>'never','name'=>'action','value'=>'delete','onclick'=>"modal_close();"])]);
  466. }
  467. }
  468. echo "<div class='card'>\n";
  469. echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>\n";
  470. echo "<tr>\n";
  471. echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  472. echo " ".$text['label-provider_name']."\n";
  473. echo "</td>\n";
  474. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  475. echo " <input class='formfld' type='text' name='provider_name' maxlength='255' value='".escape($provider_name ?? '')."'>\n";
  476. echo "<br>\n";
  477. echo $text['description-provider_name']."\n";
  478. echo "</td>\n";
  479. echo "</tr>\n";
  480. echo "<tr>\n";
  481. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  482. echo " ".$text['label-provider_settings']."\n";
  483. echo "</td>\n";
  484. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  485. echo " <table>\n";
  486. echo " <tr>\n";
  487. echo " <td class='vtable'>".$text['label-application']."</td>\n";
  488. echo " <td class='vtable'>".$text['label-provider_setting_category']."</td>\n";
  489. echo " <td class='vtable'>".$text['label-provider_setting_subcategory']."</td>\n";
  490. echo " <td class='vtable'>".$text['label-provider_setting_type']."</td>\n";
  491. echo " <td class='vtable'>".$text['label-provider_setting_name']."</td>\n";
  492. echo " <td class='vtable'>".$text['label-provider_setting_value']."</td>\n";
  493. //echo " <td class='vtable'>".$text['label-provider_setting_order']."</td>\n";
  494. echo " <td class='vtable'>".$text['label-provider_setting_enabled']."</td>\n";
  495. echo " <td class='vtable'>".$text['label-provider_setting_description']."</td>\n";
  496. //if (is_array($provider_settings) && @sizeof($provider_settings) > 1 && permission_exists('provider_setting_delete')) {
  497. // echo " <td class='vtable edit_delete_checkbox_all' onmouseover=\"swap_display('delete_label_details', 'delete_toggle_details');\" onmouseout=\"swap_display('delete_label_details', 'delete_toggle_details');\">\n";
  498. // echo " <span id='delete_label_details'>".$text['label-action']."</span>\n";
  499. // echo " <span id='delete_toggle_details'><input type='checkbox' id='checkbox_all_details' name='checkbox_all' onclick=\"edit_all_toggle('details'); checkbox_on_change(this);\"></span>\n";
  500. // echo " </td>\n";
  501. //}
  502. echo " </tr>\n";
  503. // echo "<tr><td colspan='50'>";
  504. // view_array($apps, 0);
  505. // echo "</td></tr>\n";
  506. $x = 0;
  507. $provider_settings[] = null; // blank row
  508. if (!empty($provider_settings) && is_array($provider_settings) && @sizeof($provider_settings) != 0) {
  509. foreach ($provider_settings as $row) {
  510. echo " <tr>\n";
  511. //echo " <input type='hidden' name='provider_settings[$x][domain_uuid]' value=\"".escape($row["domain_uuid"])."\">\n";
  512. echo " <input type='hidden' name='provider_settings[$x][provider_uuid]' value=\"".escape($row["provider_uuid"] ?? $provider_uuid ?? uuid())."\">\n";
  513. echo " <input type='hidden' name='provider_settings[$x][provider_setting_uuid]' value=\"".escape($row["provider_setting_uuid"] ?? uuid())."\">\n";
  514. echo " <td class='formfld'>\n";
  515. echo " <select class='formfld' name='provider_settings[$x][application_uuid]'>\n";
  516. echo " <option value=''></option>\n";
  517. if (!empty($apps) && is_array($apps) && @sizeof($apps) != 0) {
  518. foreach ($apps as $app) {
  519. if (!empty($app['uuid']) && is_uuid($app['uuid'])) {
  520. echo " <option value='".$app['uuid']."' ".(!empty($row['application_uuid']) && $app['uuid'] == $row['application_uuid'] ? "selected='selected'" : null).">".escape($app['name'] ?? '')."</option>\n";
  521. }
  522. }
  523. }
  524. echo " </select>\n";
  525. echo " </td>\n";
  526. echo " <td class='formfld'>\n";
  527. echo " <input class='formfld' style='width: 120px;' type='text' name='provider_settings[$x][provider_setting_category]' maxlength='255' value=\"".escape($row["provider_setting_category"] ?? '')."\">\n";
  528. echo " </td>\n";
  529. echo " <td class='formfld'>\n";
  530. echo " <input class='formfld' style='width: 120px;' type='text' name='provider_settings[$x][provider_setting_subcategory]' maxlength='255' value=\"".escape($row["provider_setting_subcategory"] ?? '')."\">\n";
  531. echo " </td>\n";
  532. echo " <td class='formfld'>\n";
  533. echo " <select class='formfld' name='provider_settings[$x][provider_setting_type]'\">\n";
  534. if ($row["provider_setting_type"] == "text") {
  535. echo " <option value='text' selected='selected'>text</option>\n";
  536. }
  537. else {
  538. echo " <option value='text'>text</option>\n";
  539. }
  540. if ($row["provider_setting_type"] == "array") {
  541. echo " <option value='array' selected='selected'>array</option>\n";
  542. }
  543. else {
  544. echo " <option value='array'>array</option>\n";
  545. }
  546. echo " </select>\n";
  547. echo " </td>\n";
  548. echo " <td class='formfld'>\n";
  549. echo " <input class='formfld' type='text' name='provider_settings[$x][provider_setting_name]' maxlength='255' value=\"".escape($row["provider_setting_name"] ?? '')."\">\n";
  550. echo " </td>\n";
  551. echo " <td class='formfld'>\n";
  552. if (substr($row["provider_setting_name"] ?? '', -8) == 'username' || substr($row["provider_setting_name"] ?? '', -8) == 'password') {
  553. echo " <input class='formfld' type='password' name='provider_settings[$x][provider_setting_value]' autocomplete='new-password' onmouseover=\"this.type='text';\" onfocus=\"this.type='text';\" onmouseout=\"if (!$(this).is(':focus')) { this.type='password'; }\" onblur=\"this.type='password';\" maxlength='255' value=\"".escape($row["provider_setting_value"] ?? '')."\">\n";
  554. }
  555. else {
  556. echo " <input class='formfld' type='text' name='provider_settings[$x][provider_setting_value]' maxlength='255' value=\"".escape($row["provider_setting_value"] ?? '')."\">\n";
  557. }
  558. echo " </td>\n";
  559. /*
  560. echo " <td class='formfld'>\n";
  561. echo " <select name='provider_settings[$x][provider_setting_order]' class='formfld'>\n";
  562. $i=0;
  563. while ($i<=999) {
  564. $selected = ($i == $row["provider_setting_order"]) ? "selected" : null;
  565. if (strlen($i) == 1) {
  566. echo " <option value='00$i' ".$selected.">00$i</option>\n";
  567. }
  568. if (strlen($i) == 2) {
  569. echo " <option value='0$i' ".$selected.">0$i</option>\n";
  570. }
  571. if (strlen($i) == 3) {
  572. echo " <option value='$i' ".$selected.">$i</option>\n";
  573. }
  574. $i++;
  575. }
  576. echo " </select>\n";
  577. echo " </td>\n";
  578. */
  579. echo " <td class='formfld'>\n";
  580. echo " <select class='formfld' name='provider_settings[$x][provider_setting_enabled]'>\n";
  581. echo " <option value='true'>".$text['label-true']."</option>\n";
  582. echo " <option value='false' ".(empty($row['provider_setting_enabled']) || $row['provider_setting_enabled'] == "false" ? "selected='selected'" : null).">".$text['label-false']."</option>\n";
  583. echo " </select>\n";
  584. echo " </td>\n";
  585. echo " <td class='formfld'>\n";
  586. echo " <input class='formfld' type='text' name='provider_settings[$x][provider_setting_description]' maxlength='255' value=\"".escape($row["provider_setting_description"] ?? '')."\">\n";
  587. echo " </td>\n";
  588. if (is_array($provider_settings) && @sizeof($provider_settings) > 1 && permission_exists('provider_setting_delete')) {
  589. if (!empty($row['provider_setting_uuid']) && is_uuid($row['provider_setting_uuid'])) {
  590. echo " <td class='vtable' style='text-align: center; padding-bottom: 3px;'>\n";
  591. echo " <input type='checkbox' name='provider_settings[".$x."][checked]' value='true' class='chk_delete checkbox_details' onclick=\"checkbox_on_change(this);\">\n";
  592. echo " </td>\n";
  593. }
  594. else {
  595. echo " <td></td>\n";
  596. }
  597. }
  598. echo " </tr>\n";
  599. $x++;
  600. }
  601. }
  602. echo " </table>\n";
  603. echo "</td>\n";
  604. echo "</tr>\n";
  605. echo "<tr>\n";
  606. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  607. echo " ".$text['label-provider_addresses']."\n";
  608. echo "</td>\n";
  609. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  610. echo " <table>\n";
  611. echo " <tr>\n";
  612. echo " <td class='vtable'>".$text['label-provider_address_cidr']."</td>\n";
  613. echo " <td class='vtable'>".$text['label-provider_address_enabled']."</td>\n";
  614. echo " <td class='vtable'>".$text['label-provider_address_description']."</td>\n";
  615. //if (is_array($provider_addresses) && @sizeof($provider_addresses) > 1 && permission_exists('provider_address_delete')) {
  616. // echo " <td class='vtable edit_delete_checkbox_all' onmouseover=\"swap_display('delete_label_details', 'delete_toggle_details');\" onmouseout=\"swap_display('delete_label_details', 'delete_toggle_details');\">\n";
  617. // echo " <span id='delete_label_details'>".$text['label-action']."</span>\n";
  618. // echo " <span id='delete_toggle_details'><input type='checkbox' id='checkbox_all_details' name='checkbox_all' onclick=\"edit_all_toggle('details'); checkbox_on_change(this);\"></span>\n";
  619. // echo " </td>\n";
  620. //}
  621. echo " </tr>\n";
  622. $x = 0;
  623. $provider_addresses[] = null; // blank row
  624. if (!empty($provider_addresses) && is_array($provider_addresses) && @sizeof($provider_addresses) != 0) {
  625. foreach ($provider_addresses as $row) {
  626. echo " <tr>\n";
  627. echo " <input type='hidden' name='provider_addresses[$x][domain_uuid]' value=\"".escape($row["domain_uuid"] ?? '')."\">\n";
  628. echo " <input type='hidden' name='provider_addresses[$x][provider_uuid]' value=\"".escape($row["provider_uuid"] ?? $provider_uuid ?? uuid())."\">\n";
  629. echo " <input type='hidden' name='provider_addresses[$x][provider_address_uuid]' value=\"".escape($row["provider_address_uuid"] ?? uuid())."\">\n";
  630. echo " <td class='formfld'>\n";
  631. echo " <input class='formfld' type='text' name='provider_addresses[$x][provider_address_cidr]' maxlength='255' value=\"".escape($row["provider_address_cidr"] ?? '')."\">\n";
  632. echo " </td>\n";
  633. echo " <td class='formfld'>\n";
  634. echo " <select class='formfld' name='provider_addresses[$x][provider_address_enabled]'>\n";
  635. echo " <option value='true'>".$text['label-true']."</option>\n";
  636. echo " <option value='false' ".(empty($row['provider_address_enabled']) || $row['provider_address_enabled'] == "false" ? "selected='selected'" : null).">".$text['label-false']."</option>\n";
  637. echo " </select>\n";
  638. echo " </td>\n";
  639. echo " <td class='formfld'>\n";
  640. echo " <input class='formfld' type='text' name='provider_addresses[$x][provider_address_description]' maxlength='255' value=\"".escape($row["provider_address_description"] ?? '')."\">\n";
  641. echo " </td>\n";
  642. if (is_array($provider_addresses) && @sizeof($provider_addresses) > 1 && permission_exists('provider_address_delete')) {
  643. if (!empty($row['provider_address_uuid']) && is_uuid($row['provider_address_uuid'])) {
  644. echo " <td class='vtable' style='text-align: center; padding-bottom: 3px;'>\n";
  645. echo " <input type='checkbox' name='provider_addresses[".$x."][checked]' value='true' class='chk_delete checkbox_details' onclick=\"checkbox_on_change(this);\">\n";
  646. echo " </td>\n";
  647. }
  648. else {
  649. echo " <td></td>\n";
  650. }
  651. }
  652. echo " </tr>\n";
  653. $x++;
  654. }
  655. }
  656. echo " </table>\n";
  657. echo "</td>\n";
  658. echo "</tr>\n";
  659. echo "<tr>\n";
  660. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  661. echo " ".$text['label-domain_uuid']."\n";
  662. echo "</td>\n";
  663. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  664. echo " <select class='formfld' name='domain_uuid'>\n";
  665. echo " <option value='' ".(empty($domain_uuid) || !is_uuid($domain_uuid) ? "selected='selected'" : null).">".$text['label-global']."</option>\n";
  666. foreach ($_SESSION['domains'] as $row) {
  667. echo " <option value='".$row['domain_uuid']."' ".($row['domain_uuid'] == $domain_uuid ? "selected='selected'" : null).">".escape($row['domain_name'])."</option>\n";
  668. }
  669. echo " </select>\n";
  670. echo "<br>\n";
  671. echo ($text['description-domain_uuid'] ?? '')."\n";
  672. echo "</td>\n";
  673. echo "</tr>\n";
  674. echo "<tr>\n";
  675. echo "<td class='vncellreq' valign='top' align='left' nowrap='nowrap'>\n";
  676. echo " ".$text['label-provider_enabled']."\n";
  677. echo "</td>\n";
  678. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  679. if (substr($_SESSION['theme']['input_toggle_style']['text'], 0, 6) == 'switch') {
  680. echo " <label class='switch'>\n";
  681. echo " <input type='checkbox' id='provider_enabled' name='provider_enabled' value='true' ".(!empty($provider_enabled) && $provider_enabled == 'true' ? "checked='checked'" : null).">\n";
  682. echo " <span class='slider'></span>\n";
  683. echo " </label>\n";
  684. }
  685. else {
  686. echo " <select class='formfld' id='provider_enabled' name='provider_enabled'>\n";
  687. echo " <option value='true'>".$text['option-true']."</option>\n";
  688. echo " <option value='false' ".(!empty($provider_enabled) && $provider_enabled == 'false' ? "selected='selected'" : null).">".$text['option-false']."</option>\n";
  689. echo " </select>\n";
  690. }
  691. echo "</td>\n";
  692. echo "</tr>\n";
  693. echo "<tr>\n";
  694. echo "<td class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
  695. echo " ".$text['label-provider_description']."\n";
  696. echo "</td>\n";
  697. echo "<td class='vtable' style='position: relative;' align='left'>\n";
  698. echo " <textarea class='formfld' name='provider_description' style='width: 185px; height: 80px;'>".($provider_description ?? '')."</textarea>\n";
  699. echo "<br>\n";
  700. echo $text['description-provider_description']."\n";
  701. echo "</td>\n";
  702. echo "</tr>\n";
  703. echo "</table>";
  704. echo "</div>\n";
  705. echo "<br><br>";
  706. echo "<input type='hidden' name='".$token['name']."' value='".$token['hash']."'>\n";
  707. echo "</form>";
  708. //include the footer
  709. require_once "resources/footer.php";
  710. ?>