defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_analytics'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_availabilityconditions';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_behat'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_capability'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_cohortroles'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = array(
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_customlang'; // Full name of the plugin (used for diagnostics)
// Create the approved contextlist collection object.
$approvedcollection = new contextlist_collection($collection->get_userid());
+ $isconfigured = data_registry::defaults_set();
foreach ($collection as $contextlist) {
$contextids = [];
foreach ($contextlist as $context) {
- if (self::DATAREQUEST_TYPE_DELETE == $type) {
+ if ($isconfigured && self::DATAREQUEST_TYPE_DELETE == $type) {
// Data can only be deleted from it if the context is either expired, or unprotected.
+ // Note: We can only check whether a context is expired or unprotected if the site is configured and
+ // defaults are set appropriately. If they are not, we treat all contexts as though they are
+ // unprotected.
$purpose = static::get_effective_context_purpose($context);
if (!expired_contexts_manager::is_context_expired_or_unprotected_for_user($context, $foruser)) {
continue;
return;
}
- // If no site purpose is defined, reject requests since they cannot be processed.
if (!\tool_dataprivacy\data_registry::defaults_set()) {
- api::update_request_status($requestid, api::DATAREQUEST_STATUS_REJECTED);
- mtrace('No site purpose defined. Request ' . $requestid . ' rejected.');
- return;
+ // Warn if no site purpose is defined.
+ mtrace('Warning: No purpose is defined at the system level. Deletion will delete all.');
}
// Grab the manager.
echo $OUTPUT->header();
echo $OUTPUT->heading($title);
+if (!\tool_dataprivacy\data_registry::defaults_set()) {
+ \core\notification::error(get_string('systemconfignotsetwarning', 'tool_dataprivacy'));
+}
+
if (\tool_dataprivacy\api::is_site_dpo($USER->id)) {
$filtersapplied = optional_param_array('request-filters', [-1], PARAM_NOTAGS);
$filterscleared = optional_param('filters-cleared', 0, PARAM_INT);
upgrade_plugin_savepoint(true, 2018110700, 'tool', 'dataprivacy');
}
+ if ($oldversion < 2018112500) {
+ // Delete orphaned data privacy requests.
+ $sql = "SELECT r.id
+ FROM {tool_dataprivacy_request} r LEFT JOIN {user} u ON r.userid = u.id
+ WHERE u.id IS NULL";
+ $orphaned = $DB->get_fieldset_sql($sql);
+
+ if ($orphaned) {
+ $DB->delete_records_list('tool_dataprivacy_request', 'id', $orphaned);
+ }
+
+ upgrade_plugin_savepoint(true, 2018112500, 'tool', 'dataprivacy');
+ }
+
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
$string['subjectscope'] = 'Subject scope';
$string['subjectscope_help'] = 'The subject scope lists the roles which may be assigned in this context.';
$string['summary'] = 'Registry configuration summary';
+$string['systemconfignotsetwarning'] = 'A site purpose and category have not been defined. When these are not defined, all data will be removed when processing deletion requests.';
$string['user'] = 'User';
$string['userlistnoncompliant'] = 'Userlist provider missing';
$string['userlistexplanation'] = 'This plugin has the base provider but should also implement the userlist provider for full support of privacy functionality.';
];
}
+ /**
+ * Test that delete requests do not filter out protected purpose contexts if the the site is properly configured.
+ */
+ public function test_get_approved_contextlist_collection_for_collection_delete_course_no_site_config() {
+ $this->resetAfterTest();
+
+ $user = $this->getDataGenerator()->create_user();
+
+ $course = $this->getDataGenerator()->create_course(['startdate' => time() - YEARSECS, 'enddate' => time() - YEARSECS]);
+ $coursecontext = \context_course::instance($course->id);
+
+ $forum = $this->getDataGenerator()->create_module('forum', ['course' => $course->id]);
+ list(, $forumcm) = get_course_and_cm_from_instance($forum->id, 'forum');
+ $contextforum = \context_module::instance($forumcm->id);
+
+ $this->getDataGenerator()->enrol_user($user->id, $course->id, 'student');
+
+ // Create the initial contextlist.
+ $initialcollection = new \core_privacy\local\request\contextlist_collection($user->id);
+
+ $contextlist = new \core_privacy\local\request\contextlist();
+ $contextlist->add_from_sql('SELECT id FROM {context} WHERE id = :contextid', ['contextid' => $coursecontext->id]);
+ $contextlist->set_component('tool_dataprivacy');
+ $initialcollection->add_contextlist($contextlist);
+
+ $contextlist = new \core_privacy\local\request\contextlist();
+ $contextlist->add_from_sql('SELECT id FROM {context} WHERE id = :contextid', ['contextid' => $contextforum->id]);
+ $contextlist->set_component('mod_forum');
+ $initialcollection->add_contextlist($contextlist);
+
+ $collection = api::get_approved_contextlist_collection_for_collection(
+ $initialcollection, $user, api::DATAREQUEST_TYPE_DELETE);
+
+ $this->assertCount(2, $collection);
+
+ $list = $collection->get_contextlist_for_component('tool_dataprivacy');
+ $this->assertCount(1, $list);
+
+ $list = $collection->get_contextlist_for_component('mod_forum');
+ $this->assertCount(1, $list);
+ }
+
/**
* Test that delete requests do not filter out protected purpose contexts if they are already expired.
*/
defined('MOODLE_INTERNAL') || die;
-$plugin->version = 2018110900;
-$plugin->requires = 2018050800; // Moodle 3.5dev (Build 2018031600) and upwards.
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800; // Moodle 3.5dev (Build 2018031600) and upwards.
$plugin->component = 'tool_dataprivacy';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_filetypes';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_generator';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_health'; // Full name of the plugin (used for diagnostics)
$plugin->maturity = MATURITY_ALPHA; // this version's maturity level
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_httpsreplace'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_innodb'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'tool_installaddon';
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->maturity = MATURITY_STABLE;
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_langimport'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'logstore_database'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'logstore_legacy'; // Full name of the plugin (used for diagnostics).
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'logstore_standard'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051401; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_log'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_lp'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_lpimportcsv'; // Full name of the plugin (used for diagnostics).
-$plugin->dependencies = array('tool_lp' => 2018050800);
+$plugin->dependencies = array('tool_lp' => 2018112800);
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_lpmigrate'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = array(
'tool_lp' => ANY_VERSION
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_messageinbound';
*/
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_mobile'; // Full name of the plugin (used for diagnostics).
$plugin->dependencies = array(
- 'webservice_rest' => 2018050800
+ 'webservice_rest' => 2018112800
);
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die;
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_monitor'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_multilangupgrade'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_oauth2'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_phpunit'; // Full name of the plugin (used for diagnostics)
upgrade_plugin_savepoint(true, 2018091800, 'tool', 'policy');
}
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018100100; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_policy'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_profiling'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_recyclebin'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_replace'; // Full name of the plugin (used for diagnostics)
$plugin->maturity = MATURITY_ALPHA; // this version's maturity level
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'tool_spamcleaner'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_task'; // Full name of the plugin (used for diagnostics)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_templatelibrary'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_unsuproles'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_uploadcourse'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_uploaduser'; // Full name of the plugin (used for diagnostics)
}
/**
- * Move a tour up or down.
+ * Move a tour up or down and redirect once complete.
*
* @param int $id The tour to move.
*/
$direction = required_param('direction', PARAM_INT);
$tour = tour::instance($id);
+ self::_move_tour($tour, $direction);
+
+ redirect(helper::get_list_tour_link());
+ }
+
+ /**
+ * Move a tour up or down.
+ *
+ * @param tour $tour The tour to move.
+ *
+ * @param int $direction
+ */
+ protected static function _move_tour(tour $tour, $direction) {
$currentsortorder = $tour->get_sortorder();
$targetsortorder = $currentsortorder + $direction;
$tour->set_sortorder($targetsortorder);
$tour->persist();
-
- redirect(helper::get_list_tour_link());
}
/**
// the format filename => version. The version value needs to
// be increased if the tour has been updated.
$shippedtours = [
+ '36_dashboard.json' => 3,
+ '36_messaging.json' => 3,
+ ];
+
+ // These are tours that we used to ship but don't ship any longer.
+ // We do not remove them, but we do disable them.
+ $unshippedtours = [
'boost_administrator.json' => 1,
'boost_course_view.json' => 1,
];
unset($shippedtours[$filename]);
}
}
+
+ if (isset($unshippedtours[$filename])) {
+ if ($version <= $unshippedtours[$filename]) {
+ $tour = tour::instance($tour->get_id());
+ $tour->set_enabled(tour::DISABLED);
+ $tour->persist();
+ }
+ }
}
}
-
$existingtourrecords->close();
- foreach ($shippedtours as $filename => $version) {
+ foreach (array_reverse($shippedtours) as $filename => $version) {
$filepath = $CFG->dirroot . "/{$CFG->admin}/tool/usertours/tours/" . $filename;
$tourjson = file_get_contents($filepath);
$tour = self::import_tour_from_json($tourjson);
$tour->set_config(self::CONFIG_SHIPPED_FILENAME, $filename);
$tour->set_config(self::CONFIG_SHIPPED_VERSION, $version);
+ // Bump new tours to the top of the list.
+ while ($tour->get_sortorder() > 0) {
+ self::_move_tour($tour, helper::MOVE_UP);
+ }
+
if (defined('BEHAT_SITE_RUNNING') || (defined('PHPUNIT_TEST') && PHPUNIT_TEST)) {
// Disable this tour if this is behat or phpunit.
$tour->set_enabled(false);
function xmldb_tool_usertours_upgrade($oldversion) {
global $CFG, $DB;
- if ($oldversion < 2016120501) {
- // Update the tours shipped with Moodle.
- manager::update_shipped_tours();
-
- upgrade_plugin_savepoint(true, 2016120501, 'tool', 'usertours');
- }
-
// Automatically generated Moodle v3.2.0 release upgrade line.
// Put any upgrade step following this.
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ if ($oldversion < 2018113002) {
+ // Update the tours shipped with Moodle.
+ manager::update_shipped_tours();
+
+ upgrade_plugin_savepoint(true, 2018113002, 'tool', 'usertours');
+ }
+
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
$string['privacy:metadata:preference:completed'] = 'The time that a user last completed a user tour.';
$string['privacy:request:preference:requested'] = 'You last requested the "{$a->name}" user tour on {$a->time}';
$string['privacy:request:preference:completed'] = 'You last marked the "{$a->name}" user tour as completed on {$a->time}';
+
+// 3.6 Dashboard tour.
+$string['tour3_title_dashboard'] = 'Your Dashboard';
+$string['tour3_content_dashboard'] = 'Your new Dashboard has many features to help you easily access the information most important to you.';
+$string['tour3_title_timeline'] = 'Timeline block';
+$string['tour3_content_timeline'] = 'The Timeline block shows your important upcoming events.
+
+You can choose to show activities in the next week, month, or further into the future.
+
+You can also show items which are overdue.';
+$string['tour3_title_recentcourses'] = 'Recently accessed courses';
+$string['tour3_content_recentcourses'] = 'The Recently accessed courses block shows the courses that you last visited, allowing you to jump straight back in.';
+$string['tour3_title_overview'] = 'Course overview';
+$string['tour3_content_overview'] = 'The Course overview block shows all of the courses that you are enrolled in.
+
+You can choose to show courses currently in progress, or in the past or the future, or courses which you have starred.';
+$string['tour3_title_starring'] = 'Starring and hiding courses';
+$string['tour3_content_starring'] = 'You can choose to star a course to make it stand out, or hide a course which is no longer important to you.
+
+These actions only affect your view.
+
+You can also choose to display the courses in a list, or with summary information, or the default \'card\' view.';
+$string['tour3_title_displayoptions'] = 'Display options';
+$string['tour3_content_displayoptions'] = 'Courses may be sorted by course name or by last access date.
+
+You can also choose to display the courses in a list, with summary information, or the default \'card\' view.';
+
+// 3.6 Messaging tour.
+$string['tour4_title_messaging'] = 'New messaging interface';
+$string['tour4_content_messaging'] = 'Moodle 3.6 provides a new interface to messaging, ability for group messaging within a course, along with better control over who can message you.';
+$string['tour4_title_icon'] = 'Messaging';
+$string['tour4_content_icon'] = 'You can access your messages from any page using this icon.
+
+If you have any unread messages, the number of unread messages will show here too.
+
+Click on the icon to open the messaging drawer and continue the tour.';
+$string['tour4_title_groupconvo'] = 'Group messages';
+$string['tour4_content_groupconvo'] = 'If you are a member of a group with group messaging enabled, you\'ll see group conversations here.
+
+Course group conversations allow you to interact with the others in your group in a private and convenient location.';
+$string['tour4_title_starred'] = 'Starred';
+$string['tour4_content_starred'] = 'You can choose to star particular conversations to make them easier to find.';
+$string['tour4_title_settings'] = 'Messaging settings';
+$string['tour4_content_settings'] = 'You can access your messaging settings via the cog icon. A new privacy setting allows you to restrict who can message you.';
+
+$string['tour_final_step_title'] = 'End of tour';
+$string['tour_final_step_content'] = 'This is the end of your user tour. It won\'t show again unless you reset it using the link in the footer.';
--- /dev/null
+{"name":"Dashboard","description":"New dashboard features","pathmatch":"\/my\/%","enabled":"1","sortorder":"3","configdata":"{\"placement\":\"top\",\"orphan\":\"0\",\"backdrop\":\"0\",\"reflex\":\"0\",\"filtervalues\":{\"category\":[],\"course\":[\"0\"],\"courseformat\":[],\"role\":[],\"theme\":[]},\"majorupdatetime\":1543396938}","version":"2018051400","steps":[{"title":"tour3_title_dashboard,tool_usertours","content":"tour3_content_dashboard,tool_usertours","targettype":"2","targetvalue":"","sortorder":"0","configdata":"{\"backdrop\":\"1\"}"},{"title":"tour3_title_dashboard,tool_usertours","content":"tour3_content_timeline,tool_usertours","targettype":"1","targetvalue":"timeline","sortorder":"1","configdata":"{\"reflex\":\"0\"}"},{"title":"tour3_title_recentcourses,tool_usertours","content":"tour3_content_recentcourses,tool_usertours","targettype":"1","targetvalue":"recentlyaccessedcourses","sortorder":"2","configdata":"{\"placement\":\"top\",\"backdrop\":\"1\"}"},{"title":"tour3_title_overview,tool_usertours","content":"tour3_content_overview,tool_usertours","targettype":"1","targetvalue":"myoverview","sortorder":"3","configdata":"{}"},{"title":"tour3_title_starring,tool_usertours","content":"tour3_content_starring,tool_usertours","targettype":"0","targetvalue":".block-myoverview [data-display=\"cards\"] [data-region=\"course-content\"] .coursemenubtn","sortorder":"4","configdata":"{\"placement\":\"right\"}"},{"title":"tour3_title_starring,tool_usertours","content":"tour3_content_starring,tool_usertours","targettype":"0","targetvalue":".block-myoverview [data-display]:not([data-display=\"cards\"]) [data-region=\"course-content\"] .coursemenubtn","sortorder":"5","configdata":"{}"},{"title":"tour3_title_displayoptions,tool_usertours","content":"tour3_content_displayoptions,tool_usertours","targettype":"0","targetvalue":"#sortingdropdown","sortorder":"6","configdata":"{\"placement\":\"top\"}"},{"title":"tour_final_step_title,tool_usertours","content":"tour_final_step_content,tool_usertours","targettype":"2","targetvalue":"","sortorder":"7","configdata":"{}"}]}
--- /dev/null
+{"name":"New Messaging System","description":"New messaging interface in Moodle 3.6","pathmatch":"\/course\/view.php%","enabled":"1","sortorder":"2","configdata":"{\"placement\":\"bottom\",\"orphan\":\"0\",\"backdrop\":\"0\",\"reflex\":\"0\",\"filtervalues\":{\"category\":[],\"course\":[\"0\"],\"courseformat\":[],\"role\":[],\"theme\":[]},\"majorupdatetime\":1543468823}","version":"2018051400","steps":[{"title":"tour4_title_messaging,tool_usertours","content":"tour4_content_messaging,tool_usertours","targettype":"2","targetvalue":"","sortorder":"0","configdata":"{\"backdrop\":\"1\"}"},{"title":"tour4_title_icon,tool_usertours","content":"tour4_content_icon,tool_usertours","targettype":"0","targetvalue":"[id^=message-drawer-toggle]","sortorder":"1","configdata":"{\"backdrop\":\"0\",\"reflex\":\"1\"}"},{"title":"tour4_title_groupconvo,tool_usertours","content":"tour4_content_groupconvo,tool_usertours","targettype":"0","targetvalue":".message-drawer:not(.hidden) [data-region=\"view-overview-group-messages\"]","sortorder":"2","configdata":"{\"placement\":\"left\"}"},{"title":"tour4_title_starred,tool_usertours","content":"tour4_content_starred,tool_usertours","targettype":"0","targetvalue":".message-drawer:not(.hidden) [data-region=\"view-overview-favourites\"]","sortorder":"3","configdata":"{\"placement\":\"left\"}"},{"title":"tour4_title_settings,tool_usertours","content":"tour4_content_settings,tool_usertours","targettype":"0","targetvalue":".message-drawer:not(.hidden) [data-route=\"view-settings\"]","sortorder":"4","configdata":"{\"reflex\":\"1\"}"},{"title":"tour_final_step_title,tool_usertours","content":"tour_final_step_content,tool_usertours","targettype":"2","targetvalue":"","sortorder":"5","configdata":"{}"}]}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current module version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current module version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'tool_usertours'; // Full name of the plugin (used for diagnostics).
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051401; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'tool_xmldb'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_cas'; // Full name of the plugin (used for diagnostics)
-$plugin->dependencies = array('auth_ldap' => 2018050800);
+$plugin->dependencies = array('auth_ldap' => 2018112800);
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_db'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die;
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_email'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_ldap'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'auth_lti'; // Full name of the plugin (used for diagnostics).
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_manual'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_mnet'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_nologin'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_none'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'auth_oauth2'; // Full name of the plugin (used for diagnostics).
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_shibboleth'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'auth_webservice'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_completion';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_date';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_grade';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_group';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_grouping';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'availability_profile';
* point is backup when some behavior/approach channged, in order to allow
* conditional coding based on it.
*/
- const VERSION = 2018051400;
+ const VERSION = 2018120300;
/**
* Usually same than major release zero version, mainly for informative/historic purposes.
*/
- const RELEASE = '3.6';
+ const RELEASE = '3.7';
/**
* Cipher to be used in backup and restore operations.
* @return null|string backup::FORMAT_IMSCC1 if the Common Cartridge 1.0 is detected, null otherwise
*/
public static function detect_format($tempdir) {
- global $CFG;
-
- $filepath = $CFG->dataroot . '/temp/backup/' . $tempdir;
+ $filepath = make_backup_temp_directory($tempdir, false);
+ if (!is_dir($filepath)) {
+ throw new convert_helper_exception('tmp_backup_directory_not_found', $filepath);
+ }
$manifest = cc2moodle::get_manifest($filepath);
if (!empty($manifest)) {
// Looks promising, lets load some information.
* @return null|string backup::FORMAT_IMSCC11 if the Common Cartridge 1.1 is detected, null otherwise
*/
public static function detect_format($tempdir) {
- global $CFG;
-
- $filepath = $CFG->dataroot . '/temp/backup/' . $tempdir;
+ $filepath = make_backup_temp_directory($tempdir, false);
+ if (!is_dir($filepath)) {
+ throw new convert_helper_exception('tmp_backup_directory_not_found', $filepath);
+ }
$manifest = cc112moodle::get_manifest($filepath);
if (file_exists($manifest)) {
// Looks promising, lets load some information.
// Summary.
$message .= get_string('summary') . "\n";
$message .= "==================================================\n";
- $message .= ' ' . get_string('courses') . '; ' . array_sum($count) . "\n";
- $message .= ' ' . get_string('ok') . '; ' . $count[self::BACKUP_STATUS_OK] . "\n";
- $message .= ' ' . get_string('skipped') . '; ' . $count[self::BACKUP_STATUS_SKIPPED] . "\n";
- $message .= ' ' . get_string('error') . '; ' . $count[self::BACKUP_STATUS_ERROR] . "\n";
- $message .= ' ' . get_string('unfinished') . '; ' . $count[self::BACKUP_STATUS_UNFINISHED] . "\n";
- $message .= ' ' . get_string('warning') . '; ' . $count[self::BACKUP_STATUS_WARNING] . "\n";
- $message .= ' ' . get_string('backupnotyetrun') . '; ' . $count[self::BACKUP_STATUS_NOTYETRUN]."\n\n";
+ $message .= ' ' . get_string('courses') . ': ' . array_sum($count) . "\n";
+ $message .= ' ' . get_string('ok') . ': ' . $count[self::BACKUP_STATUS_OK] . "\n";
+ $message .= ' ' . get_string('skipped') . ': ' . $count[self::BACKUP_STATUS_SKIPPED] . "\n";
+ $message .= ' ' . get_string('error') . ': ' . $count[self::BACKUP_STATUS_ERROR] . "\n";
+ $message .= ' ' . get_string('unfinished') . ': ' . $count[self::BACKUP_STATUS_UNFINISHED] . "\n";
+ $message .= ' ' . get_string('warning') . ': ' . $count[self::BACKUP_STATUS_WARNING] . "\n";
+ $message .= ' ' . get_string('backupnotyetrun') . ': ' . $count[self::BACKUP_STATUS_NOTYETRUN]."\n\n";
//Reference
if ($haserrors) {
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_activity_modules'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'block_activity_results'; // Full name of the plugin (used for diagnostics).
\ No newline at end of file
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_admin_bookmarks'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'block_badges';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_blog_menu'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_blog_recent'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_blog_tags'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_calendar_month'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_calendar_upcoming'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_comments'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_community'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX).
-$plugin->requires = 2018050800; // Requires this Moodle version.
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX).
+$plugin->requires = 2018112800; // Requires this Moodle version.
$plugin->component = 'block_completionstatus';
-$plugin->dependencies = array('report_completion' => 2018050800);
+$plugin->dependencies = array('report_completion' => 2018112800);
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_course_list'; // Full name of the plugin (used for diagnostics)
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_course_summary'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_feedback'; // Full name of the plugin (used for diagnostics)
-$plugin->dependencies = array('mod_feedback' => 2018050800);
+$plugin->dependencies = array('mod_feedback' => 2018112800);
defined('MOODLE_INTERNAL') || die;
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'block_globalsearch';
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_glossary_random'; // Full name of the plugin (used for diagnostics)
-$plugin->dependencies = array('mod_glossary' => 2018050800);
+$plugin->dependencies = array('mod_glossary' => 2018112800);
// Automatically generated Moodle v3.5.0 release upgrade line.
// Put any upgrade step following this.
+ // Automatically generated Moodle v3.6.0 release upgrade line.
+ // Put any upgrade step following this.
+
return true;
}
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_html'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_login'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400;
-$plugin->requires = 2018050800;
+$plugin->version = 2018120300;
+$plugin->requires = 2018112800;
$plugin->component = 'block_lp';
$plugin->dependencies = array(
'tool_lp' => ANY_VERSION
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_mentees'; // Full name of the plugin (used for diagnostics)
defined('MOODLE_INTERNAL') || die();
-$plugin->version = 2018051400; // The current plugin version (Date: YYYYMMDDXX)
-$plugin->requires = 2018050800; // Requires this Moodle version
+$plugin->version = 2018120300; // The current plugin version (Date: YYYYMMDDXX)
+$plugin->requires = 2018112800; // Requires this Moodle version
$plugin->component = 'block_mnet_hosts'; // Full name of the plugin (used for diagnostics)
$string['aria:inprogress'] = 'Show in courses in progress';
$string['aria:lastaccessed'] = 'Sort courses by last accessed date';
$string['aria:list'] = 'Switch to list view';
-$string['aria:title'] = 'Sort courses by title';
+$string['aria:title'] = 'Sort courses by course name';
$string['aria:past'] = 'Show past courses';
$string['aria:removefromfavourites'] = 'Remove star for';
$string['aria:summary'] = 'Switch to summary view';
$string['privacy:metadata:overviewpagingpreference'] = 'The Course overview block paging preference.';
$string['removefromfavourites'] = 'Unstar this course';
$string['summary'] = 'Summary';
-$string['title'] = 'Title';
+$string['title'] = 'Course name';
$string['aria:hidecourse'] = 'Hide {$a} from view';
$string['aria:showcourse'] = 'Show {$a} in view';
$string['aria:hiddencourses'] = 'Show hidden courses';
<a class="dropdown-item {{#isfavourite}}hidden{{/isfavourite}}" href="#"
data-action="add-favourite"
data-course-id="{{id}}"
- aria-controls="favorite-icon-{{ id }}"
+ aria-controls="favorite-icon-{{ id }}-{{ uniqid }}"
>
- {{#pix}} i/star, core, {{#str}} favourites, block_myoverview {{/str}} {{/pix}}
+ <span class="text-primary">{{#pix}} i/star, core, {{#str}} favourites, block_myoverview {{/str}} {{/pix}}</span>
{{#str}} addtofavourites, block_myoverview {{/str}}
<div class="sr-only">
{{#str}} aria:addtofavourites, block_myoverview {{/str}} {{{fullname}}}
<a class="dropdown-item {{^isfavourite}}hidden{{/isfavourite}}" href="#"
data-action="remove-favourite"
data-course-id="{{id}}"
- aria-controls="favorite-icon-{{ id }}"
+ aria-controls="favorite-icon-{{ id }}-{{ uniqid }}"
>
{{#str}} removefromfavourites, block_myoverview {{/str}}
<div class="sr-only">
<a class="dropdown-item {{^hidden}}hidden{{/hidden}}" href="#"
data-action="show-course"
data-course-id="{{id}}"
- aria-controls="favorite-icon-{{ id }}"
+ aria-controls="favorite-icon-{{ id }}-{{ uniqid }}"
>
{{#pix}} i/show, core, {{#str}} hidden, block_myoverview {{/str}} {{/pix}}
{{#str}} show, block_myoverview {{/str}}
<a class="dropdown-item {{#hidden}}hidden{{/hidden}}" href="#"
data-action="hide-course"
data-course-id="{{id}}"
- aria-controls="favorite-icon-{{ id }}"
+ aria-controls="favorite-icon-{{ id }}-{{ uniqid }}"
>
{{#pix}} i/hide, core, {{#str}} hidden, block_myoverview {{/str}} {{/pix}}
{{#str}} hidecourse, block_myoverview {{/str}}
}
}}
-<div class="card-deck dashboard-card-deck" role="list">
-{{#courses}}
- <div class="card dashboard-card" role="listitem"
- data-region="course-content"
- data-course-id="{{{id}}}">
- <a href="{{viewurl}}" tabindex="-1">
- <div class="card-img dashboard-card-img" style='background-image: url("{{{courseimage}}}");'>
- <span class="sr-only">{{#str}}aria:courseimage, core_course{{/str}}</span>
- </div>
- </a>
- <div class="card-body pr-1 course-info-container" id="course-info-container-{{id}}">
- <div class="d-flex align-items-start">
- <div class="card-title mb-0 mr-2">
- {{> core_course/favouriteicon }}
- <a href="{{viewurl}}" class="coursename">
- <span class="sr-only">{{#str}}aria:coursename, core_course{{/str}}</span>
- {{#shortentext}}30, {{{fullname}}} {{/shortentext}}
- </a>
- </div>
- {{> block_myoverview/course-action-menu }}
- </div>
- </div>
+{{< core_course/coursecards }}
+ {{$menu}}
+ {{> block_myoverview/course-action-menu }}
+ {{/menu}}
+ {{$progress}}
{{#hasprogress}}
- <div class="card-footer dashboard-card-footer border-0 bg-white">
- {{> block_myoverview/progress-bar}}
- </div>
+ <div class="card-footer dashboard-card-footer border-0 bg-white">
+ {{> block_myoverview/progress-bar}}
+ </div>
{{/hasprogress}}
- </div>
-{{/courses}}
-</div>
\ No newline at end of file
+ {{/progress}}
+ {{$coursename}}
+ <span class="multiline">
+ {{#shortentext}}50, {{{fullname}}} {{/shortentext}}
+ </span>
+ {{/coursename}}
+{{/ core_course/coursecards }}
data-course-id="{{{id}}}">
<div class="row-fluid">
<div class="{{#hasprogress}}col-md-6 span6{{/hasprogress}}{{^hasprogress}}col-md-11 span11{{/hasprogress}} d-flex align-items-center">
- <div class="d-block">
+ <a href="{{viewurl}}" class="coursename">
+ {{#showshortname}}
+ <span class="sr-only">
+ {{#str}}aria:courseshortname, core_course{{/str}}
+ </span>
+ <div class="text-muted muted">
+ {{{shortname}}}
+ </div>
+ {{/showshortname}}
{{> core_course/favouriteicon }}
- <a href="{{viewurl}}" class="coursename">
- <span class="sr-only">{{#str}}aria:coursename, core_course{{/str}}</span>
- {{{fullname}}}
- </a>
- </div>
+ <span class="sr-only">
+ {{#str}}aria:coursename, core_course{{/str}}
+ </span>
+ {{{fullname}}}
+ </a>
</div>
{{#hasprogress}}
<div class="col-md-5 span5 pt-1">
<div class="align-self-stretch d-flex flex-column w-100">
<div class="d-flex mb-1">
- <div class="d-block">
+ <a href="{{viewurl}}" class="coursename">
+ {{#showshortname}}
+ <span class="sr-only">
+ {{#str}}aria:courseshortname, core_course{{/str}}
+ </span>
+ <div class="text-muted muted mb-1">
+ {{{shortname}}}
+ </div>
+ {{/showshortname}}
{{> core_course/favouriteicon }}
- <a href="{{viewurl}}" class="coursename">
- <span class="sr-only">{{#str}}aria:coursename, core_course{{/str}}</span>
- <h4 class="d-inline">{{{fullname}}}</h4>
- </a>
- </div>
+ <span class="sr-only">
+ {{#str}}aria:coursename, core_course{{/str}}
+ </span>
+ <h6 class="d-inline h5">{{{fullname}}}</h4>
+ </a>
{{> block_myoverview/course-action-menu }}
</div>
<div class="summary">
Then I should see "Summary" in the "Course overview" "block"
And "[data-display='summary']" "css_element" in the "Course overview" "block" should be visible
- Scenario: Title sort persistence
+ Scenario: Course name sort persistence
Given I log in as "student1"
And I click on "sortingdropdown" "button" in the "Course overview" "block"
- And I click on "Title" "link" in the "Course overview" "block"
+ And I click on "Course name" "link" in the "Course overview" "block"
And I reload the page
- Then I should see "Title" in the "Course overview" "block"
+ Then I should see "Course name" in the "Course overview" "block"
And "[data-sort='fullname']" "css_element" in the "Course overview" "block" should be visible
Scenario: Last accessed sort persistence