/** * Call to complete the user login process after authenticate_user_login() * has succeeded. It will setup the $USER variable and other required bits * and pieces. * * NOTE: * - It will NOT log anything -- up to the caller to decide what to log. * - this function does not set any cookies any more! * * @param stdClass $user * @return stdClass A {@link $USER} object - BC only, do not use */ function complete_user_login($user) { global $CFG, $USER, $SESSION; \core\session\manager::login_user($user); // Reload preferences from DB. unset($USER->preference); check_user_preferences_loaded($USER); // Update login times. update_user_login_times(); // Extra session prefs init. set_login_session_preferences(); // Trigger login event. $event = \core\event\user_loggedin::create(array('userid' => $USER->id, 'objectid' => $USER->id, 'other' => array('username' => $USER->username))); $event->trigger(); if (isguestuser()) { // No need to continue when user is THE guest. return $USER; } if (CLI_SCRIPT) { // We can redirect to password change URL only in browser. return $USER; } // Select password change url. $userauth = get_auth_plugin($USER->auth); // Check whether the user should be changing password. if (get_user_preferences('auth_forcepasswordchange', false)) { if ($userauth->can_change_password()) { if ($changeurl = $userauth->change_password_url()) { redirect($changeurl); } else { $SESSION->wantsurl = core_login_get_return_url(); redirect($CFG->httpswwwroot . '/login/change_password.php'); } } else { print_error('nopasswordchangeforced', 'auth'); } } return $USER; }
public function test_user_loggedin_event_exceptions() { try { $event = \core\event\user_loggedin::create(array('objectid' => 1)); $this->fail('\\core\\event\\user_loggedin requires other[\'username\']'); } catch (Exception $e) { $this->assertInstanceOf('coding_exception', $e); } try { $event = \core\event\user_loggedin::create(array('other' => array('username' => 'test'))); $this->fail('\\core\\event\\user_loggedin requires objectid'); } catch (Exception $e) { $this->assertInstanceOf('coding_exception', $e); } }
/** * Test the temporary table creation and deletion. * * @depends test_statslib_temp_table_create_and_drop */ public function test_statslib_temp_table_fill() { global $CFG, $DB, $USER; $dataset = $this->load_xml_data_file(__DIR__ . "/fixtures/statslib-test09.xml"); $this->prepare_db($dataset[0], array('log')); $start = self::DAY - get_timezone_offset($CFG->timezone); $end = $start + 24 * 3600; stats_temp_table_create(); stats_temp_table_fill($start, $end); $this->assertEquals(1, $DB->count_records('temp_log1')); $this->assertEquals(1, $DB->count_records('temp_log2')); stats_temp_table_drop(); // New log stores. $this->preventResetByRollback(); stats_temp_table_create(); $course = $this->getDataGenerator()->create_course(); $context = context_course::instance($course->id); $fcontext = context_course::instance(SITEID); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $this->assertFileExists("{$CFG->dirroot}/{$CFG->admin}/tool/log/store/standard/version.php"); set_config('enabled_stores', 'logstore_standard', 'tool_log'); set_config('buffersize', 0, 'logstore_standard'); set_config('logguests', 1, 'logstore_standard'); get_log_manager(true); $DB->delete_records('logstore_standard_log'); \core_tests\event\create_executed::create(array('context' => $fcontext, 'courseid' => SITEID))->trigger(); \core_tests\event\read_executed::create(array('context' => $context, 'courseid' => $course->id))->trigger(); \core_tests\event\update_executed::create(array('context' => context_system::instance()))->trigger(); \core_tests\event\delete_executed::create(array('context' => context_system::instance()))->trigger(); \core\event\user_loggedin::create(array('userid' => $USER->id, 'objectid' => $USER->id, 'other' => array('username' => $USER->username)))->trigger(); $DB->set_field('logstore_standard_log', 'timecreated', 10); $this->assertEquals(5, $DB->count_records('logstore_standard_log')); \core_tests\event\delete_executed::create(array('context' => context_system::instance()))->trigger(); \core_tests\event\delete_executed::create(array('context' => context_system::instance()))->trigger(); // Fake the origin of events. $DB->set_field('logstore_standard_log', 'origin', 'web', array()); $this->assertEquals(7, $DB->count_records('logstore_standard_log')); stats_temp_table_fill(9, 11); $logs1 = $DB->get_records('temp_log1'); $logs2 = $DB->get_records('temp_log2'); $this->assertCount(5, $logs1); $this->assertCount(5, $logs2); // The order of records in the temp tables is not guaranteed... $viewcount = 0; $updatecount = 0; $logincount = 0; foreach ($logs1 as $log) { if ($log->course == $course->id) { $this->assertEquals('view', $log->action); $viewcount++; } else { $this->assertTrue(in_array($log->action, array('update', 'login'))); if ($log->action === 'update') { $updatecount++; } else { $logincount++; } $this->assertEquals(SITEID, $log->course); } $this->assertEquals($user->id, $log->userid); } $this->assertEquals(1, $viewcount); $this->assertEquals(3, $updatecount); $this->assertEquals(1, $logincount); set_config('enabled_stores', '', 'tool_log'); get_log_manager(true); stats_temp_table_drop(); }
if ($custom_hide_page_header = $context->info['custom_hide_page_header']) { $tool->hidepageheader = 1; } if ($custom_hide_page_footer = $context->info['custom_hide_page_footer']) { $tool->hidepagefooter = 1; } if ($custom_custom_css = $context->info['custom_custom_css']) { $tool->customcss = $custom_custom_css; } if ($custom_show_blocks = $context->info['custom_show_blocks']) { $tool->showblocks = $custom_show_blocks; } $SESSION->ltiprovider = $tool; complete_user_login($user); // Trigger login event. $event = \core\event\user_loggedin::create(array('userid' => $user->id, 'objectid' => $user->id, 'other' => array('username' => $user->username))); $event->trigger(); // Moodle 2.2 and onwards. if (isset($CFG->allowframembedding) and !$CFG->allowframembedding) { echo '<html> <head> </head> <body onload="window.open(\'' . $urltogo . '\', \'_blank\');"></body>'; echo get_string('newpopupnotice', 'local_ltiprovider'); $stropentool = get_string('opentool', 'local_ltiprovider'); echo "<p><a href=\"{$urltogo}\" target=\"_blank\">{$stropentool}</a></p>"; echo "<p>" . get_string('allowframembedding', 'local_ltiprovider') . "</p>"; echo '</html>'; } else { redirect($urltogo); }