From 88d8d183aeedb1c5d6baf6eb3d98cddcc214b42c Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Mon, 18 Feb 2019 12:42:16 +0100 Subject: [PATCH] Merge branch 'next_version' into evolution/60-ajout-de-plusieurs-documents-simultanes --- .../app/vmap/mapmanager/layerstree.js | 97 ++++++++++++++----- .../app/vmap/mapmanager/mapmanager.js | 40 ++++++++ module/javascript/app/vmap/tools/location.js | 12 ++- module/javascript/app/vmap/tools/measure.js | 2 +- module/javascript/app/vmap/tools/print.js | 10 ++ module/template/layers/layertree.html | 32 ++++-- module/template/tools/location.html | 4 +- web_service/sql/sqlQueries.xml | 5 + web_service/ws/MapJSON.class.inc | 45 +++++++++ 9 files changed, 206 insertions(+), 41 deletions(-) diff --git a/module/javascript/app/vmap/mapmanager/layerstree.js b/module/javascript/app/vmap/mapmanager/layerstree.js index 593b84d2..82bca3e9 100644 --- a/module/javascript/app/vmap/mapmanager/layerstree.js +++ b/module/javascript/app/vmap/mapmanager/layerstree.js @@ -157,19 +157,19 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController = function ($scope, */ this['layerstree_collapsed'] = oVmap['properties']['vmap']['layerstree_collapsed']; } - - console.log("oUrlParams: ", oUrlParams); - + var oPositionOptions = {}; if (goog.isDefAndNotNull(oUrlParams['extent'])){ oPositionOptions['extent'] = decodeURI(oUrlParams['extent']).split("|"); } - if (goog.isDefAndNotNull(oUrlParams['lon']) && - goog.isDefAndNotNull(oUrlParams['lat']) && - goog.isDefAndNotNull(oUrlParams['zoom'])){ - oPositionOptions['lon'] = decodeURI(oUrlParams['lon']); - oPositionOptions['lat'] = decodeURI(oUrlParams['lat']); - oPositionOptions['zoom'] = decodeURI(oUrlParams['zoom']); + if (goog.isDefAndNotNull(oUrlParams)) { + if (goog.isDefAndNotNull(oUrlParams['lon']) && + goog.isDefAndNotNull(oUrlParams['lat']) && + goog.isDefAndNotNull(oUrlParams['zoom'])){ + oPositionOptions['lon'] = decodeURI(oUrlParams['lon']); + oPositionOptions['lat'] = decodeURI(oUrlParams['lat']); + oPositionOptions['zoom'] = decodeURI(oUrlParams['zoom']); + } } this.loadTree(oPositionOptions); @@ -464,23 +464,25 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.loadTree } // Va à la position fournie - if (goog.isDefAndNotNull(oPositionOptions['lon']) && - goog.isDefAndNotNull(oPositionOptions['lat']) && - goog.isDefAndNotNull(oPositionOptions['zoom'])){ - - // Projette les coordonnées - var coordinates = [parseFloat(oPositionOptions['lon']), parseFloat(oPositionOptions['lat'])]; - var projection = 'EPSG:4326'; - var currentProjeciton = this['map'].getView().getProjection(); - var projectedCoordinates = ol.proj.transform(coordinates, projection, currentProjeciton); - - this['map'].getView().setCenter(projectedCoordinates); - this['map'].getView().setZoom(oPositionOptions['zoom']); - } - if (goog.isDefAndNotNull(oPositionOptions['extent'])) { - this['map'].getView().fit(oPositionOptions['extent'], { - nearest : true - }); + if (goog.isDefAndNotNull(oPositionOptions)) { + if (goog.isDefAndNotNull(oPositionOptions['lon']) && + goog.isDefAndNotNull(oPositionOptions['lat']) && + goog.isDefAndNotNull(oPositionOptions['zoom'])){ + + // Projette les coordonnées + var coordinates = [parseFloat(oPositionOptions['lon']), parseFloat(oPositionOptions['lat'])]; + var projection = 'EPSG:4326'; + var currentProjeciton = this['map'].getView().getProjection(); + var projectedCoordinates = ol.proj.transform(coordinates, projection, currentProjeciton); + + this['map'].getView().setCenter(projectedCoordinates); + this['map'].getView().setZoom(oPositionOptions['zoom']); + } + if (goog.isDefAndNotNull(oPositionOptions['extent'])) { + this['map'].getView().fit(oPositionOptions['extent'], { + nearest : true + }); + } } }; @@ -665,6 +667,8 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleLay } else { this.closeLayersMenus(); oLayer['displayedMenu'] = true; + // Si toutes les couches sont activés : le checkbox pour activer ou désactiver toutes les couches est coché. + this.setAllSublayersActivationCheckbox(oLayer["olLayer"]); } // Resize la fenêtre @@ -747,6 +751,9 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleSub this.activeSublayer(olLayer, sSublayer); } + // Si toutes les couches sont activés : le checkbox pour activer ou désactiver toutes les couches est coché. + this.setAllSublayersActivationCheckbox(olLayer); + // oVmap['scope'].$broadcast('layersChanged'); }; @@ -1019,3 +1026,41 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.setSublay oVmap['scope'].$broadcast('layersChanged'); } + +/** + * Toggle all the sublayers in the olLayer + * @param {ol.Layer} oLayer + * @param {string} sCheckboxId + * @export + */ +nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.toggleAllSubLayers = function (oLayer, sCheckboxId) { + oVmap.log('nsVmap.nsMapManager.LayersTree.LayertreeController.toggleAllSubLayers'); + var aAvailableSublayers = angular.copy(oLayer["olLayer"]["get"]('sublayers')); + var bLayersVisibility = document.getElementById(sCheckboxId).checked; + for (var i = 0; i < aAvailableSublayers.length; i++) { + if (bLayersVisibility || i == 0) + this.activeSublayer(oLayer["olLayer"], aAvailableSublayers[i]); + else + this.unactiveSublayer(oLayer["olLayer"], aAvailableSublayers[i], '#' + oLayer["olLayer"].$$hashKey + '_sublayer_' + aAvailableSublayers[i] + '_visible_checkbox'); + } + oLayer["olLayer"]["allSublayersActive"] = bLayersVisibility; + oVmap['scope'].$broadcast('layersChanged'); +}; + +/* +* LayertreeController.prototype.setAllSublayersActivationCheckbox - Coche ou décoche le checkbox pour activer ou désactiver toutes les couches +* +* @param {ol.Layer} olLayer +* @export +*/ +nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.setAllSublayersActivationCheckbox = function(olLayer) { + oVmap.log('nsVmap.nsMapManager.LayersTree.LayertreeController.setAllSublayersActivationCheckbox'); + var aAvailableSublayers = olLayer.get('sublayers'); + var aActiveSublayers = olLayer.get('activeSublayers'); + if (goog.isArray(aAvailableSublayers) && goog.isArray(aAvailableSublayers)) { + if (aAvailableSublayers.length == aActiveSublayers.length) + olLayer["allSublayersActive"] = true; + else + olLayer["allSublayersActive"] = false; + } +}; diff --git a/module/javascript/app/vmap/mapmanager/mapmanager.js b/module/javascript/app/vmap/mapmanager/mapmanager.js index 19118736..27810afd 100644 --- a/module/javascript/app/vmap/mapmanager/mapmanager.js +++ b/module/javascript/app/vmap/mapmanager/mapmanager.js @@ -1372,6 +1372,46 @@ nsVmap.nsMapManager.MapManager.prototype.getJSONLayersTree = function ($bCompare return sJSONLayersTree; }; +/** + * Récupère les sources des couches visibles + * + * @return {array} + */ +nsVmap.nsMapManager.MapManager.prototype.getMapSources = function () { + + var oLayer; + var aSubLayers; + var aSources = []; + var oLayersTree = oVmap.getMapManager().getLayersTree(); + + if (goog.isArray(oLayersTree['children'])) { + for (var i = 0; i < oLayersTree['children'].length; i++) { + if (goog.isDefAndNotNull(oLayersTree['children'][i]['name'])) { + if (goog.isArray(oLayersTree['children'][i]['children'])) { + for (var ii = 0; ii < oLayersTree['children'][i]['children'].length; ii++) { + + oLayer = oLayersTree['children'][i]['children'][ii]; + if (goog.isObject(oLayer['vm4ms_sources']) && + oLayer['olLayer'].getVisible()) { + aSubLayers = oLayer['olLayer'].get('activeSublayers'); + + for (var iii = 0; iii < aSubLayers.length; iii++) { + if (goog.isDefAndNotNull(oLayer['vm4ms_sources'][aSubLayers[iii]])) { + if (aSources.indexOf(oLayer['vm4ms_sources'][aSubLayers[iii]]) === -1) { + aSources.push(oLayer['vm4ms_sources'][aSubLayers[iii]]); + } + } + } + } + } + } + } + } + } + + return aSources +} + /** * LayersTree_ setter * @param {object} oTree Layers tree diff --git a/module/javascript/app/vmap/tools/location.js b/module/javascript/app/vmap/tools/location.js index f5af7b56..28aa5f55 100644 --- a/module/javascript/app/vmap/tools/location.js +++ b/module/javascript/app/vmap/tools/location.js @@ -377,7 +377,6 @@ nsVmap.nsToolsManager.Location.prototype.locationController.prototype.goHome = f currentView.setResolution(originalPosition.resolution); }; - /** * Go on the previous extent * @export @@ -421,15 +420,18 @@ nsVmap.nsToolsManager.Location.prototype.locationController.prototype.selectHist /** * Localise the map on the entry position - * @param {string} CoordX html id to the X value - * @param {string} CoordY html id to the Y value + * @param {string} sCoordX html id to the X value + * @param {string} sCoordY html id to the Y value * @param {string} projectionId html id to the projection value * @export */ -nsVmap.nsToolsManager.Location.prototype.locationController.prototype.goTo = function (CoordX, CoordY, projection) { +nsVmap.nsToolsManager.Location.prototype.locationController.prototype.goTo = function (sCoordX, sCoordY, projection) { oVmap.log("nsVmap.nsToolsManager.Location.prototype.locationController.goTo"); - var coordinates = [parseFloat(CoordX), parseFloat(CoordY)]; + sCoordX = sCoordX.replace(',', '.'); + sCoordY = sCoordY.replace(',', '.'); + + var coordinates = [parseFloat(sCoordX), parseFloat(sCoordY)]; var currentProjeciton = oVmap.getMap().getOLMap().getView().getProjection(); var projectedCoordinates = ol.proj.transform(coordinates, projection, currentProjeciton); diff --git a/module/javascript/app/vmap/tools/measure.js b/module/javascript/app/vmap/tools/measure.js index 49786e40..8549e949 100755 --- a/module/javascript/app/vmap/tools/measure.js +++ b/module/javascript/app/vmap/tools/measure.js @@ -504,7 +504,7 @@ nsVmap.nsToolsManager.Measure.prototype.measureController.prototype.setInfosToFe // Coordonnées olFeature.set('Coordonnées', this.formatCoordinate(olFeature.getGeometry())); // Projection - olFeature.set('Projection', this['map'].getView().getProjection().getCode()); + olFeature.set('Projection', 'EPSG:4326'); } else if (olFeature.getGeometry() instanceof ol.geom.LineString) { // Type diff --git a/module/javascript/app/vmap/tools/print.js b/module/javascript/app/vmap/tools/print.js index a4da24b2..4e28e420 100644 --- a/module/javascript/app/vmap/tools/print.js +++ b/module/javascript/app/vmap/tools/print.js @@ -530,6 +530,12 @@ nsVmap.nsToolsManager.Print.prototype.printController.prototype.changeScale = fu // Change la résolution en fonction de l'échelle oVmap.getMap().setScale(viewScale); + // Change l'échalle de la carte comparée si besoin + if(this.$scope_["$root"]["compare_enabled"]) { + setTimeout(function () { + oVmap.getMapCompare().setScale(oVmap.getMap().getScale()); + }); + } }; /** @@ -768,6 +774,10 @@ nsVmap.nsToolsManager.Print.prototype.printController.prototype.print = function oPrintScope['user_' + key] = oUserInfos[key]; } } + + // Sources des couches + oPrintScope['layer_sources'] = oVmap.getMapManager().getMapSources(); + sScope = JSON.stringify(oPrintScope); ajaxRequest({ diff --git a/module/template/layers/layertree.html b/module/template/layers/layertree.html index 3141c44e..16ede7a7 100644 --- a/module/template/layers/layertree.html +++ b/module/template/layers/layertree.html @@ -117,19 +117,37 @@ </div> </a> </li> + <!-- Coche ou décoche toutes les couches --> + <li ng-if="layer.olLayer.get('sublayers').length > 1"> + <div class="sublayer-checkboxes"> + <!-- Checkbox interrogation GetFeatureInfo --> + <div class="checkbox checkbox-success sublayer-checkbox inline-checkbox" ng-if="layer.olLayer.values.is_queryable_getfeatureinfo === true && ctrl.properties.selection.enable_getfeatureinfo === true"> + </div> + <!-- Checkbox visible --> + <div class="checkbox checkbox-info inline-checkbox" ng-class="{'checkbox_indeterminate' : layer.olLayer.allSublayersActive === false}"> + <input id="{{layer.$$hashKey}}_all_sublayer_visibility_checkbox" + type="checkbox" + style="cursor:pointer; position: absolute" + title="Définition de la visibilité de toutes les couches" + ng-checked="layer.olLayer.allSublayersActive" + ng-click="ctrl.toggleAllSubLayers(layer, layer.$$hashKey + '_all_sublayer_visibility_checkbox')"> + <label for="{{layer.$$hashKey}}_all_sublayer_visibility_checkbox" style="cursor:pointer" title="Définition de la visibilité de toutes les couches"></label> + </div> + </div> + </li> <li ng-if="layer.olLayer.get('type') === 'imagewms' || layer.olLayer.get('type') === 'tilewms'" ng-repeat="sublayer in layer.olLayer.get('sublayers')"> <div class="sublayer-checkboxes"> <!-- Checkbox interrogation GetFeatureInfo --> <div class="checkbox checkbox-success sublayer-checkbox inline-checkbox" ng-if="layer.olLayer.values.is_queryable_getfeatureinfo === true && ctrl.properties.selection.enable_getfeatureinfo === true"> <input id="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" - type="checkbox" - style="cursor:pointer; position: absolute" - title="Definit si la couche est est interrogeable par requête WMS" - ng-checked="ctrl.isSublayerWMSQueryable(layer.olLayer, sublayer)" - ng-disabled="layer.olLayer.values.visible !== true" - ng-click="ctrl.toggleSublayerWMSQueryable(layer.olLayer, sublayer)"> - <label for="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" style="cursor:pointer" title="Definit si la couche est interrogeable par requête WMS"></label> + type="checkbox" + style="cursor:pointer; position: absolute" + title="Definit si la couche est est interrogeable par requête WMS" + ng-checked="ctrl.isSublayerWMSQueryable(layer.olLayer, sublayer)" + ng-disabled="layer.olLayer.values.visible !== true" + ng-click="ctrl.toggleSublayerWMSQueryable(layer.olLayer, sublayer)"> + <label for="{{layer.$$hashKey}}_sublayer_{{sublayer}}_wms_queryable_checkbox" style="cursor:pointer" title="Definit si la couche est interrogeable par requête WMS"></label> </div> <!-- Checkbox visible --> <div class="checkbox checkbox-info sublayer-checkbox inline-checkbox"> diff --git a/module/template/tools/location.html b/module/template/tools/location.html index 59d1b1fa..39157c30 100644 --- a/module/template/tools/location.html +++ b/module/template/tools/location.html @@ -143,10 +143,10 @@ <div class="row margin-sides-0 margin-10"> <div class="col-md-5"> <div class="input-group-sm"> - <input type="number" class="form-control" placeholder="X" ng-model="goToX"> + <input type="text" class="form-control" placeholder="X" ng-model="goToX"> </div> <div class="input-group-sm"> - <input type="number" class="form-control" placeholder="Y" ng-model="goToY"> + <input type="text" class="form-control" placeholder="Y" ng-model="goToY"> </div> </div> <div class="col-md-5"> diff --git a/web_service/sql/sqlQueries.xml b/web_service/sql/sqlQueries.xml index 4a1e026e..d9af1118 100644 --- a/web_service/sql/sqlQueries.xml +++ b/web_service/sql/sqlQueries.xml @@ -1168,6 +1168,11 @@ ALTER TABLE s_vmap.business_object ADD COLUMN location_placeholder character varying(100); -- Armand 23/01/2019 Placeholder dans la localisation UPDATE s_vmap.business_object set location_placeholder='Localiser...'; + -- Armand 13/02/2019 Modèle d'impression avec sources + INSERT INTO "s_vmap"."printtemplate" ("name","rt_format_id","rt_orientation_id","outputformats_id","definition") VALUES ('Modèle par défaut 2','A4','portrait','pdf','<style>' || chr(13) || ' #A4_print_template {' || chr(13) || ' width: 21cm;' || chr(13) || ' font-family: arial;' || chr(13) || ' position: absolute;' || chr(13) || ' }' || chr(13) || ' #map_overview {' || chr(13) || ' background-color: #D8D8D8 !important;' || chr(13) || ' height: 4cm;' || chr(13) || ' width: 4cm;' || chr(13) || ' border: 1px solid black;' || chr(13) || ' }' || chr(13) || ' .map_image {' || chr(13) || ' background-color: #D8D8D8 !important;' || chr(13) || ' height: 22cm;' || chr(13) || ' width: 14cm;' || chr(13) || ' border: 1px solid black;' || chr(13) || ' }' || chr(13) || ' .map_image_compare_mode {' || chr(13) || ' background-color: #D8D8D8 !important;' || chr(13) || ' height: 11cm;' || chr(13) || ' width: 14cm;' || chr(13) || ' border: 1px solid black;' || chr(13) || ' }' || chr(13) || ' .map_legend {' || chr(13) || ' width: 3cm; ' || chr(13) || ' margin-top: 16px;' || chr(13) || ' }' || chr(13) || ' .map_legend_compare_mode {' || chr(13) || ' width: 3cm; ' || chr(13) || ' margin-top: 16px;' || chr(13) || ' }' || chr(13) || ' .color_blue{' || chr(13) || ' color: #424A96 !important;' || chr(13) || ' }' || chr(13) || ' .logo {' || chr(13) || ' height: 2cm;' || chr(13) || ' }' || chr(13) || ' .container {' || chr(13) || ' position: absolute;' || chr(13) || ' }' || chr(13) || ' #header_container{' || chr(13) || ' width: 18cm;' || chr(13) || ' height: 2.5cm;' || chr(13) || ' background-color: #D8D8D8 !important;' || chr(13) || ' }' || chr(13) || ' #footer_container{' || chr(13) || ' width: 18cm;' || chr(13) || ' height: 1cm;' || chr(13) || ' background-color: #D8D8D8 !important;' || chr(13) || ' }' || chr(13) || ' .header_content{' || chr(13) || ' margin-left: 10px;' || chr(13) || ' }' || chr(13) || ' .title{' || chr(13) || ' display: block;' || chr(13) || ' font-size: 24pt;' || chr(13) || ' font-weight: bold;' || chr(13) || ' margin-top: 0.8em;' || chr(13) || ' }' || chr(13) || ' .headline{' || chr(13) || ' font-weight: bold;' || chr(13) || ' font-size: 14pt;' || chr(13) || ' }' || chr(13) || ' .legend_headline{' || chr(13) || ' font-weight: bold;' || chr(13) || ' font-size: 14pt;' || chr(13) || ' color: black;' || chr(13) || ' }' || chr(13) || ' .footer_text{' || chr(13) || ' font-weight: bold;' || chr(13) || ' font-size: 10pt;' || chr(13) || ' margin: 0.3cm;' || chr(13) || ' }' || chr(13) || '' || chr(13) || '</style>' || chr(13) || '<div id="A4_print_template">' || chr(13) || '' || chr(13) || ' <div id="header_container" class="container" style="top: 1.2cm; left: 1.5cm;">' || chr(13) || ' <div class="container" style="top: -0.5cm; left: 0cm;">' || chr(13) || ' <div class="header_content title color_blue">{{title}}</div>' || chr(13) || ' <div class="header_content headline color_blue">{{headline}}</div>' || chr(13) || ' </div>' || chr(13) || ' <div class="container" style="top: 0.2cm; right: 10px;">' || chr(13) || ' <img class="logo" src="data:image/png;base64,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">' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' <!-- Mode normal -->' || chr(13) || ' <div ng-if="!compare_mode" class="container" style="top: 5cm; left: 1.5cm;">' || chr(13) || ' <label class="legend_headline">Légende</label>' || chr(13) || ' <div id="map_legend"></div>' || chr(13) || ' </div>' || chr(13) || ' <!-- Mode comparaison -->' || chr(13) || ' <div ng-if="compare_mode" class="container" style="top: 5cm; left: 1.5cm;">' || chr(13) || ' <label class="legend_headline">Légende</label>' || chr(13) || ' <div id="map_legend"></div>' || chr(13) || ' <div id="map_legend_compare"></div>' || chr(13) || ' </div>' || chr(13) || ' <!-- Mode normal -->' || chr(13) || ' <div ng-if="!compare_mode" class="container" style="top: 4cm; right: 1.1cm;">' || chr(13) || ' <img id="map_image" class="map_image" src="images/transparent.png">' || chr(13) || ' </div>' || chr(13) || ' <!-- Mode comparaison -->' || chr(13) || ' <div ng-if="compare_mode">' || chr(13) || ' <div class="container" style="top: 4cm; right: 1.1cm;">' || chr(13) || ' <img id="map_image" class="map_image_compare_mode" src="images/transparent.png"> ' || chr(13) || ' </div> ' || chr(13) || ' <div class="container" style="top: 15cm; right: 1.1cm;">' || chr(13) || ' <img id="map_image_compare" class="map_image_compare_mode" src="images/transparent.png">' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || '' || chr(13) || ' <div class="container" style="top: 24.5cm; left: 1.7cm; z-index: 9;">' || chr(13) || ' <!-- Pour afficher l''overview utiliser id="map_overview-->' || chr(13) || ' <img id="map_overview">' || chr(13) || ' </div>' || chr(13) || ' ' || chr(13) || ' <div class="container" style="top: 25.9cm; right: 1.5cm;">' || chr(13) || ' <!-- Pour afficher l''échelle actuelle utiliser {{map_scale}}-->' || chr(13) || ' <div class="footer_text">' || chr(13) || ' <label class="color_blue"></label>' || chr(13) || ' <label class="color_blue">Echelle: {{map_scale}}</label>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || '' || chr(13) || '' || chr(13) || ' <div id="footer_container" class="container" style="top: 26.7cm; left: 1.5cm">' || chr(13) || ' <div class="container" style="top: 0cm; left: 4.5cm;">' || chr(13) || ' <div class="footer_text">' || chr(13) || ' <label class="color_blue">Source(s):</label>' || chr(13) || ' <label class="color_blue">{{layer_sources.join('', '')}}</label>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || ' </div>' || chr(13) || '</div>'); + INSERT INTO s_vmap.printparameter (printtemplate_id, name, editable, label, placeholder, defaultvalue) VALUES ((select printtemplate_id from s_vmap.printtemplate where name = 'Modèle par défaut 2'), 'title', true, 'Titre', 'Titre du document', NULL); + INSERT INTO s_vmap.printparameter (printtemplate_id, name, editable, label, placeholder, defaultvalue) VALUES ((select printtemplate_id from s_vmap.printtemplate where name = 'Modèle par défaut 2'), 'footer', false, NULL, NULL, 'Tout droits réservés'); + INSERT INTO s_vmap.printparameter (printtemplate_id, name, editable, label, placeholder, defaultvalue) VALUES ((select printtemplate_id from s_vmap.printtemplate where name = 'Modèle par défaut 2'), 'headline', true, 'Sous titre', 'Sous titre de la carte', NULL); ]]> </code> </query> diff --git a/web_service/ws/MapJSON.class.inc b/web_service/ws/MapJSON.class.inc index b31c07ba..7aff5053 100755 --- a/web_service/ws/MapJSON.class.inc +++ b/web_service/ws/MapJSON.class.inc @@ -267,6 +267,11 @@ class MapJSON extends Vmap { else $tmp['is_queryable_getfeatureinfo'] = false; + if (!empty($oLayer->aFields['service_vm4ms'])) + $tmp['is_vm4ms_layer'] = $oLayer->aFields['service_vm4ms']; + else + $tmp['is_vm4ms_layer'] = false; + if (!empty($oLayer->aFields['is_filtered']) && !empty($oLayer->aFields['filter_form'])) $tmp['is_filtered'] = $oLayer->aFields['is_filtered']; else @@ -339,6 +344,11 @@ class MapJSON extends Vmap { $tmp['layer_id'] = $oLayer->aFields['layer_id']; + // Sources des couches + if (($tmp['is_vm4ms_layer'] === true) && !empty($oLayer->aFields['layer_list'])) { + $tmp['vm4ms_sources'] = $this->getLayersSources(explode(',', $oLayer->aFields['layer_list'])); + } + array_push($aThemes[$oLayer->aFields['theme_name']], $tmp); unset($tmp); } @@ -346,6 +356,41 @@ class MapJSON extends Vmap { return $aThemes; } + /** + * Get the vm4ms layers sources + * + * @param {array} $aLayers layers names + * @return {array} avaliable sources + */ + function getLayersSources($aLayers) { + + $aSources = array(); + if (!empty($this->aProperties['schema_vm4ms'])) { + + $aFilter = $this->decodeJSONFilter(array( + 'column' => 'name', + 'compare_operator' => 'IN', + 'value' => $aLayers, + )); + + $aSQLParams = $aFilter['params']; + $aSQLParams['sSchema'] = array('value' => $this->aProperties['schema_vm4ms'], 'type' => 'column_name'); + + $sSql = "SELECT name, source_label FROM [sSchema].v_ms_layer WHERE " . $aFilter['request']; + + $oResult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams); + if (!$this->oConnection->oBd->enErreur()) { + while ($aLigne = $this->oConnection->oBd->ligneSuivante($oResult)) { + if (!empty($aLigne['source_label'])) { + $aSources[$aLigne['name']] = $aLigne['source_label']; + } + } + } + } + + return $aSources; + } + } ?> -- GitLab