[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