[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