Browse Source

Concluso il primo giro di editing dei metadati

cek 8 years ago
parent
commit
790f5405cf

+ 1 - 1
.gitignore

@@ -1,4 +1,3 @@
-
 # ignore all bin directories
 # matches "bin" in any subfolder
 bin/
@@ -13,3 +12,4 @@ target/
 arav_up_client/bower_components
 arav_up_client_old/
 arav_up_api_old/
+/.brackets.json

+ 1 - 1
.htaccess

@@ -1,3 +1,3 @@
 RewriteEngine on
 
-RewriteRule ^(path|path64|item|item64)/([^\r\n]+)/(upload|mkdir|delete|edit)/?$ /arav_up_client/html/$3.html?method=$1&value=$2 [NC,L,QSA]
+RewriteRule ^(path|path64|item|item64)/([^\r\n]+)/(upload|mkdir|delete|edit)/?$ /arav_up_client/$3.php?type=$1&value=$2 [NC,L,QSA]

+ 8 - 6
arav_up_api/index.php

@@ -93,18 +93,20 @@ function parseRequest() {
             $requestHandler = new arkiwiRequestGetListMetadata($request);
             break;
 
+        case 'modifymetadata':
+            require_once './requests/requestPostModifyMetadata.php';
+            $requestHandler = new arkiwiRequestPostModifyMetadata($request);
+            break;
+
 
 
 
-        case 'addmetadata':
-            require_once './requests/requestPostMetadata.php';
-            $requestHandler = new arkiwiRequestPostMetadata($request);
-            break;
 
-        case 'removemetadata':
+
+       /* case 'removemetadata':
             require_once './requests/requestPostRemoveMetadata.php';
             $requestHandler = new arkiwiRequestPostRemoveMetadata($request);
-            break;
+            break;*/
 
         default:
             require_once './requests/requestError.php';

+ 6 - 2
arav_up_api/requests/requestGetListMetadata.php

@@ -26,12 +26,16 @@ class arkiwiRequestGetListMetadata extends arkiwiRequest
         $metadata = file_get_contents($GLOBALS["conf"]["assetstore_endpoint"]."/item64/".$this->item64."/direct");
         $metadata = simplexml_load_string($metadata)->xpath("/item/*");
         for ($i = 0; $i < count($metadata); $i++) {
-            $items[] = array($metadata[$i]->getName(), $metadata[$i]->__toString());
+            $namespace = $metadata[$i]->getNamespaces();
+            if (!$namespace[arav]) {
+                $items[] = array("name" => $metadata[$i]->getName(), "value" => $metadata[$i]->__toString());
+            }
         }
 
+        json_encode($items);
         //FINE CAZZACCROCCHIO
 
         $this->setCode(201);
-        $this->setBodyJSON(print_r($items));
+        $this->setBodyJSON($items);
     }
 }

+ 0 - 46
arav_up_api/requests/requestPostMetadata.php

@@ -1,46 +0,0 @@
-<?php
-require_once('request.php');
-
-class arkiwiRequestPostMetadata extends arkiwiRequest
-{
-	private $sId = null;
-
-	public function __construct($request) {
-		parent::__construct($request);
-		$extra = $this->getRequestExtra();
-
-		$this->sId = $extra[0];
-	}
-
-	public function run() {
-		if($this->request['method'] != 'POST') {
-			$this->setBodyError(500, "arkiwiRequestPostMetadata: POST method required.");
-			return;
-		}
-
-		if (!$this->isValid($this->sId)) {
-			$this->setBodyError(400, "Session invalid or expired.");
-			return;
-		}
-
-		$input = file_get_contents('php://input');
-		$obj = json_decode($input, true);
-		if (!is_array($obj)) {
-			$this->setBodyError(400, "Wrong json input");
-			return;
-		}
-
-		foreach($obj as $kv) {
-			if (isset($kv['key']) && isset($kv['value'])) {
-				$this->addKeyValue($this->sId, $kv['key'], $kv['value']);
-			}
-		}
-
-		$this->setCode(201);
-		$this->setBodyJSON(true);
-	}
-	
-	private function addKeyValue($session, $k, $v) {
-		$_SESSION['keyValues'][$k] = $v;
-	}
-}

+ 48 - 0
arav_up_api/requests/requestPostModifyMetadata.php

@@ -0,0 +1,48 @@
+<?php
+require_once('request.php');
+require_once('../arav_up_inclu/base64codec.php');
+require_once('../arav_up_inclu/injectors.php');
+
+class arkiwiRequestPostModifyMetadata extends arkiwiRequest
+{
+	private $item64 = null;
+    private $metadata = Array();
+    private $path = null;
+
+    public function __construct($request) {
+        parent::__construct($request);
+        $extra = $this->getRequestExtra();
+
+        $this->item64 = $extra[0];
+        $this->path = "/".decoder($extra[0]);
+    }
+
+	public function run() {
+		if($this->request['method'] != 'POST') {
+			$this->setBodyError(500, "arkiwiRequestPostModifyMetadata: POST method required.");
+			return;
+		}
+
+		$input = file_get_contents('php://input');
+		$obj = json_decode($input);
+		if (!is_array($obj)) {
+			$this->setBodyError(400, "Wrong json input");
+			return;
+		}
+
+		foreach($obj as $kv) {
+			if (isset($kv->name) && isset($kv->value)) {
+				$this->addKeyValue($kv->name, $kv->value);
+			}
+		}
+
+        store_md_array($this->metadata, $this->path);
+
+		$this->setCode(201);
+		$this->setBodyJSON(true);
+	}
+
+	private function addKeyValue($k, $v) {
+		$this->metadata[$k] = $v;
+	}
+}

+ 4 - 0
arav_up_client/edit.php

@@ -55,6 +55,10 @@
         <p>Pippone con spiegone, si può anche mettere da un'altra parte, CRI vedi tu quando fai grafica</p>
         <div id="metadata_container">
         </div>
+        <div id="buttons_container">
+            <button type="submit" id="confirm-button" disabled>Ok</button>
+            <button type="button" id="add-button" disabled>Add</button>
+        </div>
     </form>
 
     <input type="hidden" id="document-type" value="<?php echo $query['type']; ?>"/>

+ 3 - 2
arav_up_client/scripts/arkiwi.js

@@ -70,15 +70,16 @@ ARKIWI.Uploader.prototype.listMetadata = function (item64, callback) {
 };
 
 /* Aggiunge o sovrascrive i metadati di un file. */
-ARKIWI.Uploader.prototype.metadata = function (jsonKVString, callback) {
+ARKIWI.Uploader.prototype.modifyMetadata = function (item64, jsonKVString, callback) {
     $.ajax({
-        url: this.uploaderUrl + '/metadata/' + this.sessionId + '/?' + this.defaultParameters,
+        url: this.uploaderUrl + '/modifymetadata/' + item64 + '/?' + this.defaultParameters,
         type: 'POST',
         async: true,
         cache: false,
         context: this,
         data: jsonKVString,
         dataType: 'json',
+        contentType: "application/json",
         error: function (xhr, status, error) {
             throw 'Arkiwi.metadata(): status ' + status + ' error ' + error;
         },

+ 46 - 4
arav_up_client/scripts/main.js

@@ -15,7 +15,6 @@
 var arkiwi;
 var documentType;
 var documentValue;
-var originalMetadata;
 
 function supportAjaxUploadWithProgress() {
     return supportFileAPI() && supportAjaxUploadProgressEvents();
@@ -56,14 +55,57 @@ function initializeEdit(endpoint) {
     documentValue = $('#document-value').val();
 
     arkiwi.listMetadata(documentValue, function(result){
-        originalMetadata = JSON.parse(result);
         var metadataContainer = $('#metadata_container');
-        for (var i=0; i < originalMetadata[0][1].length; i++) {
-            metadataContainer.append('<div><span>' + originalMetadata[0][1][i][0] + '</span><intput value="' + originalMetadata[0][1][i][1] + '"/></div>');
+        for (let i = 0; i < result.length; i++) {
+            var metadata = result[i];
+            metadataContainer.append('<div class="metadata"><span class="metadata_name">' + metadata.name + '</span><input class="metadata_value" value="' + metadata.value + '"/><button type="button" id="rem-button" onclick="$(this).parent().remove();">X</button></div>');
         }
+
+        //activate buttons
+        $('#confirm-button').prop("disabled", false);
+        $('#confirm-button').bind('click', function(e) {
+
+            $('#confirm-button').prop("disabled", true);
+            $('#add-button').prop("disabled", true);
+
+            uploadMetadata();
+            e.preventDefault();
+        });
+        $('#add-button').prop("disabled", false);
+        $('#add-button').bind('click', function(e) {
+            metadataContainer.append('<div class="metadata"><input class="metadata_name"/><input class="metadata_value"/><button type="button" id="rem-button" onclick="$(this).parent().remove();">X</button></div>');
+            e.preventDefault();
+        });
     })
 }
 
+function uploadMetadata() {
+    var metadataArray = Array();
+
+    var metadataList = $('.metadata');
+    for (let i = 0; i < metadataList.length; i++) {
+        var metadataObj = {};
+        var metadata = metadataList[i];
+
+        metadataObj.name = $(metadata).find('.metadata_name').val() || $(metadata).find('.metadata_name').text();
+        metadataObj.value = $(metadata).find('.metadata_value').val();
+
+        metadataArray.push(metadataObj);
+    }
+
+    var jsonString = JSON.stringify(metadataArray);
+
+    arkiwi.modifyMetadata(documentValue, jsonString, function(result) {
+        var metadataContainer = $('#metadata_container');
+        var buttonsContainer = $('#buttons_container');
+
+        metadataContainer.empty();
+        buttonsContainer.empty();
+
+        metadataContainer.append('<div>done</div>')
+    });
+}
+
 function selectFile(e) {
     $('input[id=hiddenfileinput]').click();
     e.preventDefault();

+ 1 - 1
arav_up_confs.php

@@ -54,7 +54,7 @@ $GLOBALS["conf"]["data_basedir"] = "/tmp"; // dove stanno i doc fisici
 $GLOBALS["conf"]["metadata_basedir"] = "/tmp"; // dove stanno i metadati derivati
 
 //campi di configurazione per il client html
-$GLOBALS["conf"]["api_endpoint"] = "http://arkiwi_up/arav_up_api";
+$GLOBALS["conf"]["api_endpoint"] = "http://arkiwi-dev/arav_up_api";
 
 //campi di configurazione per la parte "CAZZACCROCCHIO"
 $GLOBALS["conf"]["assetstore_endpoint"] = "http://assetstore.arkiwi.org";