diff --git a/docs/BACKUPS.md b/docs/BACKUPS.md
index 8f21aabc..c8cce5cf 100755
--- a/docs/BACKUPS.md
+++ b/docs/BACKUPS.md
@@ -8,7 +8,7 @@ There are 3 artifacts that can be used to backup the application:
| File | Description | Limitations |
|-----------------------|-------------------------------|-------------------------------|
| `/db/app.db` | Database file(s) | The database file might be in an uncommitted state or corrupted |
-| `/config/app.conf` | Configuration file | Doesn't contain settings from the Maintenance section |
+| `/config/app.conf` | Configuration file | Can be overriden with the [`APP_CONF_OVERRIDE` env variable](https://github.com/jokob-sk/NetAlertX/tree/main/dockerfiles#docker-environment-variables). |
| `/config/devices.csv` | CSV file containing device information | Doesn't contain historical data |
## Data and backup storage
diff --git a/front/css/app.css b/front/css/app.css
index fd31ed46..74d24be2 100755
--- a/front/css/app.css
+++ b/front/css/app.css
@@ -1097,6 +1097,11 @@ input[readonly] {
display: inline-block;
}
+#settingsPage .form-control
+{
+ min-height: 42px;
+}
+
#settingsPage .select2-selection
{
background-color: rgb(96, 96, 96);
diff --git a/front/deviceDetails.php b/front/deviceDetails.php
index 6aa28f39..3655a3a4 100755
--- a/front/deviceDetails.php
+++ b/front/deviceDetails.php
@@ -1445,10 +1445,10 @@ function setDeviceData (direction='', refreshCallback='') {
// update data to server
$.get('php/server/devices.php?action=setDeviceData&mac='+ mac
- + '&name=' + encodeURIComponent($('#txtName').val())
- + '&owner=' + encodeURIComponent($('#txtOwner').val())
+ + '&name=' + encodeURIComponent($('#txtName').val().replace(/'/g, ""))
+ + '&owner=' + encodeURIComponent($('#txtOwner').val().replace(/'/g, ""))
+ '&type=' + $('#txtDeviceType').val()
- + '&vendor=' + encodeURIComponent($('#txtVendor').val())
+ + '&vendor=' + encodeURIComponent($('#txtVendor').val().replace(/'/g, ""))
+ '&icon=' + encodeURIComponent($('#txtIcon').val())
+ '&favorite=' + ($('#chkFavorite')[0].checked * 1)
+ '&group=' + encodeURIComponent($('#txtGroup').val())
diff --git a/front/index.php b/front/index.php
index 24c8b554..499b318a 100755
--- a/front/index.php
+++ b/front/index.php
@@ -78,7 +78,7 @@ if (isset ($_SESSION["login"]) == FALSE || $_SESSION["login"] != 1)
-
diff --git a/front/plugins/sync/README.md b/front/plugins/sync/README.md
index a4062558..8f3e9a0b 100755
--- a/front/plugins/sync/README.md
+++ b/front/plugins/sync/README.md
@@ -1,41 +1,63 @@
## Overview
-Synchronization plugin to synchronize multiple app instances. The Plugin can sychronize 2 types of data:
+The synchronization plugin is designed to synchronize data across multiple instances of the app. It supports the following data synchronization modes:
-1. 💻 Devices: The plugin sends an encrypted `table_devices.json` file to synchronize the whole Devices DB table.
-1. 🔌 Plugin data: The plugin sends encrypted `last_result.log` files for individual plugins.
+1. **💻 Devices**: Sends an encrypted `table_devices.json` file to synchronize the entire Devices database table.
+2. **🔌 Plugin Data**: Sends encrypted `last_result.log` files for individual plugins.
-> [!TIP]
-> `[n]` indicates a setting that is usually specified for the node instance. `[n,h]` indicates a setting used both, on the node and on the hub instance.
+> **Note:** `[n]` indicates a setting specified for the node instance, and `[n,h]` indicates a setting used on both the node and the hub instances.
-### Synchronizing 💻 Devices data or 🔌 Plugins data
+### Synchronization Modes
-Most of the setups will probably only use 💻 Devices synchronization. 🔌 Plugins data will be probably used in only special use cases.
+The plugin operates in three different modes based on the configuration settings:
-#### [n] Node (Source) Settings
+1. **Mode 1: PUSH (NODE)** - Sends data from the node to the hub.
+ - This mode is activated if `SYNC_hub_url` is set and either `SYNC_devices` or `SYNC_plugins` is enabled.
+ - **Actions**:
+ - Sends `table_devices.json` to the hub if `SYNC_devices` is enabled.
+ - Sends individual plugin `last_result.log` files to the hub if `SYNC_plugins` is enabled.
-- When to run [n,h] `SYNC_RUN`
-- Schedule [n,h] `SYNC_RUN_SCHD`
-- API token [n,h] `SYNC_api_token`
-- Encryption Key [n,h] `SYNC_encryption_key`
-- Node name [n] `SYNC_node_name`
-- Hub URL [n] `SYNC_hub_url`
-- Sync Devices [n] `SYNC_devices` or Sync Plugins [n] `SYNC_plugins` (or both)
+2. **Mode 2: PULL (HUB)** - Retrieves data from nodes to the hub.
+ - This mode is activated if `SYNC_nodes` is set.
+ - **Actions**:
+ - Retrieves data from configured nodes using the API and saves it locally for further processing.
-#### [h] Hub (Target) Settings
+3. **Mode 3: RECEIVE (HUB)** - Processes received data on the hub.
+ - Activated when data is received in Mode 2 and is ready to be processed.
+ - **Actions**:
+ - Decodes received data files, processes them, and updates the Devices table accordingly.
-- When to run [n,h] `SYNC_RUN`
-- Schedule [n,h] `SYNC_RUN_SCHD`
-- API token [n,h] `SYNC_api_token`
-- Encryption Key [n,h] `SYNC_encryption_key`
+### Settings
+#### Node (Source) Settings `[n]`
+
+- **When to Run** `[n,h]`: `SYNC_RUN`
+- **Schedule** `[n,h]`: `SYNC_RUN_SCHD`
+- **API Token** `[n,h]`: `SYNC_api_token`
+- **Encryption Key** `[n,h]`: `SYNC_encryption_key`
+- **Node Name** `[n]`: `SYNC_node_name`
+- **Hub URL** `[n]`: `SYNC_hub_url`
+- **Sync Devices** `[n]`: `SYNC_devices`
+- **Sync Plugins** `[n]`: `SYNC_plugins`
+
+#### Hub (Target) Settings `[h]`
+
+- **When to Run** `[n,h]`: `SYNC_RUN`
+- **Schedule** `[n,h]`: `SYNC_RUN_SCHD`
+- **API Token** `[n,h]`: `SYNC_api_token`
+- **Encryption Key** `[n,h]`: `SYNC_encryption_key`
+- **Nodes to Pull From** `[h]`: `SYNC_nodes`
### Usage
-- Head to **Settings** > **Sync Hub** to adjust the default values.
+1. **Adjust Settings**:
+ - Navigate to **Settings** > **Sync Hub** to modify default settings.
+2. **Data Flow**:
+ - Nodes send or receive data based on the specified modes, either pushing data to the hub or pulling from nodes.
### Notes
-- If a MAC address already exists on the hub, the device will be skipped in the data coming from this SYNC plugin.
+- Existing devices on the hub will not be updated by the data received from this SYNC plugin if their MAC addresses are already present.
+- It is recommended to use Device synchronization primarily. Plugin data synchronization is more suitable for specific use cases.
-
\ No newline at end of file
+
diff --git a/front/plugins/ui_settings/config.json b/front/plugins/ui_settings/config.json
index def2e5c4..9133823b 100755
--- a/front/plugins/ui_settings/config.json
+++ b/front/plugins/ui_settings/config.json
@@ -166,12 +166,12 @@
"PGkgY2xhc3M9J2ZhIGZhLXdpZmknPjwvaT4=",
"PGkgY2xhc3M9ImZhIGZhLWNvbXB1dGVyIj48L2k+",
"PGkgY2xhc3M9ImZhIGZhLWV0aGVybmV0Ij48L2k+",
- "PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4",
+ "PGkgY2xhc3M9ImZhIGZhLWdhbWVwYWQiPjwvaT4=",
"PGkgY2xhc3M9ImZhIGZhLWdsb2JlIj48L2k+",
"PGkgY2xhc3M9ImZhIGZhLWxhcHRvcCI+PC9pPg==",
"PGkgY2xhc3M9ImZhIGZhLWxpZ2h0YnVsYiI+PC9pPg==",
"PGkgY2xhc3M9ImZhIGZhLXNoaWVsZCI+PC9pPg==",
- "PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4",
+ "PGkgY2xhc3M9ImZhIGZhLXdpZmkiPjwvaT4=",
"PGkgY2xhc3M9J2ZhIGZhLWdhbWVwYWQnPjwvaT4"
],
"options": [],