From 83d2700ec9a3d03fa98fd33512534d6bd2f75d21 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Wed, 20 Jun 2012 16:09:37 +0800 Subject: [PATCH] MDL-33832 Fixed filling of files.source field - also supress the error on unserialise (because people already may have broken files.source field) - also display details about unparseable JSON error - make source field look the same across repositories --- lib/filelib.php | 4 ++-- lib/form/filemanager.js | 3 +-- repository/boxnet/lib.php | 2 +- repository/dropbox/lib.php | 2 +- repository/filepicker.php | 3 ++- repository/lib.php | 3 +++ repository/repository_ajax.php | 12 ++++-------- repository/s3/lib.php | 2 +- repository/upload/lib.php | 3 ++- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/filelib.php b/lib/filelib.php index 0d18cfa6c6d..45f4f7a0d30 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -601,7 +601,7 @@ function file_get_drafarea_files($draftitemid, $filepath = '/') { } // find the file this draft file was created from and count all references in local // system pointing to that file - $source = unserialize($file->get_source()); + $source = @unserialize($file->get_source()); if (isset($source->original)) { $item->refcount = $fs->search_references_count($source->original); } @@ -679,7 +679,7 @@ function file_get_submitted_draft_itemid($elname) { * @return stored_file */ function file_restore_source_field_from_draft_file($storedfile) { - $source = unserialize($storedfile->get_source()); + $source = @unserialize($storedfile->get_source()); if (!empty($source)) { if (is_object($source)) { $restoredsource = $source->source; diff --git a/lib/form/filemanager.js b/lib/form/filemanager.js index e433d35fc84..ac7ffaaa03e 100644 --- a/lib/form/filemanager.js +++ b/lib/form/filemanager.js @@ -155,9 +155,8 @@ M.form_filemanager.init = function(Y, options) { try { data = Y.JSON.parse(o.responseText); } catch(e) { - // TODO display error scope.print_msg(M.str.repository.invalidjson, 'error'); - //scope.display_error(M.str.repository.invalidjson+'
'+stripHTML(o.responseText)+'
', 'invalidjson') + Y.error(M.str.repository.invalidjson+":\n"+o.responseText); return; } if (data && data.tree && scope.set_current_tree) { diff --git a/repository/boxnet/lib.php b/repository/boxnet/lib.php index 6578afe4c41..323cc402dc3 100644 --- a/repository/boxnet/lib.php +++ b/repository/boxnet/lib.php @@ -319,7 +319,7 @@ class repository_boxnet extends repository { $fileid = array_pop($array); $fileinfo = $this->boxclient->get_file_info($fileid); if (!empty($fileinfo)) { - return 'Box:' . (string)$fileinfo->file_name; + return 'Box: ' . (string)$fileinfo->file_name; } else { return $url; } diff --git a/repository/dropbox/lib.php b/repository/dropbox/lib.php index 7a12bb9e25e..186e63b59c1 100644 --- a/repository/dropbox/lib.php +++ b/repository/dropbox/lib.php @@ -432,7 +432,7 @@ class repository_dropbox extends repository { * @return string|null */ public function get_file_source_info($filepath) { - return 'Dropbox:' . $filepath; + return 'Dropbox: ' . $filepath; } /** diff --git a/repository/filepicker.php b/repository/filepicker.php index ebd9c9f93d5..20b67ca72c5 100644 --- a/repository/filepicker.php +++ b/repository/filepicker.php @@ -306,7 +306,8 @@ case 'download': $record->userid = $USER->id; $record->contextid = $user_context->id; - $record->source = serialize((object)array('source' => $thefile['url'])); + $sourcefield = $repo->get_file_source_info($thefile['url']); + $record->source = repository::build_source_field($sourcefield); try { $info = repository::move_to_filepool($thefile['path'], $record); redirect($home_url, get_string('downloadsucc', 'repository')); diff --git a/repository/lib.php b/repository/lib.php index db4e45b72b5..db994891163 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -1233,6 +1233,9 @@ abstract class repository { * @return string|null */ public function get_file_source_info($url) { + if ($this->has_moodle_files()) { + return $this->get_reference_details($url, 0); + } return $url; } diff --git a/repository/repository_ajax.php b/repository/repository_ajax.php index 45f0662c3c7..6919b3e11b2 100644 --- a/repository/repository_ajax.php +++ b/repository/repository_ajax.php @@ -241,6 +241,10 @@ switch ($action) { } } + // {@link repository::build_source_field()} + $sourcefield = $repo->get_file_source_info($source); + $record->source = $repo::build_source_field($sourcefield); + if ($usefilereference) { $reference = $repo->get_file_reference($source); // get reference life time from repo @@ -266,10 +270,6 @@ switch ($action) { $event['existingfile']->url = moodle_url::make_draftfile_url($itemid, $saveas_path, $saveas_filename)->out();; } else { - // {@link repository::build_source_field()} - $sourcefield = $repo->get_file_source_info($source); - $record->source = $repo::build_source_field($sourcefield); - $storedfile = $fs->create_file_from_reference($record, $repo_id, $reference); $event = array( 'url'=>moodle_url::make_draftfile_url($storedfile->get_itemid(), $storedfile->get_filepath(), $storedfile->get_filename())->out(), @@ -307,10 +307,6 @@ switch ($action) { throw new file_exception('maxbytes'); } - // {@link repository::build_source_field()} - $sourcefield = $repo->get_file_source_info($source); - $record->source = $repo::build_source_field($sourcefield); - $info = repository::move_to_filepool($downloadedfile['path'], $record); if (empty($info)) { $info['e'] = get_string('error', 'moodle'); diff --git a/repository/s3/lib.php b/repository/s3/lib.php index 55586200c08..c25dfc6b555 100644 --- a/repository/s3/lib.php +++ b/repository/s3/lib.php @@ -126,7 +126,7 @@ class repository_s3 extends repository { * @return string */ public function get_file_source_info($filepath) { - return 'Amazon S3:' . $filepath; + return 'Amazon S3: ' . $filepath; } /** diff --git a/repository/upload/lib.php b/repository/upload/lib.php index cf023dd10b4..028c64112d5 100644 --- a/repository/upload/lib.php +++ b/repository/upload/lib.php @@ -144,7 +144,8 @@ class repository_upload extends repository { @chmod($_FILES[$elname]['tmp_name'], $permissions); // {@link repository::build_source_field()} - $record->source = self::build_source_field($_FILES[$elname]['name']); + $sourcefield = $this->get_file_source_info($_FILES[$elname]['name']); + $record->source = self::build_source_field($sourcefield); if (empty($saveas_filename)) { $record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE);