/** * @param int $oldversion the version we are upgrading from * @return bool result */ function xmldb_repository_picasa_upgrade($oldversion) { global $CFG, $DB; $dbman = $DB->get_manager(); if ($oldversion < 2012051400) { // Delete old user preferences storing authsub tokens. $DB->delete_records('user_preferences', array('name' => 'google_authsub_sesskey_picasa')); upgrade_plugin_savepoint(true, 2012051400, 'repository', 'picasa'); } if ($oldversion < 2012053000) { require_once($CFG->dirroot.'/repository/lib.php'); $existing = $DB->get_record('repository', array('type' => 'picasa'), '*', IGNORE_MULTIPLE); if ($existing) { $picasaplugin = new repository_type('picasa', array(), true); $picasaplugin->delete(); repository_picasa_admin_upgrade_notification(); } upgrade_plugin_savepoint(true, 2012053000, 'repository', 'picasa'); } return true; }
/** * @param int $oldversion the version we are upgrading from * @return bool result */ function xmldb_repository_googledocs_upgrade($oldversion) { global $CFG, $DB; require_once __DIR__ . '/upgradelib.php'; $dbman = $DB->get_manager(); if ($oldversion < 2012051400) { // Delete old user preferences containing authsub tokens. $DB->delete_records('user_preferences', array('name' => 'google_authsub_sesskey')); upgrade_plugin_savepoint(true, 2012051400, 'repository', 'googledocs'); } if ($oldversion < 2012053000) { require_once $CFG->dirroot . '/repository/lib.php'; $existing = $DB->get_record('repository', array('type' => 'googledocs'), '*', IGNORE_MULTIPLE); if ($existing) { $googledocsplugin = new repository_type('googledocs', array(), true); $googledocsplugin->delete(); repository_googledocs_admin_upgrade_notification(); } upgrade_plugin_savepoint(true, 2012053000, 'repository', 'googledocs'); } // Moodle v2.3.0 release upgrade line // Put any upgrade step following this // Moodle v2.4.0 release upgrade line // Put any upgrade step following this // Moodle v2.5.0 release upgrade line. // Put any upgrade step following this. // Moodle v2.6.0 release upgrade line. // Put any upgrade step following this. // Moodle v2.7.0 release upgrade line. // Put any upgrade step following this. return true; }
/** * Creating a default instance of areafiles repository on install * * @package repository_areafiles * @copyright 2013 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ function xmldb_repository_areafiles_install() { global $CFG; $result = true; require_once $CFG->dirroot . '/repository/lib.php'; $areafiles_plugin = new repository_type('areafiles', array(), true); if (!($id = $areafiles_plugin->create(true))) { $result = false; } return $result; }
/** * Heanet Media repository upload * * @package repository_heanetmedia_upload * @copyright 2015 Heanet swdev@heanet.ie * @author Luis Naia * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ function xmldb_repository_heanetmedia_upload_install() { global $CFG; $result = true; require_once $CFG->dirroot . '/repository/lib.php'; $repo = new repository_type('heanetmedia_upload', array(), true); if (!($id = $repo->create(true))) { $result = false; } return $result; }
/** * Create a default instance of the youtube repository * * @return bool A status indicating success or failure */ function xmldb_repository_lifesizevideo_install() { global $CFG; $result = true; require_once $CFG->dirroot . '/repository/lib.php'; $lifesizevideoplugin = new repository_type('lifesizevideo', array(), true); if (!($id = $lifesizevideoplugin->create(true))) { $result = false; } return $result; }
/** * Installing repository tests * * @copyright 2012 Dongsheng Cai {@link http://dongsheng.org} */ public function test_install_repository() { global $CFG, $DB; $this->resetAfterTest(true); $syscontext = context_system::instance(); $repositorypluginname = 'boxnet'; // override repository permission $capability = 'repository/' . $repositorypluginname . ':view'; $allroles = $DB->get_records_menu('role', array(), 'id', 'archetype, id'); assign_capability($capability, CAP_ALLOW, $allroles['guest'], $syscontext->id, true); $plugintype = new repository_type($repositorypluginname); $pluginid = $plugintype->create(false); $this->assertInternalType('int', $pluginid); $args = array(); $args['type'] = $repositorypluginname; $repos = repository::get_instances($args); $repository = reset($repos); $this->assertInstanceOf('repository', $repository); $info = $repository->get_meta(); $this->assertEquals($repositorypluginname, $info->type); }
/** * Create the type of repository. * * @param stdClass|array $record data to use to set up the type * @param array $options options for the set up of the type * * @return stdClass repository type record */ public function create_type($record = null, array $options = null) { global $CFG, $DB; require_once $CFG->dirroot . '/repository/lib.php'; $record = (array) $record; $type = $this->get_typename(); $typeoptions = repository::static_function($type, 'get_type_option_names'); $instanceoptions = repository::static_function($type, 'get_instance_option_names'); // The type allow for user and course instances. if (!empty($instanceoptions)) { $typeoptions[] = 'enableuserinstances'; $typeoptions[] = 'enablecourseinstances'; } // Make sure all the parameters are set. $record = $this->prepare_type_record($record); foreach ($typeoptions as $option) { if (!isset($record[$option])) { throw new coding_exception("{$option} must be present in testing::create_repository_type() for {$type}"); } } // Limit to allowed options. $record = array_intersect_key($record, array_flip($typeoptions)); // Create the type. $plugintype = new repository_type($type, $record); $plugintype->create(false); return $DB->get_record('repository', array('type' => $type)); }
$instanceoptionnames = repository::static_function($repository, 'get_instance_option_names'); if (!empty($instanceoptionnames)) { if (array_key_exists('enablecourseinstances', $fromform)) { $settings['enablecourseinstances'] = $fromform->enablecourseinstances; } else { $settings['enablecourseinstances'] = 0; } if (array_key_exists('enableuserinstances', $fromform)) { $settings['enableuserinstances'] = $fromform->enableuserinstances; } else { $settings['enableuserinstances'] = 0; } } $success = $repositorytype->update_options($settings); } else { $type = new repository_type($plugin, (array) $fromform, $visible); $type->create(); $success = true; $data = data_submitted(); } if ($success) { // configs saved redirect($baseurl); } else { print_error('instancenotsaved', 'repository', $baseurl); } exit; } else { echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('configplugin', 'repository_' . $plugin)); $displaysettingform = true;
$instanceoptionnames = repository::static_function($edit, 'get_instance_option_names'); if (!empty($instanceoptionnames)) { if (array_key_exists('enablecourseinstances', $fromform)) { $settings['enablecourseinstances'] = $fromform->enablecourseinstances; } else { $settings['enablecourseinstances'] = 0; } if (array_key_exists('enableuserinstances', $fromform)) { $settings['enableuserinstances'] = $fromform->enableuserinstances; } else { $settings['enableuserinstances'] = 0; } } $success = $repositorytype->update_options($settings); } else { $type = new repository_type($plugin, (array) $fromform); $type->create(); $success = true; $data = data_submitted(); } if ($success) { $savedstr = get_string('configsaved', 'repository'); admin_externalpage_print_header(); print_heading($savedstr); redirect($baseurl, $savedstr, 3); } else { print_error('instancenotsaved', 'repository', $baseurl); } exit; } else { admin_externalpage_print_header();
public function test_can_be_edited_by_user() { $this->resetAfterTest(true); $syscontext = context_system::instance(); $course = $this->getDataGenerator()->create_course(); $coursecontext = context_course::instance($course->id); $roleid = create_role('A role', 'arole', 'A role', ''); set_role_contextlevels($roleid, array($syscontext->contextlevel, $coursecontext->contextlevel)); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $plugintype = new repository_type('flickr_public'); $plugintype->create(true); $params = array( 'name' => 'Flickr Public' ); // Instance on a site level. $repoid = repository::static_function('flickr_public', 'create', 'flickr_public', 0, $syscontext, $params); $systemrepo = repository::get_repository_by_id($repoid, $syscontext); role_assign($roleid, $user->id, $syscontext->id); assign_capability('moodle/site:config', CAP_ALLOW, $roleid, $syscontext, true); assign_capability('repository/flickr_public:view', CAP_ALLOW, $roleid, $syscontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertTrue($systemrepo->can_be_edited_by_user()); assign_capability('repository/flickr_public:view', CAP_PROHIBIT, $roleid, $syscontext, true); assign_capability('moodle/site:config', CAP_PROHIBIT, $roleid, $syscontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertFalse($systemrepo->can_be_edited_by_user()); assign_capability('repository/flickr_public:view', CAP_ALLOW, $roleid, $syscontext, true); assign_capability('moodle/site:config', CAP_PROHIBIT, $roleid, $syscontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertFalse($systemrepo->can_be_edited_by_user()); role_unassign($roleid, $user->id, $syscontext->id); accesslib_clear_all_caches_for_unit_testing(); // Instance on a course level. $this->getDataGenerator()->enrol_user($user->id, $course->id, $roleid); $repoid = repository::static_function('flickr_public', 'create', 'flickr_public', 0, $coursecontext, $params); $courserepo = repository::get_repository_by_id($repoid, $coursecontext); assign_capability('moodle/course:update', CAP_ALLOW, $roleid, $coursecontext, true); assign_capability('repository/flickr_public:view', CAP_ALLOW, $roleid, $coursecontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertTrue($courserepo->can_be_edited_by_user()); assign_capability('repository/flickr_public:view', CAP_PROHIBIT, $roleid, $coursecontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertFalse($courserepo->can_be_edited_by_user()); assign_capability('moodle/course:update', CAP_ALLOW, $roleid, $coursecontext, true); assign_capability('repository/flickr_public:view', CAP_PROHIBIT, $roleid, $coursecontext, true); accesslib_clear_all_caches_for_unit_testing(); $this->assertFalse($courserepo->can_be_edited_by_user()); role_unassign($roleid, $user->id, $coursecontext->id); accesslib_clear_all_caches_for_unit_testing(); // Instance on a user level. $otheruser = $this->getDataGenerator()->create_user(); $otherusercontext = context_user::instance($otheruser->id); role_assign($roleid, $user->id, $syscontext->id); assign_capability('repository/flickr_public:view', CAP_ALLOW, $roleid, $syscontext, true); accesslib_clear_all_caches_for_unit_testing(); // Editing someone else's instance. $repoid = repository::static_function('flickr_public', 'create', 'flickr_public', 0, $otherusercontext, $params); $userrepo = repository::get_repository_by_id($repoid, $syscontext); $this->assertFalse($userrepo->can_be_edited_by_user()); // Editing my own instance. $usercontext = context_user::instance($user->id); $repoid = repository::static_function('flickr_public', 'create', 'flickr_public', 0, $usercontext, $params); $userrepo = repository::get_repository_by_id($repoid, $syscontext); $this->assertTrue($userrepo->can_be_edited_by_user()); }
$instanceoptionnames = repository::static_function($repository, 'get_instance_option_names'); if (!empty($instanceoptionnames)) { if (array_key_exists('enablecourseinstances', $fromform)) { $settings['enablecourseinstances'] = $fromform->enablecourseinstances; } else { $settings['enablecourseinstances'] = 0; } if (array_key_exists('enableuserinstances', $fromform)) { $settings['enableuserinstances'] = $fromform->enableuserinstances; } else { $settings['enableuserinstances'] = 0; } } $success = $repositorytype->update_options($settings); } else { $type = new repository_type($plugin, (array) $fromform, $visible); $success = true; if (!($repoid = $type->create())) { $success = false; } $data = data_submitted(); } if ($success) { // configs saved redirect($baseurl); } else { print_error('instancenotsaved', 'repository', $baseurl); } exit; } else { echo $OUTPUT->header();
function repository_setup_default_plugins() { global $OUTPUT; //if the plugin type has no multiple instance (e.g. has no instance option name) //repository_type::create will create an instance automatically $local_plugin = new repository_type('local', array(), true); $local_plugin_id = $local_plugin->create(true); $upload_plugin = new repository_type('upload', array(), true); $upload_plugin_id = $upload_plugin->create(true); if (is_int($local_plugin_id) or is_int($upload_plugin_id)) { echo $OUTPUT->box(get_string('setupdefaultplugins', 'repository')); } return true; }
/** * ELIS(TM): Enterprise Learning Intelligence Suite * Copyright (C) 2014 onwards Remote-Learner.net Inc (http://www.remote-learner.net) * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. * * @package repository_elisfiles * @author Remote-Learner.net Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2008-2014 Remote-Learner.net Inc (http://www.remote-learner.net) * */ function xmldb_repository_elisfiles_install() { global $CFG, $DB; $result = true; $dbman = $DB->get_manager(); // Run upgrade steps from old plugin if applicable $oldversion = get_config('repository_elis_files', 'version'); if ($oldversion !== false) { require_once($CFG->dirroot.'/repository/elisfiles/lib/lib.php'); if ($oldversion < 2011110301) { $errors = false; $auths = elis_files_nopasswd_auths(); $authlist = "'". implode("', '", $auths) ."'"; $users = $DB->get_records_select('user', "auth IN ({$authlist})", array(), 'id, auth'); if (!empty($users)) { foreach ($users as $user) { $user = get_complete_user_data('id', $user->id); $migrate_ok = elis_files_user_created($user); if (!$migrate_ok) { $errors = true; // error_log("xmldb_block_elis_files_upgrade({$oldversion}) - failed migrating user ({$user->id}) to Alfresco."); } } } if (!$errors) { set_config('initialized', 1, ELIS_files::$plugin_name); } } if ($result && $oldversion < 2012042300) { //check that elis_files_organization_store exists and repository_elisfiles_userset does not exist if ($dbman->table_exists('elis_files_organization_store') && !$dbman->table_exists('elis_files_userset_store')) { $original_table = new xmldb_table('elis_files_organization_store'); //rename table $dbman->rename_table($original_table, 'elis_files_userset_store'); $new_table = new xmldb_table('elis_files_userset_store'); //drop the keys $original_uuid_index = new xmldb_index('elisfileorgastor_orguu_uix', XMLDB_INDEX_UNIQUE, array('organizationid', 'uuid')); $original_index = new xmldb_index('elisfileorgastor_org_ix', XMLDB_INDEX_NOTUNIQUE, array('organizationid')); $dbman->drop_index($new_table, $original_uuid_index); $dbman->drop_index($new_table, $original_index); //rename field $organization = new xmldb_field('organizationid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, 0); $dbman->rename_field($new_table, $organization, 'usersetid'); //add the keys $new_uuid_index = new xmldb_index('elisfileuserstor_useuu_uix', XMLDB_INDEX_UNIQUE, array('usersetid', 'uuid')); $new_index = new xmldb_index('elisfileuserstor_use_ix', XMLDB_INDEX_NOTUNIQUE, array('usersetid')); $dbman->add_index($new_table, $new_uuid_index); $dbman->add_index($new_table, $new_index); } } if ($result && $oldversion < 2012042500) { defined('ELIS_FILES_BROWSE_USERSET_FILES') or define('ELIS_FILES_BROWSE_USERSET_FILES', 60); // ELIS-4676 ELIS UserSet Files is no longer valid, so change to default of ELIS User Files $select = "plugin = 'elis_files' AND name = 'default_browse'"; if ($record = $DB->get_record_select('config_plugins', $select)) { require_once($CFG->dirroot.'/repository/elisfiles/lib/ELIS_files.php'); $int_value = (int)$record->value; $valid_values = array( ELIS_FILES_BROWSE_SITE_FILES, ELIS_FILES_BROWSE_SHARED_FILES, ELIS_FILES_BROWSE_COURSE_FILES, ELIS_FILES_BROWSE_USER_FILES ); if (!in_array($int_value, $valid_values)) { $record->value = ELIS_FILES_BROWSE_USER_FILES; $DB->update_record('config_plugins', $record); } } } if ($result && $oldversion < 2012050200) { // Check for any plug-in settings using an incorrect plug-in name "ELIS_files" instead of "elis_files" if ($pcfgs = $DB->get_records('config_plugins', array('plugin' => 'ELIS_files'))) { foreach ($pcfgs as $pcfg) { $pcfg->plugin = 'elis_files'; $DB->update_record('config_plugins', $pcfg); } } } /* * This upgrade step removes any possible stale data in the repository_elisfiles_userset and * repository_elisfiles_course that not longer have relevant courses or user sets */ if ($result && $oldversion < 2012083000) { $haveuserset = false; if (file_exists($CFG->dirroot.'/local/elisprogram/lib/data/userset.class.php')) { require_once($CFG->dirroot.'/local/elisprogram/lib/data/userset.class.php'); $haveuserset = $dbman->table_exists(userset::TABLE); } $sql = 'DELETE FROM {elis_files_userset_store}'; if ($haveuserset) { $sql .= ' WHERE NOT EXISTS (SELECT * FROM {'.userset::TABLE.'} WHERE {elis_files_userset_store}.usersetid = {'.userset::TABLE.'}.id)'; } $DB->execute($sql); $sql = 'DELETE FROM {elis_files_course_store} WHERE NOT EXISTS (SELECT * FROM {course} WHERE {elis_files_course_store}.courseid = {course}.id)'; $DB->execute($sql); } /* * This upgrade step removes backslashes from category titles in the repository_elisfiles_cats */ if ($result && $oldversion < 2012090400) { require_once($CFG->dirroot.'/repository/elisfiles/ELIS_files_factory.class.php'); // Initialize the repo object. $repo = repository_factory::factory(); $table = 'elis_files_categories'; if ($repo && $dbman->table_exists($table) && $categories = elis_files_get_categories()) { $DB->delete_records($table); // Perform the back-end category refresh $categories = elis_files_get_categories(); $uuids = array(); $repo->process_categories($uuids, $categories); } } // If the pre-ELIS 2 Alfresco plugin was present and enabled on this site, then we need to automatically // enable the ELIS Files plugin $select1 = "name = 'repository' AND ".$DB->sql_compare_text('value')." = 'alfresco'"; $select2 = "name = 'repository_plugins_enabled' AND ".$DB->sql_compare_text('value')." = 'alfresco'"; if ($DB->record_exists_select('config', $select1) && $DB->record_exists_select('config', $select2)) { require_once($CFG->dirroot.'/repository/lib.php'); $elis_files = new repository_type('elisfiles', array(), true); if (!empty($elis_files)) { $elis_files->update_visibility(true); $elis_files->create(); } $DB->delete_records_select('config', "(name = 'repository' OR name = 'repository_plugins_enabled')"); } // ELIS-3677, ELIS-3802 Moodle files is no longer valid, so change to default of ELIS User Files $select = "plugin = 'elis_files' AND name = 'default_browse'"; if ($record = $DB->get_record_select('config_plugins', $select)) { require_once($CFG->dirroot.'/repository/elisfiles/lib/ELIS_files.php'); $int_value = (int)$record->value; $valid_values = array( ELIS_FILES_BROWSE_SITE_FILES, ELIS_FILES_BROWSE_SHARED_FILES, ELIS_FILES_BROWSE_COURSE_FILES, ELIS_FILES_BROWSE_USER_FILES ); if (!in_array($int_value, $valid_values)) { $record->value = ELIS_FILES_BROWSE_USER_FILES; $DB->update_record('config_plugins', $record); } } $ignoreresult = elis_files_update_references_in_database(); } // Convert old tables to new static $tablemap = array( 'elis_files_categories' => 'repository_elisfiles_cats', 'elis_files_course_store' => 'repository_elisfiles_course', 'elis_files_userset_store' => 'repository_elisfiles_userset' ); foreach ($tablemap as $oldtable => $newtable) { $oldtableobj = new xmldb_table($oldtable); if ($dbman->table_exists($oldtableobj)) { $newtableobj = new xmldb_table($newtable); $dbman->drop_table($newtableobj); $dbman->rename_table($oldtableobj, $newtable); } } // Migrate capabilities $oldcapprefix = 'repository/elis_files'; $newcapprefix = 'repository/elisfiles'; $sql = 'SELECT * FROM {role_capabilities} WHERE capability LIKE ?'; $params = array($oldcapprefix.'%'); $rolecaps = $DB->get_recordset_sql($sql, $params); foreach ($rolecaps as $rolecaprec) { $updaterec = new stdClass; $updaterec->id = $rolecaprec->id; $updaterec->capability = str_replace($oldcapprefix, $newcapprefix, $rolecaprec->capability); $DB->update_record('role_capabilities', $updaterec); } $sql = 'SELECT * FROM {capabilities} WHERE name LIKE ?'; $caps = $DB->get_recordset_sql($sql, $params); foreach ($caps as $cap) { $cap->name = str_replace($oldcapprefix, $newcapprefix, $cap->name); $cap->component = str_replace('repository_elis_files', 'repository_elisfiles', $cap->component); $DB->update_record('capabilities', $cap); } // Migrate language strings $migrator = new \local_eliscore\install\migration\migrator('repository_elis_files', 'repository_elisfiles'); $migrator->migrate_language_strings(); // Copy any settings from old plugin $oldconfig = get_config('elis_files'); foreach ($oldconfig as $name => $value) { set_config($name, $value, 'elisfiles'); } unset_all_config_for_plugin('elis_files'); unset_all_config_for_plugin('repository_elis_files'); // Update repository table $sql = 'UPDATE {repository} SET type = "elisfiles" WHERE type = "elis_files"'; $DB->execute($sql); return $result; }