[Mapbender-commits] r7483 - trunk/mapbender/http/plugins

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Fri Jan 28 05:41:27 EST 2011


Author: kmq
Date: 2011-01-28 02:41:27 -0800 (Fri, 28 Jan 2011)
New Revision: 7483

Added:
   trunk/mapbender/http/plugins/mb_print.php
Removed:
   trunk/mapbender/http/plugins/mb_print.js
   trunk/mapbender/http/plugins/mb_print.php
Log:
renamed mb_print.js to mb_.php, undoing a previous rename that left two files instead of just one

Deleted: trunk/mapbender/http/plugins/mb_print.js
===================================================================
--- trunk/mapbender/http/plugins/mb_print.js	2011-01-28 10:29:54 UTC (rev 7482)
+++ trunk/mapbender/http/plugins/mb_print.js	2011-01-28 10:41:27 UTC (rev 7483)
@@ -1,567 +0,0 @@
-/**
- * Package: printPDF
- *
- * Description:
- * Mapbender print PDF with PDF templates module.
- * 
- * Files:
- *  - http/plugins/mb_print.php
- *  - http/print/classes
- *  - http/print/printFactory.php
- *  - http/print/printPDF_download.php
- *  - lib/printbox.js
- *
- * SQL:
- * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
- * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
- * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
- * > e_mb_mod, e_target, e_requires, e_url) VALUES('<appId>','printPDF',
- * > 2,1,'pdf print','Print','div','','',1,1,2,2,5,'',
- * > '<div id="printPDF_working_bg"></div><div id="printPDF_working"><img src="../img/indicator_wheel.gif" style="padding:10px 0 0 10px">Generating PDF</div><div id="printPDF_input"><form id="printPDF_form" action="../print/printFactory.php"><div id="printPDF_selector"></div><div class="print_option"><input type="hidden" id="map_url" name="map_url" value=""/><input type="hidden" id="legend_url" name="legend_url" value=""/><input type="hidden" id="overview_url" name="overview_url" value=""/><input type="hidden" id="map_scale" name="map_scale" value=""/><input type="hidden" name="measured_x_values" /><input type="hidden" name="measured_y_values" /><br /></div><div class="print_option" id="printPDF_formsubmit"><input id="submit" type="submit" value="Print"><br /></div></form><div id="printPDF_result"></div></div>',
- * > 'div','../plugins/mb_print.php',
- * > '../../lib/printbox.js,../extensions/jquery-ui-1.7.2.custom/development-bundle/external/bgiframe/jquery.bgiframe.min.js,../extensions/jquery.form.min.js',
- * > 'mapframe1','','http://www.mapbender.org/index.php/Print');
- * >
- * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
- * > var_value, context, var_type) VALUES('<appId>', 'printPDF', 
- * > 'mbPrintConfig', '{"Standard": "mapbender_template.json"}', '' ,'var');
- * >
- * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
- * > var_value, context, var_type) VALUES('<appId>', 'body', 
- * > 'print_css', '../css/print_div.css', '' ,'file/css');
- * 
- * Help:
- * http://www.mapbender.org/PrintPDF_with_template
- *
- * Maintainer:
- * http://www.mapbender.org/User:Michael_Schulz
- * http://www.mapbender.org/User:Christoph_Baudson
- * 
- * Parameters:
- * mbPrintConfig      - *[optional]* object with name and filename of template,
- * 							like 	{
- * 										"Standard": "a_template.json",
- * 										"Different": "another_template.json"
- * 									}
- *
- * License:
- * Copyright (c) 2009, Open Source Geospatial Foundation
- * This program is dual licensed under the GNU General Public License 
- * and Simplified BSD license.  
- * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
- */
-
-var myTarget = options.target ? options.target[0] : "mapframe1";
-var myId = options ? options.id : "printPDF";
-
-var mbPrintConfig = options.mbPrintConfig;
-
-/* the array of json print config files */
-
-if (typeof mbPrintConfig === "object") {
-	mbPrintConfigFilenames = [];
-	mbPrintConfigTitles = [];
-	for (var i in mbPrintConfig) {
-		mbPrintConfigFilenames.push(mbPrintConfig[i]);
-		mbPrintConfigTitles.push(i);
-	}
-}
-if (typeof mbPrintConfigFilenames === "undefined") {
-	mbPrintConfigFilenames = ["mapbender_template.json"];
-}
-
-if (typeof mbPrintConfigTitles === "undefined") {
-	mbPrintConfigTitles = ["Default"];
-}
-
-
-var mbPrintConfigPath = "../print/";
-
-
-/* ------------- printbox addition ------------- */
-
-var PrintPDF = function (options) {
-
-	var that = this;
-	
-	/**
- 	 * Property: actualConfig
-	 * 
-	 * object, holds the actual configuration after loading the json file
-	 */
-	var actualConfig;
-
-	/**
- 	 * constructor
-	 */
-	eventInit.register(function () {
-		mod_printPDF_init();
-	});
-	
-	/**
- 	 * Property: printBox
-	 * 
-	 * the movable printframe
-	 */	
-	var printBox = null;
-	
-	eventAfterMapRequest.register(function () {
-		if (printBox !== null) {
-			printBox.repaint();
-		}
-	});
-	/**
- 	 * Method: createPrintBox
-	 * 
-	 * creates a printBox in the current view, calculates the scale 
-	 * (tbd. if not set from the config) so that the printbox fits in the mapframe.
-	 * Width and height are taken from the configuration.
-	 */
-	this.createPrintBox = function () {
-		size = "A4";
-		//document.form1.size.value = size;
-		format = "portrait";
-		var w, h;
-		//validate();
-		var map = getMapObjByName(myTarget);
-		var map_el = map.getDomElement();
-		var jqForm = $("#"+myId+"_form");
-		var $scaleInput = $("#scale");
-
-		if (printBox !== null) {
-			printBox.destroy();
-			printBox = null;
-			jqForm[0].scale.value = "";
-			jqForm[0].coordinates.value = "";
-			jqForm[0].angle.value = "";
-		}
-		else {
-			printBox = new Mapbender.PrintBox({
-				target : myTarget,
-				printWidth : getPDFMapSize("width")/10,
-				printHeight : getPDFMapSize("height")/10,
-				scale : $scaleInput.size() > 0 && !isNaN(parseInt($scaleInput.val(), 10)) ? 
-					parseInt($scaleInput.val(), 10) : 
-					Math.pow(10, Math.floor(Math.log(map.getScale())/Math.LN10)),
-				afterChangeAngle : function (obj) {
-					if (typeof(obj) == "object") {
-						if (typeof(obj.angle) == "number") {
-							jqForm[0].angle.value = obj.angle;
-						}
-						if (obj.coordinates) {
-							jqForm[0].coordinates.value = String(obj.coordinates);
-						}
-					}
-				},
-				afterChangeSize : function (obj) {
-					if (typeof(obj) == "object") {
-						if (obj.scale) {
-							jqForm[0].scale.value = parseInt(obj.scale / 10, 10) * 10;
-						}
-						if (obj.coordinates) {
-							jqForm[0].coordinates.value = String(obj.coordinates);
-						}
-					}
-				}
-			});
-			printBox.paintPoints();
-			printBox.paintBox();
-
-		}
-	};
-
-	/**
- 	 * Method: getPDFMapSize
-	 * 
-	 * checks the actual config for the size w/h values.
-	 *
-	 * Parameters:
-	 * key      - string, the key which value to retrieve (currently width or height)
-	 */	
-	var getPDFMapSize = function (key) {
-		for (var page in actualConfig.pages) {
-			for (var pageElement in actualConfig.pages[page].elements) {
-				if (actualConfig.pages[page].elements[pageElement].type == "map") {
-					return actualConfig.pages[page].elements[pageElement][key];
-				}
-			}
-		} 
-	};
-
-	/**
- 	 * Method: destroyPrintBox
-	 * 
-	 * removes an existing printBox.
-	 */	
-	var destroyPrintBox = function () {
-		if (printBox) {
-			printBox.destroy();
-		}
-	};
-	
-	/**
- 	 * Method: mod_printPDF_init
-	 * 
-	 * initializes the print modules, generates template chooser and loads first configuration.
-	 */	
-	var mod_printPDF_init = function () {
-		/* first we'd need to build the configuration selection */
-		buildConfigSelector();	
-		/* second we'd need to read the json configuration */
-		that.loadConfig(mbPrintConfigFilenames[0]);
-	};
-
-	/**
- 	 * Method: loadConfig
-	 * 
-	 * GETs the config, build corresponding form, remove an existing printBox
-	 */		
-	this.loadConfig = function (configFilename, callback) {
-		// the dataType to $.get is given explicitely, because there were instances of Mapbender that were returning 
-		// either json or a string, which trips up $.parseJSON which was being used in the callback
-		$.get(mbPrintConfigPath + configFilename, function(json, status){
-		    actualConfig = json;
-		    buildForm(); 
-		    hookForm();
-			if (typeof callback === "function") {
-				printBox = null;
-				callback();
-			}
-		},"json");
-		destroyPrintBox();
-	};
-
-	/**
- 	 * Method: hookForm
-	 * 
-	 * utility method to connect the form plugin to the print form.
-	 */	
-	var hookForm = function () {
-		var o = {
-	   		url:			'../print/printFactory.php', 
-	   		type:			'post',
-	   		dataType:		'json',
-	   		beforeSubmit: 	validate,
-	   		success:    	showResult
-		};
-		$("#"+myId+"_form").ajaxForm(o);
-	};
-	
-	/**
-	 * Change status of the working elements. These should begin with "$myId_working" 
-	 *
-	 * @param {String} newStatus either "hide or "show"
-	 */
-	var showHideWorking = function (newStatus) {
-		if (newStatus=="hide") {
-	    	$("[id^='"+myId+"_working']").hide();
-		}
-	    else {
-	    	$("[id^='"+myId+"_working']").show();	
-		}
-	};
-	
-	/**
-	 * update form values helper function
-	 *
-	 */
-	var updateFormField = function (formData, key, value) {
-		for(var j=0; j < formData.length; j++){
-			if (formData[j].name == key) {
-				formData[j].value = value;
-				break;
-			}
-		}	
-	};
-
-	var getCurrentResolution = function (type) {
-
-		// default resolution is 72 dpi
-		var dpi = 72;
-
-		// set resolution according to map configuration in template
-		for (var i in actualConfig.pages) {
-			var page = actualConfig.pages[i];
-			for (var j in page.elements) {
-				var el = page.elements[j];
-				if (type === el.type && typeof el.res_dpi === "number") {
-					dpi = el.res_dpi;
-				}
-			}
-		}
-		// set resolution according to resolution select box (if present)
-
-		// check if hq print is requested
-		var resolutionControl = null;
-		for (var i in actualConfig.controls) {
-			var c = actualConfig.controls[i];
-			try {
-				for (var j in c.pageElementsLink) {
-					if (c.pageElementsLink[j] === "res_dpi") {
-						resolutionControl = typeof c.id === "string" &&
-							c.id.length > 0 ? $("#" + c.id) : null;
-					}
-				}
-			}
-			catch (e) {
-			}
-		}
-		if (resolutionControl !== null && resolutionControl.size() === 1) {
-			dpi = resolutionControl.val();
-		}
-		return parseInt(dpi, 10);
-	};
-
-	var replaceMapFileForHighQualityPrint = function (currentMapUrl, type) {
-		var dpi = getCurrentResolution(type);
-		// replace map file with hq map file (if configured)
-		var hqmapfiles = $.isArray(options.highqualitymapfiles) ?
-			options.highqualitymapfiles : [];
-		for (var i = 0; i < hqmapfiles.length; i++) {
-			var exp = new RegExp(hqmapfiles[i].pattern);
-			if (hqmapfiles[i].pattern && typeof currentMapUrl === "string" && currentMapUrl.match(exp)) {
-				// check if mapping in current resolution exists
-				var resolutions = hqmapfiles[i].replacement;
-				var resolutionExists = false;
-				for (var r in resolutions) {
-					if (parseInt(r, 10) === dpi) {
-						resolutionExists = true;
-					}
-				}
-				if (resolutionExists) {
-					// replace with hqmapfile
-					var hqmapfile = resolutions[dpi];
-					currentMapUrl = currentMapUrl.replace(exp, hqmapfile);
-				}
-			}
-		}
-		return currentMapUrl;
-	};
-
-	/**
-	 * Validates and updates form data values.
-	 * Adds the elements before the submit button.
-	 *
-	 * @see jquery.forms#beforeSubmitHandler
-	 */
-	var validate = function (formData, jqForm, params) {
-		showHideWorking("show");
-		
-		// map urls
-		var ind = getMapObjIndexByName(myTarget);
-		var f = jqForm[0];
-		f.map_url.value = '';
-		
-		var scale = f.scale.value || mb_mapObj[ind].getScale();
-		scale = parseInt(scale, 10);
-		
-		var legendUrlArray = [];
-		f.overview_url.value = '';
-		for(var i=0; i < mb_mapObj[ind].wms.length; i++){
-			var currentWms = mb_mapObj[ind].wms[i];
-			if(mb_mapObj[ind].wms[i].gui_wms_visible > 0){
-				if (mb_mapObj[ind].wms[i].mapURL != false && mb_mapObj[ind].wms[i].mapURL != 'false' && mb_mapObj[ind].wms[i].mapURL != ''){   
-					if(f.map_url.value != ""){
-						f.map_url.value += '___';
-					}      
-					var currentMapUrl = mb_mapObj[ind].getMapUrl(i, mb_mapObj[ind].getExtentInfos(), scale);
-					
-					currentMapUrl = replaceMapFileForHighQualityPrint(currentMapUrl, "map");
-					f.map_url.value += currentMapUrl
-
-					var wmsLegendObj = [];
-					
-					var layers = currentWms.getLayers(mb_mapObj[ind], scale);
-					for (var j = 0; j < layers.length; j++) {
-						var currentLayer = currentWms.getLayerByLayerName(layers[j]);
-						// TODO: add only visible layers
-						var isVisible = (currentLayer.gui_layer_visible === 1);
-						var hasNoChildren = (!currentLayer.has_childs);
-						if (isVisible && hasNoChildren){
-							var layerLegendObj = {};
-							layerLegendObj.name = currentLayer.layer_name;
-							layerLegendObj.title = currentWms.getTitleByLayerName(currentLayer.layer_name);
-							var layerStyle = currentWms.getCurrentStyleByLayerName(currentLayer.layer_name);
-							if (layerStyle === false) {
-								layerStyle = "default";
-							}
-							layerLegendObj.legendUrl = currentWms.getLegendUrlByGuiLayerStyle(currentLayer.layer_name, layerStyle);
-							if (layerLegendObj.legendUrl !== false) {
-								wmsLegendObj.push(layerLegendObj);
-							}
-						}
-					}
-					if (wmsLegendObj.length > 0) {
-						var tmpObj = {};
-						tmpObj[currentWms.wms_currentTitle] = wmsLegendObj;
-						legendUrlArray.push(tmpObj);
-					}
-				}
-			}
-		}
-		updateFormField(formData, "legend_url", $.toJSON(legendUrlArray));
-		updateFormField(formData, "map_url", f.map_url.value);
-		updateFormField(formData, "scale", scale);
-		
-		//overview_url
-		var ind_overview = getMapObjIndexByName('overview');
-		if(mb_mapObj[ind_overview].mapURL != false ){
-		    var overviewUrl = mb_mapObj[ind_overview].mapURL;
-			overviewUrl = $.isArray(overviewUrl) ? overviewUrl[0] : overviewUrl;
-
-		    f.overview_url.value = replaceMapFileForHighQualityPrint(overviewUrl, "overview");
-
-			updateFormField(formData, "overview_url", f.overview_url.value);
-		}
-		
-		updateFormField(formData, "map_scale", mb_getScale(myTarget));
-		// write the measured coordinates
-		if (typeof(mod_measure_RX) !== "undefined") {
-			var tmp_x = '';
-			var tmp_y = '';
-			for(i = 0; i < mod_measure_RX.length; i++) {
-				if(tmp_x != '') {
-					tmp_x += ',';
-				}
-				tmp_x += mod_measure_RX[i];
-			}
-			for(i = 0; i < mod_measure_RY.length; i++) {
-				if(tmp_y != '') {
-					tmp_y += ',';
-				}
-				tmp_y += mod_measure_RY[i];
-			}
-			updateFormField(formData, "measured_x_values", tmp_x);
-			updateFormField(formData, "measured_y_values", tmp_y);
-		}	
-		
-		
-		if (f.map_url.value!="") {
-			//return true;
-		} else {
-		    showHideWorking("hide");
-			return false;
-		}
-	};
-
-	/**
- 	 * Method: showResult
-	 * 
-	 * load the generated PDF from the returned URL as an attachment, 
-	 * that triggers a download popup or is displayed in PDF plugin.
-	 */		
-	var showResult = function (res, text) {
-		if (text == 'success') {
-			var $downloadFrame = $("#" + myId + "_frame");
-			if ($downloadFrame.size() === 0) {
-				$downloadFrame = $(
-					"<iframe id='" + myId + "_frame' name='" + 
-					myId + "_frame' width='0' height='0' style='display:none'></iframe>"
-				).appendTo("body");
-			}
-			if ($.browser.msie && $.browser.version === "6.0") {
-				var newWin = window.open(stripslashes(res.outputFileName), "Druckausgabe", "width=200,height=200,left=700,top=200,resizable=yes");
-			}
-			else {
-				window.frames[myId + "_frame"].location.href = 
-					stripslashes(res.outputFileName);
-			}
-			showHideWorking("hide");	
-		}
-		else {
-			/* something went wrong */
-			$("#"+myId+"_result").html(text);
-		}
-	};
-	
-	/**
-	 * Generates form elements as specified in the config controls object.
-	 * Adds the elements before the submit button.
-	 * 
-	 * @param {Object} json the config object in json
-	 */
-	var buildForm = function () {
-		$(".print_option_dyn").remove();
-		var str = "";
-		for (var item in actualConfig.controls) {
-			var element = actualConfig.controls[item];
-			var element_id = myId + "_" + element.id;
-			if (element.type != "hidden") {
-				str += '<div class="print_option_dyn">\n';	
-				str += '<label class="print_label" for="'+element.id+'">'+element.label+'</label>\n';
-			} else {
-				str += '<div class="print_option_dyn" style="display:none;">\n';	
-			}
-			switch (element.type) {
-				case "text":
-					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'" size="'+element.size+'"><br>\n';
-					break;
-				case "hidden":
-					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'">\n';
-					break;				
-				case "textarea":
-					str += '<textarea id="'+element.id+'" name="'+element.id+'" size="'+element.size+'"></textarea><br>\n';
-					break;				
-				case "select":
-					str += '<select id="'+element.id+'" name="'+element.id+'" size="1">\n';
-					for (var option_index in element.options) {
-						option = element.options[option_index];
-						str += '<option value="'+option.value+'">'+option.label+'</option>\n';
-					}
-					str += '</select><br>\n';
-					break;
-			}
-			str += '</div>\n';
-		}
-		if (str) {
-			$("#" + myId + "_formsubmit").before(str);
-			$("#scale").keydown(function (e) {
-				if (e.keyCode !== 13) {
-					return;
-				}
-				var scale = parseInt(this.value, 10);
-				if (isNaN(scale) || typeof printBox === "undefined") {
-					return false;
-				}
-				printBox.setScale(scale);
-				return false;
-			});
-		}
-	};
-	
-	/**
-	 * Generates the configuration select element from the gui element vars
-	 * mbPrintConfigFilenames and mbPrintConfigTitles
-	 */
-	var buildConfigSelector = function () {
-		var str = "";
-		str += '<label class="print_label" for="printPDF_template">Vorlage</label>\n';
-		str += '<select id="printPDF_template" name="printPDF_template" size="1">\n';
-		for (var i = 0; i < mbPrintConfigFilenames.length; i++) {
-			str += '<option value="'+mbPrintConfigFilenames[i]+'">'+mbPrintConfigTitles[i]+'</option>\n';
-		}
-		str += '</select><img id="printPDF_handle" src="../print/img/shape_handles.png" title="Use printbox">\n';
-		if (str) {
-			$("#printPDF_selector").append(str).find("#printPDF_template").change(function () {
-				printObj.loadConfig(mbPrintConfigFilenames[this.selectedIndex], function () {
-					printObj.createPrintBox()
-				});			
-			});
-			$("#printPDF_handle").click(function () {
-				printObj.createPrintBox();
-			});
-			$("#printPDF_working").bgiframe({ 
-				src: "BLOCKED SCRIPT'&lt;html&gt;&lt;/html&gt;';",
-				width: 200,
-				height: 200
-			});
-		}
-	};
-	
-	var stripslashes = function ( str ) {
-	    return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
-	};
-
-};
-
-var printObj = new PrintPDF(options);

Deleted: trunk/mapbender/http/plugins/mb_print.php
===================================================================
--- trunk/mapbender/http/plugins/mb_print.php	2011-01-28 10:29:54 UTC (rev 7482)
+++ trunk/mapbender/http/plugins/mb_print.php	2011-01-28 10:41:27 UTC (rev 7483)
@@ -1,584 +0,0 @@
-/**
- * Package: printPDF
- *
- * Description:
- * Mapbender print PDF with PDF templates module.
- * 
- * Files:
- *  - http/plugins/mb_print.php
- *  - http/print/classes
- *  - http/print/printFactory.php
- *  - http/print/printPDF_download.php
- *  - lib/printbox.js
- *
- * SQL:
- * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
- * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
- * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
- * > e_mb_mod, e_target, e_requires, e_url) VALUES('<appId>','printPDF',
- * > 2,1,'pdf print','Print','div','','',1,1,2,2,5,'',
- * > '<div id="printPDF_working_bg"></div><div id="printPDF_working"><img src="../img/indicator_wheel.gif" style="padding:10px 0 0 10px">Generating PDF</div><div id="printPDF_input"><form id="printPDF_form" action="../print/printFactory.php"><div id="printPDF_selector"></div><div class="print_option"><input type="hidden" id="map_url" name="map_url" value=""/><input type="hidden" id="legend_url" name="legend_url" value=""/><input type="hidden" id="overview_url" name="overview_url" value=""/><input type="hidden" id="map_scale" name="map_scale" value=""/><input type="hidden" name="measured_x_values" /><input type="hidden" name="measured_y_values" /><br /></div><div class="print_option" id="printPDF_formsubmit"><input id="submit" type="submit" value="Print"><br /></div></form><div id="printPDF_result"></div></div>',
- * > 'div','../plugins/mb_print.php',
- * > '../../lib/printbox.js,../extensions/jquery-ui-1.7.2.custom/development-bundle/external/bgiframe/jquery.bgiframe.min.js,../extensions/jquery.form.min.js',
- * > 'mapframe1','','http://www.mapbender.org/index.php/Print');
- * >
- * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
- * > var_value, context, var_type) VALUES('<appId>', 'printPDF', 
- * > 'mbPrintConfig', '{"Standard": "mapbender_template.json"}', '' ,'var');
- * >
- * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
- * > var_value, context, var_type) VALUES('<appId>', 'body', 
- * > 'print_css', '../css/print_div.css', '' ,'file/css');
- * 
- * Help:
- * http://www.mapbender.org/PrintPDF_with_template
- *
- * Maintainer:
- * http://www.mapbender.org/User:Michael_Schulz
- * http://www.mapbender.org/User:Christoph_Baudson
- * 
- * Parameters:
- * mbPrintConfig      - *[optional]* object with name and filename of template,
- * 							like 	{
- * 										"Standard": "a_template.json",
- * 										"Different": "another_template.json"
- * 									}
- *
- * License:
- * Copyright (c) 2009, Open Source Geospatial Foundation
- * This program is dual licensed under the GNU General Public License 
- * and Simplified BSD license.  
- * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
- */
-
-var myTarget = options.target ? options.target[0] : "mapframe1";
-var myId = options ? options.id : "printPDF";
-
-var mbPrintConfig = options.mbPrintConfig;
-
-/* the array of json print config files */
-
-if (typeof mbPrintConfig === "object") {
-	mbPrintConfigFilenames = [];
-	mbPrintConfigTitles = [];
-	for (var i in mbPrintConfig) {
-		mbPrintConfigFilenames.push(mbPrintConfig[i]);
-		mbPrintConfigTitles.push(i);
-	}
-}
-if (typeof mbPrintConfigFilenames === "undefined") {
-	mbPrintConfigFilenames = ["mapbender_template.json"];
-}
-
-if (typeof mbPrintConfigTitles === "undefined") {
-	mbPrintConfigTitles = ["Default"];
-}
-
-
-var mbPrintConfigPath = "../print/";
-
-
-/* ------------- printbox addition ------------- */
-
-var PrintPDF = function (options) {
-
-	var that = this;
-	
-	/**
- 	 * Property: actualConfig
-	 * 
-	 * object, holds the actual configuration after loading the json file
-	 */
-	var actualConfig;
-
-	/**
- 	 * constructor
-	 */
-	eventInit.register(function () {
-		mod_printPDF_init();
-	});
-	
-	/**
- 	 * Property: printBox
-	 * 
-	 * the movable printframe
-	 */	
-	var printBox = null;
-	
-	eventAfterMapRequest.register(function () {
-		if (printBox !== null) {
-			printBox.repaint();
-		}
-	});
-	/**
- 	 * Method: createPrintBox
-	 * 
-	 * creates a printBox in the current view, calculates the scale 
-	 * (tbd. if not set from the config) so that the printbox fits in the mapframe.
-	 * Width and height are taken from the configuration.
-	 */
-	this.createPrintBox = function () {
-		size = "A4";
-		//document.form1.size.value = size;
-		format = "portrait";
-		var w, h;
-		//validate();
-		var map = getMapObjByName(myTarget);
-		var map_el = map.getDomElement();
-		var jqForm = $("#"+myId+"_form");
-		var $scaleInput = $("#scale");
-
-		if (printBox !== null) {
-			printBox.destroy();
-			printBox = null;
-			jqForm[0].scale.value = "";
-			jqForm[0].coordinates.value = "";
-			jqForm[0].angle.value = "";
-		}
-		else {
-			printBox = new Mapbender.PrintBox({
-				target : myTarget,
-				printWidth : getPDFMapSize("width")/10,
-				printHeight : getPDFMapSize("height")/10,
-				scale : $scaleInput.size() > 0 && !isNaN(parseInt($scaleInput.val(), 10)) ? 
-					parseInt($scaleInput.val(), 10) : 
-					Math.pow(10, Math.floor(Math.log(map.getScale())/Math.LN10)),
-				afterChangeAngle : function (obj) {
-					if (typeof(obj) == "object") {
-						if (typeof(obj.angle) == "number") {
-							jqForm[0].angle.value = obj.angle;
-						}
-						if (obj.coordinates) {
-							jqForm[0].coordinates.value = String(obj.coordinates);
-						}
-					}
-				},
-				afterChangeSize : function (obj) {
-					if (typeof(obj) == "object") {
-						if (obj.scale) {
-							jqForm[0].scale.value = parseInt(obj.scale / 10, 10) * 10;
-						}
-						if (obj.coordinates) {
-							jqForm[0].coordinates.value = String(obj.coordinates);
-						}
-					}
-				}
-			});
-			printBox.paintPoints();
-			printBox.paintBox();
-
-		}
-	};
-
-	/**
- 	 * Method: getPDFMapSize
-	 * 
-	 * checks the actual config for the size w/h values.
-	 *
-	 * Parameters:
-	 * key      - string, the key which value to retrieve (currently width or height)
-	 */	
-	var getPDFMapSize = function (key) {
-		for (var page in actualConfig.pages) {
-			for (var pageElement in actualConfig.pages[page].elements) {
-				if (actualConfig.pages[page].elements[pageElement].type == "map") {
-					return actualConfig.pages[page].elements[pageElement][key];
-				}
-			}
-		} 
-	};
-
-	/**
- 	 * Method: destroyPrintBox
-	 * 
-	 * removes an existing printBox.
-	 */	
-	var destroyPrintBox = function () {
-		if (printBox) {
-			printBox.destroy();
-		}
-	};
-	
-	/**
- 	 * Method: mod_printPDF_init
-	 * 
-	 * initializes the print modules, generates template chooser and loads first configuration.
-	 */	
-	var mod_printPDF_init = function () {
-		/* first we'd need to build the configuration selection */
-		buildConfigSelector();	
-		/* second we'd need to read the json configuration */
-		that.loadConfig(mbPrintConfigFilenames[0]);
-	};
-
-	/**
- 	 * Method: loadConfig
-	 * 
-	 * GETs the config, build corresponding form, remove an existing printBox
-	 */		
-	this.loadConfig = function (configFilename, callback) {
-		$.get(mbPrintConfigPath + configFilename, function(json, status){
-		    actualConfig = $.parseJSON(json);
-		    buildForm(); 
-		    hookForm();
-			if (typeof callback === "function") {
-				printBox = null;
-				callback();
-			}
-		});
-		destroyPrintBox();
-	};
-
-	/**
- 	 * Method: hookForm
-	 * 
-	 * utility method to connect the form plugin to the print form.
-	 */	
-	var hookForm = function () {
-		var o = {
-	   		url:			'../print/printFactory.php', 
-	   		type:			'post',
-	   		dataType:		'json',
-	   		beforeSubmit: 	validate,
-	   		success:    	showResult
-		};
-		$("#"+myId+"_form").ajaxForm(o);
-	};
-	
-	/**
-	 * Change status of the working elements. These should begin with "$myId_working" 
-	 *
-	 * @param {String} newStatus either "hide or "show"
-	 */
-	var showHideWorking = function (newStatus) {
-		if (newStatus=="hide") {
-	    	$("[id^='"+myId+"_working']").hide();
-		}
-	    else {
-	    	$("[id^='"+myId+"_working']").show();	
-		}
-	};
-	
-	/**
-	 * update form values helper function
-	 *
-	 */
-	var updateFormField = function (formData, key, value) {
-		for(var j=0; j < formData.length; j++){
-			if (formData[j].name == key) {
-				formData[j].value = value;
-				break;
-			}
-		}	
-	};
-
-	var getCurrentResolution = function (type) {
-
-		// default resolution is 72 dpi
-		var dpi = 72;
-
-		// set resolution according to map configuration in template
-		for (var i in actualConfig.pages) {
-			var page = actualConfig.pages[i];
-			for (var j in page.elements) {
-				var el = page.elements[j];
-				if (type === el.type && typeof el.res_dpi === "number") {
-					dpi = el.res_dpi;
-				}
-			}
-		}
-		// set resolution according to resolution select box (if present)
-
-		// check if hq print is requested
-		var resolutionControl = null;
-		for (var i in actualConfig.controls) {
-			var c = actualConfig.controls[i];
-			try {
-				for (var j in c.pageElementsLink) {
-					if (c.pageElementsLink[j] === "res_dpi") {
-						resolutionControl = typeof c.id === "string" &&
-							c.id.length > 0 ? $("#" + c.id) : null;
-					}
-				}
-			}
-			catch (e) {
-			}
-		}
-		if (resolutionControl !== null && resolutionControl.size() === 1) {
-			dpi = resolutionControl.val();
-		}
-		return parseInt(dpi, 10);
-	};
-
-	var replaceMapFileForHighQualityPrint = function (currentMapUrl, type) {
-		var dpi = getCurrentResolution(type);
-		// replace map file with hq map file (if configured)
-		var hqmapfiles = $.isArray(options.highqualitymapfiles) ?
-			options.highqualitymapfiles : [];
-		for (var i = 0; i < hqmapfiles.length; i++) {
-			var exp = new RegExp(hqmapfiles[i].pattern);
-			if (hqmapfiles[i].pattern && typeof currentMapUrl === "string" && currentMapUrl.match(exp)) {
-				// check if mapping in current resolution exists
-				var resolutions = hqmapfiles[i].replacement;
-				var resolutionExists = false;
-				for (var r in resolutions) {
-					if (parseInt(r, 10) === dpi) {
-						resolutionExists = true;
-					}
-				}
-				if (resolutionExists) {
-					// replace with hqmapfile
-					var hqmapfile = resolutions[dpi];
-					currentMapUrl = currentMapUrl.replace(exp, hqmapfile);
-				}
-			}
-		}
-		return currentMapUrl;
-	};
-
-	/**
-	 * Validates and updates form data values.
-	 * Adds the elements before the submit button.
-	 *
-	 * @see jquery.forms#beforeSubmitHandler
-	 */
-	var validate = function (formData, jqForm, params) {
-		showHideWorking("show");
-		
-		// map urls
-		var ind = getMapObjIndexByName(myTarget);
-		var f = jqForm[0];
-		f.map_url.value = '';
-		
-		var scale = f.scale.value || mb_mapObj[ind].getScale();
-		scale = parseInt(scale, 10);
-		
-		var legendUrlArray = [];
-		f.overview_url.value = '';
-		for(var i=0; i < mb_mapObj[ind].wms.length; i++){
-			var currentWms = mb_mapObj[ind].wms[i];
-			if(mb_mapObj[ind].wms[i].gui_wms_visible > 0){
-				if (mb_mapObj[ind].wms[i].mapURL != false && mb_mapObj[ind].wms[i].mapURL != 'false' && mb_mapObj[ind].wms[i].mapURL != ''){   
-					if(f.map_url.value != ""){
-						f.map_url.value += '___';
-					}      
-					var currentMapUrl = mb_mapObj[ind].getMapUrl(i, mb_mapObj[ind].getExtentInfos(), scale);
-					
-					currentMapUrl = replaceMapFileForHighQualityPrint(currentMapUrl, "map");
-					f.map_url.value += currentMapUrl
-
-					var wmsLegendObj = [];
-					
-					var layers = currentWms.getLayers(mb_mapObj[ind], scale);
-					for (var j = 0; j < layers.length; j++) {
-						var currentLayer = currentWms.getLayerByLayerName(layers[j]);
-						// TODO: add only visible layers
-						var isVisible = (currentLayer.gui_layer_visible === 1);
-						var hasNoChildren = (!currentLayer.has_childs);
-						if (isVisible && hasNoChildren){
-							var layerLegendObj = {};
-							layerLegendObj.name = currentLayer.layer_name;
-							layerLegendObj.title = currentWms.getTitleByLayerName(currentLayer.layer_name);
-							var layerStyle = currentWms.getCurrentStyleByLayerName(currentLayer.layer_name);
-							if (layerStyle === false) {
-								layerStyle = "default";
-							}
-							layerLegendObj.legendUrl = currentWms.getLegendUrlByGuiLayerStyle(currentLayer.layer_name, layerStyle);
-							if (layerLegendObj.legendUrl !== false) {
-								wmsLegendObj.push(layerLegendObj);
-							}
-						}
-					}
-					if (wmsLegendObj.length > 0) {
-						var tmpObj = {};
-						tmpObj[currentWms.wms_currentTitle] = wmsLegendObj;
-						legendUrlArray.push(tmpObj);
-					}
-				}
-			}
-		}
-		updateFormField(formData, "legend_url", $.toJSON(legendUrlArray));
-		updateFormField(formData, "map_url", f.map_url.value);
-		updateFormField(formData, "scale", scale);
-		
-		//overview_url
-		var ind_overview = getMapObjIndexByName('overview');
-		if(mb_mapObj[ind_overview].mapURL != false ){
-		    var overviewUrl = mb_mapObj[ind_overview].mapURL;
-			overviewUrl = $.isArray(overviewUrl) ? overviewUrl[0] : overviewUrl;
-
-		    f.overview_url.value = replaceMapFileForHighQualityPrint(overviewUrl, "overview");
-
-			updateFormField(formData, "overview_url", f.overview_url.value);
-		}
-		
-		updateFormField(formData, "map_scale", mb_getScale(myTarget));
-		// write the measured coordinates
-		if (typeof(mod_measure_RX) !== "undefined") {
-			var tmp_x = '';
-			var tmp_y = '';
-			for(i = 0; i < mod_measure_RX.length; i++) {
-				if(tmp_x != '') {
-					tmp_x += ',';
-				}
-				tmp_x += mod_measure_RX[i];
-			}
-			for(i = 0; i < mod_measure_RY.length; i++) {
-				if(tmp_y != '') {
-					tmp_y += ',';
-				}
-				tmp_y += mod_measure_RY[i];
-			}
-			updateFormField(formData, "measured_x_values", tmp_x);
-			updateFormField(formData, "measured_y_values", tmp_y);
-		}	
-		
-		
-		if (f.map_url.value!="") {
-			//return true;
-		} else {
-		    showHideWorking("hide");
-			return false;
-		}
-	};
-
-	/**
- 	 * Method: showResult
-	 * 
-	 * load the generated PDF from the returned URL as an attachment, 
-	 * that triggers a download popup or is displayed in PDF plugin.
-	 */		
-	var showResult = function (res, text) {
-		if (text == 'success') {
-			var $downloadFrame = $("#" + myId + "_frame");
-			if ($downloadFrame.size() === 0) {
-				$downloadFrame = $(
-					"<iframe id='" + myId + "_frame' name='" + 
-					myId + "_frame' width='0' height='0' style='display:none'></iframe>"
-				).appendTo("body");
-			}
-			if ($.browser.msie && $.browser.version === "6.0") {
-				var newWin = window.open(stripslashes(res.outputFileName), "<?php echo htmlentities(_mb("print document"), ENT_QUOTES, "UTF-8");?>", "width=200,height=200,left=700,top=200,resizable=yes");
-			}
-			else {
-				window.frames[myId + "_frame"].location.href = 
-					stripslashes(res.outputFileName);
-			}
-			showHideWorking("hide");	
-		}
-		else {
-			/* something went wrong */
-			$("#"+myId+"_result").html(text);
-		}
-	};
-	
-	/**
-	 * Generates form elements as specified in the config controls object.
-	 * Adds the elements before the submit button.
-	 * 
-	 * @param {Object} json the config object in json
-	 */
-	var buildForm = function () {
-		$(".print_option_dyn").remove();
-		var str = "";
-		for (var item in actualConfig.controls) {
-			var element = actualConfig.controls[item];
-			var element_id = myId + "_" + element.id;
-			if (element.type != "hidden") {
-				str += '<div class="print_option_dyn">\n';	
-				str += '<label class="print_label" for="'+element.id+'">'+element.label+'</label>\n';
-			} else {
-				str += '<div class="print_option_dyn" style="display:none;">\n';	
-			}
-			switch (element.type) {
-				case "text":
-					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'" size="'+element.size+'"><br>\n';
-					break;
-				case "hidden":
-					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'">\n';
-					break;				
-				case "textarea":
-					str += '<textarea id="'+element.id+'" name="'+element.id+'" size="'+element.size+'"></textarea><br>\n';
-					break;				
-				case "select":
-					str += '<select id="'+element.id+'" name="'+element.id+'" size="1">\n';
-					for (var option_index in element.options) {
-						option = element.options[option_index];
-						str += '<option value="'+option.value+'">'+option.label+'</option>\n';
-					}
-					str += '</select><br>\n';
-					break;
-			}
-			str += '</div>\n';
-		}
-		if (str) {
-			$("#" + myId + "_formsubmit").before(str);
-			$("#scale").keydown(function (e) {
-				if (e.keyCode === 13) {
-					return false;
-				}
-			}).keyup(function (e) {
-				if (e.keyCode === 13) {
-					return false;
-				}
-				var scale = parseInt(this.value, 10);
-				if (isNaN(scale) || typeof printBox === "undefined") {
-					return true;
-				}
-				printBox.setScale(scale);
-				return true;
-			});
-			$("#angle").keydown(function (e) {
-				if (e.keyCode === 13) {
-					return false;
-				}
-			}).keyup(function (e) {
-				if (e.keyCode === 13) {
-					return false;
-				}
-				var angle = parseInt(this.value, 10);
-				if (isNaN(angle) || typeof printBox === "undefined") {
-					return true;
-				}
-				printBox.setAngle(angle);
-				return true;
-			});
-		}
-	};
-	
-	/**
-	 * Generates the configuration select element from the gui element vars
-	 * mbPrintConfigFilenames and mbPrintConfigTitles
-	 */
-	var buildConfigSelector = function () {
-		var str = "";
-		str += '<label class="print_label" for="printPDF_template">Vorlage</label>\n';
-		str += '<select id="printPDF_template" name="printPDF_template" size="1">\n';
-		for (var i = 0; i < mbPrintConfigFilenames.length; i++) {
-			str += '<option value="'+mbPrintConfigFilenames[i]+'">'+mbPrintConfigTitles[i]+'</option>\n';
-		}
-		str += '</select><img id="printPDF_handle" src="../print/img/shape_handles.png" title="<?php echo htmlentities(_mb("use print box"), ENT_QUOTES, "UTF-8");?>">\n';
-		if (str) {
-			$("#printPDF_selector").append(str).find("#printPDF_template").change(function () {
-				printObj.loadConfig(mbPrintConfigFilenames[this.selectedIndex], function () {
-					printObj.createPrintBox()
-				});			
-			});
-			$("#printPDF_handle").click(function () {
-				printObj.createPrintBox();
-			});
-			$("#printPDF_working").bgiframe({ 
-				src: "BLOCKED SCRIPT'&lt;html&gt;&lt;/html&gt;';",
-				width: 200,
-				height: 200
-			});
-		}
-	};
-	
-	var stripslashes = function ( str ) {
-	    return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
-	};
-
-};
-
-var printObj = new PrintPDF(options);

Copied: trunk/mapbender/http/plugins/mb_print.php (from rev 7482, trunk/mapbender/http/plugins/mb_print.js)
===================================================================
--- trunk/mapbender/http/plugins/mb_print.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_print.php	2011-01-28 10:41:27 UTC (rev 7483)
@@ -0,0 +1,587 @@
+/**
+ * Package: printPDF
+ *
+ * Description:
+ * Mapbender print PDF with PDF templates module.
+ * 
+ * Files:
+ *  - http/plugins/mb_print.php
+ *  - http/print/classes
+ *  - http/print/printFactory.php
+ *  - http/print/printPDF_download.php
+ *  - lib/printbox.js
+ *
+ * SQL:
+ * > INSERT INTO gui_element(fkey_gui_id, e_id, e_pos, e_public, e_comment, 
+ * > e_title, e_element, e_src, e_attributes, e_left, e_top, e_width, 
+ * > e_height, e_z_index, e_more_styles, e_content, e_closetag, e_js_file, 
+ * > e_mb_mod, e_target, e_requires, e_url) VALUES('<appId>','printPDF',
+ * > 2,1,'pdf print','Print','div','','',1,1,2,2,5,'',
+ * > '<div id="printPDF_working_bg"></div><div id="printPDF_working"><img src="../img/indicator_wheel.gif" style="padding:10px 0 0 10px">Generating PDF</div><div id="printPDF_input"><form id="printPDF_form" action="../print/printFactory.php"><div id="printPDF_selector"></div><div class="print_option"><input type="hidden" id="map_url" name="map_url" value=""/><input type="hidden" id="legend_url" name="legend_url" value=""/><input type="hidden" id="overview_url" name="overview_url" value=""/><input type="hidden" id="map_scale" name="map_scale" value=""/><input type="hidden" name="measured_x_values" /><input type="hidden" name="measured_y_values" /><br /></div><div class="print_option" id="printPDF_formsubmit"><input id="submit" type="submit" value="Print"><br /></div></form><div id="printPDF_result"></div></div>',
+ * > 'div','../plugins/mb_print.php',
+ * > '../../lib/printbox.js,../extensions/jquery-ui-1.7.2.custom/development-bundle/external/bgiframe/jquery.bgiframe.min.js,../extensions/jquery.form.min.js',
+ * > 'mapframe1','','http://www.mapbender.org/index.php/Print');
+ * >
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
+ * > var_value, context, var_type) VALUES('<appId>', 'printPDF', 
+ * > 'mbPrintConfig', '{"Standard": "mapbender_template.json"}', '' ,'var');
+ * >
+ * > INSERT INTO gui_element_vars(fkey_gui_id, fkey_e_id, var_name, 
+ * > var_value, context, var_type) VALUES('<appId>', 'body', 
+ * > 'print_css', '../css/print_div.css', '' ,'file/css');
+ * 
+ * Help:
+ * http://www.mapbender.org/PrintPDF_with_template
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Michael_Schulz
+ * http://www.mapbender.org/User:Christoph_Baudson
+ * 
+ * Parameters:
+ * mbPrintConfig      - *[optional]* object with name and filename of template,
+ * 							like 	{
+ * 										"Standard": "a_template.json",
+ * 										"Different": "another_template.json"
+ * 									}
+ *
+ * License:
+ * Copyright (c) 2009, Open Source Geospatial Foundation
+ * This program is dual licensed under the GNU General Public License 
+ * and Simplified BSD license.  
+ * http://svn.osgeo.org/mapbender/trunk/mapbender/license/license.txt
+ */
+
+var myTarget = options.target ? options.target[0] : "mapframe1";
+var myId = options ? options.id : "printPDF";
+
+var mbPrintConfig = options.mbPrintConfig;
+
+/* the array of json print config files */
+
+if (typeof mbPrintConfig === "object") {
+	mbPrintConfigFilenames = [];
+	mbPrintConfigTitles = [];
+	for (var i in mbPrintConfig) {
+		mbPrintConfigFilenames.push(mbPrintConfig[i]);
+		mbPrintConfigTitles.push(i);
+	}
+}
+if (typeof mbPrintConfigFilenames === "undefined") {
+	mbPrintConfigFilenames = ["mapbender_template.json"];
+}
+
+if (typeof mbPrintConfigTitles === "undefined") {
+	mbPrintConfigTitles = ["Default"];
+}
+
+
+var mbPrintConfigPath = "../print/";
+
+
+/* ------------- printbox addition ------------- */
+
+var PrintPDF = function (options) {
+
+	var that = this;
+	
+	/**
+ 	 * Property: actualConfig
+	 * 
+	 * object, holds the actual configuration after loading the json file
+	 */
+	var actualConfig;
+
+	/**
+ 	 * constructor
+	 */
+	eventInit.register(function () {
+		mod_printPDF_init();
+	});
+	
+	/**
+ 	 * Property: printBox
+	 * 
+	 * the movable printframe
+	 */	
+	var printBox = null;
+	
+	eventAfterMapRequest.register(function () {
+		if (printBox !== null) {
+			printBox.repaint();
+		}
+	});
+	/**
+ 	 * Method: createPrintBox
+	 * 
+	 * creates a printBox in the current view, calculates the scale 
+	 * (tbd. if not set from the config) so that the printbox fits in the mapframe.
+	 * Width and height are taken from the configuration.
+	 */
+	this.createPrintBox = function () {
+		size = "A4";
+		//document.form1.size.value = size;
+		format = "portrait";
+		var w, h;
+		//validate();
+		var map = getMapObjByName(myTarget);
+		var map_el = map.getDomElement();
+		var jqForm = $("#"+myId+"_form");
+		var $scaleInput = $("#scale");
+
+		if (printBox !== null) {
+			printBox.destroy();
+			printBox = null;
+			jqForm[0].scale.value = "";
+			jqForm[0].coordinates.value = "";
+			jqForm[0].angle.value = "";
+		}
+		else {
+			printBox = new Mapbender.PrintBox({
+				target : myTarget,
+				printWidth : getPDFMapSize("width")/10,
+				printHeight : getPDFMapSize("height")/10,
+				scale : $scaleInput.size() > 0 && !isNaN(parseInt($scaleInput.val(), 10)) ? 
+					parseInt($scaleInput.val(), 10) : 
+					Math.pow(10, Math.floor(Math.log(map.getScale())/Math.LN10)),
+				afterChangeAngle : function (obj) {
+					if (typeof(obj) == "object") {
+						if (typeof(obj.angle) == "number") {
+							jqForm[0].angle.value = obj.angle;
+						}
+						if (obj.coordinates) {
+							jqForm[0].coordinates.value = String(obj.coordinates);
+						}
+					}
+				},
+				afterChangeSize : function (obj) {
+					if (typeof(obj) == "object") {
+						if (obj.scale) {
+							jqForm[0].scale.value = parseInt(obj.scale / 10, 10) * 10;
+						}
+						if (obj.coordinates) {
+							jqForm[0].coordinates.value = String(obj.coordinates);
+						}
+					}
+				}
+			});
+			printBox.paintPoints();
+			printBox.paintBox();
+
+		}
+	};
+
+	/**
+ 	 * Method: getPDFMapSize
+	 * 
+	 * checks the actual config for the size w/h values.
+	 *
+	 * Parameters:
+	 * key      - string, the key which value to retrieve (currently width or height)
+	 */	
+	var getPDFMapSize = function (key) {
+		for (var page in actualConfig.pages) {
+			for (var pageElement in actualConfig.pages[page].elements) {
+				if (actualConfig.pages[page].elements[pageElement].type == "map") {
+					return actualConfig.pages[page].elements[pageElement][key];
+				}
+			}
+		} 
+	};
+
+	/**
+ 	 * Method: destroyPrintBox
+	 * 
+	 * removes an existing printBox.
+	 */	
+	var destroyPrintBox = function () {
+		if (printBox) {
+			printBox.destroy();
+		}
+	};
+	
+	/**
+ 	 * Method: mod_printPDF_init
+	 * 
+	 * initializes the print modules, generates template chooser and loads first configuration.
+	 */	
+	var mod_printPDF_init = function () {
+		/* first we'd need to build the configuration selection */
+		buildConfigSelector();	
+		/* second we'd need to read the json configuration */
+		that.loadConfig(mbPrintConfigFilenames[0]);
+	};
+
+	/**
+ 	 * Method: loadConfig
+	 * 
+	 * GETs the config, build corresponding form, remove an existing printBox
+	 */		
+	this.loadConfig = function (configFilename, callback) {
+		// the dataType to $.get is given explicitely, because there were instances of Mapbender that were returning 
+		// either json or a string, which trips up $.parseJSON which was being used in the callback
+		$.get(mbPrintConfigPath + configFilename, function(json, status){
+		    actualConfig = json;
+		    buildForm(); 
+		    hookForm();
+			if (typeof callback === "function") {
+				printBox = null;
+				callback();
+			}
+		},"json");
+		destroyPrintBox();
+	};
+
+	/**
+ 	 * Method: hookForm
+	 * 
+	 * utility method to connect the form plugin to the print form.
+	 */	
+	var hookForm = function () {
+		var o = {
+	   		url:			'../print/printFactory.php', 
+	   		type:			'post',
+	   		dataType:		'json',
+	   		beforeSubmit: 	validate,
+	   		success:    	showResult
+		};
+		$("#"+myId+"_form").ajaxForm(o);
+	};
+	
+	/**
+	 * Change status of the working elements. These should begin with "$myId_working" 
+	 *
+	 * @param {String} newStatus either "hide or "show"
+	 */
+	var showHideWorking = function (newStatus) {
+		if (newStatus=="hide") {
+	    	$("[id^='"+myId+"_working']").hide();
+		}
+	    else {
+	    	$("[id^='"+myId+"_working']").show();	
+		}
+	};
+	
+	/**
+	 * update form values helper function
+	 *
+	 */
+	var updateFormField = function (formData, key, value) {
+		for(var j=0; j < formData.length; j++){
+			if (formData[j].name == key) {
+				formData[j].value = value;
+				break;
+			}
+		}	
+	};
+
+	var getCurrentResolution = function (type) {
+
+		// default resolution is 72 dpi
+		var dpi = 72;
+
+		// set resolution according to map configuration in template
+		for (var i in actualConfig.pages) {
+			var page = actualConfig.pages[i];
+			for (var j in page.elements) {
+				var el = page.elements[j];
+				if (type === el.type && typeof el.res_dpi === "number") {
+					dpi = el.res_dpi;
+				}
+			}
+		}
+		// set resolution according to resolution select box (if present)
+
+		// check if hq print is requested
+		var resolutionControl = null;
+		for (var i in actualConfig.controls) {
+			var c = actualConfig.controls[i];
+			try {
+				for (var j in c.pageElementsLink) {
+					if (c.pageElementsLink[j] === "res_dpi") {
+						resolutionControl = typeof c.id === "string" &&
+							c.id.length > 0 ? $("#" + c.id) : null;
+					}
+				}
+			}
+			catch (e) {
+			}
+		}
+		if (resolutionControl !== null && resolutionControl.size() === 1) {
+			dpi = resolutionControl.val();
+		}
+		return parseInt(dpi, 10);
+	};
+
+	var replaceMapFileForHighQualityPrint = function (currentMapUrl, type) {
+		var dpi = getCurrentResolution(type);
+		// replace map file with hq map file (if configured)
+		var hqmapfiles = $.isArray(options.highqualitymapfiles) ?
+			options.highqualitymapfiles : [];
+		for (var i = 0; i < hqmapfiles.length; i++) {
+			var exp = new RegExp(hqmapfiles[i].pattern);
+			if (hqmapfiles[i].pattern && typeof currentMapUrl === "string" && currentMapUrl.match(exp)) {
+				// check if mapping in current resolution exists
+				var resolutions = hqmapfiles[i].replacement;
+				var resolutionExists = false;
+				for (var r in resolutions) {
+					if (parseInt(r, 10) === dpi) {
+						resolutionExists = true;
+					}
+				}
+				if (resolutionExists) {
+					// replace with hqmapfile
+					var hqmapfile = resolutions[dpi];
+					currentMapUrl = currentMapUrl.replace(exp, hqmapfile);
+				}
+			}
+		}
+		return currentMapUrl;
+	};
+
+	/**
+	 * Validates and updates form data values.
+	 * Adds the elements before the submit button.
+	 *
+	 * @see jquery.forms#beforeSubmitHandler
+	 */
+	var validate = function (formData, jqForm, params) {
+		showHideWorking("show");
+		
+		// map urls
+		var ind = getMapObjIndexByName(myTarget);
+		var f = jqForm[0];
+		f.map_url.value = '';
+		
+		var scale = f.scale.value || mb_mapObj[ind].getScale();
+		scale = parseInt(scale, 10);
+		
+		var legendUrlArray = [];
+		f.overview_url.value = '';
+		for(var i=0; i < mb_mapObj[ind].wms.length; i++){
+			var currentWms = mb_mapObj[ind].wms[i];
+			if(mb_mapObj[ind].wms[i].gui_wms_visible > 0){
+				if (mb_mapObj[ind].wms[i].mapURL != false && mb_mapObj[ind].wms[i].mapURL != 'false' && mb_mapObj[ind].wms[i].mapURL != ''){   
+					if(f.map_url.value != ""){
+						f.map_url.value += '___';
+					}      
+					var currentMapUrl = mb_mapObj[ind].getMapUrl(i, mb_mapObj[ind].getExtentInfos(), scale);
+					
+					currentMapUrl = replaceMapFileForHighQualityPrint(currentMapUrl, "map");
+					f.map_url.value += currentMapUrl
+
+					var wmsLegendObj = [];
+					
+					var layers = currentWms.getLayers(mb_mapObj[ind], scale);
+					for (var j = 0; j < layers.length; j++) {
+						var currentLayer = currentWms.getLayerByLayerName(layers[j]);
+						// TODO: add only visible layers
+						var isVisible = (currentLayer.gui_layer_visible === 1);
+						var hasNoChildren = (!currentLayer.has_childs);
+						if (isVisible && hasNoChildren){
+							var layerLegendObj = {};
+							layerLegendObj.name = currentLayer.layer_name;
+							layerLegendObj.title = currentWms.getTitleByLayerName(currentLayer.layer_name);
+							var layerStyle = currentWms.getCurrentStyleByLayerName(currentLayer.layer_name);
+							if (layerStyle === false) {
+								layerStyle = "default";
+							}
+							layerLegendObj.legendUrl = currentWms.getLegendUrlByGuiLayerStyle(currentLayer.layer_name, layerStyle);
+							if (layerLegendObj.legendUrl !== false) {
+								wmsLegendObj.push(layerLegendObj);
+							}
+						}
+					}
+					if (wmsLegendObj.length > 0) {
+						var tmpObj = {};
+						tmpObj[currentWms.wms_currentTitle] = wmsLegendObj;
+						legendUrlArray.push(tmpObj);
+					}
+				}
+			}
+		}
+		updateFormField(formData, "legend_url", $.toJSON(legendUrlArray));
+		updateFormField(formData, "map_url", f.map_url.value);
+		updateFormField(formData, "scale", scale);
+		
+		//overview_url
+		var ind_overview = getMapObjIndexByName('overview');
+		if(mb_mapObj[ind_overview].mapURL != false ){
+		    var overviewUrl = mb_mapObj[ind_overview].mapURL;
+			overviewUrl = $.isArray(overviewUrl) ? overviewUrl[0] : overviewUrl;
+
+		    f.overview_url.value = replaceMapFileForHighQualityPrint(overviewUrl, "overview");
+
+			updateFormField(formData, "overview_url", f.overview_url.value);
+		}
+		
+		updateFormField(formData, "map_scale", mb_getScale(myTarget));
+		// write the measured coordinates
+		if (typeof(mod_measure_RX) !== "undefined") {
+			var tmp_x = '';
+			var tmp_y = '';
+			for(i = 0; i < mod_measure_RX.length; i++) {
+				if(tmp_x != '') {
+					tmp_x += ',';
+				}
+				tmp_x += mod_measure_RX[i];
+			}
+			for(i = 0; i < mod_measure_RY.length; i++) {
+				if(tmp_y != '') {
+					tmp_y += ',';
+				}
+				tmp_y += mod_measure_RY[i];
+			}
+			updateFormField(formData, "measured_x_values", tmp_x);
+			updateFormField(formData, "measured_y_values", tmp_y);
+		}	
+		
+		
+		if (f.map_url.value!="") {
+			//return true;
+		} else {
+		    showHideWorking("hide");
+			return false;
+		}
+	};
+
+	/**
+ 	 * Method: showResult
+	 * 
+	 * load the generated PDF from the returned URL as an attachment, 
+	 * that triggers a download popup or is displayed in PDF plugin.
+	 */		
+	var showResult = function (res, text) {
+		if (text == 'success') {
+			var $downloadFrame = $("#" + myId + "_frame");
+			if ($downloadFrame.size() === 0) {
+				$downloadFrame = $(
+					"<iframe id='" + myId + "_frame' name='" + 
+					myId + "_frame' width='0' height='0' style='display:none'></iframe>"
+				).appendTo("body");
+			}
+			if ($.browser.msie && $.browser.version === "6.0") {
+				var newWin = window.open(stripslashes(res.outputFileName), "<?php echo htmlentities(_mb("print document"), ENT_QUOTES, "UTF-8");?>", "width=200,height=200,left=700,top=200,resizable=yes");
+			}
+			else {
+				window.frames[myId + "_frame"].location.href = 
+					stripslashes(res.outputFileName);
+			}
+			showHideWorking("hide");	
+		}
+		else {
+			/* something went wrong */
+			$("#"+myId+"_result").html(text);
+		}
+	};
+	
+	/**
+	 * Generates form elements as specified in the config controls object.
+	 * Adds the elements before the submit button.
+	 * 
+	 * @param {Object} json the config object in json
+	 */
+	var buildForm = function () {
+		$(".print_option_dyn").remove();
+		var str = "";
+		for (var item in actualConfig.controls) {
+			var element = actualConfig.controls[item];
+			var element_id = myId + "_" + element.id;
+			if (element.type != "hidden") {
+				str += '<div class="print_option_dyn">\n';	
+				str += '<label class="print_label" for="'+element.id+'">'+element.label+'</label>\n';
+			} else {
+				str += '<div class="print_option_dyn" style="display:none;">\n';	
+			}
+			switch (element.type) {
+				case "text":
+					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'" size="'+element.size+'"><br>\n';
+					break;
+				case "hidden":
+					str += '<input type="'+element.type+'" name="'+element.id+'" id="'+element.id+'">\n';
+					break;				
+				case "textarea":
+					str += '<textarea id="'+element.id+'" name="'+element.id+'" size="'+element.size+'"></textarea><br>\n';
+					break;				
+				case "select":
+					str += '<select id="'+element.id+'" name="'+element.id+'" size="1">\n';
+					for (var option_index in element.options) {
+						option = element.options[option_index];
+						str += '<option value="'+option.value+'">'+option.label+'</option>\n';
+					}
+					str += '</select><br>\n';
+					break;
+			}
+			str += '</div>\n';
+		}
+		if (str) {
+			$("#" + myId + "_formsubmit").before(str);
+			$("#scale").keydown(function (e) {
+				if (e.keyCode === 13) {
+					return false;
+				}
+			}).keyup(function (e) {
+				if (e.keyCode === 13) {
+					return false;
+				}
+				var scale = parseInt(this.value, 10);
+				if (isNaN(scale) || typeof printBox === "undefined") {
+					return true;
+				}
+				printBox.setScale(scale);
+				return true;
+			});
+			$("#angle").keydown(function (e) {
+				if (e.keyCode === 13) {
+					return false;
+				}
+			}).keyup(function (e) {
+				if (e.keyCode === 13) {
+					return false;
+				}
+				var angle = parseInt(this.value, 10);
+				if (isNaN(angle) || typeof printBox === "undefined") {
+					return true;
+				}
+				printBox.setAngle(angle);
+				return true;
+			});
+		}
+	};
+	
+	/**
+	 * Generates the configuration select element from the gui element vars
+	 * mbPrintConfigFilenames and mbPrintConfigTitles
+	 */
+	var buildConfigSelector = function () {
+		var str = "";
+		str += '<label class="print_label" for="printPDF_template">Vorlage</label>\n';
+		str += '<select id="printPDF_template" name="printPDF_template" size="1">\n';
+		for (var i = 0; i < mbPrintConfigFilenames.length; i++) {
+			str += '<option value="'+mbPrintConfigFilenames[i]+'">'+mbPrintConfigTitles[i]+'</option>\n';
+		}
+		str += '</select><img id="printPDF_handle" src="../print/img/shape_handles.png" title="<?php echo htmlentities(_mb("use print box"), ENT_QUOTES, "UTF-8");?>">\n';
+		if (str) {
+			$("#printPDF_selector").append(str).find("#printPDF_template").change(function () {
+				printObj.loadConfig(mbPrintConfigFilenames[this.selectedIndex], function () {
+					printObj.createPrintBox()
+				});			
+			});
+			$("#printPDF_handle").click(function () {
+				printObj.createPrintBox();
+			});
+			$("#printPDF_working").bgiframe({ 
+				src: "BLOCKED SCRIPT'&lt;html&gt;&lt;/html&gt;';",
+				width: 200,
+				height: 200
+			});
+		}
+	};
+	
+	var stripslashes = function ( str ) {
+	    return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
+	};
+
+};
+
+var printObj = new PrintPDF(options);
+



More information about the Mapbender_commits mailing list