//Autowidth $extra_params['autowidth'] = 'true'; //height auto $extra_params['height'] = 'auto'; //With this function we can add actions to the jgrid (edit, delete, etc) /* $action_links = 'function action_formatter(cellvalue, options, rowObject) { return \'<a href="?action=edit&id=\'+options.rowId+\'">'.Display::return_icon('edit.png',get_lang('Edit'),'',ICON_SIZE_SMALL).'</a>'. ' <a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="?sec_token='.$token.'&action=copy&id=\'+options.rowId+\'">'.Display::return_icon('copy.png',get_lang('Copy'),'',ICON_SIZE_SMALL).'</a>'. ' <a onclick="javascript:if(!confirm('."\'".addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES))."\'".')) return false;" href="?sec_token='.$token.'&action=delete&id=\'+options.rowId+\'">'.Display::return_icon('delete.png',get_lang('Delete'),'',ICON_SIZE_SMALL).'</a>'. '\'; }';*/ $action_links = null; $room = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'exam_room'); $room = $room['exam_room']; $schedule = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'exam_schedule'); $schedule = $schedule['exam_schedule']; echo Display::page_subheader(get_lang('UserList') . ": " . $room . " - " . $schedule); ?> <script> $(function() { <?php echo Display::grid_js('user_list', $url, $columns, $column_model, $extra_params, array(), $action_links, true); ?> jQuery("#user_list").jqGrid("navGrid","#user_list_pager",{view:false, edit:false, add:false, del:false, search:false, excel:true}); jQuery("#user_list").jqGrid("navButtonAdd","#user_list_pager",{ caption:"", onClickButton : function () { jQuery("#user_list").jqGrid("excelExport",{"url": "<? echo $url?>&export_format=xls"}); } });
/** * Returns the timezone to be converted to/from, based on user or admin preferences * * @return string The timezone chosen */ function _api_get_timezone() { // First, get the default timezone of the server $to_timezone = date_default_timezone_get(); // Second, see if a timezone has been chosen for the platform $timezone_value = api_get_setting('timezone_value', 'timezones'); if ($timezone_value != null) { $to_timezone = $timezone_value; } // If allowed by the administrator $use_users_timezone = api_get_setting('use_users_timezone', 'timezones'); if ($use_users_timezone == 'true') { $userId = api_get_user_id(); // Get the timezone based on user preference, if it exists $timezone_user = UserManager::get_extra_user_data_by_field($userId, 'timezone'); if (isset($timezone_user['timezone']) && $timezone_user['timezone'] != null) { $to_timezone = $timezone_user['timezone']; } } return $to_timezone; }
/** * Get user chat status * @return int 0 if disconnected, 1 if connected */ function get_user_status() { $status = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'user_chat_status', false, true); return $status['user_chat_status']; }
api_protect_course_script(true); $this_section = SECTION_COURSES; if (api_is_allowed_to_edit()) { $can_add_events = 1; } if (!empty($group_id)) { if ($is_group_tutor) { $can_add_events = 1; } } break; case 'personal': if (api_is_anonymous(null, true)) { api_not_allowed(true); } $extra_field_data = UserManager::get_extra_user_data_by_field(api_get_user_id(), 'google_calendar_url'); if (!empty($extra_field_data) && isset($extra_field_data['google_calendar_url']) && !empty($extra_field_data['google_calendar_url'])) { $tpl->addGlobal('use_google_calendar', 1); $tpl->addGlobal('google_calendar_url', $extra_field_data['google_calendar_url']); } $this_section = SECTION_MYAGENDA; if (!api_is_anonymous()) { $can_add_events = 1; } break; } //Setting translations $day_short = api_get_week_days_short(); $days = api_get_week_days_long(); $months = api_get_months_long(); $months_short = api_get_months_short();
/** * Return user info array of all users registered in a course * This only returns the users that are registered in this actual course, not linked courses. * @param string $course_code * @param int $session_id * @param string $limit * @param string $order_by the field to order the users by. * Valid values are 'lastname', 'firstname', 'username', 'email', 'official_code' OR a part of a SQL statement * that starts with ORDER BY ... * @param null $filter_by_status if using the session_id: 0 or 2 (student, coach), * if using session_id = 0 STUDENT or COURSEMANAGER * @param null $return_count * @param bool $add_reports * @param bool $resumed_report * @param array $extra_field * @param array $courseCodeList * @param array $userIdList * @param string $filterByActive * @param array $sessionIdList * @return array|int */ public static function get_user_list_from_course_code($course_code = null, $session_id = 0, $limit = null, $order_by = null, $filter_by_status = null, $return_count = null, $add_reports = false, $resumed_report = false, $extra_field = array(), $courseCodeList = array(), $userIdList = array(), $filterByActive = null, $sessionIdList = array()) { $course_table = Database::get_main_table(TABLE_MAIN_COURSE); $sessionTable = Database::get_main_table(TABLE_MAIN_SESSION); $session_id = intval($session_id); $course_code = Database::escape_string($course_code); $courseInfo = api_get_course_info($course_code); $courseId = 0; if (!empty($courseInfo)) { $courseId = $courseInfo['real_id']; } $where = array(); if (empty($order_by)) { $order_by = 'user.lastname, user.firstname'; if (api_is_western_name_order()) { $order_by = 'user.firstname, user.lastname'; } } // if the $order_by does not contain 'ORDER BY' // we have to check if it is a valid field that can be sorted on if (!strstr($order_by, 'ORDER BY')) { if (!empty($order_by)) { $order_by = 'ORDER BY ' . $order_by; } else { $order_by = ''; } } $filter_by_status_condition = null; if (!empty($session_id) || !empty($sessionIdList)) { $sql = 'SELECT DISTINCT user.user_id, user.email, session_course_user.status as status_session, session_id, user.*, course.*, session.name as session_name '; if ($return_count) { $sql = " SELECT COUNT(user.user_id) as count"; } $sessionCondition = " session_course_user.session_id = {$session_id}"; if (!empty($sessionIdList)) { $sessionIdListTostring = implode("','", array_map('intval', $sessionIdList)); $sessionCondition = " session_course_user.session_id IN ('{$sessionIdListTostring}') "; } $courseCondition = " course.id = {$courseId}"; if (!empty($courseCodeList)) { $courseCodeListForSession = array_map(array('Database', 'escape_string'), $courseCodeList); $courseCodeListForSession = implode('","', $courseCodeListForSession); $courseCondition = ' course.code IN ("' . $courseCodeListForSession . '") '; } $sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '; $sql .= " LEFT JOIN " . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . " as session_course_user\n ON\n user.user_id = session_course_user.user_id AND\n {$sessionCondition}\n INNER JOIN {$course_table} course ON session_course_user.c_id = course.id AND\n {$courseCondition}\n INNER JOIN {$sessionTable} session ON session_course_user.session_id = session.id\n "; $where[] = ' session_course_user.c_id IS NOT NULL '; // 2 = coach // 0 = student if (isset($filter_by_status)) { $filter_by_status = intval($filter_by_status); $filter_by_status_condition = " session_course_user.status = {$filter_by_status} AND "; } } else { if ($return_count) { $sql = " SELECT COUNT(*) as count"; if ($resumed_report) { //$sql = " SELECT count(field_id) "; } } else { if (empty($course_code)) { $sql = 'SELECT DISTINCT course.title, course.code, course_rel_user.status as status_rel, user.user_id, user.email, course_rel_user.is_tutor, user.* '; } else { $sql = 'SELECT DISTINCT course_rel_user.status as status_rel, user.user_id, user.email, course_rel_user.is_tutor, user.* '; } } $sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '; $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_COURSE_USER) . ' as course_rel_user ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type <> ' . COURSE_RELATION_TYPE_RRHH . ' '; $sql .= " INNER JOIN {$course_table} course ON course_rel_user.c_id = course.id "; if (!empty($course_code)) { $sql .= ' AND course_rel_user.c_id="' . $courseId . '"'; } $where[] = ' course_rel_user.c_id IS NOT NULL '; if (isset($filter_by_status) && is_numeric($filter_by_status)) { $filter_by_status = intval($filter_by_status); $filter_by_status_condition = " course_rel_user.status = {$filter_by_status} AND "; } } $multiple_access_url = api_get_multiple_access_url(); if ($multiple_access_url) { $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER) . ' au ON (au.user_id = user.user_id) '; } $extraFieldWasAdded = false; if ($return_count && $resumed_report) { foreach ($extra_field as $extraField) { $extraFieldInfo = UserManager::get_extra_field_information_by_name($extraField); if (!empty($extraFieldInfo)) { $fieldValuesTable = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); $sql .= ' LEFT JOIN ' . $fieldValuesTable . ' as ufv ON ( user.user_id = ufv.item_id AND (field_id = ' . $extraFieldInfo['id'] . ' OR field_id IS NULL) )'; $extraFieldWasAdded = true; } } } $sql .= ' WHERE ' . $filter_by_status_condition . ' ' . implode(' OR ', $where); if ($multiple_access_url) { $current_access_url_id = api_get_current_access_url_id(); $sql .= " AND (access_url_id = {$current_access_url_id} ) "; } if ($return_count && $resumed_report && $extraFieldWasAdded) { $sql .= ' AND field_id IS NOT NULL GROUP BY value '; } if (!empty($courseCodeList)) { $courseCodeList = array_map(array('Database', 'escape_string'), $courseCodeList); $courseCodeList = implode('","', $courseCodeList); if (empty($sessionIdList)) { $sql .= ' AND course.code IN ("' . $courseCodeList . '")'; } } if (!empty($userIdList)) { $userIdList = array_map('intval', $userIdList); $userIdList = implode('","', $userIdList); $sql .= ' AND user.user_id IN ("' . $userIdList . '")'; } if (isset($filterByActive)) { $filterByActive = intval($filterByActive); $sql .= ' AND user.active = ' . $filterByActive; } $sql .= ' ' . $order_by . ' ' . $limit; $rs = Database::query($sql); $users = array(); $extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true); $counter = 1; $count_rows = Database::num_rows($rs); if ($return_count && $resumed_report) { return $count_rows; } $table_user_field_value = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); $tableExtraField = Database::get_main_table(TABLE_EXTRA_FIELD); if ($count_rows) { while ($user = Database::fetch_array($rs)) { if ($return_count) { return $user['count']; } $report_info = array(); $user_info = $user; $user_info['status'] = $user['status']; if (isset($user['is_tutor'])) { $user_info['is_tutor'] = $user['is_tutor']; } if (!empty($session_id)) { $user_info['status_session'] = $user['status_session']; } $sessionId = isset($user['session_id']) ? $user['session_id'] : 0; $course_code = isset($user['code']) ? $user['code'] : null; if ($add_reports) { if ($resumed_report) { $extra = array(); if (!empty($extra_fields)) { foreach ($extra_fields as $extra) { if (in_array($extra['1'], $extra_field)) { $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']); break; } } } $row_key = '-1'; $name = '-'; if (!empty($extra)) { if (!empty($user_data[$extra['1']])) { $row_key = $user_data[$extra['1']]; $name = $user_data[$extra['1']]; $users[$row_key]['extra_' . $extra['1']] = $name; } } $users[$row_key]['training_hours'] += Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, $sessionId); $users[$row_key]['count_users'] += $counter; $registered_users_with_extra_field = 0; if (!empty($name) && $name != '-') { $extraFieldType = EntityExtraField::COURSE_FIELD_TYPE; $name = Database::escape_string($name); $sql = "SELECT count(v.item_id) as count\n FROM {$table_user_field_value} v INNER JOIN\n {$tableExtraField} f\n ON (f.id = v.field_id)\n WHERE value = '{$name}' AND extra_field_type = {$extraFieldType}"; $result_count = Database::query($sql); if (Database::num_rows($result_count)) { $row_count = Database::fetch_array($result_count); $registered_users_with_extra_field = $row_count['count']; } } $users[$row_key]['count_users_registered'] = $registered_users_with_extra_field; $users[$row_key]['average_hours_per_user'] = $users[$row_key]['training_hours'] / $users[$row_key]['count_users']; $category = Category::load(null, null, $course_code, null, null, $sessionId); if (!isset($users[$row_key]['count_certificates'])) { $users[$row_key]['count_certificates'] = 0; } if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { $users[$row_key]['count_certificates']++; } foreach ($extra_fields as $extra) { if ($extra['1'] == 'ruc') { continue; } if (!isset($users[$row_key][$extra['1']])) { $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']); if (!empty($user_data[$extra['1']])) { $users[$row_key][$extra['1']] = $user_data[$extra['1']]; } } } } else { $sessionName = !empty($sessionId) ? ' - ' . $user['session_name'] : ''; $report_info['course'] = $user['title'] . $sessionName; $report_info['user'] = api_get_person_name($user['firstname'], $user['lastname']); $report_info['email'] = $user['email']; $report_info['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, $sessionId)); $category = Category::load(null, null, $course_code, null, null, $sessionId); $report_info['certificate'] = Display::label(get_lang('No')); if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { $report_info['certificate'] = Display::label(get_lang('Yes'), 'success'); } $progress = intval(Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), $sessionId)); $report_info['progress_100'] = $progress == 100 ? Display::label(get_lang('Yes'), 'success') : Display::label(get_lang('No')); $report_info['progress'] = $progress . "%"; foreach ($extra_fields as $extra) { $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']); $report_info[$extra['1']] = $user_data[$extra['1']]; } $report_info['user_id'] = $user['user_id']; $users[] = $report_info; } } else { $users[$user['user_id']] = $user_info; } } } return $users; }
/** * Returns the timezone to be converted to/from, based on user or admin preferences * * @return string The timezone chosen */ function _api_get_timezone() { $timezone = api_get_setting('platform.timezone'); // If allowed by the administrator $use_users_timezone = api_get_setting('profile.use_users_timezone'); if ($use_users_timezone == 'true') { $userId = api_get_user_id(); // Get the timezone based on user preference, if it exists $timezone_user = UserManager::get_extra_user_data_by_field($userId, 'timezone'); if (isset($timezone_user['timezone']) && $timezone_user['timezone'] != null) { $timezone = $timezone_user['timezone']; } } return $timezone; }
/** * This function get user block data (block id with its number of column) from extra user data * @param int User id * @return array data (block_id,column) */ public static function get_user_block_data($user_id) { $user_id = intval($user_id); $field_variable = 'dashboard'; $extra_user_data = UserManager::get_extra_user_data_by_field($user_id, $field_variable); $extra_user_data = explode(';', $extra_user_data[$field_variable]); $data = array(); foreach ($extra_user_data as $extra) { $split_extra = explode(':', $extra); if (!empty($split_extra)) { $block_id = $split_extra[0]; $column = isset($split_extra[1]) ? $split_extra[1] : null; $data[$block_id] = array('block_id' => $block_id, 'column' => $column); } } return $data; }
} else { echo get_lang('NoOfficialCode'); } ?> </td> </tr> <tr> <td><?php echo get_lang('OnLine') . ' : ' . $online; ?> </td> </tr> <?php // Display timezone if the user selected one and if the admin allows the use of user's timezone $timezone = null; $timezone_user = UserManager::get_extra_user_data_by_field($user_info['user_id'], 'timezone'); $use_users_timezone = api_get_setting('profile.use_users_timezone'); if (isset($timezone_user['timezone']) && !empty($timezone_user['timezone']) && $use_users_timezone == 'true') { $timezone = $timezone_user['timezone']; } if ($timezone !== null) { ?> <tr> <td> <?php echo get_lang('Timezone') . ' : ' . $timezone; ?> </td> </tr> <?php } ?>
/** * @param string $username * @return bool */ function api_get_user_blocked_by_captcha($username) { $userInfo = api_get_user_info_from_username($username); if (empty($userInfo)) { return false; } $data = UserManager::get_extra_user_data_by_field($userInfo['user_id'], 'captcha_blocked_until_date'); if (isset($data) && isset($data['captcha_blocked_until_date'])) { return $data['captcha_blocked_until_date']; } return false; }
/** * Get user's feeds * @param int User ID * @param int Limit of posts per feed * @return string HTML section with all feeds included * @author Yannick Warnier * @since Dokeos 1.8.6.1 */ public static function get_user_feeds($user, $limit = 5) { $feed = UserManager::get_extra_user_data_by_field($user, 'rssfeeds'); if (empty($feed)) { return ''; } $feeds = explode(';', $feed['rssfeeds']); if (count($feeds) == 0) { return ''; } $res = ''; foreach ($feeds as $url) { if (empty($url)) { continue; } $rss = Zend\Feed\Reader\Reader::import($url); $i = 1; if (!empty($rss)) { $icon_rss = ''; if (!empty($feed)) { $icon_rss = Display::url(Display::return_icon('rss.png', '', array(), 32), Security::remove_XSS($feed['rssfeeds']), array('target' => '_blank')); } $res .= '<h2>' . $rss->getTitle() . '' . $icon_rss . '</h2>'; $res .= '<div class="social-rss-channel-items">'; /** @var Zend\Feed\Reader\Extension\Atom\Entry $item */ foreach ($rss as $item) { if ($limit >= 0 and $i > $limit) { break; } $res .= '<h3><a href="' . $item->getTitle() . '">' . $item->getTitle() . '</a></h3>'; $res .= '<div class="social-rss-item-date">' . $item->getDateCreated()->format('Y-m-d') . '</div>'; $res .= '<div class="social-rss-item-content">' . $item->getDescription() . '</div><br />'; $i++; } $res .= '</div>'; } } return $res; }
/** * Get user's feeds * @param int User ID * @param int Limit of posts per feed * @return string HTML section with all feeds included * @author Yannick Warnier * @since Dokeos 1.8.6.1 */ public static function get_user_feeds($user, $limit = 5) { if (!function_exists('fetch_rss')) { return ''; } $feed = UserManager::get_extra_user_data_by_field($user, 'rssfeeds'); if (empty($feed)) { return ''; } $feeds = explode(';', $feed['rssfeeds']); if (count($feeds) == 0) { return ''; } $res = ''; foreach ($feeds as $url) { if (empty($url)) { continue; } $rss = @fetch_rss($url); $i = 1; if (!empty($rss->items)) { $icon_rss = ''; if (!empty($feed)) { $icon_rss = Display::url(Display::return_icon('social_rss.png', '', array(), 22), Security::remove_XSS($feed['rssfeeds']), array('target' => '_blank')); } $res .= '<h3 class="title-rss">' . $icon_rss . ' ' . $rss->channel['title'] . '</h3>'; $res .= '<div class="rss-items">'; foreach ($rss->items as $item) { if ($limit >= 0 and $i > $limit) { break; } $res .= '<h4 class="rss-title"><a href="' . $item['link'] . '">' . $item['title'] . '</a></h4>'; $res .= '<div class="rss-date">' . api_get_local_time($item['date_timestamp']) . '</div>'; $res .= '<div class="rss-content"><p>' . $item['description'] . '</p></div>'; $i++; } $res .= '</div>'; } } return $res; }
/** * Manage the user creation, including checking if the user hasn't been * created previously * @param array User data * @param object List of migrated things * @return array User info (from Chamilo DB) */ static function create_user($data, &$omigrate = null) { //error_log('In create_user, receiving '.print_r($data,1)); if (empty($data['uidIdPersona'])) { error_log('User does not have a uidIdPersona'); error_log(print_r($data, 1)); return false; //exit; } $data['uidIdPersona'] = strtoupper($data['uidIdPersona']); $data['status'] = STUDENT; if (isset($data['uidIdEmpleado'])) { $data['status'] = COURSEMANAGER; } if (!isset($data['username']) || empty($data['username'])) { $data['firstname'] = (string) trim($data['firstname']); $data['lastname'] = (string) trim($data['lastname']); if (empty($data['firstname']) && empty($data['lastname'])) { $wanted_user_name = UserManager::purify_username($data['uidIdPersona']); //$wanted_user_name = UserManager::create_unique_username(null, null); } else { $wanted_user_name = UserManager::create_username($data['firstname'], $data['lastname']); } $extra_data = UserManager::get_extra_user_data_by_value('uidIdPersona', $data['uidIdPersona']); if ($extra_data) { $user_info = api_get_user_info($extra_data[0]); //print_r($extra_data); //error_log("User_already_added - {$user_info['user_id']} - {$user_info['username']} - {$user_info['firstname']} - {$user_info['lastname']}"); return $user_info; } if (UserManager::is_username_available($wanted_user_name)) { $data['username'] = $wanted_user_name; error_log("username available {$wanted_user_name}"); } else { //the user already exists? $user_info = UserManager::get_user_info_simple($wanted_user_name); $user_persona = UserManager::get_extra_user_data_by_field($user_info['user_id'], 'uidIdPersona'); if (isset($user_persona['uidIdPersona']) && $data['uidIdPersona'] == $user_persona['uidIdPersona']) { error_log("Skip user already added: {$user_info['username']}"); return $user_info; } else { error_log("Homonym - wanted_username: {$wanted_user_name} - uidIdPersona: {$user_persona['uidIdPersona']} - username: {$user_info['username']}"); //print_r($data); //The user has the same firstname and lastname but it has another uiIdPersona could by an homonym $data['username'] = UserManager::create_unique_username($data['firstname'], $data['lastname']); error_log("homonym username created " . $data['username']); } } if (empty($data['username'])) { //Last chance to have a nice username if (empty($data['firstname']) && empty($data['lastname'])) { $data['username'] = UserManager::create_unique_username(uniqid()); error_log("username empty 1" . $data['username']); } else { $data['username'] = UserManager::create_unique_username($data['firstname'], $data['lastname']); error_log("username empty 2" . $data['username']); } } } else { if (UserManager::is_username_available($data['username'])) { //error_log("username available {$data['username']} "); } else { //the user already exists? $user_info = UserManager::get_user_info_simple($data['username']); $user_persona = UserManager::get_extra_user_data_by_field($user_info['user_id'], 'uidIdPersona'); if (isset($user_persona['uidIdPersona']) && (string) $data['uidIdPersona'] == (string) $user_persona['uidIdPersona']) { //error_log("2 Skip user already added: {$user_info['username']}"); return $user_info; } else { //print_r($user_persona); //error_log("2 homonym - wanted_username: {$data['username']} - uidIdPersona: {$user_persona['uidIdPersona']} - username: {$user_info['username']}"); //print_r($data); //The user has the same firstname and lastname but it has another uiIdPersona could by an homonym $data['username'] = UserManager::create_unique_username($data['firstname'], $data['lastname']); //error_log("2 homonym username created ". $data['username']); } } } if (empty($data['username'])) { error_log('No Username provided'); error_log(print_r($data, 1)); return false; //exit; } $id_persona = $data['uidIdPersona']; unset($data['uidIdPersona']); unset($data['uidIdAlumno']); unset($data['uidIdEmpleado']); $data['encrypt_method'] = 'sha1'; global $api_failureList; $api_failureList = array(); //error_log(print_r($data, 1)); $user_info = UserManager::add($data); if (!$user_info) { error_log('User ' . $id_persona . ' could not be inserted (maybe duplicate?)'); } else { //error_log('User '.$id_persona.' was created as user '.$user_info['user_id']); } if (is_array($omigrate) && isset($omigrate) && $omigrate['boost_users']) { $omigrate['users'][$id_persona] = $user_info['user_id']; } UserManager::update_extra_field_value($user_info['user_id'], 'uidIdPersona', $id_persona); return $user_info; }
/** * Return user info array of all users registered in the specified course * This only returns the users that are registered in this actual course, not linked courses. * * @param string $course_code the code of the course * @param boolean $with_session determines if the course is used in a session or not * @param integer $session_id the id of the session * @param string $limit the LIMIT statement of the sql statement * @param string $order_by the field to order the users by. Valid values are 'lastname', 'firstname', 'username', 'email', 'official_code' OR a part of a SQL statement that starts with ORDER BY ... * @param int if using the session_id: 0 or 2 (student, coach), if using session_id = 0 STUDENT or COURSEMANAGER * @return array */ public static function get_user_list_from_course_code($course_code = null, $session_id = 0, $limit = null, $order_by = null, $filter_by_status = null, $return_count = null, $add_reports = false, $resumed_report = false, $extra_field = null) { // variable initialisation $session_id = intval($session_id); $course_code = Database::escape_string($course_code); $where = array(); // if the $order_by does not contain 'ORDER BY' we have to check if it is a valid field that can be sorted on if (!strstr($order_by, 'ORDER BY')) { //if (!empty($order_by) AND in_array($order_by, array('lastname', 'firstname', 'username', 'email', 'official_code'))) { if (!empty($order_by)) { $order_by = 'ORDER BY ' . $order_by; } else { $order_by = ''; } } $courseInfo = api_get_course_info($course_code); $courseId = null; if ($courseInfo) { $courseId = $courseInfo['real_id']; } $filter_by_status_condition = null; if (!empty($session_id) && !empty($courseId)) { $sql = 'SELECT DISTINCT user.user_id, session_course_user.status as status_session, user.* '; $sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '; $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER) . ' as session_course_user ON user.user_id = session_course_user.id_user AND session_course_user.c_id="' . $courseId . '" AND session_course_user.id_session = ' . $session_id; $where[] = ' session_course_user.c_id IS NOT NULL '; // 2 = coach // 0 = student if (isset($filter_by_status)) { $filter_by_status = intval($filter_by_status); $filter_by_status_condition = " session_course_user.status = {$filter_by_status} AND "; } } else { if ($return_count) { $sql = " SELECT COUNT(*) as count"; if ($resumed_report) { //$sql = " SELECT count(field_id) "; } } else { if (empty($course_code)) { $sql = 'SELECT DISTINCT course.title, course.code, course_rel_user.status as status_rel, user.user_id, course_rel_user.role, course_rel_user.tutor_id, user.* '; } else { $sql = 'SELECT DISTINCT course_rel_user.status as status_rel, user.user_id, course_rel_user.role, course_rel_user.tutor_id, user.* '; } } $sql .= ' FROM ' . Database::get_main_table(TABLE_MAIN_USER) . ' as user '; $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_COURSE_USER) . ' as course_rel_user ON user.user_id = course_rel_user.user_id AND course_rel_user.relation_type <> ' . COURSE_RELATION_TYPE_RRHH; if (!empty($courseInfo)) { $sql .= " AND course_rel_user.c_id = " . $courseId; } else { $course_table = Database::get_main_table(TABLE_MAIN_COURSE); $sql .= " INNER JOIN {$course_table} course ON course_rel_user.c_id = course.id"; } $where[] = ' course_rel_user.c_id IS NOT NULL '; if (isset($filter_by_status) && $filter_by_status != '') { $filter_by_status = intval($filter_by_status); $filter_by_status_condition = " course_rel_user.status = {$filter_by_status} AND "; } } $multiple_access_url = api_get_multiple_access_url(); if ($multiple_access_url) { $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER) . ' au ON (au.user_id = user.user_id) '; } if ($return_count && $resumed_report) { $extra_field_info = UserManager::get_extra_field_information_by_name($extra_field); $sql .= ' LEFT JOIN ' . Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES) . ' as ufv ON (user.user_id = ufv.user_id AND (field_id = ' . $extra_field_info['id'] . ' OR field_id IS NULL ) )'; } $sql .= ' WHERE ' . $filter_by_status_condition . ' ' . implode(' OR ', $where); if ($multiple_access_url) { $current_access_url_id = api_get_current_access_url_id(); $sql .= " AND (access_url_id = {$current_access_url_id} ) "; } if ($return_count && $resumed_report) { $sql .= ' AND field_id IS NOT NULL GROUP BY field_value '; } $sql .= ' ' . $order_by . ' ' . $limit; $rs = Database::query($sql); $users = array(); if ($add_reports) { $extra_fields = UserManager::get_extra_fields(0, 100, null, null, true, true); } $counter = 1; $count_rows = Database::num_rows($rs); if ($return_count && $resumed_report) { return $count_rows; } $table_user_field_value = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES); if ($count_rows) { while ($user = Database::fetch_array($rs)) { $report_info = array(); if ($return_count) { return $user['count']; } $user_info = $user; $user_info['status'] = $user['status']; if (isset($user['role'])) { $user_info['role'] = $user['role']; } if (isset($user['tutor_id'])) { $user_info['tutor_id'] = $user['tutor_id']; } if (!empty($session_id)) { $user_info['status_session'] = $user['status_session']; } $user_info['complete_name'] = api_get_person_name($user_info['firstname'], $user_info['lastname']); if ($add_reports) { $course_code = $user['code']; if ($resumed_report) { foreach ($extra_fields as $extra) { if ($extra['1'] == $extra_field) { $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']); break; } } if (empty($user_data[$extra['1']])) { $row_key = '-1'; $name = '-'; } else { $row_key = $user_data[$extra['1']]; $name = $user_data[$extra['1']]; } $users[$row_key]['extra_' . $extra['1']] = $name; $users[$row_key]['training_hours'] += Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, 0); $users[$row_key]['count_users'] += $counter; $registered_users_with_extra_field = 0; if (!empty($name) && $name != '-') { $name = Database::escape_string($name); $sql = "SELECT count(user_id) as count FROM {$table_user_field_value} WHERE field_value = '{$name}'"; $result_count = Database::query($sql); if (Database::num_rows($result_count)) { $row_count = Database::fetch_array($result_count); $registered_users_with_extra_field = $row_count['count']; } } $users[$row_key]['count_users_registered'] = $registered_users_with_extra_field; $users[$row_key]['average_hours_per_user'] = $users[$row_key]['training_hours'] / $users[$row_key]['count_users']; $category = Category::load(null, null, $course_code); if (!isset($users[$row_key]['count_certificates'])) { $users[$row_key]['count_certificates'] = 0; } if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { $users[$row_key]['count_certificates']++; } } else { $report_info['course'] = $user['title']; $report_info['user'] = api_get_person_name($user['firstname'], $user['lastname']); $report_info['time'] = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $courseId, 0)); $category = Category::load(null, null, $course_code); $report_info['certificate'] = Display::label(get_lang('No')); if (isset($category[0]) && $category[0]->is_certificate_available($user['user_id'])) { $report_info['certificate'] = Display::label(get_lang('Yes'), 'success'); } //$report_info['score'] = Tracking::get_avg_student_score($user['user_id'], $courseId, array(), 0); $progress = intval(Tracking::get_avg_student_progress($user['user_id'], $courseId, array(), 0)); $report_info['progress_100'] = $progress == 100 ? Display::label(get_lang('Yes'), 'success') : Display::label(get_lang('No')); $report_info['progress'] = $progress . "%"; foreach ($extra_fields as $extra) { $user_data = UserManager::get_extra_user_data_by_field($user['user_id'], $extra['1']); $report_info[$extra['1']] = $user_data[$extra['1']]; } $users[] = $report_info; } } else { $users[$user['user_id']] = $user_info; } } $counter++; } return $users; }
/** * Finds all the information about a user. If no paramater is passed you find all the information about the current user. * @param $user_id (integer): the id of the user * @return $user_info (array): user_id, lastname, firstname, username, email, ... * @author Patrick Cool <*****@*****.**> * @version 21 September 2004 */ function api_get_user_info($user_id = '', $check_if_user_is_online = false, $show_password = false, $add_extra_values = false) { if (empty($user_id)) { $_user = Session::read('_user'); return api_format_user($_user); } $sql = "SELECT * FROM " . Database::get_main_table(TABLE_MAIN_USER) . " WHERE user_id = '" . Database::escape_string($user_id) . "'"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { $result_array = Database::fetch_array($result); if ($check_if_user_is_online) { $use_status_in_platform = Online::user_is_online($user_id); $result_array['user_is_online'] = $use_status_in_platform; $user_online_in_chat = 0; if ($use_status_in_platform) { $user_status = UserManager::get_extra_user_data_by_field($user_id, 'user_chat_status', false, true); if (intval($user_status['user_chat_status']) == 1) { $user_online_in_chat = 1; } } $result_array['user_is_online_in_chat'] = $user_online_in_chat; } $user = api_format_user($result_array, $show_password); if ($add_extra_values) { $extra_field_values = new ExtraField('user'); $user['extra_fields'] = $extra_field_values->get_handler_extra_data($user_id); } return $user; } return false; }
header('Location: ' . api_get_path(WEB_PATH) . 'index.php?loginFailed=1&error=blocked_by_captcha'); exit; } } } if ($uData['auth_source'] == PLATFORM_AUTH_SOURCE || $uData['auth_source'] == CAS_AUTH_SOURCE) { $validPassword = false; $user = $userManager->findUserByUsername($login); if ($user) { $validPassword = UserManager::isPasswordValid($password, $user); } // The authentication of this user is managed by Chamilo itself //$password = api_get_encrypted_password(trim(stripslashes($password))); // Check the user's password if (($validPassword || $cas_login) && trim($login) == $uData['username']) { $update_type = UserManager::get_extra_user_data_by_field($uData['user_id'], 'update_type'); $update_type = $update_type['update_type']; if (!empty($extAuthSource[$update_type]['updateUser']) && file_exists($extAuthSource[$update_type]['updateUser'])) { include_once $extAuthSource[$update_type]['updateUser']; } // Check if the account is active (not locked) if ($uData['active'] == '1') { // Check if the expiration date has not been reached if ($uData['expiration_date'] > date('Y-m-d H:i:s') || empty($uData['expiration_date'])) { global $_configuration; if (api_is_multiple_url_enabled()) { // Check if user is an admin $my_user_is_admin = UserManager::is_admin($uData['user_id']); // This user is subscribed in these sites => $my_url_list $my_url_list = api_get_access_url_from_user($uData['user_id']); //Check the access_url configuration setting if
/** Used by the widescale plugin */ static function get_user_data($from, $number_of_items, $column, $direction, $get_count = false) { $user_table = Database::get_main_table(TABLE_MAIN_USER); $select = "SELECT\n u.user_id,\n u.username,\n u.firstname,\n u.lastname,\n ufv1.field_value as exam_password\n "; if ($get_count) { $select = "SELECT count(u.user_id) as total_rows"; } $sql = "{$select} FROM {$user_table} u "; // adding the filter to see the user's only of the current access_url if ((api_is_platform_admin() || api_is_session_admin()) && api_get_multiple_access_url()) { $access_url_rel_user_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql .= " INNER JOIN {$access_url_rel_user_table} url_rel_user ON (u.user_id=url_rel_user.user_id)"; } $extra_fields = array('exam_password', 'exam_room', 'exam_schedule'); $counter = 1; $where_condition = ""; $and_conditions = array(); foreach ($extra_fields as $keyword_extra_data) { $extra_info = UserManager::get_extra_field_information_by_name($keyword_extra_data); $field_id = $extra_info['id']; $table_alias = "ufv{$counter}"; $sql .= " INNER JOIN user_field_values {$table_alias} ON u.user_id = {$table_alias}.user_id AND {$table_alias}.field_id = {$field_id} "; $counter++; if ($keyword_extra_data == 'exam_password') { continue; } $keyword_extra_data_text = UserManager::get_extra_user_data_by_field(api_get_user_id(), $extra_info['field_variable']); $keyword_extra_data_text = $keyword_extra_data_text[$extra_info['field_variable']]; if (!empty($keyword_extra_data_text)) { $and_conditions[] = " {$table_alias}.field_value LIKE '%" . trim($keyword_extra_data_text) . "%' "; } } if (!empty($and_conditions)) { $where_condition = implode(' AND ', $and_conditions); } if (!empty($where_condition)) { $sql .= " WHERE {$where_condition} "; } $sql .= " AND u.user_id <> " . api_get_user_id(); // adding the filter to see the user's only of the current access_url if ((api_is_platform_admin() || api_is_session_admin()) && api_get_multiple_access_url()) { $sql .= " AND url_rel_user.access_url_id=" . api_get_current_access_url_id(); } if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; } if (in_array($column, array('username', 'firstname', 'lastname'))) { $column = $column; } $from = intval($from); $number_of_items = intval($number_of_items); //Returns counts and exits function if ($get_count) { $res = Database::query($sql); $user = Database::fetch_array($res); return $user['total_rows']; } $sql .= " ORDER BY {$column} {$direction} "; $sql .= " LIMIT {$from}, {$number_of_items}"; $res = Database::query($sql); $users = array(); while ($user = Database::fetch_array($res, 'ASSOC')) { $users[] = $user; } return $users; }