diff --git a/lib/classes/plugin_manager.php b/lib/classes/plugin_manager.php index 9a4c7a74602..2fadfc24fe4 100644 --- a/lib/classes/plugin_manager.php +++ b/lib/classes/plugin_manager.php @@ -1731,7 +1731,7 @@ class core_plugin_manager { 'message' => array('jabber'), 'quizaccess' => array('safebrowser'), 'report' => array('search'), - 'repository' => array('alfresco', 'picasa'), + 'repository' => array('alfresco', 'picasa', 'skydrive'), 'tinymce' => array('dragmath'), 'tool' => array('bloglevelupgrade', 'qeupgradehelper', 'timezoneimport', 'assignmentupgrade', 'health'), 'theme' => array('bootstrapbase', 'clean', 'more', 'afterburner', 'anomaly', 'arialist', 'base', @@ -1996,7 +1996,7 @@ class core_plugin_manager { 'repository' => array( 'areafiles', 'boxnet', 'contentbank', 'coursefiles', 'dropbox', 'equella', 'filesystem', 'flickr', 'flickr_public', 'googledocs', 'local', 'merlot', 'nextcloud', - 'onedrive', 'recent', 'skydrive', 's3', 'upload', 'url', 'user', 'webdav', + 'onedrive', 'recent', 's3', 'upload', 'url', 'user', 'webdav', 'wikimedia', 'youtube' ), diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index f6919eb54d5..faa1e1a9810 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2862,5 +2862,15 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2021092400.03); } + if ($oldversion < 2021100300.01) { + // Remove repository_skydrive (unless it has manually been added back). + if (!file_exists($CFG->dirroot . '/repository/skydrive/lib.php')) { + unset_all_config_for_plugin('repository_skydrive'); + } + + // Main savepoint reached. + upgrade_main_savepoint(true, 2021100300.01); + } + return true; } diff --git a/repository/skydrive/classes/privacy/provider.php b/repository/skydrive/classes/privacy/provider.php deleted file mode 100644 index 01ca14692ca..00000000000 --- a/repository/skydrive/classes/privacy/provider.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Privacy Subsystem implementation for repository_skydrive. - * - * @package repository_skydrive - * @copyright 2018 Zig Tan - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -namespace repository_skydrive\privacy; - -defined('MOODLE_INTERNAL') || die(); - -/** - * Privacy Subsystem for repository_skydrive implementing null_provider. - * - * @copyright 2018 Zig Tan - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class provider implements \core_privacy\local\metadata\null_provider { - - /** - * Get the language string identifier with the component's language - * file to explain why this plugin stores no data. - * - * @return string - */ - public static function get_reason() : string { - return 'privacy:metadata'; - } -} diff --git a/repository/skydrive/db/access.php b/repository/skydrive/db/access.php deleted file mode 100644 index 6fe7ea25da2..00000000000 --- a/repository/skydrive/db/access.php +++ /dev/null @@ -1,33 +0,0 @@ -. - -/** - * Capability definitions for skydrive repository - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -$capabilities = array( - 'repository/skydrive:view' => array( - 'captype' => 'read', - 'contextlevel' => CONTEXT_MODULE, - 'archetypes' => array( - 'user' => CAP_ALLOW - ) - ) -); diff --git a/repository/skydrive/db/caches.php b/repository/skydrive/db/caches.php deleted file mode 100644 index 8b61e339ba6..00000000000 --- a/repository/skydrive/db/caches.php +++ /dev/null @@ -1,31 +0,0 @@ -. - -/** - * Cache definitions. - * - * @package repository_skydrive - * @copyright 2013 Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -$definitions = array( - 'foldername' => array( - 'mode' => cache_store::MODE_SESSION, - ) -); diff --git a/repository/skydrive/lang/en/repository_skydrive.php b/repository/skydrive/lang/en/repository_skydrive.php deleted file mode 100644 index b8ae38c3472..00000000000 --- a/repository/skydrive/lang/en/repository_skydrive.php +++ /dev/null @@ -1,33 +0,0 @@ -. - -/** - * Language file definitions for skydrive repository - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -$string['cachedef_foldername'] = 'Folder name cache'; -$string['clientid'] = 'Client ID'; -$string['configplugin'] = 'Configure Microsoft OneDrive (legacy)'; -$string['oauthinfo'] = '

To use this plugin, you must register your site with Microsoft.

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

{$a->callbackurl}

Once registered, you will be provided with a client ID and secret which can be entered here.

'; -$string['pluginname'] = 'Microsoft OneDrive (legacy)'; -$string['secret'] = 'Secret'; -$string['skydrive:view'] = 'View OneDrive (legacy)'; -$string['deprecatedwarning'] = 'Warning: The API used by this repository plugin has been deprecated by Microsoft and it will stop working eventually. Please migrate to the newer "Microsoft OneDrive" repository.'; -$string['privacy:metadata'] = 'The Microsoft OneDrive (legacy) repository plugin does not store any personal data, but does transmit user data from Moodle to the remote system.'; diff --git a/repository/skydrive/lib.php b/repository/skydrive/lib.php deleted file mode 100644 index 0343f97eb56..00000000000 --- a/repository/skydrive/lib.php +++ /dev/null @@ -1,215 +0,0 @@ -. - -/** - * Microsoft Live Skydrive Repository Plugin - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once('microsoftliveapi.php'); - -/** - * Microsoft skydrive repository plugin. - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class repository_skydrive extends repository { - /** @var microsoft_skydrive skydrive oauth2 api helper object */ - private $skydrive = null; - - /** - * Constructor - * - * @param int $repositoryid repository instance id. - * @param int|stdClass $context a context id or context object. - * @param array $options repository options. - */ - public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array()) { - parent::__construct($repositoryid, $context, $options); - - $clientid = get_config('skydrive', 'clientid'); - $secret = get_config('skydrive', 'secret'); - $returnurl = new moodle_url('/repository/repository_callback.php'); - $returnurl->param('callback', 'yes'); - $returnurl->param('repo_id', $this->id); - $returnurl->param('sesskey', sesskey()); - - $this->skydrive = new microsoft_skydrive($clientid, $secret, $returnurl); - $this->check_login(); - } - - /** - * Checks whether the user is logged in or not. - * - * @return bool true when logged in - */ - public function check_login() { - return $this->skydrive->is_logged_in(); - } - - /** - * Print the login form, if required - * - * @return array of login options - */ - public function print_login() { - $url = $this->skydrive->get_login_url(); - - if ($this->options['ajax']) { - $popup = new stdClass(); - $popup->type = 'popup'; - $popup->url = $url->out(false); - return array('login' => array($popup)); - } else { - echo ''.get_string('login', 'repository').''; - } - } - - /** - * Given a path, and perhaps a search, get a list of files. - * - * See details on {@link http://docs.moodle.org/dev/Repository_plugins} - * - * @param string $path identifier for current path - * @param string $page the page number of file list - * @return array list of files including meta information as specified by parent. - */ - public function get_listing($path='', $page = '') { - $ret = array(); - $ret['dynload'] = true; - $ret['nosearch'] = true; - $ret['manage'] = 'https://skydrive.live.com/'; - - $fileslist = $this->skydrive->get_file_list($path); - // Filter list for accepted types. Hopefully this will be done by core some day. - $fileslist = array_filter($fileslist, array($this, 'filter')); - $ret['list'] = $fileslist; - - // Generate path bar, always start with the plugin name. - $ret['path'] = array(); - $ret['path'][] = array('name'=> $this->name, 'path'=>''); - - // Now add each level folder. - $trail = ''; - if (!empty($path)) { - $parts = explode('/', $path); - foreach ($parts as $folderid) { - if (!empty($folderid)) { - $trail .= ('/'.$folderid); - $ret['path'][] = array('name' => $this->skydrive->get_folder_name($folderid), - 'path' => $trail); - } - } - } - - return $ret; - } - - /** - * Downloads a repository file and saves to a path. - * - * @param string $id identifier of file - * @param string $filename to save file as - * @return array with keys: - * path: internal location of the file - * url: URL to the source - */ - public function get_file($id, $filename = '') { - $path = $this->prepare_file($filename); - return $this->skydrive->download_file($id, $path); - } - - /** - * Return names of the options to display in the repository form - * - * @return array of option names - */ - public static function get_type_option_names() { - return array('clientid', 'secret', 'pluginname'); - } - - /** - * Setup repistory form. - * - * @param moodleform $mform Moodle form (passed by reference) - * @param string $classname repository class name - */ - public static function type_config_form($mform, $classname = 'repository') { - global $OUTPUT; - - $a = new stdClass; - $a->callbackurl = microsoft_skydrive::callback_url()->out(false); - $mform->addElement('static', null, '', get_string('oauthinfo', 'repository_skydrive', $a)); - - $mform->addElement('static', null, '', $OUTPUT->notification(get_string('deprecatedwarning', 'repository_skydrive', $a))); - - parent::type_config_form($mform); - $strrequired = get_string('required'); - $mform->addElement('text', 'clientid', get_string('clientid', 'repository_skydrive')); - $mform->addElement('text', 'secret', get_string('secret', 'repository_skydrive')); - $mform->addRule('clientid', $strrequired, 'required', null, 'client'); - $mform->addRule('secret', $strrequired, 'required', null, 'client'); - $mform->setType('clientid', PARAM_RAW_TRIMMED); - $mform->setType('secret', PARAM_RAW_TRIMMED); - } - - /** - * Logout from repository instance and return - * login form. - * - * @return page to display - */ - public function logout() { - $this->skydrive->log_out(); - return $this->print_login(); - } - - /** - * This repository doesn't support global search. - * - * @return bool if supports global search - */ - public function global_search() { - return false; - } - - /** - * This repoistory supports any filetype. - * - * @return string '*' means this repository support any files - */ - public function supported_filetypes() { - return '*'; - } - - /** - * This repostiory only supports internal files - * - * @return int return type bitmask supported - */ - public function supported_returntypes() { - return FILE_INTERNAL; - } -} diff --git a/repository/skydrive/microsoftliveapi.php b/repository/skydrive/microsoftliveapi.php deleted file mode 100644 index 5fc52274eae..00000000000 --- a/repository/skydrive/microsoftliveapi.php +++ /dev/null @@ -1,245 +0,0 @@ -. - -/** - * Functions for operating with the skydrive API - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->libdir.'/oauthlib.php'); - -/** - * A helper class to access microsoft live resources using the api. - * - * This uses the microsfot API defined in - * http://msdn.microsoft.com/en-us/library/hh243648.aspx - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class microsoft_skydrive extends oauth2_client { - /** @var string OAuth 2.0 scope */ - const SCOPE = 'wl.skydrive'; - /** @var string Base url to access API */ - const API = 'https://apis.live.net/v5.0'; - /** @var cache_session cache of foldernames */ - var $foldernamecache = null; - - /** - * Construct a skydrive request object - * - * @param string $clientid client id for OAuth 2.0 provided by microsoft - * @param string $clientsecret secret for OAuth 2.0 provided by microsoft - * @param moodle_url $returnurl url to return to after succseful auth - */ - public function __construct($clientid, $clientsecret, $returnurl) { - parent::__construct($clientid, $clientsecret, $returnurl, self::SCOPE); - // Make a session cache - $this->foldernamecache = cache::make('repository_skydrive', 'foldername'); - } - - /** - * Returns the auth url for OAuth 2.0 request - * @return string the auth url - */ - protected function auth_url() { - return 'https://login.live.com/oauth20_authorize.srf'; - } - - /** - * Returns the token url for OAuth 2.0 request - * @return string the auth url - */ - protected function token_url() { - return 'https://login.live.com/oauth20_token.srf'; - } - - /** - * Post request. - * - * Overridden to convert the data to a string, else curl will set the wrong headers. - * - * @param string $url The URL. - * @param array|string $params The parameters. - * @param array $options The options. - * @return bool - */ - public function post($url, $params = '', $options = array()) { - return parent::post($url, format_postdata_for_curlcall($params), $options); - } - - /** - * Downloads a file to a file from skydrive using authenticated request - * - * @param string $id id of file - * @param string $path path to save file to - * @return array stucture for repository download_file - */ - public function download_file($id, $path) { - $url = self::API."/${id}/content"; - // Microsoft live redirects to the real download location.. - $this->setopt(array('CURLOPT_FOLLOWLOCATION' => true, 'CURLOPT_MAXREDIRS' => 3)); - $content = $this->get($url); - file_put_contents($path, $content); - return array('path'=>$path, 'url'=>$url); - } - - /** - * Returns a folder name property for a given folderid. - * - * @param string $folderid the folder id which is passed - * @return mixed folder name or false in case of error - */ - public function get_folder_name($folderid) { - if (empty($folderid)) { - throw new coding_exception('Empty folderid passed to get_folder_name'); - } - - // Cache based on oauthtoken and folderid. - $cachekey = $this->folder_cache_key($folderid); - - if ($foldername = $this->foldernamecache->get($cachekey)) { - return $foldername; - } - - $url = self::API."/{$folderid}"; - $ret = json_decode($this->get($url)); - if (isset($ret->error)) { - $this->log_out(); - return false; - } - - $this->foldernamecache->set($cachekey, $ret->name); - return $ret->name; - } - - /** - * Returns a list of files the user has formated for files api - * - * @param string $path the path which we are in - * @return mixed Array of files formated for fileapoi - */ - public function get_file_list($path = '') { - global $OUTPUT; - - $precedingpath = ''; - if (empty($path)) { - $url = self::API."/me/skydrive/files/"; - } else { - $parts = explode('/', $path); - $currentfolder = array_pop($parts); - $url = self::API."/{$currentfolder}/files/"; - } - - $ret = json_decode($this->get($url)); - - if (isset($ret->error)) { - $this->log_out(); - return false; - } - - $files = array(); - - foreach ($ret->data as $file) { - switch($file->type) { - case 'folder': - case 'album': - // Cache the foldername for future requests. - $cachekey = $this->folder_cache_key($file->id); - $this->foldernamecache->set($cachekey, $file->name); - - $files[] = array( - 'title' => $file->name, - 'path' => $path.'/'.$file->id, - 'size' => 0, - 'date' => strtotime($file->updated_time), - 'thumbnail' => $OUTPUT->image_url(file_folder_icon(90))->out(false), - 'children' => array(), - ); - break; - case 'photo': - $files[] = array( - 'title' => $file->name, - 'size' => $file->size, - 'date' => strtotime($file->updated_time), - 'thumbnail' => $OUTPUT->image_url(file_extension_icon($file->name, 90))->out(false), - 'realthumbnail' => $file->picture, - 'source' => $file->id, - 'url' => $file->link, - 'image_height' => $file->height, - 'image_width' => $file->width, - 'author' => $file->from->name, - ); - break; - case 'video': - $files[] = array( - 'title' => $file->name, - 'size' => $file->size, - 'date' => strtotime($file->updated_time), - 'thumbnail' => $OUTPUT->image_url(file_extension_icon($file->name, 90))->out(false), - 'realthumbnail' => $file->picture, - 'source' => $file->id, - 'url' => $file->link, - 'author' => $file->from->name, - ); - break; - case 'audio': - $files[] = array( - 'title' => $file->name, - 'size' => $file->size, - 'date' => strtotime($file->updated_time), - 'thumbnail' => $OUTPUT->image_url(file_extension_icon($file->name, 90))->out(false), - 'source' => $file->id, - 'url' => $file->link, - 'author' => $file->from->name, - ); - break; - case 'file': - $files[] = array( - 'title' => $file->name, - 'size' => $file->size, - 'date' => strtotime($file->updated_time), - 'thumbnail' => $OUTPUT->image_url(file_extension_icon($file->name, 90))->out(false), - 'source' => $file->id, - 'url' => $file->link, - 'author' => $file->from->name, - ); - break; - } - } - return $files; - } - - /** - * Returns a key for foldernane cache - * - * @param string $folderid the folder id which is to be cached - * @return string the cache key to use - */ - private function folder_cache_key($folderid) { - // Cache based on oauthtoken and folderid. - return $this->get_tokenname().'_'.$folderid; - } -} diff --git a/repository/skydrive/pix/icon.png b/repository/skydrive/pix/icon.png deleted file mode 100644 index 186d49c06db..00000000000 Binary files a/repository/skydrive/pix/icon.png and /dev/null differ diff --git a/repository/skydrive/version.php b/repository/skydrive/version.php deleted file mode 100644 index 86292488bee..00000000000 --- a/repository/skydrive/version.php +++ /dev/null @@ -1,30 +0,0 @@ -. - -/** - * Version details for skydrive repository - * - * @package repository_skydrive - * @copyright 2012 Lancaster University Network Services Ltd - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -$plugin->version = 2021052500; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2021052500; // Requires this Moodle version. -$plugin->component = 'repository_skydrive'; // Full name of the plugin (used for diagnostics). diff --git a/repository/upgrade.txt b/repository/upgrade.txt index c9e32b8d04f..d9b4c6b0a34 100644 --- a/repository/upgrade.txt +++ b/repository/upgrade.txt @@ -5,6 +5,8 @@ http://docs.moodle.org/dev/Repository_API === 4.0 === * The repository_picasa has been completely removed (Picasa is discontinued since 2016). +* The skydrive repository has been completely removed from core. It has been moved to the plugins database repository, so +it can still be installed as a third-party plugin. === 3.11 === * The Google Drive repository now includes a new rest API function 'shared_drives_list', which can be used to fetch diff --git a/version.php b/version.php index e59cc0b730b..6b98bb9c1af 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2021100300.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2021100300.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0dev (Build: 20211003)'; // Human-friendly version name