mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-30 17:25:26 +02:00
2013-05-20 Miguel de Dios <miguel.dedios@artica.es>
* include/ajax/skins.ajax.php, include/functions_gis.php, include/javascript/openlayers.pandora.js, operation/gis_maps/public_console.php, operation/gis_maps/ajax.php, operation/gis_maps/render_view.php, operation/visual_console/public_console.php, operation/visual_console/render_view.php: added the public console for GIS. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@8170 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
5179c67f7a
commit
1f624fe58e
@ -1,3 +1,13 @@
|
|||||||
|
2013-05-20 Miguel de Dios <miguel.dedios@artica.es>
|
||||||
|
|
||||||
|
* include/ajax/skins.ajax.php, include/functions_gis.php,
|
||||||
|
include/javascript/openlayers.pandora.js,
|
||||||
|
operation/gis_maps/public_console.php, operation/gis_maps/ajax.php,
|
||||||
|
operation/gis_maps/render_view.php,
|
||||||
|
operation/visual_console/public_console.php,
|
||||||
|
operation/visual_console/render_view.php: added the public console
|
||||||
|
for GIS.
|
||||||
|
|
||||||
2013-05-20 Miguel de Dios <miguel.dedios@artica.es>
|
2013-05-20 Miguel de Dios <miguel.dedios@artica.es>
|
||||||
|
|
||||||
* operation/gis_maps/ajax.php,
|
* operation/gis_maps/ajax.php,
|
||||||
|
@ -15,15 +15,13 @@
|
|||||||
// Login check
|
// Login check
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
check_login ();
|
|
||||||
|
|
||||||
$get_image_path = get_parameter('get_image_path', 0);
|
$get_image_path = get_parameter('get_image_path', 0);
|
||||||
|
|
||||||
/* skins image checks */
|
/* skins image checks */
|
||||||
if ($get_image_path){
|
if ($get_image_path) {
|
||||||
$img_src = get_parameter("img_src");
|
$img_src = get_parameter("img_src");
|
||||||
$only_src = get_parameter("only_src", 0);
|
$only_src = get_parameter("only_src", 0);
|
||||||
|
|
||||||
return html_print_image($img_src, false, '', $only_src);
|
return html_print_image($img_src, false, '', $only_src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,12 +128,20 @@ function gis_print_map($idDiv, $iniZoom, $latCenter, $lonCenter, $baselayers, $c
|
|||||||
echo "</script>";
|
echo "</script>";
|
||||||
}
|
}
|
||||||
|
|
||||||
function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null) {
|
function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null, $public_console = 0, $id_map = 0) {
|
||||||
|
global $config;
|
||||||
|
|
||||||
if ($dot == null) {
|
if ($dot == null) {
|
||||||
$dot['url'] = 'images/dot_green.png';
|
$dot['url'] = 'images/dot_green.png';
|
||||||
$dot['width'] = 20; //11;
|
$dot['width'] = 20; //11;
|
||||||
$dot['height'] = 20; //11;
|
$dot['height'] = 20; //11;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$hash = '';
|
||||||
|
if ($public_console) {
|
||||||
|
$hash = md5($config["dbpass"] . $id_map. $config["id_user"]);
|
||||||
|
}
|
||||||
|
|
||||||
$visible = (bool)$visible;
|
$visible = (bool)$visible;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@ -153,13 +161,13 @@ function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null) {
|
|||||||
var layer = new OpenLayers.Layer.Vector(
|
var layer = new OpenLayers.Layer.Vector(
|
||||||
'<?php echo $name; ?>', {styleMap: style}
|
'<?php echo $name; ?>', {styleMap: style}
|
||||||
);
|
);
|
||||||
|
|
||||||
layer.data = {};
|
layer.data = {};
|
||||||
layer.data.id = '<?php echo $idLayer; ?>';
|
layer.data.id = '<?php echo $idLayer; ?>';
|
||||||
|
|
||||||
layer.setVisibility(<?php echo $visible; ?>);
|
layer.setVisibility(<?php echo $visible; ?>);
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
|
|
||||||
layer.events.on({
|
layer.events.on({
|
||||||
"featureselected": function(e) {
|
"featureselected": function(e) {
|
||||||
if (e.feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
|
if (e.feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
|
||||||
@ -173,18 +181,18 @@ function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null) {
|
|||||||
parameter.push ({name: "page", value: "include/ajax/skins.ajax"});
|
parameter.push ({name: "page", value: "include/ajax/skins.ajax"});
|
||||||
parameter.push ({name: "get_image_path", value: "1"});
|
parameter.push ({name: "get_image_path", value: "1"});
|
||||||
parameter.push ({name: "img_src", value: "images/spinner.gif"});
|
parameter.push ({name: "img_src", value: "images/spinner.gif"});
|
||||||
|
|
||||||
jQuery.ajax ({
|
jQuery.ajax ({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
url: action="ajax.php",
|
url: "<?php echo ui_get_full_url('ajax.php', false, false, false, false); ?>",
|
||||||
data: parameter,
|
data: parameter,
|
||||||
async: false,
|
async: false,
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
img_src = data;
|
img_src = data;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
popup = new OpenLayers.Popup.FramedCloud('cloud00',
|
popup = new OpenLayers.Popup.FramedCloud('cloud00',
|
||||||
long_lat,
|
long_lat,
|
||||||
null,
|
null,
|
||||||
@ -196,10 +204,15 @@ function gis_make_layer($name, $visible = true, $dot = null, $idLayer = null) {
|
|||||||
map.addPopup(popup);
|
map.addPopup(popup);
|
||||||
|
|
||||||
jQuery.ajax ({
|
jQuery.ajax ({
|
||||||
data: "page=operation/gis_maps/ajax&opt="+featureData.type+"&id=" + featureData.id,
|
data: "page=operation/gis_maps/ajax"
|
||||||
|
+ "&opt=" + featureData.type
|
||||||
|
+ "&id=" + featureData.id
|
||||||
|
+ "&hash=<?php echo $hash; ?>"
|
||||||
|
+ "&id_user=<?php echo $config["id_user"]; ?>"
|
||||||
|
+ "&map_id=<?php echo $id_map; ?>",
|
||||||
type: "GET",
|
type: "GET",
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: "ajax.php",
|
url: "<?php echo ui_get_full_url('ajax.php', false, false, false, false); ?>",
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
if (data.correct) {
|
if (data.correct) {
|
||||||
@ -241,8 +254,16 @@ function gis_activate_select_control($layers=null) {
|
|||||||
*
|
*
|
||||||
* @return None
|
* @return None
|
||||||
*/
|
*/
|
||||||
function gis_activate_ajax_refresh($layers = null, $lastTimeOfData = null) {
|
function gis_activate_ajax_refresh($layers = null, $lastTimeOfData = null, $public_console = 0, $id_map = 0) {
|
||||||
if ($lastTimeOfData === null) $lastTimeOfData = time();
|
global $config;
|
||||||
|
|
||||||
|
if ($lastTimeOfData === null)
|
||||||
|
$lastTimeOfData = time();
|
||||||
|
|
||||||
|
$hash = '';
|
||||||
|
if ($public_console) {
|
||||||
|
$hash = md5($config["dbpass"] . $id_map. $config["id_user"]);
|
||||||
|
}
|
||||||
|
|
||||||
ui_require_jquery_file ('json');
|
ui_require_jquery_file ('json');
|
||||||
?>
|
?>
|
||||||
@ -276,8 +297,15 @@ function gis_activate_ajax_refresh($layers = null, $lastTimeOfData = null) {
|
|||||||
|
|
||||||
if (featureIdArray.length > 0) {
|
if (featureIdArray.length > 0) {
|
||||||
jQuery.ajax ({
|
jQuery.ajax ({
|
||||||
data: "page=operation/gis_maps/ajax&opt=get_new_positions&id_features=" + featureIdArray.toString()
|
data: "page=operation/gis_maps/ajax"
|
||||||
+ "&last_time_of_data=" + last_time_of_data + "&layer_id=" + layer.data.id + "&agent_view=" + agentView,
|
+ "&opt=get_new_positions"
|
||||||
|
+ "&id_features=" + featureIdArray.toString()
|
||||||
|
+ "&last_time_of_data=" + last_time_of_data
|
||||||
|
+ "&layer_id=" + layer.data.id
|
||||||
|
+ "&agent_view=" + agentView
|
||||||
|
+ "&hash=<?php echo $hash; ?>"
|
||||||
|
+ "&id_user=<?php echo $config["id_user"]; ?>"
|
||||||
|
+ "&map_id=<?php echo $id_map; ?>",
|
||||||
type: "GET",
|
type: "GET",
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
url: "ajax.php",
|
url: "ajax.php",
|
||||||
@ -375,7 +403,9 @@ function gis_add_agent_point($layerName, $pointName, $lat, $lon, $icon = null, $
|
|||||||
<?php
|
<?php
|
||||||
if ($icon != null) {
|
if ($icon != null) {
|
||||||
//echo "js_addPointExtent('$layerName', '$pointName', $lon, $lat, '$icon', $width, $height, $point_id, '$type_string', $status);";
|
//echo "js_addPointExtent('$layerName', '$pointName', $lon, $lat, '$icon', $width, $height, $point_id, '$type_string', $status);";
|
||||||
echo "js_addAgentPointExtent('$layerName', '$pointName', $lon, $lat, '$icon', $width, $height, $point_id, '$type_string', $status, $idParent);";
|
echo "js_addAgentPointExtent('$layerName',
|
||||||
|
'$pointName', $lon, $lat, '$icon', $width,
|
||||||
|
$height, $point_id, '$type_string', $status, $idParent);";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//echo "js_addPoint('$layerName', '$pointName', $lon, $lat, $point_id, '$type_string', $status);";
|
//echo "js_addPoint('$layerName', '$pointName', $lon, $lat, $point_id, '$type_string', $status);";
|
||||||
|
@ -37,7 +37,12 @@ function js_refreshParentLines(layerName) {
|
|||||||
id = feature.data.id;
|
id = feature.data.id;
|
||||||
status = feature.data.status;
|
status = feature.data.status;
|
||||||
|
|
||||||
listFeaturesWithParents[id] = {'id': id, 'id_parent': id_parent, 'long_lat': long_lat, 'status': status, 'visible': visible};
|
listFeaturesWithParents[id] = {
|
||||||
|
'id': id,
|
||||||
|
'id_parent': id_parent,
|
||||||
|
'long_lat': long_lat,
|
||||||
|
'status': status,
|
||||||
|
'visible': visible};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -351,7 +356,7 @@ function js_makeLayer(name, visible, dot) {
|
|||||||
dot['width'] = 20; //11;
|
dot['width'] = 20; //11;
|
||||||
dot['height'] = 20; //11;
|
dot['height'] = 20; //11;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set the style in layer
|
//Set the style in layer
|
||||||
var style = new OpenLayers.StyleMap(
|
var style = new OpenLayers.StyleMap(
|
||||||
{fontColor: "#ff0000",
|
{fontColor: "#ff0000",
|
||||||
@ -362,64 +367,13 @@ function js_makeLayer(name, visible, dot) {
|
|||||||
label:"${nombre}"
|
label:"${nombre}"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
//Make the layer as type vector
|
//Make the layer as type vector
|
||||||
var layer = new OpenLayers.Layer.Vector(name, {styleMap: style});
|
var layer = new OpenLayers.Layer.Vector(name, {styleMap: style});
|
||||||
|
|
||||||
layer.setVisibility(visible);
|
layer.setVisibility(visible);
|
||||||
map.addLayer(layer);
|
map.addLayer(layer);
|
||||||
|
|
||||||
//Disable for WIP
|
|
||||||
/////
|
|
||||||
// layer.events.on({
|
|
||||||
// "beforefeaturemodified": test,
|
|
||||||
// "featuremodified": test,
|
|
||||||
// "afterfeaturemodified": test,
|
|
||||||
// "vertexmodified": test,
|
|
||||||
// "sketchmodified": test,
|
|
||||||
// "sketchstarted": test,
|
|
||||||
// "sketchcomplete": test
|
|
||||||
// });
|
|
||||||
/////
|
|
||||||
|
|
||||||
|
|
||||||
// layer.events.on({
|
|
||||||
// "featureselected": function(e) {
|
|
||||||
// if (e.feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
|
|
||||||
// var feature = e.feature;
|
|
||||||
// var featureData = feature.data;
|
|
||||||
// var long_lat = featureData.long_lat;
|
|
||||||
//
|
|
||||||
// var popup;
|
|
||||||
//
|
|
||||||
// popup = new OpenLayers.Popup.FramedCloud('cloud00',
|
|
||||||
// long_lat,
|
|
||||||
// null,
|
|
||||||
// '<div class="cloudContent' + featureData.id + '" style="text-align: center;"><img src="images/spinner.gif" /></div>',
|
|
||||||
// null,
|
|
||||||
// true,
|
|
||||||
// function () { popup.destroy(); });
|
|
||||||
// feature.popup = popup;
|
|
||||||
// map.addPopup(popup);
|
|
||||||
//
|
|
||||||
// jQuery.ajax ({
|
|
||||||
// data: "page=operation/gis_maps/ajax&opt="+featureData.type+"&id=" + featureData.id,
|
|
||||||
// type: "GET",
|
|
||||||
// dataType: 'json',
|
|
||||||
// url: "ajax.php",
|
|
||||||
// timeout: 10000,
|
|
||||||
// success: function (data) {
|
|
||||||
// if (data.correct) {
|
|
||||||
// $('.cloudContent' + featureData.id).css('text-align', 'left');
|
|
||||||
// $('.cloudContent' + featureData.id).html(data.content);
|
|
||||||
// popup.updateSize();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,7 +455,15 @@ function js_addAgentPoint(layerName, pointName, lon, lat, id, type_string, statu
|
|||||||
var layer = map.getLayersByName(layerName);
|
var layer = map.getLayersByName(layerName);
|
||||||
layer = layer[0];
|
layer = layer[0];
|
||||||
|
|
||||||
feature = new OpenLayers.Feature.Vector(point,{id_parent: idParent, status: statusAgent, nombre: pointName, id: id, type: type_string, long_lat: new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.getProjectionObject()) });
|
feature = new OpenLayers.Feature.Vector(point,
|
||||||
|
{
|
||||||
|
id_parent: idParent,
|
||||||
|
status: statusAgent,
|
||||||
|
nombre: pointName,
|
||||||
|
id: id,
|
||||||
|
type: type_string,
|
||||||
|
long_lat: new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.getProjectionObject())
|
||||||
|
});
|
||||||
|
|
||||||
if (isHideFeatureByStatus(statusAgent)) {
|
if (isHideFeatureByStatus(statusAgent)) {
|
||||||
feature.style.display = 'none';
|
feature.style.display = 'none';
|
||||||
@ -572,7 +534,23 @@ function js_addAgentPointExtent(layerName, pointName, lon, lat, icon, width, hei
|
|||||||
else
|
else
|
||||||
statusA = statusAgent;
|
statusA = statusAgent;
|
||||||
|
|
||||||
feature = new OpenLayers.Feature.Vector(point,{id_parent: idParent, status: statusA, id: id, type: type_string, long_lat: new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.getProjectionObject()) }, {fontWeight: "bolder", fontColor: "#00014F", labelYOffset: -height, graphicHeight: width, graphicWidth: height, externalGraphic: icon, label: pointName});
|
feature = new OpenLayers.Feature.Vector(point,
|
||||||
|
{
|
||||||
|
id_parent: idParent,
|
||||||
|
status: statusA,
|
||||||
|
id: id,
|
||||||
|
type: type_string,
|
||||||
|
long_lat: new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.getProjectionObject())
|
||||||
|
},
|
||||||
|
{
|
||||||
|
fontWeight: "bolder",
|
||||||
|
fontColor: "#00014F",
|
||||||
|
labelYOffset: -height,
|
||||||
|
graphicHeight: width,
|
||||||
|
graphicWidth: height,
|
||||||
|
externalGraphic: icon,
|
||||||
|
label: pointName
|
||||||
|
});
|
||||||
|
|
||||||
if (isHideFeatureByStatus(statusAgent)) {
|
if (isHideFeatureByStatus(statusAgent)) {
|
||||||
feature.style.display = 'none';
|
feature.style.display = 'none';
|
||||||
@ -709,4 +687,4 @@ function searchPointAgentById(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
@ -14,16 +14,37 @@
|
|||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
// Load global vars
|
// Load global vars
|
||||||
require_once ("include/config.php");
|
if (file_exists(getcwd() . '/include/config.php')) {
|
||||||
|
require_once ("include/config.php");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
require_once ("../../include/config.php");
|
||||||
|
}
|
||||||
|
|
||||||
check_login ();
|
$hash = (string)get_parameter('hash', '');
|
||||||
|
if (!empty($hash)) {
|
||||||
|
//It is a ajax call from PUBLIC_CONSOLE
|
||||||
|
|
||||||
|
$idMap = (int) get_parameter ('map_id');
|
||||||
|
$id_user = get_parameter ('id_user', '');
|
||||||
|
|
||||||
|
$myhash = md5($config["dbpass"] . $idMap . $id_user);
|
||||||
|
|
||||||
|
// Check input hash
|
||||||
|
if ($myhash == $hash) {
|
||||||
|
$config['id_user'] = $id_user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
check_login ();
|
||||||
|
}
|
||||||
|
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
require_once ('include/functions_gis.php');
|
require_once ($config['homedir'] . '/include/functions_gis.php');
|
||||||
require_once ('include/functions_ui.php');
|
require_once ($config['homedir'] . '/include/functions_ui.php');
|
||||||
require_once ('include/functions_agents.php');
|
require_once ($config['homedir'] . '/include/functions_agents.php');
|
||||||
require_once ('include/functions_groups.php');
|
require_once ($config['homedir'] . '/include/functions_groups.php');
|
||||||
|
|
||||||
$opt = get_parameter('opt');
|
$opt = get_parameter('opt');
|
||||||
|
|
||||||
@ -48,6 +69,8 @@ switch ($opt) {
|
|||||||
$returnJSON = array();
|
$returnJSON = array();
|
||||||
$returnJSON['correct'] = 1;
|
$returnJSON['correct'] = 1;
|
||||||
|
|
||||||
|
$idAgentsWithGIS = array();
|
||||||
|
|
||||||
if ($agentView == 0) {
|
if ($agentView == 0) {
|
||||||
$flagGroupAll = db_get_all_rows_sql('SELECT tgrupo_id_grupo
|
$flagGroupAll = db_get_all_rows_sql('SELECT tgrupo_id_grupo
|
||||||
FROM tgis_map_layer
|
FROM tgis_map_layer
|
||||||
@ -61,17 +84,26 @@ switch ($opt) {
|
|||||||
$idAgentsWithGISTemp = db_get_all_rows_sql('SELECT id_agente
|
$idAgentsWithGISTemp = db_get_all_rows_sql('SELECT id_agente
|
||||||
FROM tagente
|
FROM tagente
|
||||||
WHERE id_grupo IN
|
WHERE id_grupo IN
|
||||||
(SELECT tgrupo_id_grupo FROM tgis_map_layer WHERE id_tmap_layer = ' . $layerId . ')
|
(SELECT tgrupo_id_grupo
|
||||||
|
FROM tgis_map_layer
|
||||||
|
WHERE id_tmap_layer = ' . $layerId . ')
|
||||||
OR id_agente IN
|
OR id_agente IN
|
||||||
(SELECT tagente_id_agente FROM tgis_map_layer_has_tagente WHERE tgis_map_layer_id_tmap_layer = ' . $layerId . ');');
|
(SELECT tagente_id_agente
|
||||||
|
FROM tgis_map_layer_has_tagente
|
||||||
|
WHERE tgis_map_layer_id_tmap_layer = ' . $layerId . ');');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//All groups, all agents
|
//All groups, all agents
|
||||||
$idAgentsWithGISTemp = db_get_all_rows_sql('SELECT tagente_id_agente AS id_agente
|
$idAgentsWithGISTemp = db_get_all_rows_sql('SELECT
|
||||||
|
tagente_id_agente AS id_agente
|
||||||
FROM tgis_data_status
|
FROM tgis_data_status
|
||||||
WHERE tagente_id_agente');
|
WHERE tagente_id_agente');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($idAgentsWithGISTemp)) {
|
||||||
|
$idAgentsWithGISTemp = array();
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($idAgentsWithGISTemp as $idAgent) {
|
foreach ($idAgentsWithGISTemp as $idAgent) {
|
||||||
$idAgentsWithGIS[] = $idAgent['id_agente'];
|
$idAgentsWithGIS[] = $idAgent['id_agente'];
|
||||||
}
|
}
|
||||||
@ -83,28 +115,58 @@ switch ($opt) {
|
|||||||
|
|
||||||
switch ($config["dbtype"]) {
|
switch ($config["dbtype"]) {
|
||||||
case "mysql":
|
case "mysql":
|
||||||
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
if (empty($idAgentsWithGIS)) {
|
||||||
IFNULL(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
IFNULL(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
IFNULL(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
FROM tagente AS t1
|
IFNULL(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
FROM tagente AS t1
|
||||||
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE 1 = 0');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
|
IFNULL(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
|
IFNULL(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
|
FROM tagente AS t1
|
||||||
|
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "postgresql":
|
case "postgresql":
|
||||||
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
if (empty($idAgentsWithGIS)) {
|
||||||
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
FROM tagente AS t1
|
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
FROM tagente AS t1
|
||||||
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE 1 = 0');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
|
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
|
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
|
FROM tagente AS t1
|
||||||
|
LEFT JOIN tgis_data_status AS t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "oracle":
|
case "oracle":
|
||||||
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
if (empty($idAgentsWithGIS)) {
|
||||||
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
FROM tagente t1
|
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
LEFT JOIN tgis_data_status t2 ON t1.id_agente = t2.tagente_id_agente
|
FROM tagente t1
|
||||||
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
LEFT JOIN tgis_data_status t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE 1 = 0');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$agentsGISStatus = db_get_all_rows_sql('SELECT t1.nombre, id_parent, t1.id_agente AS tagente_id_agente,
|
||||||
|
COALESCE(t2.stored_longitude, ' . $defaultCoords['default_longitude'] . ') AS stored_longitude,
|
||||||
|
COALESCE(t2.stored_latitude, ' . $defaultCoords['default_latitude'] . ') AS stored_latitude
|
||||||
|
FROM tagente t1
|
||||||
|
LEFT JOIN tgis_data_status t2 ON t1.id_agente = t2.tagente_id_agente
|
||||||
|
WHERE id_agente IN (' . implode(',', $idAgentsWithGIS) . ')');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,11 +235,13 @@ switch ($opt) {
|
|||||||
{
|
{
|
||||||
$returnJSON['content'] .= __('Position (Lat, Long, Alt)') . ': (' . $agentDataGIS['stored_latitude'] . ', ' . $agentDataGIS['stored_longitude'] . ', ' . $agentDataGIS['stored_altitude'] . ') <br />';
|
$returnJSON['content'] .= __('Position (Lat, Long, Alt)') . ': (' . $agentDataGIS['stored_latitude'] . ', ' . $agentDataGIS['stored_longitude'] . ', ' . $agentDataGIS['stored_altitude'] . ') <br />';
|
||||||
}
|
}
|
||||||
$agent_ip_address = agents_get_address ($id_agente);
|
$agent_ip_address = agents_get_address ($id);
|
||||||
if ($agent_ip_address || $agent_ip_address != '') {
|
if ($agent_ip_address || $agent_ip_address != '') {
|
||||||
$returnJSON['content'] .= __('IP Address').': '.agents_get_address ($id_agente).'<br />';
|
$returnJSON['content'] .= __('IP Address') . ': '.
|
||||||
|
agents_get_address ($id).'<br />';
|
||||||
}
|
}
|
||||||
$returnJSON['content'] .= __('OS').': ' . ui_print_os_icon($row['id_os'], true, true);
|
$returnJSON['content'] .= __('OS').': ' .
|
||||||
|
ui_print_os_icon($row['id_os'], true, true);
|
||||||
|
|
||||||
$osversion_offset = strlen($row["os_version"]);
|
$osversion_offset = strlen($row["os_version"]);
|
||||||
if ($osversion_offset > 15) {
|
if ($osversion_offset > 15) {
|
||||||
@ -186,12 +250,15 @@ switch ($opt) {
|
|||||||
else {
|
else {
|
||||||
$osversion_offset = 0;
|
$osversion_offset = 0;
|
||||||
}
|
}
|
||||||
$returnJSON['content'] .= ' ( <i><span title="'.$row["os_version"].'">'.substr($row["os_version"],$osversion_offset,15).'</span></i>)<br />';
|
$returnJSON['content'] .= ' ( <i><span title="' . $row["os_version"] . '">' .
|
||||||
|
substr($row["os_version"],$osversion_offset,15).'</span></i>)<br />';
|
||||||
$agent_description = $row['comentarios'];
|
$agent_description = $row['comentarios'];
|
||||||
if ($agent_description || $agent_description != '') {
|
if ($agent_description || $agent_description != '') {
|
||||||
$returnJSON['content'] .= __('Description').': '.$agent_description.'<br />';
|
$returnJSON['content'] .= __('Description').': '.$agent_description.'<br />';
|
||||||
}
|
}
|
||||||
$returnJSON['content'] .= __('Group').': ' . ui_print_group_icon ($row["id_grupo"], true).' (<strong>'.groups_get_name ($row["id_grupo"]).'</strong>)<br />';
|
$returnJSON['content'] .= __('Group').': ' .
|
||||||
|
ui_print_group_icon ($row["id_grupo"], true) .
|
||||||
|
' (<strong>'.groups_get_name ($row["id_grupo"]).'</strong>)<br />';
|
||||||
$returnJSON['content'] .= __('Agent Version').': '.$row["agent_version"].'<br />';
|
$returnJSON['content'] .= __('Agent Version').': '.$row["agent_version"].'<br />';
|
||||||
$returnJSON['content'] .= __('Last contact') . ": ";
|
$returnJSON['content'] .= __('Last contact') . ": ";
|
||||||
if ($row["ultimo_contacto_remoto"] == "01-01-1970 00:00:00") {
|
if ($row["ultimo_contacto_remoto"] == "01-01-1970 00:00:00") {
|
||||||
|
195
pandora_console/operation/gis_maps/public_console.php
Executable file
195
pandora_console/operation/gis_maps/public_console.php
Executable file
@ -0,0 +1,195 @@
|
|||||||
|
<?php
|
||||||
|
// Pandora FMS - http://pandorafms.com
|
||||||
|
// ==================================================
|
||||||
|
// Copyright (c) 20012 Artica Soluciones Tecnologicas
|
||||||
|
// Please see http://pandorafms.org for full contribution list
|
||||||
|
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License
|
||||||
|
// as published by the Free Software Foundation for version 2.
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// Real start
|
||||||
|
|
||||||
|
require_once ("../../include/config.php");
|
||||||
|
|
||||||
|
// Set root on homedir, as defined in setup
|
||||||
|
chdir ($config["homedir"]);
|
||||||
|
|
||||||
|
session_start ();
|
||||||
|
ob_start ();
|
||||||
|
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n";
|
||||||
|
echo '<html xmlns="http://www.w3.org/1999/xhtml">'."\n";
|
||||||
|
echo '<head>';
|
||||||
|
|
||||||
|
global $vc_public_view;
|
||||||
|
$vc_public_view = true;
|
||||||
|
// This starts the page head. In the call back function,
|
||||||
|
// things from $page['head'] array will be processed into the head
|
||||||
|
ob_start ('ui_process_page_head');
|
||||||
|
|
||||||
|
|
||||||
|
require_once('include/functions_gis.php');
|
||||||
|
require_once($config['homedir'] . "/include/functions_agents.php");
|
||||||
|
|
||||||
|
ui_require_javascript_file('openlayers.pandora');
|
||||||
|
|
||||||
|
$config["remote_addr"] = $_SERVER['REMOTE_ADDR'];
|
||||||
|
|
||||||
|
$hash = get_parameter ('hash');
|
||||||
|
$idMap = (int) get_parameter ('map_id');
|
||||||
|
$config["id_user"] = get_parameter ('id_user');
|
||||||
|
|
||||||
|
$myhash = md5($config["dbpass"] . $idMap . $config["id_user"]);
|
||||||
|
|
||||||
|
// Check input hash
|
||||||
|
if ( $myhash != $hash) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$show_history = get_parameter ('show_history', 'n');
|
||||||
|
|
||||||
|
$map = db_get_row ('tgis_map', 'id_tgis_map', $idMap);
|
||||||
|
$confMap = gis_get_map_conf($idMap);
|
||||||
|
|
||||||
|
$num_baselayer=0;
|
||||||
|
// Initialy there is no Gmap base layer.
|
||||||
|
$gmap_layer = false;
|
||||||
|
if ($confMap !== false) {
|
||||||
|
foreach ($confMap as $mapC) {
|
||||||
|
$baselayers[$num_baselayer]['typeBaseLayer'] = $mapC['connection_type'];
|
||||||
|
$baselayers[$num_baselayer]['name'] = $mapC['conection_name'];
|
||||||
|
$baselayers[$num_baselayer]['num_zoom_levels'] = $mapC['num_zoom_levels'];
|
||||||
|
$decodeJSON = json_decode($mapC['conection_data'], true);
|
||||||
|
|
||||||
|
switch ($mapC['connection_type']) {
|
||||||
|
case 'OSM':
|
||||||
|
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
|
||||||
|
break;
|
||||||
|
case 'Gmap':
|
||||||
|
$baselayers[$num_baselayer]['gmap_type'] = $decodeJSON['gmap_type'];
|
||||||
|
$baselayers[$num_baselayer]['gmap_key'] = $decodeJSON['gmap_key'];
|
||||||
|
$gmap_key = $decodeJSON['gmap_key'];
|
||||||
|
// Onece a Gmap base layer is found we mark it to import the API
|
||||||
|
$gmap_layer = true;
|
||||||
|
break;
|
||||||
|
case 'Static_Image':
|
||||||
|
$baselayers[$num_baselayer]['url'] = $decodeJSON['url'];
|
||||||
|
$baselayers[$num_baselayer]['bb_left'] = $decodeJSON['bb_left'];
|
||||||
|
$baselayers[$num_baselayer]['bb_right'] = $decodeJSON['bb_right'];
|
||||||
|
$baselayers[$num_baselayer]['bb_bottom'] = $decodeJSON['bb_bottom'];
|
||||||
|
$baselayers[$num_baselayer]['bb_top'] = $decodeJSON['bb_top'];
|
||||||
|
$baselayers[$num_baselayer]['image_width'] = $decodeJSON['image_width'];
|
||||||
|
$baselayers[$num_baselayer]['image_height'] = $decodeJSON['image_height'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$num_baselayer++;
|
||||||
|
if ($mapC['default_map_connection'] == 1) {
|
||||||
|
$numZoomLevels = $mapC['num_zoom_levels'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($gmap_layer === true) {
|
||||||
|
?>
|
||||||
|
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=<?php echo $gmap_key ?>" ></script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
$controls = array('PanZoomBar', 'ScaleLine', 'Navigation', 'MousePosition', 'layerSwitcher');
|
||||||
|
|
||||||
|
$layers = gis_get_layers($idMap);
|
||||||
|
|
||||||
|
echo '<div style="width: 95%; background: white; margin: 20px auto 20px auto; box-shadow: 10px 10px 5px #000;">';
|
||||||
|
echo "<h1>" . $map['map_name'] . "</h1>";
|
||||||
|
echo "<br />";
|
||||||
|
|
||||||
|
echo "<div id='map' style='z-index:100; width: 99%; height: 500px; min-height:500px; border: 1px solid black;' ></div>";
|
||||||
|
|
||||||
|
echo "</div>";
|
||||||
|
|
||||||
|
gis_print_map('map', $map['zoom_level'], $map['initial_latitude'],
|
||||||
|
$map['initial_longitude'], $baselayers, $controls);
|
||||||
|
|
||||||
|
if ($layers != false) {
|
||||||
|
foreach ($layers as $layer) {
|
||||||
|
gis_make_layer($layer['layer_name'],
|
||||||
|
$layer['view_layer'], null, $layer['id_tmap_layer'], 1, $idMap);
|
||||||
|
|
||||||
|
// calling agents_get_group_agents with none to obtain the names in the same case as they are in the DB.
|
||||||
|
$agentNamesByGroup = array();
|
||||||
|
if ($layer['tgrupo_id_grupo'] >= 0) {
|
||||||
|
$agentNamesByGroup = agents_get_group_agents($layer['tgrupo_id_grupo'],
|
||||||
|
false, 'none', true, true, false);
|
||||||
|
}
|
||||||
|
$agentNamesByLayer = gis_get_agents_layer($layer['id_tmap_layer'],
|
||||||
|
array('nombre'));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$agentNames = array_unique($agentNamesByGroup + $agentNamesByLayer);
|
||||||
|
|
||||||
|
foreach ($agentNames as $agentName) {
|
||||||
|
$idAgent = agents_get_agent_id($agentName);
|
||||||
|
$coords = gis_get_data_last_position_agent($idAgent);
|
||||||
|
|
||||||
|
if ($coords === false) {
|
||||||
|
$coords['stored_latitude'] = $map['default_latitude'];
|
||||||
|
$coords['stored_longitude'] = $map['default_longitude'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ($show_history == 'y') {
|
||||||
|
$lastPosition = array('longitude' => $coords['stored_longitude'], 'latitude' => $coords['stored_latitude']);
|
||||||
|
gis_add_path($layer['layer_name'], $idAgent, $lastPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$icon = gis_get_agent_icon_map($idAgent, true);
|
||||||
|
$icon_size = getimagesize($icon);
|
||||||
|
$icon_width = $icon_size[0];
|
||||||
|
$icon_height = $icon_size[1];
|
||||||
|
$icon = ui_get_full_url($icon);
|
||||||
|
$status = agents_get_status($idAgent);
|
||||||
|
$parent = db_get_value('id_parent', 'tagente', 'id_agente', $idAgent);
|
||||||
|
|
||||||
|
gis_add_agent_point($layer['layer_name'],
|
||||||
|
io_safe_output($agentName), $coords['stored_latitude'],
|
||||||
|
$coords['stored_longitude'], $icon, $icon_width,
|
||||||
|
$icon_height, $idAgent, $status, 'point_agent_info',
|
||||||
|
$parent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gis_add_parent_lines();
|
||||||
|
|
||||||
|
switch ($config["dbtype"]) {
|
||||||
|
case "mysql":
|
||||||
|
$timestampLastOperation = db_get_value_sql("SELECT UNIX_TIMESTAMP()");
|
||||||
|
break;
|
||||||
|
case "postgresql":
|
||||||
|
$timestampLastOperation = db_get_value_sql(
|
||||||
|
"SELECT ceil(date_part('epoch', CURRENT_TIMESTAMP))");
|
||||||
|
break;
|
||||||
|
case "oracle":
|
||||||
|
$timestampLastOperation = db_get_value_sql(
|
||||||
|
"SELECT ceil((sysdate - to_date('19700101000000','YYYYMMDDHH24MISS')) * (86400)) FROM dual");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gis_activate_select_control();
|
||||||
|
gis_activate_ajax_refresh($layers, $timestampLastOperation, 1, $idMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resize GIS map on fullscreen
|
||||||
|
?>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$().ready(function(){
|
||||||
|
|
||||||
|
var new_height = $(document).height();
|
||||||
|
$("#map").css("height", new_height - 60);
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
@ -98,6 +98,14 @@ else {
|
|||||||
if (check_acl ($config["id_user"], $map['group_id'], "IW")) {
|
if (check_acl ($config["id_user"], $map['group_id'], "IW")) {
|
||||||
$buttons['setup']['text'] = '<a href="index.php?sec=godgismaps&sec2=godmode/gis_maps/configure_gis_map&action=edit_map&map_id='. $idMap.'">'.html_print_image ("images/setup.png", true, array ("title" => __('Setup'))).'</a>';
|
$buttons['setup']['text'] = '<a href="index.php?sec=godgismaps&sec2=godmode/gis_maps/configure_gis_map&action=edit_map&map_id='. $idMap.'">'.html_print_image ("images/setup.png", true, array ("title" => __('Setup'))).'</a>';
|
||||||
$buttons['setup']['godmode'] = 1;
|
$buttons['setup']['godmode'] = 1;
|
||||||
|
|
||||||
|
|
||||||
|
$hash = md5($config["dbpass"] . $idMap . $config["id_user"]);
|
||||||
|
|
||||||
|
$buttons['public_link']['text'] = '<a href="' .
|
||||||
|
ui_get_full_url('operation/gis_maps/public_console.php?hash=' .$hash .
|
||||||
|
'&map_id=' . $idMap . '&id_user=' . $config["id_user"]) . '" target="_blank">'.
|
||||||
|
html_print_image ("images/camera_mc.png", true, array ("title" => __('Show link to public Visual Console'))).'</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$buttonsString = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=3">' .
|
$buttonsString = '<a href="index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=3">' .
|
||||||
|
@ -73,7 +73,7 @@ if (!isset($config['pure']))
|
|||||||
// Render map
|
// Render map
|
||||||
$options = array();
|
$options = array();
|
||||||
echo '<div style="width: 95%; background: white; margin: 20px auto 20px auto; box-shadow: 10px 10px 5px #000;">';
|
echo '<div style="width: 95%; background: white; margin: 20px auto 20px auto; box-shadow: 10px 10px 5px #000;">';
|
||||||
echo "<h1>". $layout_name. "</h1>";
|
echo "<h1>" . $layout_name . "</h1>";
|
||||||
|
|
||||||
visual_map_print_visual_map ($id_layout, true, true, null, null, '../../');
|
visual_map_print_visual_map ($id_layout, true, true, null, null, '../../');
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ $table->data[0][1] = html_print_select ($values, 'refr', $config["vc_refr"], '',
|
|||||||
$table->data[0][2] = html_print_submit_button (__('Refresh'), '', false, 'class="sub next"', true);
|
$table->data[0][2] = html_print_submit_button (__('Refresh'), '', false, 'class="sub next"', true);
|
||||||
$table->data[0][2] .= html_print_input_hidden ('vc_refr', $config["vc_refr"], true);
|
$table->data[0][2] .= html_print_input_hidden ('vc_refr', $config["vc_refr"], true);
|
||||||
|
|
||||||
if ($vc_refr){
|
if ($vc_refr) {
|
||||||
$config["vc_refr"] = 0;
|
$config["vc_refr"] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ $options['consoles_list']['text'] = '<a href="index.php?sec=reporting&sec2=godmo
|
|||||||
if (check_acl ($config["id_user"], $id_group, "RW")) {
|
if (check_acl ($config["id_user"], $id_group, "RW")) {
|
||||||
$url_base = 'index.php?sec=reporting&sec2=godmode/reporting/visual_console_builder&action=';
|
$url_base = 'index.php?sec=reporting&sec2=godmode/reporting/visual_console_builder&action=';
|
||||||
|
|
||||||
$hash = md5($config["dbpass"]. $id_layout. $config["id_user"]);
|
$hash = md5($config["dbpass"] . $id_layout. $config["id_user"]);
|
||||||
|
|
||||||
$options['public_link']['text'] = '<a href="' . ui_get_full_url('operation/visual_console/public_console.php?hash='.$hash.'&id_layout='.$id_layout.'&id_user='.$config["id_user"]) . '" target="_blank">'.
|
$options['public_link']['text'] = '<a href="' . ui_get_full_url('operation/visual_console/public_console.php?hash='.$hash.'&id_layout='.$id_layout.'&id_user='.$config["id_user"]) . '" target="_blank">'.
|
||||||
html_print_image ("images/camera_mc.png", true, array ("title" => __('Show link to public Visual Console'))).'</a>';
|
html_print_image ("images/camera_mc.png", true, array ("title" => __('Show link to public Visual Console'))).'</a>';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user