MDL-33777 Equella repository properly set the source and display file origin
authorMarina Glancy <marina@moodle.com>
Fri, 22 Jun 2012 06:57:46 +0000 (14:57 +0800)
committerMarina Glancy <marina@moodle.com>
Mon, 25 Jun 2012 02:57:02 +0000 (10:57 +0800)
repository/equella/callback.php
repository/equella/lib.php

index 0a5b083..01fc27d 100644 (file)
@@ -55,6 +55,8 @@ if (isset($info->license)) {
     $license = s(clean_param($info->license, PARAM_ALPHAEXT));
 }
 
+$source = base64_encode(serialize((object)array('url'=>$url,'filename'=>$filename)));
+
 $js =<<<EOD
 <html>
 <head>
@@ -63,7 +65,7 @@ $js =<<<EOD
     window.onload = function() {
         var resource = {};
         resource.title = "$filename";
-        resource.source = "$url";
+        resource.source = "$source";
         resource.thumbnail = '$thumbnail';
         resource.author = "$author";
         resource.license = "$license";
index 3665ef1..4da0611 100644 (file)
@@ -119,7 +119,7 @@ class repository_equella extends repository {
      * @return string file referece
      */
     public function get_file_reference($source) {
-        return base64_encode($source);
+        return $source;
     }
 
     /**
@@ -156,8 +156,8 @@ class repository_equella extends repository {
      * @return null|stdClass containing attribute 'filepath'
      */
     public function get_file_by_reference($reference) {
-        $ref = base64_decode($reference->reference);
-        $url = $this->appendtoken($ref);
+        $ref = unserialize(base64_decode($reference->reference));
+        $url = $this->appendtoken($ref->url);
 
         if (!$url) {
             // Occurs when the user isn't known..
@@ -188,8 +188,8 @@ class repository_equella extends repository {
      * @param array $options additional options affecting the file serving
      */
     public function send_file($stored_file, $lifetime=86400 , $filter=0, $forcedownload=false, array $options = null) {
-        $reference = base64_decode($stored_file->get_reference());
-        $url = $this->appendtoken($reference);
+        $reference  = unserialize(base64_decode($stored_file->get_reference()));
+        $url = $this->appendtoken($reference->url);
         if ($url) {
             header('Location: ' . $url);
         } else {
@@ -337,4 +337,32 @@ class repository_equella extends repository {
     private static function to_mime_type($value) {
         return mimeinfo('type', $value);
     }
+
+    /**
+     * Return the source information
+     *
+     * @param stdClass $url
+     * @return string|null
+     */
+    public function get_file_source_info($url) {
+        $ref = unserialize(base64_decode($url));
+        return 'EQUELLA: ' . $ref->filename;
+    }
+
+    /**
+     * Return human readable reference information
+     * {@link stored_file::get_reference()}
+     *
+     * @param string $reference
+     * @param int $filestatus status of the file, 0 - ok, 666 - source missing
+     * @return string
+     */
+    public function get_reference_details($reference, $filestatus = 0) {
+        if (!$filestatus) {
+            $ref = unserialize(base64_decode($reference));
+            return $this->get_name(). ': '. $ref->filename;
+        } else {
+            return get_string('lostsource', 'repository', '');
+        }
+    }
 }