diff --git a/lib/classes/plugin_manager.php b/lib/classes/plugin_manager.php index be2741a4fef8c..132bbe40071c2 100644 --- a/lib/classes/plugin_manager.php +++ b/lib/classes/plugin_manager.php @@ -1725,6 +1725,7 @@ public static function is_deleted_standard_plugin($type, $name) { 'block' => array('course_overview', 'messages', 'community', 'participants'), 'cachestore' => array('memcache'), 'enrol' => array('authorize'), + 'portfolio' => array('picasa'), 'qformat' => array('webct'), 'message' => array('jabber'), 'quizaccess' => array('safebrowser'), @@ -1933,7 +1934,7 @@ public static function standard_plugins_list($type) { ), 'portfolio' => array( - 'boxnet', 'download', 'flickr', 'googledocs', 'mahara', 'picasa' + 'boxnet', 'download', 'flickr', 'googledocs', 'mahara' ), 'profilefield' => array( diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 96e0dead12534..230cecd3516b9 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2778,5 +2778,29 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2021091100.02); } + if ($oldversion < 2021091700.01) { + // If portfolio_picasa is no longer present, remove it. + if (!file_exists($CFG->dirroot . '/portfolio/picasa/version.php')) { + $instance = $DB->get_record('portfolio_instance', ['plugin' => 'picasa']); + if (!empty($instance)) { + // Remove all records from portfolio_instance_config. + $DB->delete_records('portfolio_instance_config', ['instance' => $instance->id]); + // Remove all records from portfolio_instance_user. + $DB->delete_records('portfolio_instance_user', ['instance' => $instance->id]); + // Remove all records from portfolio_log. + $DB->delete_records('portfolio_log', ['portfolio' => $instance->id]); + // Remove all records from portfolio_tempdata. + $DB->delete_records('portfolio_tempdata', ['instance' => $instance->id]); + // Remove the record from the portfolio_instance table. + $DB->delete_records('portfolio_instance', ['id' => $instance->id]); + } + + // Clean config. + unset_all_config_for_plugin('portfolio_picasa'); + } + + upgrade_main_savepoint(true, 2021091700.01); + } + return true; } diff --git a/portfolio/googledocs/lang/en/portfolio_googledocs.php b/portfolio/googledocs/lang/en/portfolio_googledocs.php index 27183702fc9f9..f2ee1757b383a 100644 --- a/portfolio/googledocs/lang/en/portfolio_googledocs.php +++ b/portfolio/googledocs/lang/en/portfolio_googledocs.php @@ -27,7 +27,7 @@ $string['nooauthcredentials'] = 'OAuth credentials required.'; $string['nooauthcredentials_help'] = 'To use the Google Drive portfolio plugin you must configure OAuth credentials in the portfolio settings.'; $string['nosessiontoken'] = 'A session token does not exist preventing export to 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.

'; +$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 plugins.

'; $string['pluginname'] = 'Google Drive'; $string['privacy:metadata'] = 'This plugin sends data externally to a linked Google account. It does not store data locally.'; $string['privacy:metadata:data'] = 'Personal data passed through from the portfolio subsystem.'; diff --git a/portfolio/picasa/classes/privacy/provider.php b/portfolio/picasa/classes/privacy/provider.php deleted file mode 100644 index 4f2fafe2d7834..0000000000000 --- a/portfolio/picasa/classes/privacy/provider.php +++ /dev/null @@ -1,80 +0,0 @@ -. - -/** - * Privacy class for requesting user data. - * - * @package portfolio_picasa - * @copyright 2018 Jake Dallimore - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -namespace portfolio_picasa\privacy; - -defined('MOODLE_INTERNAL') || die(); - -use core_privacy\local\metadata\collection; - -/** - * Provider for the portfolio_picasa plugin. - * - * @copyright 2018 Jake Dallimore - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class provider implements - // This portfolio plugin does not store any data itself. - // It has no database tables, and it purely acts as a conduit, sending data externally. - \core_privacy\local\metadata\provider, - \core_portfolio\privacy\portfolio_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 { - return $collection->add_external_location_link('picasa.google.com', ['data' => 'privacy:metadata:data'], - 'privacy:metadata'); - } - - /** - * Export all portfolio data from each portfolio plugin for the specified userid and context. - * - * @param int $userid The user to export. - * @param \context $context The context to export. - * @param array $subcontext The subcontext within the context to export this information to. - * @param array $linkarray The weird and wonderful link array used to display information for a specific item - */ - public static function export_portfolio_user_data(int $userid, \context $context, array $subcontext, array $linkarray) { - } - - /** - * Delete all user information for the provided context. - * - * @param \context $context The context to delete user data for. - */ - public static function delete_portfolio_for_context(\context $context) { - } - - /** - * Delete all user information for the provided user and context. - * - * @param int $userid The user to delete - * @param \context $context The context to refine the deletion. - */ - public static function delete_portfolio_for_user(int $userid, \context $context) { - } -} diff --git a/portfolio/picasa/db/upgrade.php b/portfolio/picasa/db/upgrade.php deleted file mode 100644 index 430343b57eb70..0000000000000 --- a/portfolio/picasa/db/upgrade.php +++ /dev/null @@ -1,39 +0,0 @@ -. - -defined('MOODLE_INTERNAL') || die(); - -/** - * @param int $oldversion the version we are upgrading from - * @return bool result - */ -function xmldb_portfolio_picasa_upgrade($oldversion) { - global $CFG; - - // Automatically generated Moodle v3.6.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.7.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.8.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.9.0 release upgrade line. - // Put any upgrade step following this. - - return true; -} diff --git a/portfolio/picasa/lang/en/portfolio_picasa.php b/portfolio/picasa/lang/en/portfolio_picasa.php deleted file mode 100644 index d447c94329e2f..0000000000000 --- a/portfolio/picasa/lang/en/portfolio_picasa.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -/** - * Strings for component 'portfolio_picasa', language 'en', branch 'MOODLE_20_STABLE' - * - * @package portfolio_picasa - * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -$string['clientid'] = 'Client ID'; -$string['noauthtoken'] = 'An authentication token has not been received from Google. Please ensure you are allowing Moodle to access your Google account.'; -$string['nooauthcredentials'] = 'OAuth credentials required.'; -$string['nooauthcredentials_help'] = 'To use the Picasa portfolio plugin you must configure OAuth credentials in the portfolio settings.'; -$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.

'; -$string['pluginname'] = 'Picasa'; -$string['privacy:metadata'] = 'This plugin sends data externally to a linked Picasa account. It does not store data locally.'; -$string['privacy:metadata:data'] = 'Personal data passed through from the portfolio subsystem.'; -$string['sendfailed'] = 'The file {$a} failed to transfer to Picasa'; -$string['secret'] = 'Secret'; diff --git a/portfolio/picasa/lib.php b/portfolio/picasa/lib.php deleted file mode 100644 index d760b127d66c2..0000000000000 --- a/portfolio/picasa/lib.php +++ /dev/null @@ -1,145 +0,0 @@ -. - -/** - * Picasa Portfolio Plugin - * - * @author Dan Poltawski - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License - */ -require_once($CFG->libdir.'/portfolio/plugin.php'); -require_once($CFG->libdir.'/googleapi.php'); - -class portfolio_plugin_picasa extends portfolio_plugin_push_base { - private $googleoauth = null; - - public function supported_formats() { - return array(PORTFOLIO_FORMAT_IMAGE, PORTFOLIO_FORMAT_VIDEO); - } - - public static function get_name() { - return get_string('pluginname', 'portfolio_picasa'); - } - - public function prepare_package() { - // We send the files as they are, no prep required. - return true; - } - - public function get_interactive_continue_url() { - return 'http://picasaweb.google.com/'; - } - - public function expected_time($callertime) { - // We're forcing this to be run 'interactively' because the plugin - // does not support running in cron. - return PORTFOLIO_TIME_LOW; - } - - public function send_package() { - if (!$this->googleoauth) { - throw new portfolio_plugin_exception('noauthtoken', 'portfolio_picasa'); - } - - $picasa = new google_picasa($this->googleoauth); - foreach ($this->exporter->get_tempfiles() as $file) { - - if (!$picasa->send_file($file)) { - throw new portfolio_plugin_exception('sendfailed', 'portfolio_picasa', $file->get_filename()); - } - } - } - - public function steal_control($stage) { - if ($stage != PORTFOLIO_STAGE_CONFIG) { - return false; - } - - $this->initialize_oauth(); - - if ($this->googleoauth->is_logged_in()) { - return false; - } else { - return $this->googleoauth->get_login_url(); - } - } - - public function post_control($stage, $params) { - if ($stage != PORTFOLIO_STAGE_CONFIG) { - return; - } - - $this->initialize_oauth(); - if ($this->googleoauth->is_logged_in()) { - return false; - } else { - return $this->googleoauth->get_login_url(); - } - } - - public static function has_admin_config() { - return true; - } - - public static function allows_multiple_instances() { - return false; - } - - public static function get_allowed_config() { - return array('clientid', 'secret'); - } - - public static function admin_config_form(&$mform) { - $a = new stdClass; - $a->docsurl = get_docs_url('Google_OAuth_2.0_setup'); - $a->callbackurl = google_oauth::callback_url()->out(false); - - $mform->addElement('static', null, '', get_string('oauthinfo', 'portfolio_picasa', $a)); - - $mform->addElement('text', 'clientid', get_string('clientid', 'portfolio_picasa')); - $mform->setType('clientid', PARAM_RAW_TRIMMED); - $mform->addElement('text', 'secret', get_string('secret', 'portfolio_picasa')); - $mform->setType('secret', PARAM_RAW_TRIMMED); - - $strrequired = get_string('required'); - $mform->addRule('clientid', $strrequired, 'required', null, 'client'); - $mform->addRule('secret', $strrequired, 'required', null, 'client'); - } - - private function initialize_oauth() { - $returnurl = new moodle_url('/portfolio/add.php'); - $returnurl->param('postcontrol', 1); - $returnurl->param('id', $this->exporter->get('id')); - $returnurl->param('sesskey', sesskey()); - - $clientid = $this->get_config('clientid'); - $secret = $this->get_config('secret'); - - $this->googleoauth = new google_oauth($clientid, $secret, $returnurl, google_picasa::REALM); - } - - public function instance_sanity_check() { - $clientid = $this->get_config('clientid'); - $secret = $this->get_config('secret'); - - // If there is no oauth config (e.g. plugins upgraded from < 2.3 then - // there will be no config and this plugin should be disabled. - if (empty($clientid) or empty($secret)) { - return 'nooauthcredentials'; - } - return 0; - } -} diff --git a/portfolio/picasa/tests/privacy_provider_test.php b/portfolio/picasa/tests/privacy_provider_test.php deleted file mode 100644 index 8cd8d7118a43e..0000000000000 --- a/portfolio/picasa/tests/privacy_provider_test.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Privacy provider tests. - * - * @package portfolio_picasa - * @copyright 2018 Jake Dallimore - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Privacy provider tests class. - * - * @copyright 2018 Jake Dallimore - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class portfolio_picasa_privacy_provider_test extends \core_privacy\tests\provider_testcase { - - /** - * Verify that a collection of metadata is returned for this component and that it just links to an external location. - */ - public function test_get_metadata() { - $collection = new \core_privacy\local\metadata\collection('portfolio_picasa'); - $collection = \portfolio_picasa\privacy\provider::get_metadata($collection); - $this->assertNotEmpty($collection); - $items = $collection->get_collection(); - $this->assertEquals(1, count($items)); - $this->assertInstanceOf(\core_privacy\local\metadata\types\external_location::class, $items[0]); - } -} diff --git a/portfolio/picasa/version.php b/portfolio/picasa/version.php deleted file mode 100644 index a777592109265..0000000000000 --- a/portfolio/picasa/version.php +++ /dev/null @@ -1,30 +0,0 @@ -. - -/** - * Version details - * - * @package portfolio - * @subpackage picasa - * @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 = 'portfolio_picasa'; // Full name of the plugin (used for diagnostics). -$plugin->cron = 0; diff --git a/portfolio/upgrade.txt b/portfolio/upgrade.txt index eda575d1465f8..958288029694d 100644 --- a/portfolio/upgrade.txt +++ b/portfolio/upgrade.txt @@ -1,6 +1,10 @@ This files describes API changes in /portfolio/ portfolio system, information provided here is intended especially for developers. +=== 4.0 === + +* The portfolio_picasa has been completely removed (Picasa is discontinued since 2016). + === 3.7 === * The portfolio_cron() function has been removed. Please use portfolio_cron_task scheduled task instead. diff --git a/version.php b/version.php index 4135a3e9e6be0..502ae758dab6a 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2021091700.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2021091700.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0dev (Build: 20210917)'; // Human-friendly version name