Merge branch 'MDL-60811-master' of git://github.com/farhan6318/moodle
authorAndrew Nicols <andrew@nicols.co.uk>
Wed, 4 Apr 2018 00:48:21 +0000 (08:48 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Wed, 4 Apr 2018 00:48:21 +0000 (08:48 +0800)
enrol/self/bulkchangeforms.php [new file with mode: 0644]
enrol/self/classes/deleteselectedusers_form.php [new file with mode: 0644]
enrol/self/classes/deleteselectedusers_operation.php [new file with mode: 0644]
enrol/self/classes/editselectedusers_form.php [new file with mode: 0644]
enrol/self/classes/editselectedusers_operation.php [new file with mode: 0644]
enrol/self/lang/en/enrol_self.php
enrol/self/lib.php
enrol/self/locallib.php

diff --git a/enrol/self/bulkchangeforms.php b/enrol/self/bulkchangeforms.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/enrol/self/classes/deleteselectedusers_form.php b/enrol/self/classes/deleteselectedusers_form.php
new file mode 100644 (file)
index 0000000..4ebc7ed
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The form to confirm the intention to bulk delete users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once("$CFG->dirroot/enrol/bulkchange_forms.php");
+
+/**
+ * The form to confirm the intention to bulk delete users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class enrol_self_deleteselectedusers_form extends enrol_bulk_enrolment_confirm_form {
+}
\ No newline at end of file
diff --git a/enrol/self/classes/deleteselectedusers_operation.php b/enrol/self/classes/deleteselectedusers_operation.php
new file mode 100644 (file)
index 0000000..ec9ca87
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * A bulk operation for the self enrolment plugin to delete selected users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * A bulk operation for the self enrolment plugin to delete selected users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class enrol_self_deleteselectedusers_operation extends enrol_bulk_enrolment_operation {
+
+    /**
+     * Returns the title to display for this bulk operation.
+     *
+     * @return string
+     */
+    public function get_identifier() {
+        return 'deleteselectedusers';
+    }
+
+    /**
+     * Returns the identifier for this bulk operation. This is the key used when the plugin
+     * returns an array containing all of the bulk operations it supports.
+     *
+     * @return string
+     */
+    public function get_title() {
+        return get_string('deleteselectedusers', 'enrol_manual');
+    }
+
+    /**
+     * Returns a enrol_bulk_enrolment_operation extension form to be used
+     * in collecting required information for this operation to be processed.
+     *
+     * @param string|moodle_url|null $defaultaction
+     * @param mixed $defaultcustomdata
+     * @return enrol_manual_editselectedusers_form
+     */
+    public function get_form($defaultaction = null, $defaultcustomdata = null) {
+        global $CFG;
+        if (!array($defaultcustomdata)) {
+            $defaultcustomdata = array();
+        }
+        $defaultcustomdata['title'] = $this->get_title();
+        $defaultcustomdata['message'] = get_string('confirmbulkdeleteenrolment', 'enrol_self');
+        $defaultcustomdata['button'] = get_string('unenrolusers', 'enrol_self');
+        return new enrol_self_deleteselectedusers_form($defaultaction, $defaultcustomdata);
+    }
+
+    /**
+     * Processes the bulk operation request for the given userids with the provided properties.
+     *
+     * @param course_enrolment_manager $manager
+     * @param array $users
+     * @param stdClass $properties The data returned by the form.
+     */
+    public function process(course_enrolment_manager $manager, array $users, stdClass $properties) {
+        global $DB;
+
+        if (!has_capability("enrol/self:unenrol", $manager->get_context())) {
+            return false;
+        }
+        foreach ($users as $user) {
+            foreach ($user->enrolments as $enrolment) {
+                $plugin = $enrolment->enrolmentplugin;
+                $instance = $enrolment->enrolmentinstance;
+                if ($plugin->allow_unenrol_user($instance, $enrolment)) {
+                    $plugin->unenrol_user($instance, $user->id);
+                }
+            }
+        }
+        return true;
+    }
+}
+
diff --git a/enrol/self/classes/editselectedusers_form.php b/enrol/self/classes/editselectedusers_form.php
new file mode 100644 (file)
index 0000000..7bc82f4
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * The form to collect required information when bulk editing users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+require_once("$CFG->dirroot/enrol/bulkchange_forms.php");
+
+/**
+ * The form to collect required information when bulk editing users enrolments.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class enrol_self_editselectedusers_form extends enrol_bulk_enrolment_change_form {
+}
diff --git a/enrol/self/classes/editselectedusers_operation.php b/enrol/self/classes/editselectedusers_operation.php
new file mode 100644 (file)
index 0000000..360749c
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * A bulk operation for the manual enrolment plugin to edit selected users.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+/**
+ * A bulk operation for the manual enrolment plugin to edit selected users.
+ *
+ * @package enrol_self
+ * @copyright 2018 Farhan Karmali
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class enrol_self_editselectedusers_operation extends enrol_bulk_enrolment_operation {
+
+    /**
+     * Returns the title to display for this bulk operation.
+     *
+     * @return string
+     */
+    public function get_title() {
+        return get_string('editselectedusers', 'enrol_self');
+    }
+
+    /**
+     * Returns the identifier for this bulk operation. This is the key used when the plugin
+     * returns an array containing all of the bulk operations it supports.
+     */
+    public function get_identifier() {
+        return 'editselectedusers';
+    }
+
+    /**
+     * Processes the bulk operation request for the given userids with the provided properties.
+     *
+     * @param course_enrolment_manager $manager
+     * @param array $users
+     * @param stdClass $properties The data returned by the form.
+     */
+    public function process(course_enrolment_manager $manager, array $users, stdClass $properties) {
+        global $DB, $USER;
+
+        if (!has_capability("enrol/self:manage", $manager->get_context())) {
+            return false;
+        }
+
+        // Get all of the user enrolment id's.
+        $ueids = array();
+        $instances = array();
+        foreach ($users as $user) {
+            foreach ($user->enrolments as $enrolment) {
+                $ueids[] = $enrolment->id;
+                if (!array_key_exists($enrolment->id, $instances)) {
+                    $instances[$enrolment->id] = $enrolment;
+                }
+            }
+        }
+
+        // Check that each instance is manageable by the current user.
+        foreach ($instances as $instance) {
+            if (!$this->plugin->allow_manage($instance)) {
+                return false;
+            }
+        }
+
+        // Collect the known properties.
+        $status = $properties->status;
+        $timestart = $properties->timestart;
+        $timeend = $properties->timeend;
+
+        list($ueidsql, $params) = $DB->get_in_or_equal($ueids, SQL_PARAMS_NAMED);
+
+        $updatesql = array();
+        if ($status == ENROL_USER_ACTIVE || $status == ENROL_USER_SUSPENDED) {
+            $updatesql[] = 'status = :status';
+            $params['status'] = (int)$status;
+        }
+        if (!empty($timestart)) {
+            $updatesql[] = 'timestart = :timestart';
+            $params['timestart'] = (int)$timestart;
+        }
+        if (!empty($timeend)) {
+            $updatesql[] = 'timeend = :timeend';
+            $params['timeend'] = (int)$timeend;
+        }
+        if (empty($updatesql)) {
+            return true;
+        }
+
+        // Update the modifierid.
+        $updatesql[] = 'modifierid = :modifierid';
+        $params['modifierid'] = (int)$USER->id;
+
+        // Update the time modified.
+        $updatesql[] = 'timemodified = :timemodified';
+        $params['timemodified'] = time();
+
+        // Build the SQL statement.
+        $updatesql = join(', ', $updatesql);
+        $sql = "UPDATE {user_enrolments}
+                   SET $updatesql
+                 WHERE id $ueidsql";
+
+        if ($DB->execute($sql, $params)) {
+            foreach ($users as $user) {
+                foreach ($user->enrolments as $enrolment) {
+                    $enrolment->courseid  = $enrolment->enrolmentinstance->courseid;
+                    $enrolment->enrol     = 'self';
+                    // Trigger event.
+                    $event = \core\event\user_enrolment_updated::create(
+                        array(
+                            'objectid' => $enrolment->id,
+                            'courseid' => $enrolment->courseid,
+                            'context' => context_course::instance($enrolment->courseid),
+                            'relateduserid' => $user->id,
+                            'other' => array('enrol' => 'self')
+                        )
+                    );
+                    $event->trigger();
+                }
+            }
+            // Delete cached course contacts for this course because they may be affected.
+            cache::make('core', 'coursecontacts')->delete($manager->get_context()->instanceid);
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a enrol_bulk_enrolment_operation extension form to be used
+     * in collecting required information for this operation to be processed.
+     *
+     * @param string|moodle_url|null $defaultaction
+     * @param mixed $defaultcustomdata
+     * @return enrol_self_editselectedusers_form
+     */
+    public function get_form($defaultaction = null, $defaultcustomdata = null) {
+        global $CFG;
+        return new enrol_self_editselectedusers_form($defaultaction, $defaultcustomdata);
+    }
+}
+
index 5f4e5e1..9cfb17a 100644 (file)
@@ -28,6 +28,7 @@ $string['canntenrollate'] = 'You cannot enrol any more, since enrolment ended on
 $string['cohortnonmemberinfo'] = 'Only members of cohort \'{$a}\' can self-enrol.';
 $string['cohortonly'] = 'Only cohort members';
 $string['cohortonly_help'] = 'Self enrolment may be restricted to members of a specified cohort only. Note that changing this setting has no effect on existing enrolments.';
+$string['confirmbulkdeleteenrolment'] = 'Are you sure you want to delete these users enrolments?';
 $string['customwelcomemessage'] = 'Custom welcome message';
 $string['customwelcomemessage_help'] = 'A custom welcome message may be added as plain text or Moodle-auto format, including HTML tags and multi-lang tags.
 
@@ -39,6 +40,8 @@ The following placeholders may be included in the message:
 * User fullname {$a->fullname}';
 $string['defaultrole'] = 'Default role assignment';
 $string['defaultrole_desc'] = 'Select role which should be assigned to users during self enrolment';
+$string['deleteselectedusers'] = 'Delete selected user enrolments';
+$string['editselectedusers'] = 'Edit selected user enrolments';
 $string['enrolenddate'] = 'End date';
 $string['enrolenddate_help'] = 'If enabled, users can enrol themselves until this date only.';
 $string['enrolenddaterror'] = 'Enrolment end date cannot be earlier than start date';
@@ -107,6 +110,7 @@ $string['status_help'] = 'If enabled together with \'Allow new enrolments\' disa
 $string['unenrol'] = 'Unenrol user';
 $string['unenrolselfconfirm'] = 'Do you really want to unenrol yourself from course "{$a}"?';
 $string['unenroluser'] = 'Do you really want to unenrol "{$a->user}" from course "{$a->course}"?';
+$string['unenrolusers'] = 'Unenrol users';
 $string['usepasswordpolicy'] = 'Use password policy';
 $string['usepasswordpolicy_desc'] = 'Use standard password policy for enrolment keys.';
 $string['welcometocourse'] = 'Welcome to {$a}';
index 98e9583..e521c2e 100644 (file)
@@ -694,6 +694,25 @@ class enrol_self_plugin extends enrol_plugin {
         return $options;
     }
 
+    /**
+     * The self enrollment plugin has several bulk operations that can be performed.
+     * @param course_enrolment_manager $manager
+     * @return array
+     */
+    public function get_bulk_operations(course_enrolment_manager $manager) {
+        global $CFG;
+        require_once($CFG->dirroot.'/enrol/self/locallib.php');
+        $context = $manager->get_context();
+        $bulkoperations = array();
+        if (has_capability("enrol/self:manage", $context)) {
+            $bulkoperations['editselectedusers'] = new enrol_self_editselectedusers_operation($manager, $this);
+        }
+        if (has_capability("enrol/self:unenrol", $context)) {
+            $bulkoperations['deleteselectedusers'] = new enrol_self_deleteselectedusers_operation($manager, $this);
+        }
+        return $bulkoperations;
+    }
+
     /**
      * Add elements to the edit instance form.
      *
index dc17af1..850555e 100644 (file)
@@ -25,6 +25,7 @@
 defined('MOODLE_INTERNAL') || die();
 
 require_once("$CFG->libdir/formslib.php");
+require_once($CFG->dirroot . '/enrol/locallib.php');
 
 /**
  * Check if the given password match a group enrolment key in the specified course.