[Mapbender-commits] r8318 - in trunk/mapbender/http: classes plugins

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Thu Apr 19 03:07:33 EDT 2012


Author: armin11
Date: 2012-04-19 00:07:33 -0700 (Thu, 19 Apr 2012)
New Revision: 8318

Added:
   trunk/mapbender/http/plugins/mb_wms_scheduler_select.js
   trunk/mapbender/http/plugins/mb_wms_scheduler_server.php
Modified:
   trunk/mapbender/http/classes/class_user.php
Log:
Initial files for ows scheduler module

Modified: trunk/mapbender/http/classes/class_user.php
===================================================================
--- trunk/mapbender/http/classes/class_user.php	2012-04-19 07:06:13 UTC (rev 8317)
+++ trunk/mapbender/http/classes/class_user.php	2012-04-19 07:07:33 UTC (rev 8318)
@@ -740,6 +740,17 @@
 		return $wmsIdArray;
 	}
 
+	public function getOwnedWmsScheduler () {
+		$sql = "SELECT scheduler_id FROM scheduler, wms WHERE wms.wms_id = scheduler.fkey_wms_id AND wms.wms_owner = $1";
+		$res = db_prep_query($sql, array($this->id), array("i"));
+		$wmsSchedulerIdArray = array();
+		while ($row = db_fetch_array($res)) {
+			$wmsSchedulerIdArray[]= $row["scheduler_id"];
+		}
+		return $wmsSchedulerIdArray;
+	}
+
+
 	public function getOwnedGeodata () {
 		$sql = "SELECT metadata_id FROM mb_metadata WHERE fkey_mb_user_id = $1";
 		$res = db_prep_query($sql, array($this->id), array("i"));

Added: trunk/mapbender/http/plugins/mb_wms_scheduler_select.js
===================================================================
--- trunk/mapbender/http/plugins/mb_wms_scheduler_select.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_wms_scheduler_select.js	2012-04-19 07:07:33 UTC (rev 8318)
@@ -0,0 +1,336 @@
+/**
+ * Package: mb_wms_scheduler_select
+ *
+ * Description:
+ *
+ * Files:
+ *
+ * SQL:
+ * 
+ * Help:
+ *
+ * Maintainer:
+ * http://www.mapbender.org/User:Armin_Retterath
+ *
+ * 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 $wmsSchedulerSelect = $(this);
+$wmsSchedulerSelect.prepend("<img src='../img/indicator_wheel.gif'>");
+
+var WmsSchedulerSelectApi = function (o) {
+	var table = null;
+	var that = this;
+	var dataToEdit;
+
+	var fnGetSelected = function (oTableLocal){
+		var aReturn = [];
+		var aTrs = oTableLocal.fnGetNodes();
+		
+		for ( var i=0 ; i<aTrs.length ; i++ ){
+			if ( $(aTrs[i]).hasClass('row_selected') ){
+				aReturn.push( aTrs[i] );
+			}
+		}
+		return aReturn;
+	};
+	
+	//function to initialize form to edit scheduling parameters for update a specific wms
+	this.initEditForm = function(schedulerId) {
+			//get infos to edit from db via new ajax request
+			var req = new Mapbender.Ajax.Request({
+				url: "../plugins/mb_wms_scheduler_server.php",
+				method: "getWmsSchedulerEdit",
+				parameters: {
+					"id": schedulerId
+				},
+				callback: function (obj, result, message) {
+					if (!result) {
+						return;
+					}
+					//$("<div></div>").text(result).dialog({
+					//	modal: true
+					//});
+					//build editor
+					editDiv = $(document.createElement('div')).appendTo($('#' + options.id));
+					editDiv.attr({'id':'scheduleEditor'});
+					editDivForm = $(document.createElement('form')).appendTo(editDiv);
+					editDivForm.attr({'id':'edit_scheduler_form'});
+					//wms information
+					editDivFormWms = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormWmsLegend = $(document.createElement('legend')).appendTo(editDivFormWms);
+					editDivFormWmsLegend.append('WMS Title:');
+					editDivFormWms.append(obj.wms_id+' : '+obj.wms_title);
+					//update interval
+					editDivFormInterval = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormIntervalLegend = $(document.createElement('legend')).appendTo(editDivFormInterval);
+					editDivFormIntervalLegend.append('Update interval:');
+					editDivFormIntervalSelect = $(document.createElement('select')).appendTo(editDivFormInterval);
+
+					editDivFormIntervalSelect.attr({'id':'scheduler_interval'});
+
+					editDivFormIntervalOption1 = $(document.createElement('option')).appendTo(editDivFormIntervalSelect);
+					editDivFormIntervalOption1.attr({'value':'1 day'});
+					editDivFormIntervalOption1.append('1 day');
+					editDivFormIntervalOption2 = $(document.createElement('option')).appendTo(editDivFormIntervalSelect);
+					editDivFormIntervalOption2.attr({'value':'1 week'});
+					editDivFormIntervalOption2.append('1 week');
+					editDivFormIntervalOption3 = $(document.createElement('option')).appendTo(editDivFormIntervalSelect);
+					editDivFormIntervalOption3.attr({'value':'1 mon'});
+					editDivFormIntervalOption3.append('1 month');
+					editDivFormIntervalOption4 = $(document.createElement('option')).appendTo(editDivFormIntervalSelect);
+					editDivFormIntervalOption4.attr({'value':'1 year'});
+					editDivFormIntervalOption4.append('1 year');
+					$('option[value="'+obj.scheduler_interval+'"]').attr({'selected':'selected'});
+
+					//mail notification
+					editDivFormMail = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormMailLegend = $(document.createElement('legend')).appendTo(editDivFormMail);
+					editDivFormMailLegend.append('Notify per Mail:');
+					editDivFormMailCheckbox = $(document.createElement('input')).appendTo(editDivFormMail);
+					editDivFormMailCheckbox.attr({'type':'checkbox'});
+
+					editDivFormMailCheckbox.attr({'id':'scheduler_mail'});
+
+					if (obj.scheduler_mail == 1) {
+						editDivFormMailCheckbox.attr({'checked':'checked'});
+					}
+					//publish
+					editDivFormPublish = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormPublishLegend = $(document.createElement('legend')).appendTo(editDivFormPublish);
+					editDivFormPublishLegend.append('Publish via RSS/Twitter:');
+					editDivFormPublishCheckbox = $(document.createElement('input')).appendTo(editDivFormPublish);
+					editDivFormPublishCheckbox.attr({'type':'checkbox'});
+
+					editDivFormPublishCheckbox.attr({'id':'scheduler_publish'});
+
+					if (obj.scheduler_publish == 1) {
+						editDivFormPublishCheckbox.attr({'checked':'checked'});
+					}
+					//searchable
+					editDivFormSearchable = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormSearchableLegend = $(document.createElement('legend')).appendTo(editDivFormSearchable);
+					editDivFormSearchableLegend.append('Make new layer searchable:');
+					editDivFormSearchableCheckbox = $(document.createElement('input')).appendTo(editDivFormSearchable);
+					editDivFormSearchableCheckbox.attr({'type':'checkbox'});
+
+					editDivFormSearchableCheckbox.attr({'id':'scheduler_searchable'});
+
+
+					if (obj.scheduler_searchable == 1) {
+						editDivFormSearchableCheckbox.attr({'checked':'checked'});
+					}
+					//overwrite metadata
+					editDivFormOverwrite = $(document.createElement('fieldset')).appendTo(editDivForm);
+					editDivFormOverwriteLegend = $(document.createElement('legend')).appendTo(editDivFormOverwrite);
+					editDivFormOverwriteLegend.append('Overwrite edited metadata:');
+					editDivFormOverwriteCheckbox = $(document.createElement('input')).appendTo(editDivFormOverwrite);
+					editDivFormOverwriteCheckbox.attr({'type':'checkbox'});
+
+					editDivFormOverwriteCheckbox.attr({'id':'scheduler_overwrite'});
+
+					if (obj.scheduler_overwrite == 1) {
+						editDivFormOverwriteCheckbox.attr({'checked':'checked'});
+					}
+					editDiv.dialog({
+						title : "Scheduler editor", 
+						autoOpen : false,  
+						draggable : false,
+						modal : true,
+						width : 600,
+						//position : [600, 75],
+						buttons: {
+							"close": function() {
+								$('#scheduleEditor').remove();
+							},
+							"save": function() {
+								//read infos from form
+								//var editFormData = $('#edit_scheduler_form').serialize();
+								if ($('#scheduler_publish').attr("checked") == true) {
+									scheduler_publish = 1;
+								} else {
+									scheduler_publish = 0;
+								}
+								if ($('#scheduler_searchable').attr("checked") == true) {
+									scheduler_searchable = 1;
+								} else {
+									scheduler_searchable = 0;
+								}
+								if ($('#scheduler_mail').attr("checked") == true) {
+									scheduler_mail = 1;
+								} else {
+									scheduler_mail = 0;
+								}
+								if ($('#scheduler_overwrite').attr("checked") == true) {
+									scheduler_overwrite = 1;
+								} else {
+									scheduler_overwrite = 0;
+								}
+								data = {
+									scheduler_interval: $('#scheduler_interval').val(),
+									scheduler_publish: scheduler_publish,
+									wms_id: obj.wms_id,
+									scheduler_searchable: scheduler_searchable,
+									scheduler_mail:  scheduler_mail,
+									scheduler_overwrite: scheduler_overwrite
+								};
+								//push infos to server
+								that.updateWmsSchedule(schedulerId, data);
+								//kill form
+								editDiv.dialog("close");
+								$('#scheduleEditor').remove();
+								
+							}
+						},
+						close: function() {
+							$('#scheduleEditor').remove();
+						}
+					});
+					editDiv.dialog("open");
+				}
+			});
+			req.send();			
+	}
+
+	//function init form to add new scheduling for update own wms
+	this.initAddForm = function() {
+	
+	}
+
+	//function to delete scheduling of wms update
+	this.deleteWmsSchedule = function() {
+	
+	}
+	//function to add scheduling of wms update
+	this.addWmsSchedule = function() {
+	
+	}
+
+	//function to update scheduling parameters of wms update
+	this.updateWmsSchedule = function(schedulerId, data) {
+		var req = new Mapbender.Ajax.Request({
+				url: "../plugins/mb_wms_scheduler_server.php",
+				method: "updateWmsSchedule",
+				parameters: {
+					"schedulerId": schedulerId,
+					"data": data
+				},
+				callback: function (obj, result, message) {
+					/*if (!result) {
+						return;
+					}*/
+					
+					$("<div></div>").text(message).dialog({
+						modal: true
+					});
+					
+					that.reloadTable();
+				}
+		});
+		req.send();
+	}
+
+	
+	this.reloadTable = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_wms_scheduler_server.php",
+			method: "getWmsScheduler",
+			parameters: {
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				//delete old entries
+				table.fnClearTable();
+
+				var aoColumns = [];
+				for (var i in obj.header) {
+					if (obj.header[i] === "Scheduler ID") {
+						continue;
+					}
+					aoColumns.push({"sTitle": obj.header[i]});
+				}
+				
+				// add rows
+				for (var j in obj.data) {
+					var data = obj.data[j];
+					var schedulerId = data[0];
+					data.shift();
+					var index = table.fnAddData(data);
+					var rowNode = table.fnGetNodes(index[0]);
+					$(rowNode).data("schedulerId", schedulerId);
+				}
+			}
+		});
+		req.send();
+	}
+
+
+	this.getData = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_wms_scheduler_server.php",
+			method: "getWmsScheduler",
+			parameters: {
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				$wmsSchedulerSelect.find("img").remove();
+				
+				var aoColumns = [];
+				for (var i in obj.header) {
+					if (obj.header[i] === "Scheduler ID") {
+						continue;
+					}
+					aoColumns.push({"sTitle": obj.header[i]});
+				}
+
+				// initialize datatables
+				table = $wmsSchedulerSelect.find("table").dataTable({
+					"aoColumns": aoColumns,
+					"bJQueryUI": true
+				});
+				
+				// add rows
+				for (var j in obj.data) {
+					var data = obj.data[j];
+					var schedulerId = data[0];
+					data.shift();
+					var index = table.fnAddData(data);
+					var rowNode = table.fnGetNodes(index[0]);
+					$(rowNode).data("schedulerId", schedulerId);
+				}
+				
+				// make rows selectable
+				$wmsSchedulerSelect.find("tbody").click(function (e) {
+
+					$(table.fnSettings().aoData).each(function (){
+						$(this.nTr).removeClass('row_selected');
+					});
+
+					$(e.target.parentNode).addClass('row_selected');
+
+					var selectedRow = fnGetSelected(table);
+					id = $(selectedRow).data("schedulerId");
+					//start editor
+					that.initEditForm(id);	
+				});
+			}
+		});
+		req.send();
+	};
+	
+	this.events = {
+		selected: new Mapbender.Event()
+	};
+};
+
+$wmsSchedulerSelect.mapbender(new WmsSchedulerSelectApi(options));
+
+$wmsSchedulerSelect.mapbender("getData");

Added: trunk/mapbender/http/plugins/mb_wms_scheduler_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_wms_scheduler_server.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_wms_scheduler_server.php	2012-04-19 07:07:33 UTC (rev 8318)
@@ -0,0 +1,167 @@
+<?php
+require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+require_once dirname(__FILE__) . "/../classes/class_user.php";
+require_once dirname(__FILE__) . "/../classes/class_wms.php";
+require_once dirname(__FILE__) . "/../classes/class_Uuid.php";
+
+$ajaxResponse = new AjaxResponse($_POST);
+
+function abort ($message) {
+	global $ajaxResponse;
+	$ajaxResponse->setSuccess(false);
+	$ajaxResponse->setMessage($message);
+	$ajaxResponse->send();
+	die();
+};
+
+function getWmsScheduler ($wmsSchedulerId = null) {
+	$user = new User(Mapbender::session()->get("mb_user_id"));
+	$e = new mb_exception("plugins/mb_wms_scheduler_server.php: mb_user_id: ".$user);
+	$wmsSchedulerIdArray = $user->getOwnedWmsScheduler();
+
+	if (!is_null($wmsSchedulerId) && !in_array($wmsSchedulerId, $wmsSchedulerIdArray)) {
+		abort(_mb("You are not allowed to access this schedule settings."));
+	}
+	return $wmsSchedulerIdArray;
+}
+
+//validate user which sends ajax
+
+$user = new User(Mapbender::session()->get("mb_user_id"));
+
+switch ($ajaxResponse->getMethod()) {
+	case "getWmsScheduler" :
+		$wmsSchedulerIdArray = getWmsScheduler();		
+		$wmsSchedulerList = implode(",", $wmsSchedulerIdArray);
+		$sql = <<<SQL
+
+SELECT scheduler_id, wms_id, wms_title, to_timestamp(wms_timestamp), last_status, fkey_upload_id,  scheduler_interval,scheduler_mail,scheduler_publish,scheduler_searchable,scheduler_overwrite, scheduler_status FROM (SELECT scheduler_id, wms_id, fkey_wms_id, wms_title, wms_timestamp, scheduler_interval,scheduler_mail,scheduler_publish,scheduler_searchable,scheduler_overwrite,scheduler_status FROM scheduler INNER JOIN wms ON scheduler.fkey_wms_id=wms.wms_id WHERE scheduler.scheduler_id IN ($wmsSchedulerList)) AS test LEFT OUTER JOIN mb_wms_availability ON test.fkey_wms_id = mb_wms_availability.fkey_wms_id;
+
+SQL;
+		$res = db_query($sql);
+		$e = new mb_exception($sql);
+		$resultObj = array(
+			"header" => array(
+				_mb("Scheduler ID"),
+				_mb("WMS ID"),
+				_mb("WMS title"),
+				_mb("last change"),
+				_mb("last status"),
+				_mb("last monitoring"),
+				_mb("update interval"),
+				_mb("mail notification"),
+				_mb("publish"),
+				_mb("searchable"),
+				_mb("overwrite"),
+				_mb("update status")
+			), 
+			"data" => array()
+		);
+
+		while ($row = db_fetch_row($res)) {
+			// convert NULL to '', NULL values cause datatables to crash
+			$walk = array_walk($row, create_function('&$s', '$s=strval($s);'));
+			$resultObj["data"][]= $row;
+		}
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+	case "getWmsSchedulerEdit" :
+		$wmsSchedulerId =  $ajaxResponse->getParameter("id");	
+		$sql = <<<SQL
+
+SELECT scheduler_id, wms_id, wms_title, wms_owner, scheduler_interval,scheduler_mail,scheduler_publish, scheduler_overwrite, scheduler_searchable FROM scheduler INNER JOIN wms ON scheduler.fkey_wms_id=wms.wms_id WHERE scheduler.scheduler_id = $1;
+
+SQL;
+		$v = array($wmsSchedulerId);
+		$t = array('i');
+		$res = db_prep_query($sql,$v,$t);
+		$row = array();
+		if ($res) {
+			$row = db_fetch_assoc($res);
+			$resultObj["scheduler_id"] = $row["scheduler_id"];
+			$resultObj["wms_id"] = $row["wms_id"];
+			$resultObj["wms_title"] = $row["wms_title"];
+			if (intval($row["wms_owner"]) !== intval($user->id) ) {
+				$ajaxResponse->setSuccess(false);
+				$ajaxResponse->setMessage(_mb("The user is not allowed to alter the update scheduler."));
+				break;
+			}
+			$resultObj["wms_owner"] = $row["wms_owner"];
+			$resultObj["scheduler_interval"] = $row["scheduler_interval"];
+			$resultObj["scheduler_mail"] = $row["scheduler_mail"];
+			$resultObj["scheduler_publish"] = $row["scheduler_publish"];
+			$resultObj["scheduler_overwrite"] = $row["scheduler_overwrite"];
+			$resultObj["scheduler_searchable"] = $row["scheduler_searchable"];
+		}
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+
+	case "updateWmsSchedule" :
+		$schedulerId =  $ajaxResponse->getParameter("schedulerId");
+		$wmsSchedulerIdArray = $user->getOwnedWmsScheduler();	
+		if (!in_array($schedulerId, $wmsSchedulerIdArray)) {
+			abort(_mb("You are not allowed to access this schedule settings."));
+		}
+		$data = $ajaxResponse->getParameter("data");
+		
+		$sql = <<<SQL
+
+UPDATE scheduler SET scheduler_interval = $2, scheduler_publish = $3, scheduler_searchable = $4, scheduler_overwrite = $5, scheduler_mail = $6, scheduler_change = now() WHERE scheduler_id = $1
+
+SQL;
+		$v = array($schedulerId, $data->scheduler_interval, $data->scheduler_publish, $data->scheduler_searchable, $data->scheduler_overwrite, $data->scheduler_mail);
+		$t = array('i','s','i','i','i','i');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not update wms scheduling in database!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$ajaxResponse->setMessage("Scheduling updated!");
+		$ajaxResponse->setSuccess(true);
+		break;
+
+		$sql = <<<SQL
+
+SELECT scheduler_id, wms_id, wms_title, wms_owner, scheduler_interval,scheduler_mail,scheduler_publish, scheduler_overwrite, scheduler_searchable FROM scheduler INNER JOIN wms ON scheduler.fkey_wms_id=wms.wms_id WHERE scheduler.scheduler_id = $1;
+
+SQL;
+		$v = array($schedulerId);
+		$t = array('i');
+		$res = db_prep_query($sql,$v,$t);
+
+		$row = array();
+		if ($res) {
+			$row = db_fetch_assoc($res);
+			$resultObj["scheduler_id"] = $row["scheduler_id"];
+			$resultObj["wms_id"] = $row["wms_id"];
+			$resultObj["wms_title"] = $row["wms_title"];
+			if (intval($row["wms_owner"]) !== intval($user->id) ) {
+				$ajaxResponse->setSuccess(false);
+				$ajaxResponse->setMessage(_mb("The user is not allowed to alter the update scheduler."));
+				break;
+			}
+			$resultObj["wms_owner"] = $row["wms_owner"];
+			$resultObj["scheduler_interval"] = $row["scheduler_interval"];
+			$resultObj["scheduler_mail"] = $row["scheduler_mail"];
+			$resultObj["scheduler_publish"] = $row["scheduler_publish"];
+			$resultObj["scheduler_overwrite"] = $row["scheduler_overwrite"];
+			$resultObj["scheduler_searchable"] = $row["scheduler_searchable"];
+		}
+		$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+
+	default: 
+		$ajaxResponse->setSuccess(false);
+		$ajaxResponse->setMessage(_mb("An unknown error occured."));
+		break;
+}
+
+$ajaxResponse->send();
+?>



More information about the Mapbender_commits mailing list