function LoginCheck($uid) { $_course = api_get_course_info(); $uid = (int) $uid; $online_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_ONLINE); if (!empty($uid)) { $user_ip = ''; if (!empty($_SERVER['REMOTE_ADDR'])) { $user_ip = Database::escape_string(api_get_real_ip()); } $login_date = api_get_utc_datetime(); $access_url_id = 1; if (api_get_multiple_access_url() && api_get_current_access_url_id() != -1) { $access_url_id = api_get_current_access_url_id(); } $session_id = api_get_session_id(); // if the $_course array exists this means we are in a course and we have to store this in the who's online table also // to have the x users in this course feature working if (is_array($_course) && count($_course) > 0 && !empty($_course['id'])) { $query = "REPLACE INTO " . $online_table . " (login_id,login_user_id,login_date,user_ip, c_id, session_id, access_url_id)\n VALUES ({$uid},{$uid},'{$login_date}','{$user_ip}', '" . $_course['real_id'] . "' , '{$session_id}' , '{$access_url_id}' )"; } else { $query = "REPLACE INTO " . $online_table . " (login_id,login_user_id,login_date,user_ip, c_id, session_id, access_url_id)\n VALUES ({$uid},{$uid},'{$login_date}','{$user_ip}', 0, '{$session_id}', '{$access_url_id}')"; } Database::query($query); } }
/** * @author Sebastien Piraux <*****@*****.**> old code * @author Julio Montoya 2013 * @desc Record information for login event when an user identifies himself with username & password */ function event_login(User $user) { $userId = $user->getUserId(); $TABLETRACK_LOGIN = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); $reallyNow = api_get_utc_datetime(); $sql = "INSERT INTO " . $TABLETRACK_LOGIN . " (login_user_id, login_ip, login_date, logout_date) VALUES\n ('" . $userId . "',\n '" . Database::escape_string(api_get_real_ip()) . "',\n '" . $reallyNow . "',\n '" . $reallyNow . "'\n )"; Database::query($sql); $roles = $user->getRoles(); // auto subscribe foreach ($roles as $role) { $userStatusParsed = 'student'; switch ($role) { case 'ROLE_SESSION_MANAGER': $userStatusParsed = 'sessionadmin'; break; case 'ROLE_TEACHER': $userStatusParsed = 'teacher'; break; case 'ROLE_RRHH': $userStatusParsed = 'DRH'; break; } $autoSubscribe = api_get_setting($userStatusParsed . '_autosubscribe'); if ($autoSubscribe) { $autoSubscribe = explode('|', $autoSubscribe); foreach ($autoSubscribe as $code) { if (CourseManager::course_exists($code)) { CourseManager::subscribe_user($userId, $code); } } } } }
/** * @author Sebastien Piraux <*****@*****.**> * @desc Record information for login event * (when an user identifies himself with username & password) */ function event_login() { global $TABLETRACK_LOGIN; global $_user; // @todo use api_get_user_info(); //$userInfo = api_get_user_info(); $userInfo = $_user; if (empty($userInfo)) { return false; } $userId = api_get_user_id(); $reallyNow = api_get_utc_datetime(); $sql = "INSERT INTO " . $TABLETRACK_LOGIN . " (login_user_id, login_ip, login_date, logout_date) VALUES\n ('" . $userId . "',\n '" . Database::escape_string(api_get_real_ip()) . "',\n '" . $reallyNow . "',\n '" . $reallyNow . "'\n )"; Database::query($sql); // Auto subscribe $user_status = $userInfo['status'] == SESSIONADMIN ? 'sessionadmin' : $userInfo['status'] == COURSEMANAGER ? 'teacher' : $userInfo['status'] == DRH ? 'DRH' : 'student'; $autoSubscribe = api_get_setting($user_status . '_autosubscribe'); if ($autoSubscribe) { $autoSubscribe = explode('|', $autoSubscribe); foreach ($autoSubscribe as $code) { if (CourseManager::course_exists($code)) { CourseManager::subscribe_user($userId, $code); } } } }
/** * Saves a test attempt * * @param int clock_expired_time * @param int int lp id * @param int int lp item id * @param int int lp item_view id * @param float $weight * @param array question list */ public function save_stat_track_exercise_info($clock_expired_time = 0, $safe_lp_id = 0, $safe_lp_item_id = 0, $safe_lp_item_view_id = 0, $questionList = array(), $weight = 0) { $track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES); $safe_lp_id = intval($safe_lp_id); $safe_lp_item_id = intval($safe_lp_item_id); $safe_lp_item_view_id = intval($safe_lp_item_view_id); if (empty($safe_lp_id)) { $safe_lp_id = 0; } if (empty($safe_lp_item_id)) { $safe_lp_item_id = 0; } if (empty($clock_expired_time)) { $clock_expired_time = 0; } $questionList = array_map('intval', $questionList); $params = array('exe_exo_id' => $this->id, 'exe_user_id' => api_get_user_id(), 'c_id' => api_get_course_int_id(), 'status' => 'incomplete', 'session_id' => api_get_session_id(), 'data_tracking' => implode(',', $questionList), 'start_date' => api_get_utc_datetime(), 'orig_lp_id' => $safe_lp_id, 'orig_lp_item_id' => $safe_lp_item_id, 'orig_lp_item_view_id' => $safe_lp_item_view_id, 'exe_weighting' => $weight, 'user_ip' => api_get_real_ip()); if ($this->expired_time != 0) { $params['expired_time_control'] = $clock_expired_time; } $id = Database::insert($track_exercises, $params); return $id; }
/** * Update the TRACK_E_EXERCICES exercises * * @param int exeid id of the attempt * @param int exo_id exercise id * @param mixed result score * @param int weighting ( higher score ) * @param int duration ( duration of the attempt in seconds ) * @param int session_id * @param int learnpath_id (id of the learnpath) * @param int learnpath_item_id (id of the learnpath_item) * * @author Sebastien Piraux <*****@*****.**> * @author Julio Montoya Armas <*****@*****.**> Reworked 2010 * @desc Record result of user when an exercice was done */ public static function update_event_exercice($exeid, $exo_id, $score, $weighting, $session_id, $learnpath_id = 0, $learnpath_item_id = 0, $learnpath_item_view_id = 0, $duration = 0, $question_list = array(), $status = '', $remind_list = array(), $end_date = null) { global $debug; if ($debug) { error_log('Called to update_event_exercice'); } if ($debug) { error_log('duration:' . $duration); } if ($exeid != '') { /* * Code commented due BT#8423 do not change the score to 0. * * Validation in case of fraud with actived control time if (!ExerciseLib::exercise_time_control_is_valid($exo_id, $learnpath_id, $learnpath_item_id)) { $score = 0; } */ if (!isset($status) || empty($status)) { $status = ''; } else { $status = Database::escape_string($status); } $TABLETRACK_EXERCICES = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES); if (!empty($question_list)) { $question_list = array_map('intval', $question_list); } if (!empty($remind_list)) { $remind_list = array_map('intval', $remind_list); $remind_list = array_filter($remind_list); $remind_list = implode(",", $remind_list); } else { $remind_list = ''; } if (empty($end_date)) { $end_date = api_get_utc_datetime(); } $sql = "UPDATE {$TABLETRACK_EXERCICES} SET\n \t\t exe_exo_id \t\t\t= '" . Database::escape_string($exo_id) . "',\n \t\t exe_result\t\t\t= '" . Database::escape_string($score) . "',\n \t\t exe_weighting \t\t= '" . Database::escape_string($weighting) . "',\n \t\t session_id\t\t\t= '" . Database::escape_string($session_id) . "',\n \t\t orig_lp_id \t\t\t= '" . Database::escape_string($learnpath_id) . "',\n \t\t orig_lp_item_id \t\t= '" . Database::escape_string($learnpath_item_id) . "',\n orig_lp_item_view_id = '" . Database::escape_string($learnpath_item_view_id) . "',\n \t\t exe_duration = '" . Database::escape_string($duration) . "',\n \t\t exe_date = '" . $end_date . "',\n \t\t status = '" . $status . "',\n \t\t questions_to_check = '" . $remind_list . "',\n \t\t data_tracking = '" . implode(',', $question_list) . "',\n user_ip = '" . Database::escape_string(api_get_real_ip()) . "'\n \t\t WHERE exe_id = '" . Database::escape_string($exeid) . "'"; $res = Database::query($sql); if ($debug) { error_log('update_event_exercice called'); } if ($debug) { error_log("{$sql}"); } //Deleting control time session track //ExerciseLib::exercise_time_control_delete($exo_id); return $res; } else { return false; } }
/** * User logs in for the first time to a course * @param int $courseId * @param int $user_id * @param int $session_id */ public static function event_course_login($courseId, $user_id, $session_id) { $course_tracking_table = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS); $time = api_get_utc_datetime(); $courseId = intval($courseId); $user_id = intval($user_id); $session_id = intval($session_id); $ip = api_get_real_ip(); $sql = "INSERT INTO {$course_tracking_table}(c_id, user_ip, user_id, login_course_date, logout_course_date, counter, session_id)\n VALUES('" . $courseId . "', '" . $ip . "', '" . $user_id . "', '{$time}', '{$time}', '1', '" . $session_id . "')"; Database::query($sql); // Course catalog stats modifications see #4191 CourseManager::update_course_ranking(null, null, null, null, true, false); }
$session_lifetime = 3600; // 1 hour $course_code = $_course['sysCode']; $time = api_get_utc_datetime(); if (isset($_user['user_id']) && !empty($_user['user_id'])) { //We select the last record for the current course in the course tracking table //But only if the login date is < than now + max_life_time $sql = "SELECT course_access_id\n FROM {$course_tracking_table}\n WHERE\n user_id = " . intval($_user['user_id']) . " AND\n c_id = " . $_course['real_id'] . " AND\n session_id = " . api_get_session_id() . " AND\n login_course_date > '{$time}' - INTERVAL {$session_lifetime} SECOND\n ORDER BY login_course_date DESC LIMIT 0,1"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $i_course_access_id = Database::result($result, 0, 0); //We update the course tracking table $sql = "UPDATE {$course_tracking_table} SET logout_course_date = '{$time}', counter = counter+1\n WHERE course_access_id = " . intval($i_course_access_id) . " AND session_id = " . api_get_session_id(); Database::query($sql); } else { $ip = api_get_real_ip(); $sql = "INSERT INTO {$course_tracking_table} (c_id, user_ip, user_id, login_course_date, logout_course_date, counter, session_id)" . "VALUES('" . $_course['real_id'] . "', '" . $ip . "', '" . $_user['user_id'] . "', '{$time}', '{$time}', '1','" . api_get_session_id() . "')"; Database::query($sql); } } } } } } /* COURSE / USER REL. INIT */ $session_id = api_get_session_id(); $user_id = isset($_user['user_id']) ? $_user['user_id'] : null; //Course permissions //if this code is uncommented in some platforms the is_courseAdmin is not correctly saved see BT#5789 /*$is_courseAdmin = false; //course teacher $is_courseTutor = false; //course teacher - some rights