예제 #1
0
 public static function user_enrolment_updated(\core\event\user_enrolment_updated $event)
 {
     global $DB;
     $unenrolleduserid = $event->relateduserid;
     $enroltype = $event->get_data()['other']['enrol'];
     $courseid = $event->courseid;
     $data = array('uid' => $unenrolleduserid, 'enrol' => $enroltype, 'course' => $courseid);
     error_log(print_r($data, true));
 }
예제 #2
0
파일: locallib.php 프로젝트: evltuma/moodle
 /**
  * Processes the bulk operation request for the given userids with the provided properties.
  *
  * @param course_enrolment_manager $manager
  * @param array $userids
  * @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/manual: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}\n                   SET {$updatesql}\n                 WHERE id {$ueidsql}";
     if ($DB->execute($sql, $params)) {
         foreach ($users as $user) {
             foreach ($user->enrolments as $enrolment) {
                 $enrolment->courseid = $enrolment->enrolmentinstance->courseid;
                 $enrolment->enrol = 'manual';
                 // 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' => 'manual')));
                 $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;
 }
예제 #3
0
    /**
     * Store user_enrolments changes and trigger event.
     *
     * @param stdClass $instance
     * @param int $userid
     * @param int $status
     * @param int $timestart
     * @param int $timeend
     * @return void
     */
    public function update_user_enrol(stdClass $instance, $userid, $status = NULL, $timestart = NULL, $timeend = NULL) {
        global $DB, $USER;

        $name = $this->get_name();

        if ($instance->enrol !== $name) {
            throw new coding_exception('invalid enrol instance!');
        }

        if (!$ue = $DB->get_record('user_enrolments', array('enrolid'=>$instance->id, 'userid'=>$userid))) {
            // weird, user not enrolled
            return;
        }

        $modified = false;
        if (isset($status) and $ue->status != $status) {
            $ue->status = $status;
            $modified = true;
        }
        if (isset($timestart) and $ue->timestart != $timestart) {
            $ue->timestart = $timestart;
            $modified = true;
        }
        if (isset($timeend) and $ue->timeend != $timeend) {
            $ue->timeend = $timeend;
            $modified = true;
        }

        if (!$modified) {
            // no change
            return;
        }

        $ue->modifierid = $USER->id;
        $DB->update_record('user_enrolments', $ue);
        context_course::instance($instance->courseid)->mark_dirty(); // reset enrol caches

        // Invalidate core_access cache for get_suspended_userids.
        cache_helper::invalidate_by_definition('core', 'suspended_userids', array(), array($instance->courseid));

        // Trigger event.
        $event = \core\event\user_enrolment_updated::create(
                array(
                    'objectid' => $ue->id,
                    'courseid' => $instance->courseid,
                    'context' => context_course::instance($instance->courseid),
                    'relateduserid' => $ue->userid,
                    'other' => array('enrol' => $name)
                    )
                );
        $event->trigger();
    }