diff --git a/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js b/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js index 19118736763025e374066fb7bbc34cc4f9032595..27810afd468018ba2f04b034734b5a91ac4e1c69 100644 --- a/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js +++ b/src/module_vmap/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/src/module_vmap/module/javascript/app/vmap/tools/print.js b/src/module_vmap/module/javascript/app/vmap/tools/print.js index 70d38801732b5d7990ce0aba1d270b022a8d15e9..4e28e42085e89c47751e534d4081bb8e524198b2 100644 --- a/src/module_vmap/module/javascript/app/vmap/tools/print.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/print.js @@ -774,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/src/module_vmap/web_service/sql/sqlQueries.xml b/src/module_vmap/web_service/sql/sqlQueries.xml index 4a1e026efafc58a3a828aa29a84425e347e3d53d..d9af111877a89980f885ff35a7e7742435366d03 100644 --- a/src/module_vmap/web_service/sql/sqlQueries.xml +++ b/src/module_vmap/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/src/module_vmap/web_service/ws/MapJSON.class.inc b/src/module_vmap/web_service/ws/MapJSON.class.inc index b31c07ba67f8e470f522349c22e86321e0e9e9db..7aff50530df0a36ce101dc6531bb6d32af351328 100755 --- a/src/module_vmap/web_service/ws/MapJSON.class.inc +++ b/src/module_vmap/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; + } + } ?>