mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-58219 googledocs: Keep original name on copy
Also - only add writers to files that have been "claimed" (prevent_changes_to_external_files) Part of MDL-58220
This commit is contained in:
parent
2fad141006
commit
6da1c55ba8
1 changed files with 26 additions and 7 deletions
|
@ -313,7 +313,13 @@ class repository_googledocs extends repository {
|
||||||
}
|
}
|
||||||
if (isset($gfile->fileExtension)) {
|
if (isset($gfile->fileExtension)) {
|
||||||
// The file has an extension, therefore we can download it.
|
// The file has an extension, therefore we can download it.
|
||||||
$source = json_encode(['id' => $gfile->id, 'exportformat' => 'download', 'link' => $link]);
|
$source = json_encode([
|
||||||
|
'id' => $gfile->id,
|
||||||
|
'name' => $gfile->name,
|
||||||
|
'exportformat' => 'download',
|
||||||
|
'link' => $link,
|
||||||
|
'claimed' => false
|
||||||
|
]);
|
||||||
$title = $gfile->name;
|
$title = $gfile->name;
|
||||||
} else {
|
} else {
|
||||||
// The file is probably a Google Doc file, we get the corresponding export link.
|
// The file is probably a Google Doc file, we get the corresponding export link.
|
||||||
|
@ -356,7 +362,13 @@ class repository_googledocs extends repository {
|
||||||
if (empty($title)) {
|
if (empty($title)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$source = json_encode(['id' => $gfile->id, 'exportformat' => $exporttype, 'link' => $link]);
|
$source = json_encode([
|
||||||
|
'id' => $gfile->id,
|
||||||
|
'exportformat' => $exporttype,
|
||||||
|
'link' => $link,
|
||||||
|
'name' => $gfile->name,
|
||||||
|
'claimed' => false
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
// Adds the file to the file list. Using the itemId along with the name as key
|
// Adds the file to the file list. Using the itemId along with the name as key
|
||||||
// of the array because Google Drive allows files with identical names.
|
// of the array because Google Drive allows files with identical names.
|
||||||
|
@ -541,7 +553,7 @@ class repository_googledocs extends repository {
|
||||||
$storedfile->get_filepath(),
|
$storedfile->get_filepath(),
|
||||||
$storedfile->get_filename());
|
$storedfile->get_filename());
|
||||||
|
|
||||||
if ($info->is_writable()) {
|
if (!empty($source->claimed) && $info->is_writable()) {
|
||||||
// Add the current user as an OAuth writer.
|
// Add the current user as an OAuth writer.
|
||||||
$systemauth = \core\oauth2\api::get_system_oauth_client($this->issuer);
|
$systemauth = \core\oauth2\api::get_system_oauth_client($this->issuer);
|
||||||
|
|
||||||
|
@ -608,7 +620,7 @@ class repository_googledocs extends repository {
|
||||||
$systemservice = new repository_googledocs\rest($systemauth);
|
$systemservice = new repository_googledocs\rest($systemauth);
|
||||||
|
|
||||||
// Copy the file so we get a snapshot file owned by Moodle.
|
// Copy the file so we get a snapshot file owned by Moodle.
|
||||||
$newsource = $this->copy_file($systemservice, $source->id);
|
$newsource = $this->copy_file($systemservice, $source->id, $source->name);
|
||||||
|
|
||||||
// Set the sharing options.
|
// Set the sharing options.
|
||||||
$this->set_file_sharing_anyone_with_link_can_read($systemservice, $newsource->id);
|
$this->set_file_sharing_anyone_with_link_can_read($systemservice, $newsource->id);
|
||||||
|
@ -626,6 +638,7 @@ class repository_googledocs extends repository {
|
||||||
if (empty($source->link)) {
|
if (empty($source->link)) {
|
||||||
$source->link = isset($newsource->webContentLink) ? $newsource->webContentLink : '';
|
$source->link = isset($newsource->webContentLink) ? $newsource->webContentLink : '';
|
||||||
}
|
}
|
||||||
|
$source->claimed = true;
|
||||||
$reference = json_encode($source);
|
$reference = json_encode($source);
|
||||||
$file->set_source($reference);
|
$file->set_source($reference);
|
||||||
|
|
||||||
|
@ -772,16 +785,22 @@ class repository_googledocs extends repository {
|
||||||
*
|
*
|
||||||
* @param \core\oauth2\client $client Authenticated client.
|
* @param \core\oauth2\client $client Authenticated client.
|
||||||
* @param string $fileid The file we are copying.
|
* @param string $fileid The file we are copying.
|
||||||
|
* @param string $name The original filename (don't change it).
|
||||||
*
|
*
|
||||||
* @return stdClass file details.
|
* @return stdClass file details.
|
||||||
*/
|
*/
|
||||||
protected function copy_file(\repository_googledocs\rest $client, $fileid) {
|
protected function copy_file(\repository_googledocs\rest $client, $fileid, $name) {
|
||||||
$fields = "id,name,mimeType,webContentLink,webViewLink,size,thumbnailLink,iconLink";
|
$fields = "id,name,mimeType,webContentLink,webViewLink,size,thumbnailLink,iconLink";
|
||||||
$params = [
|
$params = [
|
||||||
'fileid' => $fileid,
|
'fileid' => $fileid,
|
||||||
'fields' => $fields
|
'fields' => $fields,
|
||||||
];
|
];
|
||||||
$fileinfo = $client->call('copy', $params, ' ');
|
// Keep the original name (don't put copy at the end of it).
|
||||||
|
$copyinfo = [];
|
||||||
|
if (!empty($name)) {
|
||||||
|
$copyinfo = [ 'name' => $name ];
|
||||||
|
}
|
||||||
|
$fileinfo = $client->call('copy', $params, json_encode($copyinfo));
|
||||||
if (empty($fileinfo->id)) {
|
if (empty($fileinfo->id)) {
|
||||||
$details = 'Cannot copy file:' . $fileid;
|
$details = 'Cannot copy file:' . $fileid;
|
||||||
throw new repository_exception('errorwhilecommunicatingwith', 'repository', '', $details);
|
throw new repository_exception('errorwhilecommunicatingwith', 'repository', '', $details);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue