diff --git a/app/extension_settings/app_config.php b/app/extension_settings/app_config.php
new file mode 100755
index 0000000000..f73635a368
--- /dev/null
+++ b/app/extension_settings/app_config.php
@@ -0,0 +1,87 @@
+
\ No newline at end of file
diff --git a/app/extension_settings/app_defaults.php b/app/extension_settings/app_defaults.php
new file mode 100755
index 0000000000..adadacce42
--- /dev/null
+++ b/app/extension_settings/app_defaults.php
@@ -0,0 +1,7 @@
+
diff --git a/app/extension_settings/app_languages.php b/app/extension_settings/app_languages.php
new file mode 100755
index 0000000000..24625e19ea
--- /dev/null
+++ b/app/extension_settings/app_languages.php
@@ -0,0 +1,302 @@
+
\ No newline at end of file
diff --git a/app/extension_settings/extension_setting_edit.php b/app/extension_settings/extension_setting_edit.php
new file mode 100755
index 0000000000..d0ef9ab662
--- /dev/null
+++ b/app/extension_settings/extension_setting_edit.php
@@ -0,0 +1,362 @@
+
+ Portions created by the Initial Developer are Copyright (C) 2021
+ the Initial Developer. All Rights Reserved.
+*/
+
+//includes
+ require_once "root.php";
+ require_once "resources/require.php";
+ require_once "resources/check_auth.php";
+
+//check permissions
+ if (permission_exists('extension_setting_add') || permission_exists('extension_setting_edit')) {
+ //access granted
+ }
+ else {
+ echo "access denied";
+ exit;
+ }
+
+//add multi-lingual support
+ $language = new text;
+ $text = $language->get();
+
+//action add or update
+ if (is_uuid($_REQUEST["id"])) {
+ $action = "update";
+ $extension_setting_uuid = $_REQUEST["id"];
+ $id = $_REQUEST["id"];
+ }
+ else {
+ $action = "add";
+ }
+
+//get the extension id
+ if (is_uuid($_REQUEST["extension_uuid"])) {
+ $extension_uuid = $_REQUEST["extension_uuid"];
+ }
+
+//get http post variables and set them to php variables
+ if (is_array($_POST)) {
+ $domain_uuid = $_POST["domain_uuid"];
+ $extension_setting_type = $_POST["extension_setting_type"];
+ $extension_setting_name = $_POST["extension_setting_name"];
+ $extension_setting_value = $_POST["extension_setting_value"];
+ $extension_setting_enabled = $_POST["extension_setting_enabled"];
+ $extension_setting_description = $_POST["extension_setting_description"];
+ }
+
+//process the user data and save it to the database
+ if (count($_POST) > 0 && strlen($_POST["persistformvar"]) == 0) {
+
+ //validate the token
+ $token = new token;
+ if (!$token->validate($_SERVER['PHP_SELF'])) {
+ message::add($text['message-invalid_token'],'negative');
+ header('Location: extension_settings.php?id='.$extension_uuid);
+ exit;
+ }
+
+ //process the http post data by submitted action
+ if ($_POST['action'] != '' && strlen($_POST['action']) > 0) {
+
+ //prepare the array(s)
+ //send the array to the database class
+ switch ($_POST['action']) {
+ case 'copy':
+ if (permission_exists('extension_setting_add')) {
+ $obj = new database;
+ $obj->copy($array);
+ }
+ break;
+ case 'delete':
+ if (permission_exists('extension_setting_delete')) {
+ $obj = new database;
+ $obj->delete($array);
+ }
+ break;
+ case 'toggle':
+ if (permission_exists('extension_setting_update')) {
+ $obj = new database;
+ $obj->toggle($array);
+ }
+ break;
+ }
+
+ //redirect the user
+ if (in_array($_POST['action'], array('copy', 'delete', 'toggle')) && is_uuid($id) && is_uuid($extension_uuid)) {
+ header('Location: extension_setting_edit.php?id='.$id.'&extension_uuid='.$extension_uuid);
+ exit;
+ }
+ }
+
+ //check for all required data
+ $msg = '';
+ //if (strlen($domain_uuid) == 0) { $msg .= $text['message-required']." ".$text['label-domain_uuid']."
\n"; }
+ if (strlen($extension_setting_type) == 0) { $msg .= $text['message-required']." ".$text['label-extension_setting_type']."
\n"; }
+ if (strlen($extension_setting_name) == 0) { $msg .= $text['message-required']." ".$text['label-extension_setting_name']."
\n"; }
+ //if (strlen($extension_setting_value) == 0) { $msg .= $text['message-required']." ".$text['label-extension_setting_value']."
\n"; }
+ if (strlen($extension_setting_enabled) == 0) { $msg .= $text['message-required']." ".$text['label-extension_setting_enabled']."
\n"; }
+ //if (strlen($extension_setting_description) == 0) { $msg .= $text['message-required']." ".$text['label-extension_setting_description']."
\n"; }
+ if (strlen($msg) > 0 && strlen($_POST["persistformvar"]) == 0) {
+ require_once "resources/header.php";
+ require_once "resources/persist_form_var.php";
+ echo "
";
+
+//include the footer
+ require_once "resources/footer.php";
+
+?>
diff --git a/app/extension_settings/extension_settings.php b/app/extension_settings/extension_settings.php
new file mode 100755
index 0000000000..a2cd197a80
--- /dev/null
+++ b/app/extension_settings/extension_settings.php
@@ -0,0 +1,327 @@
+
+ Portions created by the Initial Developer are Copyright (C) 2021
+ the Initial Developer. All Rights Reserved.
+*/
+
+//includes
+ require_once "root.php";
+ require_once "resources/require.php";
+ require_once "resources/check_auth.php";
+
+//check permissions
+ if (permission_exists('extension_setting_view')) {
+ //access granted
+ }
+ else {
+ echo "access denied";
+ exit;
+ }
+
+//add multi-lingual support
+ $language = new text;
+ $text = $language->get();
+
+//get the http post data
+ if (is_array($_POST['extension_settings'])) {
+ $action = $_POST['action'];
+ $search = $_POST['search'];
+ $extension_settings = $_POST['extension_settings'];
+ }
+
+//action add or update
+ if (is_uuid($_REQUEST["id"])) {
+ $extension_uuid = $_REQUEST["id"];
+ }
+
+//process the http post data by action
+ if ($action != '' && is_array($extension_settings) && @sizeof($extension_settings) != 0) {
+
+ //validate the token
+ $token = new token;
+ if (!$token->validate($_SERVER['PHP_SELF'])) {
+ message::add($text['message-invalid_token'],'negative');
+ header('Location: extension_settings.php');
+ exit;
+ }
+
+ //prepare the array
+ foreach($extension_settings as $row) {
+ $array['extension_settings'][$x]['checked'] = $row['checked'];
+ $array['extension_settings'][$x]['extension_setting_uuid'] = $row['extension_setting_uuid'];
+ $array['extension_settings'][$x]['extension_setting_enabled'] = $row['extension_setting_enabled'];
+ $x++;
+ }
+
+ //prepare the database object
+ $database = new database;
+ $database->app_name = 'extension_settings';
+ $database->app_uuid = '1416a250-f6e1-4edc-91a6-5c9b883638fd';
+
+ //send the array to the database class
+ switch ($action) {
+ case 'copy':
+ if (permission_exists('extension_setting_add')) {
+ $database->copy($array);
+ }
+ break;
+ case 'toggle':
+ if (permission_exists('extension_setting_edit')) {
+ $database->toggle($array);
+ }
+ break;
+ case 'delete':
+ if (permission_exists('extension_setting_delete')) {
+ $database->delete($array);
+ }
+ break;
+ }
+
+ //redirect the user
+ header('Location: extension_settings.php?id='.urlencode($extension_uuid).'&'.($search != '' ? '?search='.urlencode($search) : null));
+ exit;
+ }
+
+//get order and order by
+ $order_by = $_GET["order_by"];
+ $order = $_GET["order"];
+
+//add the search
+ if (isset($_GET["search"])) {
+ $search = strtolower($_GET["search"]);
+ }
+
+//get the count
+ $sql = "select count(extension_setting_uuid) ";
+ $sql .= "from v_extension_settings ";
+ $sql .= "where extension_uuid = :extension_uuid ";
+ if (isset($search)) {
+ $sql .= "and (";
+ $sql .= " lower(extension_setting_type) like :search ";
+ $sql .= " or lower(extension_setting_name) like :search ";
+ $sql .= " or lower(extension_setting_description) like :search ";
+ $sql .= ") ";
+ $parameters['search'] = '%'.$search.'%';
+ }
+ else {
+ $sql .= "and (domain_uuid = :domain_uuid or domain_uuid is null) ";
+ if (isset($sql_search)) {
+ $sql .= "and ".$sql_search;
+ }
+ $parameters['domain_uuid'] = $domain_uuid;
+ }
+ $parameters['extension_uuid'] = $extension_uuid;
+ $database = new database;
+ $num_rows = $database->select($sql, $parameters, 'column');
+ unset($sql, $parameters);
+
+//get the list
+ $sql = "select ";
+ //$sql .= "d.domain_name, ";
+ $sql .= "extension_setting_uuid, ";
+ $sql .= "extension_setting_type, ";
+ $sql .= "extension_setting_name, ";
+ $sql .= "extension_setting_value, ";
+ $sql .= "cast(extension_setting_enabled as text), ";
+ $sql .= "extension_setting_description ";
+ $sql .= "from v_extension_settings as e ";
+ //$sql .= ",v_domains as d ";
+ $sql .= "where extension_uuid = :extension_uuid ";
+ $sql .= "and (e.domain_uuid = :domain_uuid or e.domain_uuid is null) ";
+ //$sql .= "and d.domain_uuid = e.domain_uuid ";
+ if (isset($_GET["search"])) {
+ $sql .= "and (";
+ $sql .= " lower(extension_setting_type) like :search ";
+ $sql .= " or lower(extension_setting_name) like :search ";
+ $sql .= " or lower(extension_setting_description) like :search ";
+ $sql .= ") ";
+ $parameters['search'] = '%'.$search.'%';
+ }
+
+ $sql .= order_by($order_by, $order, 'extension_setting_type', 'asc');
+ $sql .= limit_offset($rows_per_page, $offset);
+ $parameters['extension_uuid'] = $extension_uuid;
+ $parameters['domain_uuid'] = $domain_uuid;
+ $database = new database;
+ $extension_settings = $database->select($sql, $parameters, 'all');
+ unset($sql, $parameters);
+
+//create token
+ $object = new token;
+ $token = $object->create($_SERVER['PHP_SELF']);
+
+//additional includes
+ $document['title'] = $text['title-extension_settings'];
+ require_once "resources/header.php";
+
+//show the content
+ echo "\n";
+ echo "
".$text['title-extension_settings']." (".$num_rows.")
\n";
+ echo "
\n";
+
+ echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_add','name'=>'btn_add','link'=>'/app/extensions/extension_edit.php?id='.$extension_uuid]);
+
+ if (permission_exists('extension_setting_add')) {
+ echo button::create(['type'=>'button','label'=>$text['button-add'],'icon'=>$_SESSION['theme']['button_icon_add'],'id'=>'btn_add','name'=>'btn_add','link'=>'extension_setting_edit.php?extension_uuid='.$extension_uuid]);
+ }
+ if (permission_exists('extension_setting_add') && $extension_settings) {
+ 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');"]);
+ }
+ if (permission_exists('extension_setting_edit') && $extension_settings) {
+ 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');"]);
+ }
+ if (permission_exists('extension_setting_delete') && $extension_settings) {
+ 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');"]);
+ }
+ echo "\n";
+ echo "
\n";
+ echo "
\n";
+ echo "
\n";
+
+ if (permission_exists('extension_setting_add') && $extension_settings) {
+ echo modal::create(['id'=>'modal-copy','type'=>'copy','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_copy','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('copy'); list_form_submit('form_list');"])]);
+ }
+ if (permission_exists('extension_setting_edit') && $extension_settings) {
+ 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');"])]);
+ }
+ if (permission_exists('extension_setting_delete') && $extension_settings) {
+ 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');"])]);
+ }
+
+ echo $text['title_description-extension_settings']."\n";
+ echo "