Merge branch 'MDL-54751_master-fix-cron-user' of git://github.com/dmonllao/moodle
This commit is contained in:
@@ -50,12 +50,22 @@ class course_delete_modules extends \core\task\adhoc_task {
|
||||
global $CFG;
|
||||
require_once($CFG->dirroot. '/course/lib.php');
|
||||
|
||||
// Set the proper user.
|
||||
if ($this->get_custom_data()->userid !== $this->get_custom_data()->realuserid) {
|
||||
$realuser = \core_user::get_user($this->get_custom_data()->realuserid, '*', MUST_EXIST);
|
||||
cron_setup_user($realuser);
|
||||
\core\session\manager::loginas($this->get_custom_data()->userid, \context_system::instance(), false);
|
||||
} else {
|
||||
$user = \core_user::get_user($this->get_custom_data()->userid, '*', MUST_EXIST);
|
||||
cron_setup_user($user);
|
||||
}
|
||||
|
||||
$cms = $this->get_custom_data()->cms;
|
||||
foreach ($cms as $cm) {
|
||||
try {
|
||||
course_delete_module($cm->id);
|
||||
} catch (\Exception $e) {
|
||||
throw new \coding_exception("The course module {$cm->id} could not be deleted. $e->getTraceAsString()");
|
||||
throw new \coding_exception("The course module {$cm->id} could not be deleted. {$e->getTraceAsString()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-4
@@ -1220,7 +1220,7 @@ function course_delete_module($cmid, $async = false) {
|
||||
* @throws \moodle_exception
|
||||
*/
|
||||
function course_module_flag_for_async_deletion($cmid) {
|
||||
global $CFG, $DB;
|
||||
global $CFG, $DB, $USER;
|
||||
require_once($CFG->libdir.'/gradelib.php');
|
||||
require_once($CFG->libdir.'/questionlib.php');
|
||||
require_once($CFG->dirroot.'/blog/lib.php');
|
||||
@@ -1262,7 +1262,11 @@ function course_module_flag_for_async_deletion($cmid) {
|
||||
|
||||
// Create an adhoc task for the deletion of the course module. The task takes an array of course modules for removal.
|
||||
$removaltask = new \core_course\task\course_delete_modules();
|
||||
$removaltask->set_custom_data(array('cms' => array($cm)));
|
||||
$removaltask->set_custom_data(array(
|
||||
'cms' => array($cm),
|
||||
'userid' => $USER->id,
|
||||
'realuserid' => \core\session\manager::get_realuser()->id
|
||||
));
|
||||
|
||||
// Queue the task for the next run.
|
||||
\core\task\manager::queue_adhoc_task($removaltask);
|
||||
@@ -1466,7 +1470,7 @@ function course_delete_section($course, $section, $forcedeleteifnotempty = true,
|
||||
* @return bool true if the section was scheduled for deletion, false otherwise.
|
||||
*/
|
||||
function course_delete_section_async($section, $forcedeleteifnotempty = true) {
|
||||
global $DB;
|
||||
global $DB, $USER;
|
||||
|
||||
// Objects only, and only valid ones.
|
||||
if (!is_object($section) || empty($section->id)) {
|
||||
@@ -1504,7 +1508,9 @@ function course_delete_section_async($section, $forcedeleteifnotempty = true) {
|
||||
// Create and queue an adhoc task for the deletion of the modules.
|
||||
$removaltask = new \core_course\task\course_delete_modules();
|
||||
$data = array(
|
||||
'cms' => $affectedmods
|
||||
'cms' => $affectedmods,
|
||||
'userid' => $USER->id,
|
||||
'realuserid' => \core\session\manager::get_realuser()->id
|
||||
);
|
||||
$removaltask->set_custom_data($data);
|
||||
\core\task\manager::queue_adhoc_task($removaltask);
|
||||
|
||||
@@ -830,9 +830,10 @@ class manager {
|
||||
* Login as another user - no security checks here.
|
||||
* @param int $userid
|
||||
* @param \context $context
|
||||
* @param bool $generateevent Set to false to prevent the loginas event to be generated
|
||||
* @return void
|
||||
*/
|
||||
public static function loginas($userid, \context $context) {
|
||||
public static function loginas($userid, \context $context, $generateevent = true) {
|
||||
global $USER;
|
||||
|
||||
if (self::is_loggedinas()) {
|
||||
@@ -854,21 +855,27 @@ class manager {
|
||||
// Let enrol plugins deal with new enrolments if necessary.
|
||||
enrol_check_plugins($user);
|
||||
|
||||
// Create event before $USER is updated.
|
||||
$event = \core\event\user_loggedinas::create(
|
||||
array(
|
||||
'objectid' => $USER->id,
|
||||
'context' => $context,
|
||||
'relateduserid' => $userid,
|
||||
'other' => array(
|
||||
'originalusername' => fullname($USER, true),
|
||||
'loggedinasusername' => fullname($user, true)
|
||||
if ($generateevent) {
|
||||
// Create event before $USER is updated.
|
||||
$event = \core\event\user_loggedinas::create(
|
||||
array(
|
||||
'objectid' => $USER->id,
|
||||
'context' => $context,
|
||||
'relateduserid' => $userid,
|
||||
'other' => array(
|
||||
'originalusername' => fullname($USER, true),
|
||||
'loggedinasusername' => fullname($user, true)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
// Set up global $USER.
|
||||
\core\session\manager::set_user($user);
|
||||
$event->trigger();
|
||||
|
||||
if ($generateevent) {
|
||||
$event->trigger();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user