Merge branch 'MDL-62251-34' of git://github.com/rezaies/moodle into MOODLE_34_STABLE

This commit is contained in:
Eloy Lafuente (stronk7)
2018-05-13 23:56:20 +02:00
4 changed files with 43 additions and 9 deletions
+5 -3
View File
@@ -239,15 +239,17 @@ abstract class base_converter implements loggable {
protected function replace_tempdir() {
global $CFG;
$tempdir = $this->get_tempdir_path();
if (empty($CFG->keeptempdirectoriesonbackup)) {
fulldelete($this->get_tempdir_path());
fulldelete($tempdir);
} else {
if (!rename($this->get_tempdir_path(), $this->get_tempdir_path() . '_' . $this->get_name() . '_' . $this->id . '_source')) {
if (!rename($tempdir, $tempdir . '_' . $this->get_name() . '_' . $this->id . '_source')) {
throw new convert_exception('failed_rename_source_tempdir');
}
}
if (!rename($this->get_workdir_path(), $this->get_tempdir_path())) {
if (!rename($this->get_workdir_path(), $tempdir)) {
throw new convert_exception('failed_move_converted_into_place');
}
}
@@ -162,7 +162,7 @@ class moodle_content_writer implements content_writer {
* @return string The processed string
*/
public function rewrite_pluginfile_urls(array $subcontext, $component, $filearea, $itemid, $text) : string {
return str_replace('@@PLUGINFILE@@/', $this->get_files_target_path($component, $filearea, $itemid).'/', $text);
return str_replace('@@PLUGINFILE@@/', $this->get_files_target_url($component, $filearea, $itemid).'/', $text);
}
/**
@@ -272,7 +272,9 @@ class moodle_content_writer implements content_writer {
// Join the directory together with the name.
$filepath = implode(DIRECTORY_SEPARATOR, $path) . DIRECTORY_SEPARATOR . $name;
return preg_replace('@' . DIRECTORY_SEPARATOR . '+@', DIRECTORY_SEPARATOR, $filepath);
// To use backslash, it must be doubled ("\\\\" PHP string).
$separator = str_replace('\\', '\\\\', DIRECTORY_SEPARATOR);
return preg_replace('@(' . $separator . '|/)+@', $separator, $filepath);
}
/**
@@ -291,7 +293,9 @@ class moodle_content_writer implements content_writer {
// Join the directory together with the name.
$filepath = implode(DIRECTORY_SEPARATOR, $path);
return preg_replace('@' . DIRECTORY_SEPARATOR . '+@', DIRECTORY_SEPARATOR, $filepath);
// To use backslash, it must be doubled ("\\\\" PHP string).
$separator = str_replace('\\', '\\\\', DIRECTORY_SEPARATOR);
return preg_replace('@(' . $separator . '|/)+@', $separator, $filepath);
}
/**
@@ -314,6 +318,25 @@ class moodle_content_writer implements content_writer {
return implode(DIRECTORY_SEPARATOR, $parts);
}
/**
* Get a relative url to the directory of the exported files within a subcontext.
*
* @param string $component The name of the component that the files belong to.
* @param string $filearea The filearea within that component.
* @param string $itemid Which item those files belong to.
* @return string The url
*/
protected function get_files_target_url($component, $filearea, $itemid) : string {
// We do not need to include the component because we organise things by context.
$parts = ['_files', $filearea];
if (!empty($itemid)) {
$parts[] = $itemid;
}
return implode('/', $parts);
}
/**
* Write the data to the specified path.
*
@@ -411,7 +411,10 @@ class content_writer implements \core_privacy\local\request\content_writer {
*/
public function export_file(array $subcontext, \stored_file $file) : \core_privacy\local\request\content_writer {
if (!$file->is_directory()) {
$filepath = explode(DIRECTORY_SEPARATOR, $file->get_filepath());
$filepath = $file->get_filepath();
// Directory separator in the stored_file class should always be '/'. The following line is just a fail safe.
$filepath = str_replace(DIRECTORY_SEPARATOR, '/', $filepath);
$filepath = explode('/', $filepath);
$filepath[] = $file->get_filename();
$filepath = array_filter($filepath);
$filepath = implode('/', $filepath);
+8 -2
View File
@@ -1162,12 +1162,18 @@ class moodle_content_writer_test extends advanced_testcase {
if (null === $subcontext) {
$rcm = $rc->getMethod('get_context_path');
$rcm->setAccessible(true);
return $rcm->invoke($writer);
$path = $rcm->invoke($writer);
} else {
$rcm = $rc->getMethod('get_path');
$rcm->setAccessible(true);
return $rcm->invoke($writer, $subcontext, $name);
$path = $rcm->invoke($writer, $subcontext, $name);
}
// PHPUnit uses mikey179/vfsStream which is a stream wrapper for a virtual file system that uses '/'
// as the directory separator.
$path = str_replace(DIRECTORY_SEPARATOR, '/', $path);
return $path;
}
/**