Commit 1104a9fa authored by Juan Leyva's avatar Juan Leyva
Browse files

MDL-58399 webservice: Return additional file fields for repositories

We should be detecting when we are treating files that are linked to
external repositories.
For doing that we'd need to return some additional fields via Web
Services:
- isexternalfile
- mimetype (google docs files use an special one)
- repositorytype (the repository plugin name)
parent 216ea39b
......@@ -363,6 +363,11 @@ class core_course_external extends external_api {
'timecreated' => new external_value(PARAM_INT, 'Time created'),
'timemodified' => new external_value(PARAM_INT, 'Time modified'),
'sortorder' => new external_value(PARAM_INT, 'Content sort order'),
'mimetype' => new external_value(PARAM_RAW, 'File mime type.', VALUE_OPTIONAL),
'isexternalfile' => new external_value(PARAM_BOOL, 'Whether is an external file.',
VALUE_OPTIONAL),
'repositorytype' => new external_value(PARAM_PLUGIN, 'The repository type for external files.',
VALUE_OPTIONAL),
// copyright related info
'userid' => new external_value(PARAM_INT, 'User who added this content to moodle'),
......
......@@ -1309,6 +1309,10 @@ class external_util {
$file['mimetype'] = $areafile->get_mimetype();
$file['filesize'] = $areafile->get_filesize();
$file['timemodified'] = $areafile->get_timemodified();
$file['isexternalfile'] = $areafile->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $areafile->get_repository_type();
}
$fileitemid = $useitemidinurl ? $areafile->get_itemid() : null;
$file['fileurl'] = moodle_url::make_webservice_pluginfile_url($contextid, $component, $filearea,
$fileitemid, $areafile->get_filepath(), $areafile->get_filename())->out(false);
......@@ -1345,6 +1349,8 @@ class external_files extends external_multiple_structure {
'fileurl' => new external_value(PARAM_URL, 'Downloadable file url.', VALUE_OPTIONAL),
'timemodified' => new external_value(PARAM_INT, 'Time modified.', VALUE_OPTIONAL),
'mimetype' => new external_value(PARAM_RAW, 'File mime type.', VALUE_OPTIONAL),
'isexternalfile' => new external_value(PARAM_BOOL, 'Whether is an external file.', VALUE_OPTIONAL),
'repositorytype' => new external_value(PARAM_PLUGIN, 'The repository type for external files.', VALUE_OPTIONAL),
),
'File.'
),
......@@ -1397,6 +1403,18 @@ class external_files extends external_multiple_structure {
'optional' => true,
'null' => NULL_NOT_ALLOWED,
),
'isexternalfile' => array(
'type' => PARAM_BOOL,
'description' => 'Whether is an external file.',
'optional' => true,
'null' => NULL_NOT_ALLOWED,
),
'repositorytype' => array(
'type' => PARAM_PLUGIN,
'description' => 'The repository type for the external files.',
'optional' => true,
'null' => NULL_ALLOWED,
),
];
}
}
......@@ -806,6 +806,22 @@ class stored_file {
}
}
/**
* Returns repository type.
*
* @return mixed str|null the repository type or null if is not an external file
* @since Moodle 3.3
*/
public function get_repository_type() {
if (!empty($this->repository)) {
return $this->repository->get_typename();
} else {
return null;
}
}
/**
* get reference file id
* @return int
......
......@@ -510,6 +510,7 @@ class core_externallib_testcase extends advanced_testcase {
'timemodified' => $timemodified,
'filesize' => $filesize,
'mimetype' => 'text/plain',
'isexternalfile' => false,
);
// Get all the files for the area.
$files = external_util::get_area_files($context, $component, $filearea, false);
......@@ -529,7 +530,8 @@ class core_externallib_testcase extends advanced_testcase {
$description = new external_files();
// First check that the expected default values and keys are returned.
$expectedkeys = array_flip(array('filename', 'filepath', 'filesize', 'fileurl', 'timemodified', 'mimetype'));
$expectedkeys = array_flip(array('filename', 'filepath', 'filesize', 'fileurl', 'timemodified', 'mimetype',
'isexternalfile', 'repositorytype'));
$returnedkeys = array_flip(array_keys($description->content->keys));
$this->assertEquals($expectedkeys, $returnedkeys);
$this->assertEquals('List of files.', $description->desc);
......
......@@ -584,6 +584,11 @@ function book_export_contents($cm, $baseurl) {
$file['userid'] = $fileinfo->get_userid();
$file['author'] = $fileinfo->get_author();
$file['license'] = $fileinfo->get_license();
$file['mimetype'] = $fileinfo->get_mimetype();
$file['isexternalfile'] = $fileinfo->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $fileinfo->get_repository_type();
}
$contents[] = $file;
}
}
......
......@@ -317,6 +317,11 @@ function folder_export_contents($cm, $baseurl) {
$file['userid'] = $fileinfo->get_userid();
$file['author'] = $fileinfo->get_author();
$file['license'] = $fileinfo->get_license();
$file['mimetype'] = $fileinfo->get_mimetype();
$file['isexternalfile'] = $fileinfo->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $fileinfo->get_repository_type();
}
$contents[] = $file;
}
......
......@@ -323,6 +323,7 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
$discussion1reply1->id, '/', $filename),
'timemodified' => $timepost,
'mimetype' => 'image/jpeg',
'isexternalfile' => false,
)
),
'totalscore' => $discussion1reply1->totalscore,
......
......@@ -411,6 +411,11 @@ function imscp_export_contents($cm, $baseurl) {
$file['userid'] = $fileinfo->get_userid();
$file['author'] = $fileinfo->get_author();
$file['license'] = $fileinfo->get_license();
$file['mimetype'] = $fileinfo->get_mimetype();
$file['isexternalfile'] = $fileinfo->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $fileinfo->get_repository_type();
}
$contents[] = $file;
}
......
......@@ -415,6 +415,11 @@ function page_export_contents($cm, $baseurl) {
$file['userid'] = $fileinfo->get_userid();
$file['author'] = $fileinfo->get_author();
$file['license'] = $fileinfo->get_license();
$file['mimetype'] = $fileinfo->get_mimetype();
$file['isexternalfile'] = $fileinfo->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $fileinfo->get_repository_type();
}
$contents[] = $file;
}
......
......@@ -449,6 +449,11 @@ function resource_export_contents($cm, $baseurl) {
$file['userid'] = $fileinfo->get_userid();
$file['author'] = $fileinfo->get_author();
$file['license'] = $fileinfo->get_license();
$file['mimetype'] = $fileinfo->get_mimetype();
$file['isexternalfile'] = $fileinfo->is_external_file();
if ($file['isexternalfile']) {
$file['repositorytype'] = $fileinfo->get_repository_type();
}
$contents[] = $file;
}
......
......@@ -1074,6 +1074,7 @@ class mod_wiki_external_testcase extends externallib_advanced_testcase {
'filename' => $file['filename'],
'filepath' => $file['filepath'],
'mimetype' => 'image/jpeg',
'isexternalfile' => false,
'filesize' => strlen($content),
'timemodified' => $file['timemodified'],
'fileurl' => moodle_url::make_webservice_pluginfile_url($file['contextid'], $file['component'],
......@@ -1128,6 +1129,7 @@ class mod_wiki_external_testcase extends externallib_advanced_testcase {
'filename' => $file['filename'],
'filepath' => $file['filepath'],
'mimetype' => 'image/jpeg',
'isexternalfile' => false,
'filesize' => strlen($content),
'timemodified' => $file['timemodified'],
'fileurl' => moodle_url::make_webservice_pluginfile_url($file['contextid'], $file['component'],
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment