/**
  * Run the deletion task.
  *
  * @throws \coding_exception if the module could not be removed.
  */
 public function execute()
 {
     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()}");
         }
     }
 }
/**
 * Login as another user - no security checks here.
 * @deprecated since 2.6
 * @param int $userid
 * @param stdClass $context
 * @return void
 */
function session_loginas($userid, $context)
{
    debugging('session_loginas() is deprecated, use \\core\\session\\manager::loginas() instead', DEBUG_DEVELOPER);
    \core\session\manager::loginas($userid, $context);
}
 public function test_get_realuser()
 {
     $this->resetAfterTest();
     $user1 = $this->getDataGenerator()->create_user();
     $user2 = $this->getDataGenerator()->create_user();
     $this->setUser($user1);
     $normal = \core\session\manager::get_realuser();
     $this->assertSame($GLOBALS['USER'], $normal);
     \core\session\manager::loginas($user2->id, context_system::instance());
     $real = \core\session\manager::get_realuser();
     unset($real->password);
     unset($real->description);
     unset($real->sesskey);
     unset($user1->password);
     unset($user1->description);
     unset($user1->sesskey);
     $this->assertEquals($real, $user1);
     $this->assertSame($_SESSION['REALUSER'], $real);
 }
Beispiel #4
0
 public function test_log_writing()
 {
     global $DB;
     $this->resetAfterTest();
     $this->preventResetByRollback();
     // Logging waits till the transaction gets committed.
     $this->setAdminUser();
     $user1 = $this->getDataGenerator()->create_user();
     $user2 = $this->getDataGenerator()->create_user();
     $course1 = $this->getDataGenerator()->create_course();
     $module1 = $this->getDataGenerator()->create_module('resource', array('course' => $course1));
     $course2 = $this->getDataGenerator()->create_course();
     $module2 = $this->getDataGenerator()->create_module('resource', array('course' => $course2));
     // Test all plugins are disabled by this command.
     set_config('enabled_stores', '', 'tool_log');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     $this->assertCount(0, $stores);
     // Enable logging plugin.
     set_config('enabled_stores', 'logstore_standard', 'tool_log');
     set_config('buffersize', 0, 'logstore_standard');
     set_config('logguests', 1, 'logstore_standard');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     $this->assertCount(1, $stores);
     $this->assertEquals(array('logstore_standard'), array_keys($stores));
     /** @var \logstore_standard\log\store $store */
     $store = $stores['logstore_standard'];
     $this->assertInstanceOf('logstore_standard\\log\\store', $store);
     $this->assertInstanceOf('tool_log\\log\\writer', $store);
     $this->assertTrue($store->is_logging());
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(0, $logs);
     $this->setCurrentTimeStart();
     $this->setUser(0);
     $event1 = \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)));
     $event1->trigger();
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(1, $logs);
     $log1 = reset($logs);
     unset($log1->id);
     $log1->other = unserialize($log1->other);
     $log1 = (array) $log1;
     $data = $event1->get_data();
     $data['origin'] = 'cli';
     $data['ip'] = null;
     $data['realuserid'] = null;
     $this->assertEquals($data, $log1);
     $this->setAdminUser();
     \core\session\manager::loginas($user1->id, context_system::instance());
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     logstore_standard_restore::hack_executing(1);
     $event2 = \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module2->cmid), 'other' => array('sample' => 6, 'xx' => 9)));
     $event2->trigger();
     logstore_standard_restore::hack_executing(0);
     \core\session\manager::init_empty_session();
     $this->assertFalse(\core\session\manager::is_loggedinas());
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(3, $logs);
     array_shift($logs);
     $log2 = array_shift($logs);
     $this->assertSame('\\core\\event\\user_loggedinas', $log2->eventname);
     $this->assertSame('cli', $log2->origin);
     $log3 = array_shift($logs);
     unset($log3->id);
     $log3->other = unserialize($log3->other);
     $log3 = (array) $log3;
     $data = $event2->get_data();
     $data['origin'] = 'restore';
     $data['ip'] = null;
     $data['realuserid'] = 2;
     $this->assertEquals($data, $log3);
     // Test table exists.
     $tablename = $store->get_internal_log_table_name();
     $this->assertTrue($DB->get_manager()->table_exists($tablename));
     // Test reading.
     $this->assertSame(3, $store->get_events_select_count('', array()));
     $events = $store->get_events_select('', array(), 'timecreated ASC', 0, 0);
     // Is actually sorted by "timecreated ASC, id ASC".
     $this->assertCount(3, $events);
     $resev1 = array_shift($events);
     array_shift($events);
     $resev2 = array_shift($events);
     $this->assertEquals($event1->get_data(), $resev1->get_data());
     $this->assertEquals($event2->get_data(), $resev2->get_data());
     // Test buffering.
     set_config('buffersize', 3, 'logstore_standard');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     /** @var \logstore_standard\log\store $store */
     $store = $stores['logstore_standard'];
     $DB->delete_records('logstore_standard_log');
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $store->flush();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(8, $DB->count_records('logstore_standard_log'));
     // Test guest logging setting.
     set_config('logguests', 0, 'logstore_standard');
     set_config('buffersize', 0, 'logstore_standard');
     get_log_manager(true);
     $DB->delete_records('logstore_standard_log');
     get_log_manager(true);
     $this->setUser(null);
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $this->setGuestUser();
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $this->setUser($user1);
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(1, $DB->count_records('logstore_standard_log'));
     $this->setUser($user2);
     \logstore_standard\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     set_config('enabled_stores', '', 'tool_log');
     get_log_manager(true);
 }
 public function test_check_capability()
 {
     $this->resetAfterTest(true);
     $syscontext = context_system::instance();
     $course1 = $this->getDataGenerator()->create_course();
     $course1context = context_course::instance($course1->id);
     $course2 = $this->getDataGenerator()->create_course();
     $course2context = context_course::instance($course2->id);
     $forumdata = new stdClass();
     $forumdata->course = $course1->id;
     $forumc1 = $this->getDataGenerator()->create_module('forum', $forumdata);
     $forumc1context = context_module::instance($forumc1->cmid);
     $forumdata->course = $course2->id;
     $forumc2 = $this->getDataGenerator()->create_module('forum', $forumdata);
     $forumc2context = context_module::instance($forumc2->cmid);
     $blockdata = new stdClass();
     $blockdata->parentcontextid = $course1context->id;
     $blockc1 = $this->getDataGenerator()->create_block('online_users', $blockdata);
     $blockc1context = context_block::instance($blockc1->id);
     $blockdata->parentcontextid = $course2context->id;
     $blockc2 = $this->getDataGenerator()->create_block('online_users', $blockdata);
     $blockc2context = context_block::instance($blockc2->id);
     $user1 = $this->getDataGenerator()->create_user();
     $user1context = context_user::instance($user1->id);
     $user2 = $this->getDataGenerator()->create_user();
     $user2context = context_user::instance($user2->id);
     // New role prohibiting Flickr Public access.
     $roleid = create_role('No Flickr Public', 'noflickrpublic', 'No Flickr Public', '');
     assign_capability('repository/flickr_public:view', CAP_PROHIBIT, $roleid, $syscontext, true);
     // Disallow system access to Flickr Public to user 2.
     role_assign($roleid, $user2->id, $syscontext->id);
     accesslib_clear_all_caches_for_unit_testing();
     // Enable repositories.
     $this->getDataGenerator()->create_repository_type('flickr_public');
     $this->getDataGenerator()->create_repository_type('dropbox');
     // Instance on a site level.
     $repoid = $this->getDataGenerator()->create_repository('flickr_public')->id;
     $systemrepo = repository::get_repository_by_id($repoid, $syscontext);
     // Check that everyone with right capability can view a site-wide repository.
     $this->setUser($user1);
     $this->assertTrue($systemrepo->check_capability());
     // Without the capability, we cannot view a site-wide repository.
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $systemrepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Instance on a course level.
     $record = new stdClass();
     $record->contextid = $course1context->id;
     $courserepoid = $this->getDataGenerator()->create_repository('flickr_public', $record)->id;
     // Within the course, I can view the repository.
     $courserepo = repository::get_repository_by_id($courserepoid, $course1context);
     $this->setUser($user1);
     $this->assertTrue($courserepo->check_capability());
     // But not without the capability.
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // From another course I cannot, with or without the capability.
     $courserepo = repository::get_repository_by_id($courserepoid, $course2context);
     $this->setUser($user1);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // From a module within the course, I can view the repository.
     $courserepo = repository::get_repository_by_id($courserepoid, $forumc1context);
     $this->setUser($user1);
     $this->assertTrue($courserepo->check_capability());
     // But not without the capability.
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // From a module in the wrong course, I cannot view the repository.
     $courserepo = repository::get_repository_by_id($courserepoid, $forumc2context);
     $this->setUser($user1);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // From a block within the course, I can view the repository.
     $courserepo = repository::get_repository_by_id($courserepoid, $blockc1context);
     $this->setUser($user1);
     $this->assertTrue($courserepo->check_capability());
     // But not without the capability.
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // From a block in the wrong course, I cannot view the repository.
     $courserepo = repository::get_repository_by_id($courserepoid, $blockc2context);
     $this->setUser($user1);
     $caughtexception = false;
     try {
         $courserepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Instance on a user level.
     // Instance on a course level.
     $record = new stdClass();
     $record->contextid = $user1context->id;
     $user1repoid = $this->getDataGenerator()->create_repository('flickr_public', $record)->id;
     $record->contextid = $user2context->id;
     $user2repoid = $this->getDataGenerator()->create_repository('flickr_public', $record)->id;
     // Check that a user can see its own repository.
     $userrepo = repository::get_repository_by_id($user1repoid, $syscontext);
     $this->setUser($user1);
     $this->assertTrue($userrepo->check_capability());
     // But not without the capability.
     $userrepo = repository::get_repository_by_id($user2repoid, $syscontext);
     $this->setUser($user2);
     $caughtexception = false;
     try {
         $userrepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Check that a user cannot see someone's repository.
     $userrepo = repository::get_repository_by_id($user2repoid, $syscontext);
     $this->setUser($user1);
     $caughtexception = false;
     try {
         $userrepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Make sure the repo from user 2 was accessible.
     role_unassign($roleid, $user2->id, $syscontext->id);
     accesslib_clear_all_caches_for_unit_testing();
     $this->setUser($user2);
     $this->assertTrue($userrepo->check_capability());
     role_assign($roleid, $user2->id, $syscontext->id);
     accesslib_clear_all_caches_for_unit_testing();
     // Check that a user can view SOME repositories when logged in as someone else.
     $params = new stdClass();
     $params->name = 'Dropbox';
     $params->dropbox_key = 'key';
     $params->dropbox_secret = 'secret';
     $privaterepoid = $this->getDataGenerator()->create_repository('dropbox')->id;
     $notprivaterepoid = $this->getDataGenerator()->create_repository('upload')->id;
     $privaterepo = repository::get_repository_by_id($privaterepoid, $syscontext);
     $notprivaterepo = repository::get_repository_by_id($notprivaterepoid, $syscontext);
     $userrepo = repository::get_repository_by_id($user1repoid, $syscontext);
     $this->setAdminUser();
     \core\session\manager::loginas($user1->id, $syscontext);
     // Logged in as, I cannot view a user instance.
     $caughtexception = false;
     try {
         $userrepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Logged in as, I cannot view a private instance.
     $caughtexception = false;
     try {
         $privaterepo->check_capability();
     } catch (repository_exception $e) {
         $caughtexception = true;
     }
     $this->assertTrue($caughtexception);
     // Logged in as, I can view a non-private instance.
     $this->assertTrue($notprivaterepo->check_capability());
 }
Beispiel #6
0
 public function test_log_writing()
 {
     global $DB, $CFG;
     $this->resetAfterTest();
     $this->preventResetByRollback();
     // Logging waits till the transaction gets committed.
     $dbman = $DB->get_manager();
     $this->assertTrue($dbman->table_exists('logstore_standard_log'));
     $DB->delete_records('logstore_standard_log');
     $this->setAdminUser();
     $user1 = $this->getDataGenerator()->create_user();
     $user2 = $this->getDataGenerator()->create_user();
     $course1 = $this->getDataGenerator()->create_course();
     $module1 = $this->getDataGenerator()->create_module('resource', array('course' => $course1));
     $course2 = $this->getDataGenerator()->create_course();
     $module2 = $this->getDataGenerator()->create_module('resource', array('course' => $course2));
     // Test all plugins are disabled by this command.
     set_config('enabled_stores', '', 'tool_log');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     $this->assertCount(0, $stores);
     // Fake the settings, we will abuse the standard plugin table here...
     $parts = explode('_', get_class($DB));
     set_config('dbdriver', $parts[1] . '/' . $parts[0], 'logstore_database');
     set_config('dbhost', $CFG->dbhost, 'logstore_database');
     set_config('dbuser', $CFG->dbuser, 'logstore_database');
     set_config('dbpass', $CFG->dbpass, 'logstore_database');
     set_config('dbname', $CFG->dbname, 'logstore_database');
     set_config('dbtable', $CFG->prefix . 'logstore_standard_log', 'logstore_database');
     if (!empty($CFG->dboptions['dbpersist'])) {
         set_config('dbpersist', 1, 'logstore_database');
     } else {
         set_config('dbpersist', 0, 'logstore_database');
     }
     if (!empty($CFG->dboptions['dbsocket'])) {
         set_config('dbsocket', $CFG->dboptions['dbsocket'], 'logstore_database');
     } else {
         set_config('dbsocket', '', 'logstore_database');
     }
     if (!empty($CFG->dboptions['dbport'])) {
         set_config('dbport', $CFG->dboptions['dbport'], 'logstore_database');
     } else {
         set_config('dbport', '', 'logstore_database');
     }
     if (!empty($CFG->dboptions['dbschema'])) {
         set_config('dbschema', $CFG->dboptions['dbschema'], 'logstore_database');
     } else {
         set_config('dbschema', '', 'logstore_database');
     }
     if (!empty($CFG->dboptions['dbcollation'])) {
         set_config('dbcollation', $CFG->dboptions['dbcollation'], 'logstore_database');
     } else {
         set_config('dbcollation', '', 'logstore_database');
     }
     // Enable logging plugin.
     set_config('enabled_stores', 'logstore_database', 'tool_log');
     set_config('buffersize', 0, 'logstore_database');
     set_config('logguests', 1, 'logstore_database');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     $this->assertCount(1, $stores);
     $this->assertEquals(array('logstore_database'), array_keys($stores));
     $store = $stores['logstore_database'];
     $this->assertInstanceOf('logstore_database\\log\\store', $store);
     $this->assertInstanceOf('tool_log\\log\\writer', $store);
     $this->assertTrue($store->is_logging());
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(0, $logs);
     $this->setCurrentTimeStart();
     $this->setUser(0);
     $event1 = \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)));
     $event1->trigger();
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(1, $logs);
     $log1 = reset($logs);
     unset($log1->id);
     $log1->other = unserialize($log1->other);
     $log1 = (array) $log1;
     $data = $event1->get_data();
     $data['origin'] = 'cli';
     $data['ip'] = null;
     $data['realuserid'] = null;
     $this->assertEquals($data, $log1);
     $this->setAdminUser();
     \core\session\manager::loginas($user1->id, context_system::instance());
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     $event2 = \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module2->cmid), 'other' => array('sample' => 6, 'xx' => 9)));
     $event2->trigger();
     \core\session\manager::init_empty_session();
     $this->assertFalse(\core\session\manager::is_loggedinas());
     $logs = $DB->get_records('logstore_standard_log', array(), 'id ASC');
     $this->assertCount(3, $logs);
     array_shift($logs);
     $log2 = array_shift($logs);
     $this->assertSame('\\core\\event\\user_loggedinas', $log2->eventname);
     $log3 = array_shift($logs);
     unset($log3->id);
     $log3->other = unserialize($log3->other);
     $log3 = (array) $log3;
     $data = $event2->get_data();
     $data['origin'] = 'cli';
     $data['ip'] = null;
     $data['realuserid'] = 2;
     $this->assertEquals($data, $log3);
     // Test reading.
     $this->assertSame(3, $store->get_events_select_count('', array()));
     $events = $store->get_events_select('', array(), 'timecreated ASC', 0, 0);
     // Is actually sorted by "timecreated ASC, id ASC".
     $this->assertCount(3, $events);
     $resev1 = array_shift($events);
     array_shift($events);
     $resev2 = array_shift($events);
     $this->assertEquals($event1->get_data(), $resev1->get_data());
     $this->assertEquals($event2->get_data(), $resev2->get_data());
     // Test buffering.
     set_config('buffersize', 3, 'logstore_database');
     $manager = get_log_manager(true);
     $stores = $manager->get_readers();
     /** @var \logstore_database\log\store $store */
     $store = $stores['logstore_database'];
     $DB->delete_records('logstore_standard_log');
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $store->flush();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(5, $DB->count_records('logstore_standard_log'));
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(8, $DB->count_records('logstore_standard_log'));
     // Test guest logging setting.
     set_config('logguests', 0, 'logstore_database');
     set_config('buffersize', 0, 'logstore_database');
     get_log_manager(true);
     $DB->delete_records('logstore_standard_log');
     get_log_manager(true);
     $this->setUser(null);
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $this->setGuestUser();
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(0, $DB->count_records('logstore_standard_log'));
     $this->setUser($user1);
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(1, $DB->count_records('logstore_standard_log'));
     $this->setUser($user2);
     \logstore_database\event\unittest_executed::create(array('context' => context_module::instance($module1->cmid), 'other' => array('sample' => 5, 'xx' => 10)))->trigger();
     $this->assertEquals(2, $DB->count_records('logstore_standard_log'));
     set_config('enabled_stores', '', 'tool_log');
     get_log_manager(true);
 }
Beispiel #7
0
$course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST);
// User must be logged in.
$systemcontext = context_system::instance();
$coursecontext = context_course::instance($course->id);
require_login();
if (has_capability('moodle/user:loginas', $systemcontext)) {
    if (is_siteadmin($userid)) {
        print_error('nologinas');
    }
    $context = $systemcontext;
    $PAGE->set_context($context);
} else {
    require_login($course);
    require_capability('moodle/user:loginas', $coursecontext);
    if (is_siteadmin($userid)) {
        print_error('nologinas');
    }
    if (!is_enrolled($coursecontext, $userid)) {
        print_error('usernotincourse');
    }
    $context = $coursecontext;
}
// Login as this user and return to course home page.
\core\session\manager::loginas($userid, $context);
$newfullname = fullname($USER, true);
$strloginas = get_string('loginas');
$strloggedinas = get_string('loggedinas', '', $newfullname);
$PAGE->set_title($strloggedinas);
$PAGE->set_heading($course->fullname);
$PAGE->navbar->add($strloggedinas);
notice($strloggedinas, "{$CFG->wwwroot}/course/view.php?id={$course->id}");
            // If the user is not enrolled, a later check will take care of things.
        }
    }
    // Aditionally, if we are switching from 'instructor' view (i.e., not in 'firstuse' mode), switch user.
    if ($viewrole == 'instructor') {
        if (is_siteadmin($demostudentid)) {
            // This should never happen.  Haven't seen it happen yet.
            print_error('nologinas');
        }
        if (!is_enrolled($coursecontext, $demostudentid)) {
            // This should never happen.  Haven't seen it happen yet.
            print_error('usernotincourse');
        }
        // Switch role using builtin loginas functionality.
        $syscontext = context_system::instance();
        \core\session\manager::loginas($demostudentid, $syscontext);
    }
} else {
    // You were on the DemoStudent view.  You're switching back to instructor.
    if (\core\session\manager::is_loggedinas()) {
        // Later, we would like to return to the session before we switched roles without requiring login,
        // iff we can ensure that it's not a security hole.
        require_logout();
        redirect(new moodle_url($url, array('redirect' => 1)));
    } else {
        // If the demouser somehow manages to login without using the DemoStudent block, make them log out.
        // This should not typically happen.  DemoStudent should always be 'loginas'ed.
        // You can test this by:
        // - disabling pasword clobbering of the demostudent user
        // - logging in manually
        // - viewing course