From 15a5c4b2ed744852a726c954fcb5256ff2602d3a Mon Sep 17 00:00:00 2001 From: Stephen Bourget Date: Thu, 12 Jan 2017 08:43:31 -0500 Subject: [PATCH] MDL-33483 repository: Allow file import formats be configurable. --- repository/googledocs/db/upgrade.php | 10 +++ .../lang/en/repository_googledocs.php | 5 ++ repository/googledocs/lib.php | 86 +++++++++++++++++-- repository/googledocs/tests/generator/lib.php | 12 +++ repository/googledocs/version.php | 2 +- 5 files changed, 107 insertions(+), 8 deletions(-) diff --git a/repository/googledocs/db/upgrade.php b/repository/googledocs/db/upgrade.php index 97c0ed4a7a3..89f475f5d9e 100644 --- a/repository/googledocs/db/upgrade.php +++ b/repository/googledocs/db/upgrade.php @@ -38,5 +38,15 @@ function xmldb_repository_googledocs_upgrade($oldversion) { // Automatically generated Moodle v3.2.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2017011100) { + // Set default import formats from Google. + set_config('documentformat', 'rtf', 'googledocs'); + set_config('drawingformat', 'pdf', 'googledocs'); + set_config('presentationformat', 'pptx', 'googledocs'); + set_config('spreadsheetformat', 'xlsx', 'googledocs'); + + // Plugin savepoint reached. + upgrade_plugin_savepoint(true, 2017011100, 'repository', 'googledocs'); + } return true; } diff --git a/repository/googledocs/lang/en/repository_googledocs.php b/repository/googledocs/lang/en/repository_googledocs.php index 16661764b22..ca4d255ca5f 100644 --- a/repository/googledocs/lang/en/repository_googledocs.php +++ b/repository/googledocs/lang/en/repository_googledocs.php @@ -24,8 +24,13 @@ $string['clientid'] = 'Client ID'; $string['configplugin'] = 'Configure Google Drive plugin'; +$string['docsformat'] = 'Default document import format'; +$string['drawingformat'] = 'Default drawing import format'; $string['googledocs:view'] = 'View Google Drive repository'; +$string['importformat'] = 'Configure the default import formats from google'; $string['oauthinfo'] = '

To use this plugin, you must register your site with Google, as described in the documentation Google OAuth 2.0 setup.

As part of the registration process, you will need to enter the following URL as \'Authorized Redirect URIs\':

{$a->callbackurl}

Once registered, you will be provided with a client ID and secret which can be used to configure all Google Drive and Picasa plugins.

Please also note that you will have to enable the service \'Drive API\'.

'; $string['pluginname'] = 'Google Drive'; +$string['presentationformat'] = 'Default presentation import format'; $string['secret'] = 'Secret'; $string['servicenotenabled'] = 'Access not configured. Make sure the service \'Drive API\' is enabled.'; +$string['spreadsheetformat'] = 'Default spreadsheet import format'; diff --git a/repository/googledocs/lib.php b/repository/googledocs/lib.php index ca3566996b9..26ff6ed65c2 100644 --- a/repository/googledocs/lib.php +++ b/repository/googledocs/lib.php @@ -306,6 +306,7 @@ class repository_googledocs extends repository { $folders = array(); $fields = "items(id,title,mimeType,downloadUrl,fileExtension,exportLinks,modifiedDate,fileSize,thumbnailLink)"; $params = array('q' => $q, 'fields' => $fields); + $config = get_config('googledocs'); try { // Retrieving files and folders. @@ -344,18 +345,35 @@ class repository_googledocs extends repository { $type = str_replace('application/vnd.google-apps.', '', $item['mimeType']); $title = ''; $exportType = ''; + $types = get_mimetypes_array(); + switch ($type){ case 'document': - $title = $item['title'] . '.rtf'; - $exportType = 'application/rtf'; + $ext = $config->documentformat; + $title = $item['title'] . '.'. $ext; + if ($ext === 'rtf') { + // Moodle user 'text/rtf' as the MIME type for RTF files. + // Google uses 'application/rtf' for the same type of file. + // See https://developers.google.com/drive/v3/web/manage-downloads. + $exportType = 'application/rtf'; + } else { + $exportType = $types[$ext]['type']; + } break; case 'presentation': - $title = $item['title'] . '.pptx'; - $exportType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; + $ext = $config->presentationformat; + $title = $item['title'] . '.'. $ext; + $exportType = $types[$ext]['type']; break; case 'spreadsheet': - $title = $item['title'] . '.xlsx'; - $exportType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; + $ext = $config->spreadsheetformat; + $title = $item['title'] . '.'. $ext; + $exportType = $types[$ext]['type']; + break; + case 'drawing': + $ext = $config->drawingformat; + $title = $item['title'] . '.'. $ext; + $exportType = $types[$ext]['type']; break; } // Skips invalid/unknown types. @@ -472,7 +490,9 @@ class repository_googledocs extends repository { * @return array */ public static function get_type_option_names() { - return array('clientid', 'secret', 'pluginname'); + return array('clientid', 'secret', 'pluginname', + 'documentformat', 'drawingformat', + 'presentationformat', 'spreadsheetformat'); } /** @@ -500,6 +520,58 @@ class repository_googledocs extends repository { $strrequired = get_string('required'); $mform->addRule('clientid', $strrequired, 'required', null, 'client'); $mform->addRule('secret', $strrequired, 'required', null, 'client'); + + $mform->addElement('static', null, '', get_string('importformat', 'repository_googledocs', $a)); + + // Documents. + $docsformat = array(); + $docsformat['html'] = 'html'; + $docsformat['docx'] = 'docx'; + $docsformat['odt'] = 'odt'; + $docsformat['pdf'] = 'pdf'; + $docsformat['rtf'] = 'rtf'; + $docsformat['txt'] = 'txt'; + core_collator::ksort($docsformat, core_collator::SORT_NATURAL); + + $mform->addElement('select', 'documentformat', get_string('docsformat', 'repository_googledocs'), $docsformat); + $mform->setDefault('documentformat', $docsformat['rtf']); + $mform->setType('documentformat', PARAM_ALPHANUM); + + // Drawing. + $drawingformat = array(); + $drawingformat['jpeg'] = 'jpeg'; + $drawingformat['png'] = 'png'; + $drawingformat['svg'] = 'svg'; + $drawingformat['pdf'] = 'pdf'; + core_collator::ksort($drawingformat, core_collator::SORT_NATURAL); + + $mform->addElement('select', 'drawingformat', get_string('drawingformat', 'repository_googledocs'), $drawingformat); + $mform->setDefault('drawingformat', $drawingformat['pdf']); + $mform->setType('drawingformat', PARAM_ALPHANUM); + + // Presentation. + $presentationformat = array(); + $presentationformat['pdf'] = 'pdf'; + $presentationformat['pptx'] = 'pptx'; + $presentationformat['txt'] = 'txt'; + core_collator::ksort($presentationformat, core_collator::SORT_NATURAL); + + $mform->addElement('select', 'presentationformat', get_string('presentationformat', 'repository_googledocs'), $presentationformat); + $mform->setDefault('presentationformat', $presentationformat['pptx']); + $mform->setType('presentationformat', PARAM_ALPHANUM); + + // Spreadsheet. + $spreadsheetformat = array(); + $spreadsheetformat['csv'] = 'csv'; + $spreadsheetformat['ods'] = 'ods'; + $spreadsheetformat['pdf'] = 'pdf'; + $spreadsheetformat['xlsx'] = 'xlsx'; + core_collator::ksort($spreadsheetformat, core_collator::SORT_NATURAL); + + $mform->addElement('select', 'spreadsheetformat', get_string('spreadsheetformat', 'repository_googledocs'), $spreadsheetformat); + $mform->setDefault('spreadsheetformat', $spreadsheetformat['xlsx']); + $mform->setType('spreadsheetformat', PARAM_ALPHANUM); + } } // Icon from: http://www.iconspedia.com/icon/google-2706.html. diff --git a/repository/googledocs/tests/generator/lib.php b/repository/googledocs/tests/generator/lib.php index af7f955278f..168c406a795 100644 --- a/repository/googledocs/tests/generator/lib.php +++ b/repository/googledocs/tests/generator/lib.php @@ -47,6 +47,18 @@ class repository_googledocs_generator extends testing_repository_generator { if (!isset($record['secret'])) { $record['secret'] = 'secret'; } + if (!isset($record['documentformat'])) { + $record['documentformat'] = 'pdf'; + } + if (!isset($record['presentationformat'])) { + $record['presentationformat'] = 'pdf'; + } + if (!isset($record['drawingformat'])) { + $record['drawingformat'] = 'pdf'; + } + if (!isset($record['spreadsheetformat'])) { + $record['spreadsheetformat'] = 'pdf'; + } return $record; } diff --git a/repository/googledocs/version.php b/repository/googledocs/version.php index 1f58df86238..04eaa0e8fab 100644 --- a/repository/googledocs/version.php +++ b/repository/googledocs/version.php @@ -25,6 +25,6 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016120500; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017011100; // The current plugin version (Date: YYYYMMDDXX). $plugin->requires = 2016112900; // Requires this Moodle version. $plugin->component = 'repository_googledocs'; // Full name of the plugin (used for diagnostics).