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] .= '
+ '; + +// Group items +$group_select = html_print_select_groups($config["id_user"], "AR", false, "layer_group_id", "", "", "", 0, true); +$params = array(); +$params['return'] = true; +$params['show_helptip'] = true; +$params['print_hidden_input_idagent'] = true; +$params['hidden_input_idagent_id'] = 'hidden-agent_id_for_data'; +$params['hidden_input_idagent_name'] = 'agent_id_for_data'; +$params['input_name'] = 'agent_alias_for_data'; +$params['value'] = ''; +$params['javascript_function_action_after_select'] = 'toggleAddGroupBtn'; +$params['selectbox_group'] = 'layer_group_id'; // Filter by group +$agent_for_group_input = ui_print_agent_autocomplete_input($params); +$add_group_btn = html_print_button(__('Add'), 'add_group', true, '', 'class="sub add"', true); + +$table->data[1][1] .= '
+ + ' . __('Group') . ': + ' . $group_select . ' + ' . __('Use the data of this agent') . ': + ' . $agent_for_group_input . ' + + + ' . $add_group_btn . ' + + + +

' . __('List of groups to be shown in the layer') . '

+ +
+ + '; + +$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 = $(""); var $nameCol = $(""); var $deleteCol = $(""); - var $agentName = $("" + angentAlias + ""); + var $agentAlias = $("" + agentAlias + ""); var $removeBtn = $(''); $removeBtn.click(function (event) { @@ -734,7 +846,7 @@ function getAgentRow (layerId, agentId, angentAlias) { $agentListItemRow.remove(); }); - $nameCol.append($agentName); + $nameCol.append($agentAlias); $deleteCol.append($removeBtn); $row.append($nameCol).append($deleteCol); @@ -764,6 +876,80 @@ function getLayerAgentAliasInput (layerId, agentId, agentAlias) { return $(""); } +function getGroupRow (layerId, groupId, groupName, agentId, agentAlias) { + var $row = $(""); + var $nameCol = $(""); + var $deleteCol = $(""); + + var $groupName = $("" + + groupName + + " (" + + " " + + "" + agentAlias + "" + + ")" + + ""); + var $removeBtn = $(''); + + $removeBtn.click(function (event) { + var $layerRow = $("tr#layer_row_" + layerId); + + if ($layerRow.length === 0) return; + + var $groupListItemRow = $(event.currentTarget).parent().parent(); + $layerRow.find("input.layer_group_id[data-group-id='" + groupId + "']").remove(); + $layerRow.find("input.layer_group_name[data-group-id='" + groupId + "']").remove(); + $layerRow.find("input.layer_agent_id_for_data[data-group-id='" + groupId + "']").remove(); + $layerRow.find("input.layer_agent_alias_for_data[data-group-id='" + groupId + "']").remove(); + $groupListItemRow.remove(); + }); + + $nameCol.append($groupName); + $deleteCol.append($removeBtn); + + $row.append($nameCol).append($deleteCol); + + return $row; +} + +function addGroupRow (layerId, groupId, groupName, agentId, agentAlias) { + if ( + groupId == null || + groupId == 0 || + groupName.length === 0 || + agentId == null || + agentId == 0 || + agentAlias.length === 0 + ) return; + + var $layerRow = $("tr#layer_row_" + layerId); + if ($layerRow && $layerRow.find("input.layer_group_id[value='" + groupId + "']").length === 0) { + $layerRow + .find("td:first-child") + .append(getLayerGroupIdInput(layerId, groupId)) + .append(getLayerGroupNameInput(layerId, groupId, groupName)) + .append(getLayerAgentIdForDataInput(layerId, groupId, agentId)) + .append(getLayerAgentAliasForDataInput(layerId, groupId, agentAlias)); + } + + $("table#list_groups").append(getGroupRow(layerId, groupId, groupName, agentId, agentAlias)); +} + +function getLayerGroupIdInput (layerId, groupId) { + return $(""); +} + +function getLayerGroupNameInput (layerId, groupId, groupName) { + return $(""); +} + +function getLayerAgentIdForDataInput (layerId, groupId, agentId) { + return $(""); +} + +function getLayerAgentAliasForDataInput (layerId, groupId, agentAlias) { + return $(""); +} + function getLayerRow (layerId, layerData) { var $row = $(""); var $nameCol = $(""); @@ -773,7 +959,7 @@ function getLayerRow (layerId, layerData) { var $layerIdInput = $(""); var $layerNameInput = $(""); - var $layerVisibleInput = $(""); + var $layerVisibleInput = $(""); var $layerAgentsFromGroupInput = $(""); var $layerName = $("" + layerData.name + ""); @@ -801,6 +987,15 @@ function getLayerRow (layerId, layerData) { }); } + if (layerData.groups && layerData.groups.length > 0) { + layerData.groups.forEach(function (group) { + $nameCol.append(getLayerGroupIdInput(layerId, group.id)); + $nameCol.append(getLayerGroupNameInput(layerId, group.id, group.name)); + $nameCol.append(getLayerAgentIdForDataInput(layerId, group.id, group.agentId)); + $nameCol.append(getLayerAgentAliasForDataInput(layerId, group.id, group.agentAlias)); + }); + } + $sortCol .append($sortUpBtn) .append($sortDownBtn); @@ -853,8 +1048,18 @@ function onFormSubmit (event) { $('#map_connection_list').val(connectionMaps.toString()); } +function onLayerGroupIdChange (event) { + // Clear agent inputs + $("input#hidden-agent_id_for_data").val(""); + $("input#text-agent_alias_for_data").val(""); + toggleAddGroupBtn(); +} + // Bind events $("form#form_setup").submit(onFormSubmit); +$("input#button-add_agent").click(addAgentClick); +$("select#layer_group_id").change(onLayerGroupIdChange); +$("input#button-add_group").click(addGroupClick); // Populate layer list var layers = ; @@ -862,9 +1067,14 @@ layers.forEach(function (layer) { $("table#list_layers").append( getLayerRow(layer["id"], { name: layer["layer_name"], - visible: layer["layer_visible"], + visible: Number.parseInt(layer["layer_visible"]), agentsFromGroup: layer["layer_group"], - agents: layer["layer_agent_list"] + agents: layer["layer_agent_list"], + groups: (layer["layer_group_list"] || []).map(function (group) { + group.agentId = group["agent_id"]; + group.agentAlias = group["agent_alias"]; + return group; + }) }) ); }); diff --git a/pandora_console/include/functions_alerts.php b/pandora_console/include/functions_alerts.php index 3e3d424227..4d89dca614 100644 --- a/pandora_console/include/functions_alerts.php +++ b/pandora_console/include/functions_alerts.php @@ -91,7 +91,8 @@ function alerts_get_alerts($id_group = 0, $free_search = "", $status = "all", $s } else { $sql = 'SELECT *, t2.nombre AS module_name, - t3.nombre AS agent_name, t1.name AS template_name, + t3.nombre AS agent_name, t3.alias AS agent_alias, + t1.name AS template_name, t0.disabled AS alert_disabled '; } $sql .= ' diff --git a/pandora_console/include/functions_gis.php b/pandora_console/include/functions_gis.php index dd0ba2e972..66f1dd8989 100644 --- a/pandora_console/include/functions_gis.php +++ b/pandora_console/include/functions_gis.php @@ -172,6 +172,10 @@ function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null, $p } $visible = (bool)$visible; + + $ajax_url = $public_console + ? ui_get_full_url('operation/gis_maps/ajax.php', false, false, false, false) + : ui_get_full_url('ajax.php', false, false, false, false); ?>