diff --git a/pandora_console/extras/mr/19.sql b/pandora_console/extras/mr/19.sql
index b6065dbe9b..3fb87a3f19 100644
--- a/pandora_console/extras/mr/19.sql
+++ b/pandora_console/extras/mr/19.sql
@@ -60,4 +60,17 @@ ALTER TABLE `tusuario_perfil` ADD COLUMN `no_hierarchy` tinyint(1) NOT NULL DEFA
UPDATE `tusuario_perfil` SET `is_secondary` = `no_hierarchy`;
ALTER TABLE `tusuario_perfil` DROP COLUMN `is_secondary`;
+-- -----------------------------------------------------
+-- Table `tgis_map_layer_groups`
+-- -----------------------------------------------------
+CREATE TABLE IF NOT EXISTS `tgis_map_layer_groups` (
+ `layer_id` INT NOT NULL,
+ `group_id` MEDIUMINT(4) UNSIGNED NOT NULL,
+ `agent_id` INT(10) UNSIGNED NOT NULL COMMENT 'Used to link the position to the group',
+ PRIMARY KEY (`layer_id`, `group_id`),
+ FOREIGN KEY (`layer_id`) REFERENCES `tgis_map_layer` (`id_tmap_layer`) ON DELETE CASCADE,
+ FOREIGN KEY (`group_id`) REFERENCES `tgrupo` (`id_grupo`) ON DELETE CASCADE,
+ FOREIGN KEY (`agent_id`) REFERENCES `tagente` (`id_agente`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
COMMIT;
\ No newline at end of file
diff --git a/pandora_console/godmode/gis_maps/configure_gis_map.php b/pandora_console/godmode/gis_maps/configure_gis_map.php
index dab75690a2..2cfd3f027e 100644
--- a/pandora_console/godmode/gis_maps/configure_gis_map.php
+++ b/pandora_console/godmode/gis_maps/configure_gis_map.php
@@ -53,7 +53,8 @@ foreach ($layer_ids as $layer_id) {
"layer_name" => $trimmed_name,
"layer_visible" => ((int) $layers[$layer_id]["visible"] === 1),
"layer_group" => (int) $layers[$layer_id]["agents_from_group"],
- "layer_agent_list" => $layers[$layer_id]["agents"]
+ "layer_agent_list" => $layers[$layer_id]["agents"],
+ "layer_group_list" => $layers[$layer_id]["groups"]
);
}
@@ -469,8 +470,44 @@ $table->data[1][1] .= '
' .
html_print_button(__('Save Layer'), 'save_layer', false, 'javascript:saveNewLayer();', 'class="sub wand"', true) . '
' . html_print_input_hidden('current_edit_layer_id', '', true) . '
@@ -549,6 +586,54 @@ function addAgentClick (event) {
$("#button-add_agent").prop("disabled", true);
}
+function toggleAddGroupBtn () {
+ var groupId = Number.parseInt($("select#layer_group_id").val());
+ var agentId = Number.parseInt($("input#hidden-agent_id_for_data").val());
+ var agentAlias = $("input#text-agent_alias_for_data").val();
+
+ var enabled = (
+ !Number.isNaN(groupId)
+ && groupId > 0
+ && !Number.isNaN(agentId)
+ && agentId > 0
+ && agentAlias.length > 0
+ );
+
+ $("#button-add_group").prop("disabled", !enabled);
+}
+
+function addGroupClick (event) {
+ var $layerFormGroupIdInput = $("select#layer_group_id");
+ var $layerFormAgentIdInput = $("input#hidden-agent_id_for_data");
+ var $layerFormAgentAliasInput = $("input#text-agent_alias_for_data");
+
+ var layerId = Number.parseInt($("input#hidden-current_edit_layer_id").val());
+ var groupId = Number.parseInt($layerFormGroupIdInput.val());
+ var groupName = $layerFormGroupIdInput.find(":selected").text();
+ var agentId = Number.parseInt($layerFormAgentIdInput.val());
+ var agentAlias = $layerFormAgentAliasInput.val();
+
+ var valid = (
+ !Number.isNaN(groupId)
+ && groupId > 0
+ && groupName.length > 0
+ && !Number.isNaN(agentId)
+ && agentId > 0
+ && agentAlias.length > 0
+ );
+
+ if (!valid) return;
+
+ addGroupRow(layerId, groupId, groupName, agentId, agentAlias);
+
+ // Clear inputs
+ // $layerFormGroupIdInput.val(0);
+ $layerFormAgentIdInput.val("");
+ $layerFormAgentAliasInput.val("");
+
+ $("#button-add_group").prop("disabled", true);
+}
+
function moveLayerRowUpOnClick (event) {
var $row = $(event.currentTarget).parent().parent();
$row.insertBefore($row.prev());
@@ -602,13 +687,27 @@ function getLayerData (layerId) {
"alias": $(this).val()
};
}).get();
+ var layerGroups = $layerRow.find("input.layer_group_id").map(function () {
+ var groupId = $(this).val();
+ var groupName = $(this).siblings("input.layer_group_name[data-group-id='" + groupId + "']").val();
+ var agentId = $(this).siblings("input.layer_agent_id_for_data[data-group-id='" + groupId + "']").val();
+ var agentAlias = $(this).siblings("input.layer_agent_alias_for_data[data-group-id='" + groupId + "']").val();
+
+ return {
+ "id": groupId,
+ "name": groupName,
+ "agentId": agentId,
+ "agentAlias": agentAlias
+ };
+ }).get();
return {
id: layerId,
name: layerName,
visible: layerVisible,
agentsFromGroup: layerAgentsFromGroup,
- agents: layerAgents
+ agents: layerAgents,
+ groups: layerGroups
}
}
@@ -618,9 +717,10 @@ function setLayerEditorData (data) {
data = {
id: data.id || 0,
name: data.name || "",
- visible: data.visible != null ? data.visible : true,
+ visible: data.visible != null ? !!data.visible : true,
agentsFromGroup: data.agentsFromGroup || -1,
- agents: data.agents || []
+ agents: data.agents || [],
+ groups: data.groups || []
}
var $layerFormIdInput = $("input#hidden-current_edit_layer_id");
@@ -630,6 +730,7 @@ function setLayerEditorData (data) {
var $layerFormAgentInput = $("input#text-agent_alias");
var $layerFormAgentButton = $("input#button-add_agent");
var $layerFormAgentsListItems = $("tr.agents_list_item");
+ var $layerFormGroupsListItems = $("tr.groups_list_item");
$layerFormIdInput.val(data.id);
$layerFormNameInput.val(data.name);
@@ -638,11 +739,17 @@ function setLayerEditorData (data) {
$layerFormAgentInput.val("");
$layerFormAgentButton.prop("disabled", true);
$layerFormAgentsListItems.remove();
+ $layerFormGroupsListItems.remove();
var $tableAgents = $("table#list_agents");
data.agents.forEach(function (agent) {
addAgentRow(data.id, agent.id, agent.alias);
});
+
+ var $tableGroups = $("table#list_groups");
+ data.groups.forEach(function (group) {
+ addGroupRow(data.id, group.id, group.name, group.agentId, group.agentAlias);
+ });
}
function newLayer () {
@@ -654,7 +761,8 @@ function saveNewLayer () {
var $layerFormVisibleCheckbox = $("input#checkbox-layer_visible_form");
var $layerFormAgentsFromGroupSelect = $("select#layer_group_form");
var $layerFormAgentsListItems = $("tr.agents_list_item > td > span.agent_alias");
- var newLayerId = "new_" . $("tr.layer_row").length + 1;
+ var $layerFormGroupsListItems = $("tr.groups_list_item");
+ var newLayerId = "new_" + ($("tr.layer_row").length + 1);
addLayerRow(newLayerId, {
id: newLayerId,
@@ -666,6 +774,14 @@ function saveNewLayer () {
"id": $(this).data("agent-id"),
"alias": $(this).text()
};
+ }).get(),
+ groups: $layerFormGroupsListItems.map(function () {
+ return {
+ "id": $(this).data("group-id"),
+ "name": $(this).data("group-name"),
+ "agentId": $(this).data("agent-id"),
+ "agentAlias": $(this).data("agent-alias")
+ };
}).get()
});
}
@@ -681,7 +797,6 @@ function bindLayerEditorEvents (layerId) {
var $layerFormNameInput = $("input#text-layer_name_form");
var $layerFormVisibleCheckbox = $("input#checkbox-layer_visible_form");
var $layerFormAgentsFromGroupSelect = $("select#layer_group_form");
- var $layerFormAgentButton = $("input#button-add_agent");
var $layerRow = $("tr#layer_row_" + layerId);
@@ -700,27 +815,24 @@ function bindLayerEditorEvents (layerId) {
var group = event.currentTarget.value;
$layerRow.find("input.layer_agents_from_group").val(group);
});
- $layerFormAgentButton.bind("click", addAgentClick);
}
function unbindLayerEditorEvents () {
var $layerFormNameInput = $("input#text-layer_name_form");
var $layerFormVisibleCheckbox = $("input#checkbox-layer_visible_form");
var $layerFormAgentsFromGroupSelect = $("select#layer_group_form");
- var $layerFormAgentButton = $("input#button-add_agent");
$layerFormNameInput.unbind("change");
$layerFormVisibleCheckbox.unbind("click");
$layerFormAgentsFromGroupSelect.unbind("change");
- $layerFormAgentButton.unbind("click");
}
-function getAgentRow (layerId, agentId, angentAlias) {
+function getAgentRow (layerId, agentId, agentAlias) {
var $row = $(" |