[Mapbender-commits] r9659 - in trunk/mapbender: http/classes http/plugins resources/locale/de_DE/LC_MESSAGES

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Wed Jan 18 07:32:41 PST 2017


Author: armin11
Date: 2017-01-18 07:32:41 -0800 (Wed, 18 Jan 2017)
New Revision: 9659

Added:
   trunk/mapbender/http/plugins/mb_metadata_manager_select.js
   trunk/mapbender/http/plugins/mb_metadata_manager_server.php
Modified:
   trunk/mapbender/http/classes/class_user.php
   trunk/mapbender/resources/locale/de_DE/LC_MESSAGES/Mapbender.po
Log:
A new module that shows a list of dataset-metadata and allow the management of hiding/exporting and deleting it

Modified: trunk/mapbender/http/classes/class_user.php
===================================================================
--- trunk/mapbender/http/classes/class_user.php	2017-01-17 14:40:20 UTC (rev 9658)
+++ trunk/mapbender/http/classes/class_user.php	2017-01-18 15:32:41 UTC (rev 9659)
@@ -730,6 +730,16 @@
 		return ($row = db_fetch_array($res)) ? true : false;
 	}
 	
+	public function getOwnedMetadata () {
+		$sql = "SELECT metadata_id FROM mb_metadata WHERE fkey_mb_user_id = $1";
+		$res = db_prep_query($sql, array($this->id), array("i"));
+		$metadataIdArray = array();
+		while ($row = db_fetch_array($res)) {
+			$metadataIdArray[]= $row["metadata_id"];
+		}
+		return $metadataIdArray;
+	}
+
 	public function getOwnedWms () {
 		$sql = "SELECT wms_id FROM wms WHERE wms_owner = $1";
 		$res = db_prep_query($sql, array($this->id), array("i"));

Added: trunk/mapbender/http/plugins/mb_metadata_manager_select.js
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_manager_select.js	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_manager_select.js	2017-01-18 15:32:41 UTC (rev 9659)
@@ -0,0 +1,271 @@
+/**
+ * Package: mb_metadata_manager_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 $metadataManagerSelect = $(this);
+$metadataManagerSelect.prepend("<img src='../img/indicator_wheel.gif'>");
+
+var MetadataManagerSelectApi = 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;
+	};
+	
+	this.getUserMetadata = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_manager_server.php",
+			method: "getUserMetadata",
+			parameters: {},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				$("#manager_metadata").empty();
+				var emptyOption = '<option value="">---</option>';
+				$("#manager_metadata").append(emptyOption);
+				for ( var i=0 ; i<obj.length ; i++ ) {
+					var optionVal = obj[i].metadataId;
+	                		var optionName = obj[i].metadataId + " : " + obj[i].metadataTitle;
+	                		var optionHtml = "<option value='" + optionVal + "'>" + optionName + "</option>";
+	                		$("#manager_metadata").append(optionHtml);
+				}
+			}
+		});
+		req.send();
+	};
+
+	//function to delete metadata from cache
+	this.deleteMetadata = function(id) {
+		var checkDelete = confirm("Do you really want to delete this entry?");
+		if(checkDelete) {
+			var req = new Mapbender.Ajax.Request({
+				url: "../plugins/mb_metadata_manager_server.php",
+				method: "deleteMetadata",
+				parameters: {
+					"id": id
+				},
+				callback: function (obj, result, message) {
+			
+					$("<div></div>").text(message).dialog({
+						modal: true
+					});
+					
+					that.reloadTable();
+				}
+			});
+			req.send();
+		}
+	};
+
+	//function to toggle the searchability of metadata in mapbender catalogue
+	this.toggleSearchability = function(id) {
+		var checkToggle = confirm("Do you really want to change the searchability?");
+		if(checkToggle) {
+			var req = new Mapbender.Ajax.Request({
+				url: "../plugins/mb_metadata_manager_server.php",
+				method: "toggleSearchability",
+				parameters: {
+					"id": id
+				},
+				callback: function (obj, result, message) {
+			
+					$("<div></div>").text(message).dialog({
+						modal: true
+					});
+					
+					that.reloadTable();
+				}
+			});
+			req.send();
+		}
+	};
+
+	//function to toggle the export of metadata from mapbender catalogue to external catalogues
+	this.toggleExport = function(id) {
+		var checkToggle = confirm("Do you really want to change the export handling for this metadata?");
+		if(checkToggle) {
+			var req = new Mapbender.Ajax.Request({
+				url: "../plugins/mb_metadata_manager_server.php",
+				method: "toggleExport",
+				parameters: {
+					"id": id
+				},
+				callback: function (obj, result, message) {
+			
+					$("<div></div>").text(message).dialog({
+						modal: true
+					});
+					
+					that.reloadTable();
+				}
+			});
+			req.send();
+		}
+	};
+
+	this.reloadTable = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_manager_server.php",
+			method: "getUserMetadata",
+			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] === "Metadata ID") {
+						continue;
+					}
+					aoColumns.push({"sTitle": obj.header[i]});
+				}
+				
+				// add rows
+				for (var j in obj.data) {
+					var data = obj.data[j];
+					var metadataId = data[0];
+					data.shift();
+					var index = table.fnAddData(data);
+					var rowNode = table.fnGetNodes(index[0]);
+					$(rowNode).data("metadataId", metadataId);
+				}
+				
+				
+				
+				// add functionality to delete button
+				$(".deleteImg").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.deleteMetadata(id);
+					return false;
+				});
+				// add functionality to toogle export button
+				$(".toggleExport").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.toggleExport(id);
+					return false;
+				});
+				// add functionality to toogle search button
+				$(".toggleSearchability").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.toggleSearchability(id);
+					return false;
+				});
+
+				//add functionality to show metadata links in a modal dialog
+				/*$(".modalDialog").click(function (e) {
+					//alert($(this).attribute("url"));
+					//alert("test");
+					//var id = $(this).parents("tr").data("schedulerId");
+					return false;
+				});*/
+			}
+		});
+		req.send();
+	};
+
+	this.getData = function () {
+		var req = new Mapbender.Ajax.Request({
+			url: "../plugins/mb_metadata_manager_server.php",
+			method: "getUserMetadata",
+			parameters: {
+			},
+			callback: function (obj, result, message) {
+				if (!result) {
+					return;
+				}
+				$metadataManagerSelect.find("img").remove();
+				
+				var aoColumns = [];
+				for (var i in obj.header) {
+					if (obj.header[i] === "Metadata ID") {
+						continue;
+					}
+					aoColumns.push({"sTitle": obj.header[i]});
+				}
+
+				// initialize datatables
+				table = $metadataManagerSelect.find("table").dataTable({
+					//oLanguage: {
+        				//	sProcessing: "<img src='../img/indicator_wheel.gif'>"
+    					//},
+    					bProcessing : true,
+					"aoColumns": aoColumns,
+					"bJQueryUI": true
+				});
+				
+				//add button to add new entries to dataTables
+
+				//$("#mb_metadata_manager_select").append("<input type='button' id='newScheduleEntry' value='New entry'>");
+				//$("#newScheduleEntry").click(that.addWmsSchedule);
+				
+				// add rows
+				for (var j in obj.data) {
+					var data = obj.data[j];
+					var metadataId = data[0];
+					data.shift();
+					var index = table.fnAddData(data);
+					var rowNode = table.fnGetNodes(index[0]);
+					$(rowNode).data("metadataId", metadataId);
+				}
+							
+				// add functionality to delete button
+				$(".deleteImg").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.deleteMetadata(id);
+					return false;
+				});			
+				// add functionality to toogle export button
+				$(".toggleExport").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.toggleExport(id);
+					return false;
+				});
+				// add functionality to toogle search button
+				$(".toggleSearchability").click(function (e) {
+					var id = $(this).parents("tr").data("metadataId");
+					that.toggleSearchability(id);
+					return false;
+				});
+			}
+		});
+		req.send();
+	};
+	
+	this.events = {
+		selected: new Mapbender.Event()
+	};
+};
+
+$metadataManagerSelect.mapbender(new MetadataManagerSelectApi(options));
+
+$metadataManagerSelect.mapbender("getData");

Added: trunk/mapbender/http/plugins/mb_metadata_manager_server.php
===================================================================
--- trunk/mapbender/http/plugins/mb_metadata_manager_server.php	                        (rev 0)
+++ trunk/mapbender/http/plugins/mb_metadata_manager_server.php	2017-01-18 15:32:41 UTC (rev 9659)
@@ -0,0 +1,262 @@
+<?php
+require_once dirname(__FILE__) . "/../../core/globalSettings.php";
+require_once dirname(__FILE__) . "/../classes/class_user.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 getMetadata ($metadataId = null) {
+	$user = new User(Mapbender::session()->get("mb_user_id"));
+	$metadataIdArray = $user->getOwnedMetadata();
+	if (!is_null($metadataId) && !in_array($metadataId, $metadataIdArray)) {
+		abort(_mb("You are not allowed to access this metadata."));
+	}
+	return $metadataIdArray;
+}
+
+//validate user which sends ajax
+
+$user = new User(Mapbender::session()->get("mb_user_id"));
+
+switch ($ajaxResponse->getMethod()) {	
+	case "toggleSearchability" :
+		$id = $ajaxResponse->getParameter("id");
+		//first select metadata to see, if person who wants to delete it is really the owner!
+		$sql = <<<SQL
+
+SELECT fkey_mb_user_id, searchable FROM mb_metadata WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id);
+		$t = array('i');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not read metadata from database!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$row = db_fetch_assoc($res);
+		if ((integer)$row['fkey_mb_user_id'] !== $user->id) {
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("User not allowed to toogle searchability of metadata, because he is not the owner!"));
+			$ajaxResponse->send();
+			die();
+		}
+		//do the toggling
+		if ($row['searchable'] == 't') {
+			$export2csw = 'f';
+			$message = _mb('Searchability of metadata was deactivated!');
+		} else {
+			$export2csw = 't';
+			$message = _mb('Searchability of metadata was activated!');
+		}
+		$sql = <<<SQL
+
+UPDATE mb_metadata SET searchable = $2  WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id, $export2csw);
+		$t = array('i', 'b');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not toogle export for selected metadata!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$ajaxResponse->setMessage($message);
+		$ajaxResponse->setSuccess(true);
+		break;
+	case "toggleExport" :
+		$id = $ajaxResponse->getParameter("id");
+		//first select metadata to see, if person who wants to delete it is really the owner!
+		$sql = <<<SQL
+
+SELECT fkey_mb_user_id, export2csw FROM mb_metadata WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id);
+		$t = array('i');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not read metadata from database!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$row = db_fetch_assoc($res);
+		if ((integer)$row['fkey_mb_user_id'] !== $user->id) {
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("User not allowed to toogle export for metadata, because he is not the owner!"));
+			$ajaxResponse->send();
+			die();
+		}
+		//do the toggling
+		if ($row['export2csw'] == 't') {
+			$export2csw = 'f';
+			$message = _mb('Export of metadata to external catalogues was deactivated!');
+		} else {
+			$export2csw = 't';
+			$message = _mb('Export of metadata to external catalogues was activated!');
+		}
+		$sql = <<<SQL
+
+UPDATE mb_metadata SET export2csw = $2  WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id, $export2csw);
+		$t = array('i', 'b');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not toogle export for selected metadata!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$ajaxResponse->setMessage($message);
+		$ajaxResponse->setSuccess(true);
+		break;
+	case "deleteMetadata" :
+		$id = $ajaxResponse->getParameter("id");
+		//first select metadata to see, if person who wants to delete it is really the owner!
+		$sql = <<<SQL
+
+SELECT fkey_mb_user_id FROM mb_metadata WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id);
+		$t = array('i');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not read metadata from database!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$row = db_fetch_assoc($res);
+		if ((integer)$row['fkey_mb_user_id'] !== $user->id) {
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("User not allowed to delete requested metadata from database, because he is not the owner!"));
+			$ajaxResponse->send();
+			die();
+		}
+		//delete the metadata 
+		$sql = <<<SQL
+
+DELETE FROM mb_metadata WHERE metadata_id = $1;
+
+SQL;
+		$v = array($id);
+		$t = array('i');
+		try {
+			$res = db_prep_query($sql,$v,$t);
+		}
+		catch (Exception $e){
+			$ajaxResponse->setSuccess(false);
+			$ajaxResponse->setMessage(_mb("Could not delete metadata in database!"));
+			$ajaxResponse->send();
+			die;	
+		}
+		$ajaxResponse->setMessage(_mb("Metadata deleted!"));
+		$ajaxResponse->setSuccess(true);
+		break;
+	case "getUserMetadata" :
+		//TODO: why double???
+		$metadataIdArray = getMetadata();		
+		$metadataList = implode(",", $metadataIdArray);
+	
+$sql = <<<SQL
+
+	SELECT metadata_id, metadata_id as id, uuid, title, lastchanged, f_get_coupled_resources(metadata_id), searchable, export2csw FROM mb_metadata WHERE mb_metadata.metadata_id IN ($metadataList) ORDER BY metadata_id;
+
+SQL;
+		$res = db_query($sql);
+		$resultObj = array(
+			"header" => array(
+				_mb("Metadata ID"),
+				_mb("ID"),
+				_mb("UUID"),
+				_mb("Title"),
+				_mb("Last changed"),
+				_mb("Layers"),
+				_mb("Featuretypes"),
+				_mb("Searchability"),
+				_mb("Catalogue export"),
+				_mb("Delete")
+			), 
+			"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);'));
+			//preview with uuid
+			$row[0] = $row[0];
+			$row[1] = $row[1];
+			$row[2] = "<a class='modalDialog' target='_blank' id='metadata_".$row[0]."' href='../php/mod_exportIso19139.php?url=".urlencode(MAPBENDER_PATH."/php/mod_dataISOMetadata.php?outputFormat=iso19139&id=".$row[2])."'>".$row[2]."</a>";
+			$row[3] = $row[3];
+			$row[4] = $row[4];
+			$coupledResourceRow = 5;
+			$coupledResources = json_decode($row[$coupledResourceRow]);
+			$row[$coupledResourceRow] = "";
+			//get layer list
+			$numberLayers = 0;
+			foreach ($coupledResources->coupledResources->layerIds as $layerId) {
+				$row[$coupledResourceRow] .= "<a class='modalDialog' target='_blank' id='layer_".$row[0]."_".$numberLayers."' href='../php/mod_showMetadata.php?languageCode=de&resource=layer&id=".$layerId."'>".$layerId."</a>".",";
+				$numberLayers++;
+			}
+			$row[$coupledResourceRow] = rtrim($row[$coupledResourceRow], ',');
+			//generate column for featuretypes - problem: row has to be inserted after !!!!
+			//#6
+			array_splice($row, $coupledResourceRow+1, 0, "");
+			$row[$coupledResourceRow+1] = "";
+			//get featuretype list
+			$numberFeaturetypes = 0;
+			foreach ($coupledResources->coupledResources->featuretypeIds as $featuretypeId) {
+				$row[$coupledResourceRow+1] .= "<a class='modalDialog'  target='_blank' id='featuretype_".$row[0]."_".$numberFeaturetypes."' href='../php/mod_showMetadata.php?languageCode=de&resource=featuretype&id=".$featuretypeId."'>".$featuretypeId."</a>".",";
+				$numberFeaturetypes++;
+			}
+			$row[$coupledResourceRow+1] = rtrim($row[$coupledResourceRow+1], ',');
+			//add column for defining searchability
+			if ($row[7] == "t") {
+				$row[7] = "<input style='cursor:pointer;' class='toggleSearchability' title='"._mb("Toggle searchability")."' type='checkbox' checked/>";
+			} else {
+				$row[7] = "<input style='cursor:pointer;' class='toggleSearchability' title='"._mb("Toggle searchability")."' type='checkbox'/>";
+			}
+			if ($row[8] == "t") {
+				$row[8] = "<input style='cursor:pointer;' class='toggleExport' title='"._mb("Toggle catalogue export")."' type='checkbox' checked/>";
+			} else {
+				$row[8] = "<input style='cursor:pointer;' class='toggleExport' title='"._mb("Toggle catalogue export")."' type='checkbox'/>";
+			}
+			//add column for deleting metadata
+			$row[] = "<img style='cursor:pointer;' class='deleteImg' title='"._mb("Delete")."' src='../img/cross.png' />";
+			$resultObj["data"][]= $row;
+		}
+        	$ajaxResponse->setResult($resultObj);
+		$ajaxResponse->setSuccess(true);
+		break;
+	default: 
+		$ajaxResponse->setSuccess(false);
+		$ajaxResponse->setMessage(_mb("An unknown error occured."));
+		break;
+}
+$ajaxResponse->send();
+?>

Modified: trunk/mapbender/resources/locale/de_DE/LC_MESSAGES/Mapbender.po
===================================================================
--- trunk/mapbender/resources/locale/de_DE/LC_MESSAGES/Mapbender.po	2017-01-17 14:40:20 UTC (rev 9658)
+++ trunk/mapbender/resources/locale/de_DE/LC_MESSAGES/Mapbender.po	2017-01-18 15:32:41 UTC (rev 9659)
@@ -4182,3 +4182,51 @@
 msgid "Here you can define, if the metadata should be searchable in the geoportal catalogue."
 msgstr "Hier kann festgelegt werden, ob der Metadatensatz im Geoportal auffindbar ist oder nicht."
 
+msgid "Last changed"
+msgstr "Letzte Änderung"
+
+msgid "Catalogue export"
+msgstr "Katalogexport"
+
+msgid "You are not allowed to access this metadata."
+msgstr "Keine Berechtigung auf diesen Metadatensatz zuzugreifen."
+
+msgid "Could not read metadata from database!"
+msgstr "Metadatensatz in der Datenbank nicht gefunden!"
+
+msgid "User not allowed to toogle searchability of metadata, because he is not the owner!"
+msgstr "Nutzer ist nicht berechtigt die Suchbarkeit des Metadatensatzes zu ändern, weil er nicht der Eigentümer des Metadatensatzes ist."
+
+msgid "Searchability of metadata was deactivated!"
+msgstr "Die Suchbarbarkeit des Metadatensatzes im Geoportal wurde deaktiviert!"
+
+msgid "Searchability of metadata was activated!"
+msgstr "Die Suchbarbarkeit des Metadatensatzes im Geoportal wurde aktiviert!"
+
+msgid "Could not toogle export for selected metadata!"
+msgstr "Das Exporthandling für den Metadatensatz kann nicht geändert werden!"
+
+msgid "User not allowed to toogle export for metadata, because he is not the owner!"
+msgstr "Nutzer ist nicht berechtigt das Exporthandling für den Metadatensatzes zu ändern, weil er nicht der Eigentümer des Metadatensatzes ist."
+
+msgid "Export of metadata to external catalogues was deactivated!"
+msgstr "Der Export des Metadatensatzes zu externen Katalogen wurde deaktiviert!"
+
+msgid "Export of metadata to external catalogues was activated!"
+msgstr "Der Export des Metadatensatzes zu externen Katalogen wurde aktiviert!"
+
+msgid "User not allowed to delete requested metadata from database, because he is not the owner!"
+msgstr "Nutzer ist nicht berechtigt den Metadatensatzes zu löschen, weil er nicht der Eigentümer des Metadatensatzes ist."
+
+msgid "Could not delete metadata in database!"
+msgstr "Der Metadatensatz konnte in der Datenbank nicht gelöscht werden!"
+
+msgid "Metadata deleted!"
+msgstr "Metadatensatz gelöscht!"
+
+msgid "Toggle catalogue export"
+msgstr "Katalogexport ändern"
+
+msgid "Toggle searchability"
+msgstr "Suchbarkeit ändern"
+



More information about the Mapbender_commits mailing list