first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-09-30 18:11:26 -04:00
commit e592ca6823
27270 changed files with 5002257 additions and 0 deletions
@@ -0,0 +1,271 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Class for converting files between different file formats using google drive.
*
* @package fileconverter_googledrive
* @copyright 2017 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace fileconverter_googledrive;
defined('MOODLE_INTERNAL') || die();
use stored_file;
use moodle_exception;
use moodle_url;
use \core_files\conversion;
/**
* Class for converting files between different formats using unoconv.
*
* @package fileconverter_googledrive
* @copyright 2017 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class converter implements \core_files\converter_interface {
/** @var array $imports List of supported import file formats */
private static $imports = [
'doc' => 'application/vnd.google-apps.document',
'docx' => 'application/vnd.google-apps.document',
'rtf' => 'application/vnd.google-apps.document',
'xls' => 'application/vnd.google-apps.spreadsheet',
'xlsx' => 'application/vnd.google-apps.spreadsheet',
'ppt' => 'application/vnd.google-apps.presentation',
'pptx' => 'application/vnd.google-apps.presentation',
'html' => 'application/vnd.google-apps.document'
];
/** @var array $export List of supported export file formats */
private static $exports = [
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'rtf' => 'application/rtf',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'pdf' => 'application/pdf',
'txt' => 'text/plain'
];
/**
* Convert a document to a new format and return a conversion object relating to the conversion in progress.
*
* @param \core_files\conversion $conversion The file to be converted
* @return this
*/
public function start_document_conversion(\core_files\conversion $conversion) {
global $CFG;
$file = $conversion->get_sourcefile();
$format = $conversion->get('targetformat');
$issuerid = get_config('fileconverter_googledrive', 'issuerid');
if (empty($issuerid)) {
$conversion->set('status', conversion::STATUS_FAILED);
return $this;
}
$issuer = \core\oauth2\api::get_issuer($issuerid);
if (empty($issuer)) {
$conversion->set('status', conversion::STATUS_FAILED);
return $this;
}
$client = \core\oauth2\api::get_system_oauth_client($issuer);
$service = new \fileconverter_googledrive\rest($client);
$contenthash = $file->get_contenthash();
$originalname = $file->get_filename();
if (strpos($originalname, '.') === false) {
$conversion->set('status', conversion::STATUS_FAILED);
return $this;
}
$importextension = substr($originalname, strrpos($originalname, '.') + 1);
$importformat = self::$imports[$importextension];
$exportformat = self::$exports[$format];
$metadata = [
'name' => $contenthash,
'mimeType' => $importformat
];
$filecontent = $file->get_content();
$filesize = $file->get_filesize();
$filemimetype = $file->get_mimetype();
// Start resumable upload.
// First create empty file.
$params = [
'uploadType' => 'resumable',
'fields' => 'id,name'
];
$client->setHeader('X-Upload-Content-Type: ' . $filemimetype);
$client->setHeader('X-Upload-Content-Length: ' . $filesize);
$headers = $service->call('upload', $params, json_encode($metadata));
$uploadurl;
// Google returns a location header with the location for the upload.
foreach ($headers as $header) {
if (stripos($header, 'Location:') === 0) {
$uploadurl = trim(substr($header, strpos($header, ':') + 1));
}
}
if (empty($uploadurl)) {
$conversion->set('status', conversion::STATUS_FAILED);
return $this;
}
$params = [
'uploadurl' => $uploadurl
];
$result = $service->call('upload_content', $params, $filecontent, $filemimetype);
$fileid = $result->id;
// Now export it again.
$params = ['mimeType' => $exportformat];
$sourceurl = new moodle_url('https://www.googleapis.com/drive/v3/files/' . $fileid . '/export', $params);
$source = $sourceurl->out(false);
$tmp = make_request_directory();
$downloadto = $tmp . '/' . $fileid . '.' . $format;
$options = ['filepath' => $downloadto, 'timeout' => 15, 'followlocation' => true, 'maxredirs' => 5];
$success = $client->download_one($source, null, $options);
if ($success) {
$conversion->store_destfile_from_path($downloadto);
$conversion->set('status', conversion::STATUS_COMPLETE);
$conversion->update();
} else {
$conversion->set('status', conversion::STATUS_FAILED);
}
// Cleanup.
$params = [
'fileid' => $fileid
];
$service->call('delete', $params);
return $this;
}
/**
* Generate and serve the test document.
*
* @return stored_file
*/
public function serve_test_document() {
global $CFG;
require_once($CFG->libdir . '/filelib.php');
$filerecord = [
'contextid' => \context_system::instance()->id,
'component' => 'test',
'filearea' => 'fileconverter_googledrive',
'itemid' => 0,
'filepath' => '/',
'filename' => 'conversion_test.docx'
];
// Get the fixture doc file content and generate and stored_file object.
$fs = get_file_storage();
$testdocx = $fs->get_file($filerecord['contextid'], $filerecord['component'], $filerecord['filearea'],
$filerecord['itemid'], $filerecord['filepath'], $filerecord['filename']);
if (!$testdocx) {
$fixturefile = dirname(__DIR__) . '/tests/fixtures/source.docx';
$testdocx = $fs->create_file_from_pathname($filerecord, $fixturefile);
}
$conversion = new \core_files\conversion(0, (object) [
'targetformat' => 'pdf',
]);
$conversion->set_sourcefile($testdocx);
$conversion->create();
// Convert the doc file to pdf and send it direct to the browser.
$this->start_document_conversion($conversion);
$testfile = $conversion->get_destfile();
readfile_accel($testfile, 'application/pdf', true);
}
/**
* Poll an existing conversion for status update.
*
* @param conversion $conversion The file to be converted
* @return $this;
*/
public function poll_conversion_status(conversion $conversion) {
return $this;
}
/**
* Whether the plugin is configured and requirements are met.
*
* @return bool
*/
public static function are_requirements_met() {
$issuerid = get_config('fileconverter_googledrive', 'issuerid');
if (empty($issuerid)) {
return false;
}
$issuer = \core\oauth2\api::get_issuer($issuerid);
if (empty($issuer)) {
return false;
}
if (!$issuer->get('enabled')) {
return false;
}
if (!$issuer->is_system_account_connected()) {
return false;
}
return true;
}
/**
* Whether a file conversion can be completed using this converter.
*
* @param string $from The source type
* @param string $to The destination type
* @return bool
*/
public static function supports($from, $to) {
// This is not a one-liner because of php 5.6.
$imports = self::$imports;
$exports = self::$exports;
return isset($imports[$from]) && isset($exports[$to]);
}
/**
* A list of the supported conversions.
*
* @return string
*/
public function get_supported_conversions() {
return implode(', ', ['rtf', 'doc', 'xls', 'docx', 'xlsx', 'ppt', 'pptx', 'pdf', 'html']);
}
}
@@ -0,0 +1,112 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy class for requesting user data.
*
* @package fileconverter_googledrive
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace fileconverter_googledrive\privacy;
defined('MOODLE_INTERNAL') || die();
use \core_privacy\local\metadata\collection;
use \core_privacy\local\request\contextlist;
use \core_privacy\local\request\approved_contextlist;
use \core_privacy\local\request\userlist;
use \core_privacy\local\request\approved_userlist;
/**
* Privacy class for requesting user data.
*
* @package fileconverter_googledrive
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider implements
\core_privacy\local\metadata\provider,
\core_privacy\local\request\core_userlist_provider,
\core_privacy\local\request\plugin\provider {
/**
* Returns meta data about this system.
*
* @param collection $collection The initialised collection to add items to.
* @return collection A listing of user data stored through this system.
*/
public static function get_metadata(collection $collection): collection {
$collection->add_external_location_link('googledrive', [
'params' => 'privacy:metadata:fileconverter_googledrive:params',
'filecontent' => 'privacy:metadata:fileconverter_googledrive:filecontent',
'filemimetype' => 'privacy:metadata:fileconverter_googledrive:filemimetype',
], 'privacy:metadata:fileconverter_googledrive:externalpurpose');
return $collection;
}
/**
* Get the list of contexts that contain user information for the specified user.
*
* @param int $userid The user to search.
* @return contextlist $contextlist The contextlist containing the list of contexts used in this plugin.
*/
public static function get_contexts_for_userid(int $userid): contextlist {
$contextlist = new contextlist();
return $contextlist;
}
/**
* Get the list of users who have data within a context.
*
* @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination.
*/
public static function get_users_in_context(userlist $userlist) {
}
/**
* Export all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts to export information for.
*/
public static function export_user_data(approved_contextlist $contextlist) {
}
/**
* Delete all use data which matches the specified deletion_criteria.
*
* @param \context $context A user context.
*/
public static function delete_data_for_all_users_in_context(\context $context) {
}
/**
* Delete multiple users within a single context.
*
* @param approved_userlist $userlist The approved context and user information to delete information for.
*/
public static function delete_data_for_users(approved_userlist $userlist) {
}
/**
* Delete all user data for the specified user, in the specified contexts.
*
* @param approved_contextlist $contextlist The approved contexts and user information to delete information for.
*/
public static function delete_data_for_user(approved_contextlist $contextlist) {
}
}
@@ -0,0 +1,79 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Google Drive Rest API.
*
* @package fileconverter_googledrive
* @copyright 2017 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace fileconverter_googledrive;
defined('MOODLE_INTERNAL') || die();
/**
* Google Drive Rest API.
*
* @copyright 2017 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class rest extends \core\oauth2\rest {
/**
* Define the functions of the rest API.
*
* @return array Example:
* [ 'listFiles' => [ 'method' => 'get', 'endpoint' => 'http://...', 'args' => [ 'folder' => PARAM_STRING ] ] ]
*/
public function get_api_functions() {
return [
'upload' => [
'endpoint' => 'https://www.googleapis.com/upload/drive/v3/files',
'method' => 'post',
'args' => [
'uploadType' => PARAM_RAW,
'fields' => PARAM_RAW
],
'response' => 'headers'
],
'upload_content' => [
'endpoint' => '{uploadurl}',
'method' => 'put',
'args' => [
'uploadurl' => PARAM_URL
],
'response' => 'json'
],
'create' => [
'endpoint' => 'https://www.googleapis.com/drive/v3/files',
'method' => 'post',
'args' => [
'fields' => PARAM_RAW
],
'response' => 'json'
],
'delete' => [
'endpoint' => 'https://www.googleapis.com/drive/v3/files/{fileid}',
'method' => 'delete',
'args' => [
'fileid' => PARAM_RAW
],
'response' => 'json'
],
];
}
}
@@ -0,0 +1,42 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Strings for plugin 'fileconverter_googledrive'
*
* @package fileconverter_googledrive
* @copyright 2017 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$string['pluginname'] = 'Google Drive';
$string['disabled'] = 'Disabled';
$string['issuer'] = 'OAuth 2 service';
$string['issuer_help'] = 'The OAuth 2 service used to access Google Drive.';
$string['privacy:metadata:fileconverter_googledrive:externalpurpose'] = 'This information is sent to Google Drive API in order the file to be converted to an alternative format. The file is temporarily kept on Google Drive and gets deleted after the conversion is done.';
$string['privacy:metadata:fileconverter_googledrive:filecontent'] = 'The content of the file.';
$string['privacy:metadata:fileconverter_googledrive:filemimetype'] = 'The MIME type of the file.';
$string['privacy:metadata:fileconverter_googledrive:params'] = 'The query parameters passed to Google Drive API.';
$string['test_converter'] = 'Test this converter is working properly.';
$string['test_conversion'] = 'Test document conversion';
$string['test_conversionready'] = 'This document converter is configured properly.';
$string['test_conversionnotready'] = 'This document converter is not configured properly.';
$string['test_issuerinvalid'] = 'The OAuth service in the document converter settings is set to an invalid value.';
$string['test_issuernotenabled'] = 'The OAuth service set in the document converter settings is not enabled.';
$string['test_issuernotconnected'] = 'The OAuth service set in the document converter settings does not have a system account connected.';
$string['test_issuernotset'] = 'The OAuth service needs to be set in the document converter settings.';
+38
View File
@@ -0,0 +1,38 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This plugin is used to convert documents with google drive.
*
* @package fileconverter_googledrive
* @copyright 2017 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Callback to get the required scopes for system account.
*
* @param \core\oauth2\issuer $issuer
* @return string
*/
function fileconverter_googledrive_oauth2_system_scopes(\core\oauth2\issuer $issuer) {
if ($issuer->get('id') == get_config('fileconverter_googledrive', 'issuerid')) {
return 'https://www.googleapis.com/auth/drive';
}
return '';
}
+45
View File
@@ -0,0 +1,45 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Link to the OAuth 2 service we will use.
*
* @package fileconverter_googledrive
* @copyright 2017 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if ($hassiteconfig) {
$options = [];
$issuers = \core\oauth2\api::get_all_issuers();
$options[''] = get_string('disabled', 'fileconverter_googledrive');
foreach ($issuers as $issuer) {
$options[$issuer->get('id')] = s($issuer->get('name'));
}
$settings->add(new admin_setting_configselect('fileconverter_googledrive/issuerid',
get_string('issuer', 'fileconverter_googledrive'),
get_string('issuer_help', 'fileconverter_googledrive'),
'',
$options));
$url = new moodle_url('/files/converter/googledrive/test.php');
$link = html_writer::link($url, get_string('test_converter', 'fileconverter_googledrive'));
$settings->add(new admin_setting_heading('test_converter', '', $link));
}
+96
View File
@@ -0,0 +1,96 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Test that googledrive is configured correctly
*
* @package fileconverter_googledrive
* @copyright 2017 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require(__DIR__ . '/../../../config.php');
require_once($CFG->libdir . '/filelib.php');
$sendpdf = optional_param('sendpdf', 0, PARAM_BOOL);
$PAGE->set_url(new moodle_url('/files/converter/googledrive/test.php'));
$PAGE->set_context(context_system::instance());
require_login();
require_capability('moodle/site:config', context_system::instance());
$strheading = get_string('test_conversion', 'fileconverter_googledrive');
$PAGE->navbar->add(get_string('administrationsite'));
$PAGE->navbar->add(get_string('plugins', 'admin'));
$PAGE->navbar->add(get_string('pluginname', 'fileconverter_googledrive'),
new moodle_url('/admin/settings.php', array('section' => 'fileconvertergoogledrive')));
$PAGE->navbar->add($strheading);
$PAGE->set_heading($strheading);
$PAGE->set_title($strheading);
$converter = new \fileconverter_googledrive\converter();
if ($sendpdf) {
require_sesskey();
$converter->serve_test_document();
die();
}
$result = $converter->are_requirements_met();
if ($result) {
$msg = $OUTPUT->notification(get_string('test_conversionready', 'fileconverter_googledrive'), 'success');
$pdflink = new moodle_url($PAGE->url, array('sendpdf' => 1, 'sesskey' => sesskey()));
$msg .= html_writer::link($pdflink, get_string('test_conversion', 'fileconverter_googledrive'));
$msg .= html_writer::empty_tag('br');
} else {
// Diagnostics time.
$issuerid = get_config('fileconverter_googledrive', 'issuerid');
$msg = '';
if (empty($issuerid)) {
$msg = $OUTPUT->notification(get_string('test_issuernotset', 'fileconverter_googledrive'), 'warning');
}
if (empty($msg)) {
$issuer = \core\oauth2\api::get_issuer($issuerid);
if (empty($issuer)) {
$msg = $OUTPUT->notification(get_string('test_issuerinvalid', 'fileconverter_googledrive'), 'warning');
}
}
if (empty($msg)) {
if (!$issuer->get('enabled')) {
$msg = $OUTPUT->notification(get_string('test_issuernotenabled', 'fileconverter_googledrive'), 'warning');
}
}
if (empty($msg)) {
if (!$issuer->is_system_account_connected()) {
$msg = $OUTPUT->notification(get_string('test_issuernotconnected', 'fileconverter_googledrive'), 'warning');
}
}
if (empty($msg)) {
$msg = $OUTPUT->notification(get_string('test_conversionnotready', 'fileconverter_googledrive'), 'warning');
}
}
$returl = new moodle_url('/admin/settings.php', array('section' => 'fileconvertergoogledrive'));
$msg .= $OUTPUT->continue_button($returl);
echo $OUTPUT->header();
echo $OUTPUT->box($msg, 'generalbox');
echo $OUTPUT->footer();
Binary file not shown.
@@ -0,0 +1,48 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Base class for unit tests for fileconverter_googledrive.
*
* @package fileconverter_googledrive
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace fileconverter_googledrive\privacy;
defined('MOODLE_INTERNAL') || die();
use core_privacy\tests\provider_testcase;
/**
* Unit tests for files/converter/googledrive/classes/privacy/provider.php
*
* @copyright 2018 Mihail Geshoski <mihail@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class provider_test extends provider_testcase {
/**
* Test getting the context for the user ID related to this plugin.
*/
public function test_get_contexts_for_userid(): void {
$this->resetAfterTest();
$user = $this->getDataGenerator()->create_user();
$contextlist = \fileconverter_googledrive\privacy\provider::get_contexts_for_userid($user->id);
$this->assertEmpty($contextlist);
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Version details
*
* @package fileconverter_googledrive
* @copyright 2017 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2024042200; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2024041600; // Requires this Moodle version.
$plugin->component = 'fileconverter_googledrive'; // Full name of the plugin (used for diagnostics).