Browse files

MDL-33513: Make files->source field consistent

  • Loading branch information...
1 parent fcbf68f commit 8a288971e25eaaa4c8cbd67e450cee0e12435d4e @dcai dcai committed Jun 10, 2012
View
2 lib/filelib.php
@@ -770,6 +770,7 @@ function file_save_draft_area_files($draftitemid, $contextid, $component, $filea
$newhashes = array();
foreach ($draftfiles as $file) {
$newhash = $fs->get_pathname_hash($contextid, $component, $filearea, $itemid, $file->get_filepath(), $file->get_filename());
+ file_restore_source_field_from_draft_file($file);
$newhashes[$newhash] = $file;
}
$filecount = 0;
@@ -790,7 +791,6 @@ function file_save_draft_area_files($draftitemid, $contextid, $component, $filea
continue;
}
- file_restore_source_field_from_draft_file($newfile);
// Replaced file content
if ($oldfile->get_contenthash() != $newfile->get_contenthash()) {
$oldfile->replace_content_with($newfile);
View
10 repository/boxnet/lib.php
@@ -294,6 +294,16 @@ public function get_reference_details($reference) {
}
/**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($url) {
+ return $url;
+ }
+
+ /**
* Repository method to serve file
*
* @param stored_file $storedfile
View
10 repository/dropbox/lib.php
@@ -415,6 +415,16 @@ public function get_reference_details($reference) {
}
/**
+ * Return the source information
+ *
+ * @param stdClass $filepath
+ * @return string|null
+ */
+ public function get_file_source_info($filepath) {
+ return 'Dropbox:' . $filepath;
+ }
+
+ /**
* Repository method to serve file
*
* @param stored_file $storedfile
View
10 repository/filesystem/lib.php
@@ -152,6 +152,16 @@ public function get_file($file, $title = '') {
return array('path'=>$file, 'url'=>'');
}
+ /**
+ * Return the source information
+ *
+ * @param stdClass $filepath
+ * @return string|null
+ */
+ public function get_file_source_info($filepath) {
+ return $filepath;
+ }
+
public function logout() {
return true;
}
View
39 repository/flickr/lib.php
@@ -222,9 +222,13 @@ public function get_listing($path = '', $page = '') {
return $this->search('', $page);
}
- public function get_link($photo_id) {
- global $CFG;
- $result = $this->flickr->photos_getSizes($photo_id);
+ /**
+ * Return photo url by given photo id
+ * @param string $photoid
+ * @return string
+ */
+ private function build_photo_url($photoid) {
+ $result = $this->flickr->photos_getSizes($photoid);
$url = '';
if(!empty($result[4])) {
$url = $result[4]['source'];
@@ -236,23 +240,18 @@ public function get_link($photo_id) {
return $url;
}
+ public function get_link($photoid) {
+ return $this->build_photo_url($photoid);
+ }
+
/**
*
- * @param string $photo_id
+ * @param string $photoid
* @param string $file
* @return string
*/
- public function get_file($photo_id, $file = '') {
- global $CFG;
- $result = $this->flickr->photos_getSizes($photo_id);
- $url = '';
- if(!empty($result[4])) {
- $url = $result[4]['source'];
- } elseif(!empty($result[3])) {
- $url = $result[3]['source'];
- } elseif(!empty($result[2])) {
- $url = $result[2]['source'];
- }
+ public function get_file($photoid, $file = '') {
+ $url = $this->build_photo_url($photoid);
$path = $this->prepare_file($file);
$fp = fopen($path, 'w');
$c = new curl;
@@ -315,4 +314,14 @@ public function supported_filetypes() {
public function supported_returntypes() {
return (FILE_INTERNAL | FILE_EXTERNAL);
}
+
+ /**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($photoid) {
+ return $this->build_photo_url($photoid);
+ }
}
View
32 repository/flickr_public/lib.php
@@ -396,9 +396,13 @@ public function print_search() {
return $str;
}
- public function get_link($photo_id) {
- global $CFG;
- $result = $this->flickr->photos_getSizes($photo_id);
+ /**
+ * Return photo url by given photo id
+ * @param string $photoid
+ * @return string
+ */
+ private function build_photo_url($photoid) {
+ $result = $this->flickr->photos_getSizes($photoid);
$url = '';
if(!empty($result[4])) {
$url = $result[4]['source'];
@@ -410,23 +414,27 @@ public function get_link($photo_id) {
return $url;
}
+ public function get_link($photoid) {
+ return $this->build_photo_id($photoid);
+ }
+
/**
*
* @global object $CFG
- * @param string $photo_id
+ * @param string $photoid
* @param string $file
* @return string
*/
- public function get_file($photo_id, $file = '') {
+ public function get_file($photoid, $file = '') {
global $CFG;
- $info = $this->flickr->photos_getInfo($photo_id);
+ $info = $this->flickr->photos_getInfo($photoid);
if ($info['owner']['realname']) {
$author = $info['owner']['realname'];
} else {
$author = $info['owner']['username'];
}
$copyright = get_string('author', 'repository') . ': ' . $author;
- $result = $this->flickr->photos_getSizes($photo_id);
+ $result = $this->flickr->photos_getSizes($photoid);
// download link
$source = '';
// flickr photo page
@@ -517,4 +525,14 @@ public function supported_filetypes() {
public function supported_returntypes() {
return (FILE_INTERNAL | FILE_EXTERNAL);
}
+
+ /**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($photoid) {
+ return $this->build_photo_url($photoid);
+ }
}
View
29 repository/lib.php
@@ -1134,6 +1134,16 @@ public function get_file_by_reference($reference) {
}
/**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($url) {
+ return $url;
+ }
+
+ /**
* Move file from download folder to file pool using FILE API
*
* @todo MDL-28637
@@ -2190,6 +2200,25 @@ public static function sync_external_file(stored_file $file) {
return true;
}
+
+ /**
+ * Build draft file's source field
+ *
+ * {@link file_restore_source_field_from_draft_file()}
+ * XXX: This is a hack for file manager (MDL-28666)
+ * For newly created draft files we have to construct
+ * source filed in php serialized data format.
+ * File manager needs to know the original file information before copying
+ * to draft area, so we append these information in mdl_files.source field
+ *
+ * @param string $sourcefield
+ * @param string
+ */
+ public static function build_source_field($source) {
+ $sourcefield = new stdClass;
+ $sourcefield->source = $source;
+ return serialize($sourcefield);
+ }
}
/**
View
16 repository/repository_ajax.php
@@ -255,6 +255,11 @@
$event['existingfile']->filename = $saveas_filename;
$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(),
@@ -292,14 +297,9 @@
throw new file_exception('maxbytes');
}
- // {@link file_restore_source_field_from_draft_file()}
- $sourcefield = '';
- if (!empty($downloadedfile['url'])) {
- $source = new stdClass;
- $source->source = $downloadedfile['url'];
- $sourcefield = serialize($source);
- }
- $record->source = $sourcefield;
+ // {@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)) {
View
10 repository/s3/lib.php
@@ -120,6 +120,16 @@ public function get_file($filepath, $file = '') {
}
/**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($filepath) {
+ return 's3:' . $filepath;
+ }
+
+ /**
* S3 doesn't require login
*
* @return bool
View
4 repository/upload/lib.php
@@ -143,6 +143,9 @@ public function process_upload($saveas_filename, $maxbytes, $types = '*', $savep
self::antivir_scan_file($_FILES[$elname]['tmp_name'], $_FILES[$elname]['name'], true);
@chmod($_FILES[$elname]['tmp_name'], $permissions);
+ // {@link repository::build_source_field()}
+ $record->source = self::build_source_field($_FILES[$elname]['name']);
+
if (empty($saveas_filename)) {
$record->filename = clean_param($_FILES[$elname]['name'], PARAM_FILE);
} else {
@@ -186,7 +189,6 @@ public function process_upload($saveas_filename, $maxbytes, $types = '*', $savep
}
$record->contextid = $context->id;
$record->userid = $USER->id;
- $record->source = '';
if (repository::draftfile_exists($record->itemid, $record->filepath, $record->filename)) {
$existingfilename = $record->filename;
View
10 repository/url/lib.php
@@ -217,5 +217,15 @@ public function guess_filename($url, $type) {
public function supported_returntypes() {
return (FILE_INTERNAL | FILE_EXTERNAL);
}
+
+ /**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($url) {
+ return $url;
+ }
}
View
10 repository/wikimedia/lib.php
@@ -127,4 +127,14 @@ public function logout() {
public function supported_returntypes() {
return (FILE_INTERNAL | FILE_EXTERNAL);
}
+
+ /**
+ * Return the source information
+ *
+ * @param stdClass $url
+ * @return string|null
+ */
+ public function get_file_source_info($url) {
+ return $url;
+ }
}

0 comments on commit 8a28897

Please sign in to comment.