diff --git a/main/admin/dashboard_add_sessions_to_user.php b/main/admin/dashboard_add_sessions_to_user.php index 17dead9d41..96e38829be 100644 --- a/main/admin/dashboard_add_sessions_to_user.php +++ b/main/admin/dashboard_add_sessions_to_user.php @@ -36,6 +36,7 @@ $interbreadcrumb[] = array('url' => 'user_list.php','name' => get_lang('UserList // Database Table Definitions $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); +$tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); // initializing variables $id_session=intval($_GET['id_session']); @@ -63,7 +64,7 @@ if (!api_is_platform_admin() && !api_is_session_admin()) { } function search_sessions($needle,$type) { - global $_configuration, $tbl_session, $user_id; + global $_configuration, $tbl_session_rel_access_url, $tbl_session, $user_id; $xajax_response = new XajaxResponse(); $return = ''; @@ -79,8 +80,13 @@ function search_sessions($needle,$type) { $without_assigned_sessions = " AND s.id NOT IN(".implode(',',$assigned_sessions_id).")"; } - $sql = "SELECT s.id, s.name FROM $tbl_session s + if ($_configuration['multiple_access_urls']) { + $sql = " SELECT s.id, s.name FROM $tbl_session s LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id) + WHERE s.name LIKE '$needle%' $without_assigned_sessions AND access_url_id = ".api_get_current_access_url_id().""; + } else { + $sql = "SELECT s.id, s.name FROM $tbl_session s WHERE s.name LIKE '$needle%' $without_assigned_sessions "; + } $rs = Database::query($sql); @@ -189,11 +195,16 @@ if (isset($_POST['firstLetterSession'])) { $needle = "$needle%"; } -$sql = " SELECT s.id, s.name FROM $tbl_session s - WHERE s.name LIKE '$needle%' $without_assigned_sessions - ORDER BY s.name - "; - +if ($_configuration['multiple_access_urls']) { + $sql = " SELECT s.id, s.name FROM $tbl_session s LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id) + WHERE s.name LIKE '$needle%' $without_assigned_sessions AND access_url_id = ".api_get_current_access_url_id()." + ORDER BY s.name"; +} else { + $sql = " SELECT s.id, s.name FROM $tbl_session s + WHERE s.name LIKE '$needle%' $without_assigned_sessions + ORDER BY s.name + "; +} $result = Database::query($sql); ?> diff --git a/main/admin/resume_session.php b/main/admin/resume_session.php index 19302d6454..3f4f780310 100644 --- a/main/admin/resume_session.php +++ b/main/admin/resume_session.php @@ -57,11 +57,11 @@ if (Database::num_rows($rs)>0) { $action = $_GET['action']; -$url_id = api_get_current_access_url_id(); +$url_id = api_get_current_access_url_id(); switch($action) { - case 'add_user_to_url': + case 'add_user_to_url': $user_id = $_REQUEST['user_id']; $result = UrlManager::add_user_to_url($user_id, $url_id); $user_info = api_get_user_info($user_id); @@ -121,7 +121,7 @@ echo Display::page_header(Display::return_icon('session.png', get_lang('Session' - + +'; + echo ''; +} +?>
+ @@ -186,6 +186,23 @@ echo Display::page_header(Display::return_icon('session.png', get_lang('Session'
'; + echo 'URL'; + echo ''; + $url_list = UrlManager::get_access_url_from_session($id_session); + foreach($url_list as $url_data) { + echo $url_data['url'].'
'; + } + echo '

@@ -193,7 +210,7 @@ echo Display::page_header(Display::return_icon('session.png', get_lang('Session' - + @@ -256,9 +273,9 @@ if ($session['nbr_courses'] == 0){ '.$coach.' '.$course['nbr_users'].' - '.Display::return_icon('course_home.gif', get_lang('Course')).' + '.Display::return_icon('course_home.gif', get_lang('Course')).' '.Display::return_icon('user.png', get_lang('Edit'), '', ICON_SIZE_SMALL).' - '.Display::return_icon('statistics.gif', get_lang('Tracking')).'  + '.Display::return_icon('statistics.gif', get_lang('Tracking')).'  '.Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_SMALL).' '.Display::return_icon('delete.png', get_lang('Delete')).' @@ -271,7 +288,7 @@ if ($session['nbr_courses'] == 0){ - @@ -284,10 +301,10 @@ if ($session['nbr_users']==0) { echo ''; -} else { +} else { $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname'; - - if ($multiple_url_is_on) { + + if ($multiple_url_is_on) { $sql = "SELECT u.user_id, lastname, firstname, username, access_url_id FROM $tbl_user u INNER JOIN $tbl_session_rel_user su @@ -311,21 +328,21 @@ if ($session['nbr_users']==0) { if (!empty($user['user_id'])) { $user_link = ''.api_htmlentities(api_get_person_name($user['firstname'], $user['lastname']),ENT_QUOTES,$charset).' ('.$user['username'].')'; } - + $link_to_add_user_in_url = ''; - + if ($multiple_url_is_on) { - if ($user['access_url_id'] != $url_id) { + if ($user['access_url_id'] != $url_id) { $user_link .= ' '.Display::return_icon('warning.png', get_lang('UserNotAddedInURL'), array(), ICON_SIZE_SMALL); $add = Display::return_icon('add.png', get_lang('AddUsersToURL'), array(), ICON_SIZE_SMALL); $link_to_add_user_in_url = ''.$add.''; - } + } } echo ' -
+
'.get_lang('NoUsersForThisSession').'
'.$user_link.' + '.Display::return_icon('statistics.gif', get_lang('Reporting')).'  '.Display::return_icon('course.gif', get_lang('BlockCoursesForThisUser')).'  '.Display::return_icon('delete.png', get_lang('Delete')).' @@ -338,4 +355,4 @@ if ($session['nbr_users']==0) {
User as $node_user) { $username = UserManager::purify_username(api_utf8_decode($node_user), $purification_option_for_usernames); @@ -619,19 +632,19 @@ if ($_POST['formSent']) { id_session='$session_id'"; $rs_course = Database::query($sql_course); $course_counter++; - + $course_split = array(); $pattern = "/\[(.*?)\]/"; preg_match_all($pattern, $course, $matches); if (isset($matches[1])) { - $course_coaches = $matches[1][0]; + $course_coaches = $matches[1][0]; $course_users = $matches[1][1]; } - + $course_users = explode(',', $course_users); $course_coaches = explode(',', $course_coaches); var_dump($course_coaches, $course_users); - + // Adding coaches to session course user if (!empty($course_coaches)) { foreach ($course_coaches as $course_coach) { @@ -650,7 +663,7 @@ if ($_POST['formSent']) { } $users_in_course_counter = 0; - + // Adding the relationship "Session - Course - User". foreach ($course_users as $user) { $user_id = UserManager::get_user_id_from_username($user); diff --git a/main/inc/lib/database.constants.inc.php b/main/inc/lib/database.constants.inc.php index cc333f0b84..a9b817c537 100644 --- a/main/inc/lib/database.constants.inc.php +++ b/main/inc/lib/database.constants.inc.php @@ -2,16 +2,16 @@ /* For licensing terms, see /license.txt */ /** * This is the database constants definition for Chamilo - * This file is called by database.lib.php and database.mysqli.lib.php - * + * This file is called by database.lib.php and database.mysqli.lib.php + * * @todo the table constants have all to start with TABLE_ * This is because of the analogy with the tool constants TOOL_ * - * @package chamilo.library + * @package chamilo.library */ /** - * CONSTANTS + * CONSTANTS */ //See #3910 defines the default prefix for the single course database @@ -81,6 +81,7 @@ define('TABLE_MAIN_SEARCH_ENGINE_REF', 'search_engine_ref'); define('TABLE_MAIN_ACCESS_URL', 'access_url'); define('TABLE_MAIN_ACCESS_URL_REL_USER', 'access_url_rel_user'); define('TABLE_MAIN_ACCESS_URL_REL_COURSE', 'access_url_rel_course'); +define('TABLE_MAIN_ACCESS_URL_REL_SESSION', 'access_url_rel_session'); // Global calendar define('TABLE_MAIN_SYSTEM_CALENDAR', 'sys_calendar'); @@ -112,7 +113,7 @@ define('TABLE_MAIN_LEGAL', 'legal'); // Dashboard blocks plugin define('TABLE_MAIN_BLOCK', 'block'); -// Statistic database tables +// Statistic database tables define('TABLE_STATISTIC_TRACK_E_LASTACCESS', 'track_e_lastaccess'); define('TABLE_STATISTIC_TRACK_E_ACCESS', 'track_e_access'); define('TABLE_STATISTIC_TRACK_E_LOGIN', 'track_e_login'); diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 07032f777a..f9723c0d5b 100644 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -15,10 +15,10 @@ * * @package chamilo.library */ -class SessionManager { +class SessionManager { private function __construct() { } - + /** * Fetches a session from the database * @param int Session ID @@ -32,7 +32,7 @@ class SessionManager { if (Database::num_rows($r) != 1) { return array(); } return Database::fetch_array($r,'ASSOC'); } - + /** * Create a session * @author Carlos Vargas from existing code @@ -54,9 +54,9 @@ class SessionManager { * @todo use an array to replace all this parameters or use the model.lib.php ... * @return mixed Session ID on success, error message otherwise **/ - public static function create_session($sname,$syear_start,$smonth_start,$sday_start,$syear_end,$smonth_end,$sday_end,$snb_days_acess_before,$snb_days_acess_after, $nolimit,$coach_username, $id_session_category,$id_visibility, $start_limit = true, $end_limit = true, $fix_name = false) { + public static function create_session($sname,$syear_start,$smonth_start,$sday_start,$syear_end,$smonth_end,$sday_end,$snb_days_acess_before,$snb_days_acess_after, $nolimit,$coach_username, $id_session_category,$id_visibility, $start_limit = true, $end_limit = true, $fix_name = false) { global $_configuration; - + //Check portal limits $access_url_id = 1; if (api_get_multiple_access_url()) { @@ -81,8 +81,8 @@ class SessionManager { $id_session_category = intval($id_session_category); $id_visibility = intval($id_visibility); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); - $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); - + $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); + if (is_int($coach_username)) { $id_coach = $coach_username; } else { @@ -99,16 +99,16 @@ class SessionManager { $date_start ="0000-00-00"; $date_end ="0000-00-00"; } - + if (empty($end_limit)) { $date_end ="0000-00-00"; $id_visibility = 1; // by default session visibility is read only } - + if (empty($start_limit)) { $date_start ="0000-00-00"; - } - + } + if (empty($name)) { $msg=get_lang('SessionNameIsRequired'); return $msg; @@ -127,41 +127,44 @@ class SessionManager { } else { $ready_to_create = false; if ($fix_name) { - $name = self::generate_nice_next_session_name($name); + $name = self::generate_nice_next_session_name($name); if ($name) { $ready_to_create = true; } else { $msg=get_lang('SessionNameAlreadyExists'); return $msg; - } + } } else { $rs = Database::query("SELECT 1 FROM $tbl_session WHERE name='".$name."'"); if (Database::num_rows($rs)) { $msg=get_lang('SessionNameAlreadyExists'); return $msg; - } + } $ready_to_create = true; } - + if ($ready_to_create) { $sql_insert = "INSERT INTO $tbl_session(name,date_start,date_end,id_coach,session_admin_id, nb_days_access_before_beginning, nb_days_access_after_end, session_category_id,visibility) VALUES('".$name."','$date_start','$date_end','$id_coach',".api_get_user_id().",".$nb_days_acess_before.", ".$nb_days_acess_after.", ".$id_session_category.", ".$id_visibility.")"; Database::query($sql_insert); $session_id = Database::insert_id(); - + if (!empty($session_id)) { /* Sends a message to the user_id = 1 - + $user_info = api_get_user_info(1); $complete_name = $user_info['firstname'].' '.$user_info['lastname']; - $subject = api_get_setting('siteName').' - '.get_lang('ANewSessionWasCreated'); - $message = get_lang('ANewSessionWasCreated')."
".get_lang('NameOfTheSession').' : '.$name; + $subject = api_get_setting('siteName').' - '.get_lang('ANewSessionWasCreated'); + $message = get_lang('ANewSessionWasCreated')."
".get_lang('NameOfTheSession').' : '.$name; api_mail_html($complete_name, $user_info['email'], $subject, $message); - * - */ - - // add event to system log + * + */ + //Adding to the correct URL + $access_url_id = api_get_current_access_url_id(); + UrlManager::add_session_to_url($session_id,$access_url_id); + + // add event to system log $user_id = api_get_user_id(); event_system(LOG_SESSION_CREATE, LOG_SESSION_ID, $session_id, api_get_utc_datetime(), $user_id); } @@ -169,78 +172,110 @@ class SessionManager { } } } - + function session_name_exists($session_name) { $session_name = Database::escape_string($session_name); $result = Database::fetch_array(Database::query("SELECT COUNT(*) as count FROM ".Database::get_main_table(TABLE_MAIN_SESSION)." WHERE name = '$session_name' ")); return $result['count'] > 0; } - + function get_count_admin() { $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); - $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); + $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $where = 'WHERE 1=1 '; $user_id = api_get_user_id(); - - if (api_is_session_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false') { - $where.=" AND s.session_admin_id = $user_id "; + + if (api_is_session_admin() && api_get_setting('allow_session_admins_to_see_all_sessions') == 'false') { + $where.=" WHERE s.session_admin_id = $user_id "; + } + + $query_rows = "SELECT count(*) as total_rows + FROM $tbl_session s + LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id + INNER JOIN $tbl_user u ON s.id_coach = u.user_id + $where "; + + global $_configuration; + if ($_configuration['multiple_access_urls']) { + $table_access_url_rel_session= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1) { + $where.= " AND ar.access_url_id = $access_url_id "; + + $query_rows = "SELECT count(*) as total_rows + FROM $tbl_session s + LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id + INNER JOIN $tbl_user u ON s.id_coach = u.user_id + INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id + $where "; + } } - - $query_rows = "SELECT count(*) as total_rows FROM $tbl_session s - LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id - INNER JOIN $tbl_user u ON s.id_coach = u.user_id $where "; $result_rows = Database::query($query_rows); $recorset = Database::fetch_array($result_rows); $num = $recorset['total_rows']; - return $num; + return $num; } - + /** * Gets the admin session list callback of the admin/session_list.php page * @param array order and limit keys */ public function get_sessions_admin($options) { $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); - $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); - $tbl_user = Database::get_main_table(TABLE_MAIN_USER); + $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); + $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $where = 'WHERE 1=1 '; $user_id = api_get_user_id(); - + if (api_is_session_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false') { $where.=" AND s.session_admin_id = $user_id "; - } + } $coach_name = " CONCAT (u.lastname , ' ', u.firstname) as coach_name "; - if (api_is_western_name_order()) { + if (api_is_western_name_order()) { $coach_name = " CONCAT (u.firstname, ' ', u.lastname) as coach_name "; - } + } $today = api_get_utc_datetime(); $today = api_strtotime($today, 'UTC'); $today = date('Y-m-d', $today); - $select = "SELECT * FROM (SELECT - IF ( - (s.date_start <= '$today' AND '$today' < s.date_end) OR + $select = "SELECT * FROM (SELECT + IF ( + (s.date_start <= '$today' AND '$today' < s.date_end) OR (s.date_start = '0000-00-00' AND s.date_end = '0000-00-00' ) OR (s.date_start <= '$today' AND '0000-00-00' = s.date_end) OR ('$today' < s.date_end AND '0000-00-00' = s.date_start) - , 1, 0) - as session_active, + , 1, 0) + as session_active, s.name, nbr_courses, nbr_users, s.date_start, s.date_end, $coach_name, sc.name as category_name, s.visibility, u.user_id, s.id"; - $query = "$select FROM $tbl_session s - LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id + $query = "$select FROM $tbl_session s + LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id INNER JOIN $tbl_user u ON s.id_coach = u.user_id ". $where; - $query .= ") AS session_table"; + global $_configuration; + if ($_configuration['multiple_access_urls']) { + $table_access_url_rel_session= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1) { + $where.= " AND ar.access_url_id = $access_url_id "; + $query = "$select + FROM $tbl_session s + LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id + INNER JOIN $tbl_user u ON s.id_coach = u.user_id + INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id + $where"; + } + } + $query .= ") AS session_table"; if (!empty($options['where'])) { - $query .= ' WHERE '.$options['where']; + $query .= ' WHERE '.$options['where']; } $query .= " ORDER BY ".$options['order']." LIMIT ".$options['limit']; @@ -271,7 +306,7 @@ class SessionManager { if ($session['date_end'] == '0000-00-00') { $session['date_end'] = ''; } - + switch ($session['visibility']) { case SESSION_VISIBLE_READ_ONLY: //1 $session['visibility'] = get_lang('ReadOnly'); @@ -286,13 +321,13 @@ class SessionManager { $formatted_sessions[] = $session; } } - + return $formatted_sessions; - } - + } + /** * Creates a new course code based in given code - * + * * @param string wanted code * * $wanted_code = 'curse' if there are in the DB codes like curse1 curse2 the function will return: course3 @@ -300,12 +335,12 @@ class SessionManager { * * @return string wanted unused code */ - function generate_nice_next_session_name($session_name) { - $session_name_ok = !self::session_name_exists($session_name); - if (!$session_name_ok) { + function generate_nice_next_session_name($session_name) { + $session_name_ok = !self::session_name_exists($session_name); + if (!$session_name_ok) { $table = Database::get_main_table(TABLE_MAIN_SESSION); $session_name = Database::escape_string($session_name); - $sql = "SELECT count(*) as count FROM $table WHERE name LIKE '$session_name%'"; + $sql = "SELECT count(*) as count FROM $table WHERE name LIKE '$session_name%'"; $result = Database::query($sql); if (Database::num_rows($result) > 0 ) { $row = Database::fetch_array($result); @@ -314,13 +349,13 @@ class SessionManager { $result = self::session_name_exists($session_name); if (!$result) { return $session_name; - } + } } - return false; - } + return false; + } return $session_name; } - + /** * Edit a session * @author Carlos Vargas from existing code @@ -358,7 +393,7 @@ class SessionManager { $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); - + if (empty($nolimit)) { $date_start = "$year_start-".(($month_start < 10)?"0$month_start":$month_start)."-".(($day_start < 10)?"0$day_start":$day_start); $date_end = "$year_end-".(($month_end < 10)?"0$month_end":$month_end)."-".(($day_end < 10)?"0$day_end":$day_end); @@ -367,20 +402,20 @@ class SessionManager { $date_end = "0000-00-00"; $id_visibility = 1;//force read only } - + if (!empty($no_end_limit)) { $date_end = "0000-00-00"; } - + if (empty($end_limit)) { $date_end ="0000-00-00"; $id_visibility = 1;//force read only } - + if (empty($start_limit)) { $date_start ="0000-00-00"; } - + if (empty($name)) { $msg=get_lang('SessionNameIsRequired'); return $msg; @@ -436,7 +471,8 @@ class SessionManager { $tbl_session_rel_course_rel_user= Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session_rel_user= Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); - + $tbl_url_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + global $_user; if(is_array($id_checked)) { $id_checked = Database::escape_string(implode(',',$id_checked)); @@ -455,7 +491,7 @@ class SessionManager { Database::query("DELETE FROM $tbl_session_rel_course WHERE id_session IN($id_checked)"); Database::query("DELETE FROM $tbl_session_rel_course_rel_user WHERE id_session IN($id_checked)"); Database::query("DELETE FROM $tbl_session_rel_user WHERE id_session IN($id_checked)"); - + Database::query("DELETE FROM $tbl_url_session WHERE session_id IN($id_checked)"); // delete extra session fields $t_sf = Database::get_main_table(TABLE_MAIN_SESSION_FIELD); @@ -518,7 +554,7 @@ class SessionManager { } } */ - // Add event to system log + // Add event to system log $user_id = api_get_user_id(); event_system(LOG_SESSION_DELETE, LOG_SESSION_ID, $id_checked, api_get_utc_datetime(), $user_id); } @@ -546,7 +582,7 @@ class SessionManager { $session_info = api_get_session_info($id_session); $session_name = $session_info['name']; - //from function parameter + //from function parameter if (empty($session_visibility)) { $session_visibility = $session_info['visibility']; //loaded from DB //default status loaded if empty @@ -559,7 +595,7 @@ class SessionManager { } $sql = "SELECT id_user FROM $tbl_session_rel_course_rel_user WHERE id_session = '$id_session' "; - + $result = Database::query($sql); $existingUsers = array(); while($row = Database::fetch_array($result)) { @@ -593,9 +629,9 @@ class SessionManager { $emailsubject = '['.get_setting('siteName').'] '.get_lang('YourReg').' '.get_setting('siteName'); $emailheaders = 'From: '.get_setting('administratorName').' '.get_setting('administratorSurname').' <'.get_setting('emailAdministrator').">\n"; $emailheaders .= 'Reply-To: '.get_setting('emailAdministrator'); - + $emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".sprintf(get_lang('YouAreRegisterToSessionX'), $session_name) ." \n\n" .get_lang('Address') ." ". get_setting('siteName') ." ". get_lang('Is') ." : ". api_get_path(WEB_PATH) ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".get_setting('administratorName')." ".get_setting('administratorSurname')."\n". get_lang('Manager'). " ".get_setting('siteName')."\nT. ".get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".get_setting('emailAdministrator'); - + @api_send_mail($emailto, $emailsubject, $emailbody, $emailheaders); } @@ -619,7 +655,7 @@ class SessionManager { } } } - + //Replace with this new function // // insert new users into session_rel_course_rel_user and ignore if they already exist @@ -646,9 +682,9 @@ class SessionManager { if ($empty_users===true) { Database::query("DELETE FROM $tbl_session_rel_user WHERE id_session = $id_session AND relation_type<>".SESSION_RELATION_TYPE_RRHH.""); } - + // Insert missing users into session - $nbr_users = 0; + $nbr_users = 0; foreach ($user_list as $enreg_user) { $enreg_user = Database::escape_string($enreg_user); $nbr_users++; @@ -657,34 +693,34 @@ class SessionManager { } // update number of users in the session - $nbr_users = count($user_list); + $nbr_users = count($user_list); if ($empty_users) { - // update number of users in the session + // update number of users in the session $update_sql = "UPDATE $tbl_session SET nbr_users= $nbr_users WHERE id='$id_session' "; Database::query($update_sql); } else { $update_sql = "UPDATE $tbl_session SET nbr_users= nbr_users + $nbr_users WHERE id='$id_session' "; - Database::query($update_sql); + Database::query($update_sql); } } - + function subscribe_users_to_session_course($user_list, $session_id, $course_code, $session_visibility = SESSION_VISIBLE_READ_ONLY ) { $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - + if (empty($user_list) || empty($session_id) || empty($course_code)) { - return false; + return false; } - + $session_id = intval($session_id); $course_code = Database::escape_string($course_code); - $session_visibility = intval($session_visibility); - + $session_visibility = intval($session_visibility); + $nbr_users = 0; foreach ($user_list as $enreg_user) { //if (!in_array($enreg_user, $existingUsers)) { $enreg_user = intval($enreg_user); - $insert_sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user(id_session,course_code,id_user,visibility) + $insert_sql = "INSERT IGNORE INTO $tbl_session_rel_course_rel_user(id_session,course_code,id_user,visibility) VALUES ('$session_id','$course_code','$enreg_user','$session_visibility')"; Database::query($insert_sql); if (Database::affected_rows()) { @@ -1068,7 +1104,7 @@ class SessionManager { VALUES('".Database::escape_string($name)."','$date_start','$date_end', '$access_url_id')"; Database::query($sql); $id_session = Database::insert_id(); - // Add event to system log + // Add event to system log $user_id = api_get_user_id(); event_system(LOG_SESSION_CATEGORY_CREATE, LOG_SESSION_CATEGORY_ID, $id_session, api_get_utc_datetime(), $user_id); return $id_session; @@ -1145,11 +1181,11 @@ class SessionManager { } else { $id_checked = intval($id_checked); } - + //Setting session_category_id to 0 $sql = "UPDATE $tbl_session SET session_category_id = 0 WHERE session_category_id IN (".$id_checked.")"; $result = Database::query($sql); - + $sql = "SELECT id FROM $tbl_session WHERE session_category_id IN (".$id_checked.")"; $result = @Database::query($sql); while ($rows = Database::fetch_array($result)) { @@ -1166,9 +1202,9 @@ class SessionManager { $rs = @Database::query($sql); $result = Database::affected_rows(); - // Add event to system log + // Add event to system log $user_id = api_get_user_id(); - + event_system(LOG_SESSION_CATEGORY_DELETE, LOG_SESSION_CATEGORY_ID, $id_checked, api_get_utc_datetime(), $user_id); @@ -1210,15 +1246,19 @@ class SessionManager { $session_table = Database::get_main_table(TABLE_MAIN_SESSION); $session_category_table = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); $user_table = Database::get_main_table(TABLE_MAIN_USER); - + $table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + + $access_url_id = api_get_current_access_url_id(); + $return_array = array(); $sql_query = " SELECT s.id, s.name, s.nbr_courses, s.date_start, s.date_end, u.firstname, u.lastname, sc.name as category_name, s.promotion_id FROM $session_table s INNER JOIN $user_table u ON s.id_coach = u.user_id + INNER JOIN $table_access_url_rel_session ar ON ar.session_id = s.id LEFT JOIN $session_category_table sc ON s.session_category_id = sc.id - WHERE 1=1 "; - + WHERE ar.access_url_id = $access_url_id "; + if (count($conditions)>0) { $sql_query .= ' AND '; foreach ($conditions as $field=>$value) { @@ -1239,7 +1279,7 @@ class SessionManager { } return $return_array; } - + /** * Get the session category information by id * @param string session category ID @@ -1257,16 +1297,16 @@ class SessionManager { return false; } } - + /** * Get all session categories (filter by access_url_id) * @return mixed false if the session category does not exist, array if the session category exists */ - public static function get_all_session_category() { + public static function get_all_session_category() { $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); $id = api_get_current_access_url_id(); $sql = 'SELECT * FROM '.$tbl_session_category.' WHERE access_url_id ="'.$id.'" ORDER BY name ASC'; - $result = Database::query($sql); + $result = Database::query($sql); if (Database::num_rows($result) > 0 ){ $data = Database::store_result($result,'ASSOC'); return $data; @@ -1367,15 +1407,19 @@ class SessionManager { // Database Table Definitions $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); - $tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + $tbl_session_rel_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + $tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $hr_manager_id = intval($hr_manager_id); $affected_rows = 0; //Deleting assigned sessions to hrm_id - $sql = "SELECT id_session FROM $tbl_session_rel_user s WHERE id_user = $hr_manager_id AND relation_type=".SESSION_RELATION_TYPE_RRHH.""; - - $result = Database::query($sql); + if ($_configuration['multiple_access_urls']) { + $sql = "SELECT id_session FROM $tbl_session_rel_user s INNER JOIN $tbl_session_rel_access_url a ON (a.session_id = s.id_session) WHERE id_user = $hr_manager_id AND relation_type=".SESSION_RELATION_TYPE_RRHH." AND access_url_id = ".api_get_current_access_url_id().""; + } else { + $sql = "SELECT id_session FROM $tbl_session_rel_user s WHERE id_user = $hr_manager_id AND relation_type=".SESSION_RELATION_TYPE_RRHH.""; + } + $result = Database::query($sql); if (Database::num_rows($result) > 0) { while ($row = Database::fetch_array($result)) { @@ -1417,13 +1461,18 @@ class SessionManager { // Database Table Definitions $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); + $tbl_session_rel_access_url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $hr_manager_id = intval($hr_manager_id); $assigned_sessions_to_hrm = array(); - $sql = "SELECT * FROM $tbl_session s INNER JOIN $tbl_session_rel_user sru - ON sru.id_session = s.id AND sru.id_user = '$hr_manager_id' AND sru.relation_type = '".SESSION_RELATION_TYPE_RRHH."' "; - + if ($_configuration['multiple_access_urls']) { + $sql = "SELECT * FROM $tbl_session s INNER JOIN $tbl_session_rel_user sru ON (sru.id_session = s.id) LEFT JOIN $tbl_session_rel_access_url a ON (s.id = a.session_id) + WHERE sru.id_user = '$hr_manager_id' AND sru.relation_type = '".SESSION_RELATION_TYPE_RRHH."' AND access_url_id = ".api_get_current_access_url_id().""; + } else { + $sql = "SELECT * FROM $tbl_session s + INNER JOIN $tbl_session_rel_user sru ON sru.id_session = s.id AND sru.id_user = '$hr_manager_id' AND sru.relation_type = '".SESSION_RELATION_TYPE_RRHH."' "; + } $rs_assigned_sessions = Database::query($sql); if (Database::num_rows($rs_assigned_sessions) > 0) { while ($row_assigned_sessions = Database::fetch_array($rs_assigned_sessions)) { @@ -1433,7 +1482,7 @@ class SessionManager { return $assigned_sessions_to_hrm; } - + /** * Gets the list of courses by session filtered by access_url @@ -1443,9 +1492,9 @@ class SessionManager { public static function get_course_list_by_session_id ($session_id) { $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); - + // select the courses - $sql = "SELECT * FROM $tbl_course c INNER JOIN $tbl_session_rel_course src ON c.code = src.course_code + $sql = "SELECT * FROM $tbl_course c INNER JOIN $tbl_session_rel_course src ON c.code = src.course_code WHERE src.id_session = '$session_id' ORDER BY title;"; $result = Database::query($sql); $num_rows = Database::num_rows($result); @@ -1477,11 +1526,11 @@ class SessionManager { return 0; } } - + /** * Get users by session * @param int sesssion id - * @param int filter by status + * @param int filter by status * @return array a list with an user list */ public static function get_users_by_session($id, $with_status = false) { @@ -1495,35 +1544,35 @@ class SessionManager { $sql = 'SELECT '.$tbl_user.'.user_id, lastname, firstname, username FROM '.$tbl_user.' INNER JOIN '.$tbl_session_rel_user.' - ON '.$tbl_user.'.user_id = '.$tbl_session_rel_user.'.id_user + ON '.$tbl_user.'.user_id = '.$tbl_session_rel_user.'.id_user AND '.$tbl_session_rel_user.'.id_session = '.$id; if ($with_status !== false) { $with_status = intval($with_status); $sql .= " WHERE relation_type = $with_status "; - } + } $result = Database::query($sql); while ($row = Database::fetch_array($result,'ASSOC')) { $return_array[] = $row; } - + return $return_array; } - + public static function get_sessions_by_coach($user_id) { $session_table = Database::get_main_table(TABLE_MAIN_SESSION); - return Database::select('*', $session_table, array('where'=>array('id_coach = ?'=>$user_id))); + return Database::select('*', $session_table, array('where'=>array('id_coach = ?'=>$user_id))); } - + /* public static function get_coaches_by_session($session_id, $course_code) { $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); - + $sql = "SELECT user.user_id FROM $tbl_session_rel_course_rel_user session_rcru, $tbl_user user - WHERE session_rcru.id_user = user.user_id AND - session_rcru.id_session = '".intval($session_id)."' AND - session_rcru.course_code ='".Database::escape_string($course_code)."' AND + WHERE session_rcru.id_user = user.user_id AND + session_rcru.id_session = '".intval($session_id)."' AND + session_rcru.course_code ='".Database::escape_string($course_code)."' AND session_rcru.status = 2 "; $result = Database::query($sql); while ($row = Database::fetch_array($result,'ASSOC')) { @@ -1531,9 +1580,9 @@ class SessionManager { } return $return_array; }*/ - + /** - * Gets user status within a session + * Gets user status within a session * @param $user_id * @param $course_code * @param $session_id @@ -1541,13 +1590,13 @@ class SessionManager { */ public function get_user_status_in_session($user_id, $course_code, $session_id) { $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $tbl_user = Database::get_main_table(TABLE_MAIN_USER); + $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $sql = "SELECT session_rcru.status FROM $tbl_session_rel_course_rel_user session_rcru, $tbl_user user - WHERE session_rcru.id_user = user.user_id AND - session_rcru.id_session = '".intval($session_id)."' AND - session_rcru.course_code ='".Database::escape_string($course_code)."' AND - user.user_id = ".intval($user_id); + WHERE session_rcru.id_user = user.user_id AND + session_rcru.id_session = '".intval($session_id)."' AND + session_rcru.course_code ='".Database::escape_string($course_code)."' AND + user.user_id = ".intval($user_id); $result = Database::query($sql); $status = false; if (Database::num_rows($result)) { @@ -1556,32 +1605,32 @@ class SessionManager { } return $status; } - - + + public static function get_session_by_user($coach_id, $user_id) { - + } - + function get_all_sessions_by_promotion($id) { $t = Database::get_main_table(TABLE_MAIN_SESSION); return Database::select('*', $t, array('where'=>array('promotion_id = ?'=>$id))); } - + function suscribe_sessions_to_promotion($promotion_id, $list) { $t = Database::get_main_table(TABLE_MAIN_SESSION); $params = array(); - $params['promotion_id'] = 0; + $params['promotion_id'] = 0; Database::update($t, $params, array('promotion_id = ?'=>$promotion_id)); - + $params['promotion_id'] = $promotion_id; if (!empty($list)) { foreach ($list as $session_id) { $session_id= intval($session_id); Database::update($t, $params, array('id = ?'=>$session_id)); - } + } } } - + /** * Updates a session status * @param int session id @@ -1592,9 +1641,9 @@ class SessionManager { $params['visibility'] = $status; Database::update($t, $params, array('id = ?'=>$session_id)); } - + /** - * Copies a session with the same data to a new session. + * Copies a session with the same data to a new session. * The new copy is not assigned to the same promotion. @see suscribe_sessions_to_promotions() for that * @param int Session ID * @param bool Whether to copy the relationship with courses @@ -1619,7 +1668,7 @@ class SessionManager { $s['day_start'] = substr($s['date_start'],8,2); $s['year_end'] = substr($s['date_end'],0,4); $s['month_end'] = substr($s['date_end'],5,2); - $s['day_end'] = substr($s['date_end'],8,2); + $s['day_end'] = substr($s['date_end'],8,2); $consider_start = true; if ($s['year_start'].'-'.$s['month_start'].'-'.$s['day_start'] == '0000-00-00') { $consider_start = false; @@ -1628,22 +1677,22 @@ class SessionManager { if ($s['year_end'].'-'.$s['month_end'].'-'.$s['day_end'] == '0000-00-00') { $consider_end = false; } - + $sid = self::create_session($s['name'].' '.get_lang('Copy'), $s['year_start'], $s['month_start'], $s['day_start'], $s['year_end'],$s['month_end'],$s['day_end'], $s['nb_days_acess_before_beginning'],$s['nb_days_acess_after_end'], false,(int)$s['id_coach'], $s['session_category_id'], (int)$s['visibility'],$consider_start, $consider_end, true); - + if (!is_numeric($sid) || empty($sid)) { return false; } - + if ($copy_courses) { // Register courses from the original session to the new session $courses = self::get_course_list_by_session_id($id); - + $short_courses = $new_short_courses = array(); if (is_array($courses) && count($courses)>0) { foreach ($courses as $course) { @@ -1651,7 +1700,7 @@ class SessionManager { } } $courses = null; - + //We will copy the current courses of the session to new courses if (!empty($short_courses)) { if ($create_new_courses) { @@ -1659,20 +1708,20 @@ class SessionManager { if (function_exists('ini_set')) { ini_set('memory_limit','256M'); ini_set('max_execution_time',0); - } - $params = array(); - $params['skip_lp_dates'] = true; - + } + $params = array(); + $params['skip_lp_dates'] = true; + foreach ($short_courses as $course_data) { $course_info = CourseManager::copy_course_simple($course_data['title'].' '.get_lang('Copy'), $course_data['course_code'], $id, $sid, $params); if ($course_info) { //By default new elements are invisible - if ($set_exercises_lp_invisible) { + if ($set_exercises_lp_invisible) { require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php'; $list = new LearnpathList('', $course_info['code'], $sid); - $flat_list = $list->get_flat_list(); - if (!empty($flat_list)) { - foreach($flat_list as $lp_id => $data) { + $flat_list = $list->get_flat_list(); + if (!empty($flat_list)) { + foreach($flat_list as $lp_id => $data) { api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0, 0, 0, $sid); api_item_property_update($course_info, TOOL_LEARNPATH, $lp_id, 'invisible', api_get_user_id(), 0 ,0, 0, 0); } @@ -1681,11 +1730,11 @@ class SessionManager { $course_id = $course_info['real_id']; //@todo check this query $sql = "UPDATE $quiz_table SET active = 0 WHERE c_id = $course_id "; - $result=Database::query($sql); + $result=Database::query($sql); } $new_short_courses[] = $course_info['code']; - } - } + } + } } else { foreach($short_courses as $course_data) { $new_short_courses[] = $course_data['code']; @@ -1712,15 +1761,15 @@ class SessionManager { } return $sid; } - + function user_is_general_coach($user_id, $session_id) { $session_id = intval($session_id); $user_id = intval($user_id); - $session_table = Database::get_main_table(TABLE_MAIN_SESSION); + $session_table = Database::get_main_table(TABLE_MAIN_SESSION); $sql = "SELECT DISTINCT id FROM $session_table WHERE session.id_coach = '".$user_id."' AND id = '$session_id'"; - $result = Database::query($sql); + $result = Database::query($sql); if ($result && Database::num_rows($result)) { return true; } @@ -1732,9 +1781,14 @@ class SessionManager { * @param int ID of the URL we want to filter on (optional) * @return int Number of sessions */ - public function count_sessions() { + public function count_sessions($access_url_id=null) { $session_table = Database::get_main_table(TABLE_MAIN_SESSION); + $access_url_rel_session_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $sql = "SELECT count(id) FROM $session_table s"; + if (!empty($access_url_id) && $access_url_id == intval($access_url_id)) { + $sql .= ", $access_url_rel_session_table u ". + " WHERE s.id = u.session_id AND u.access_url_id = $access_url_id"; + } $res = Database::query($sql); $row = Database::fetch_row($res); return $row[0]; @@ -1746,7 +1800,7 @@ class SessionManager { if (!api_is_platform_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') != 'true') { if ($session_info['session_admin_id'] != api_get_user_id()) { api_not_allowed(true); - } +} } } } diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index fe0048315d..d6cea60ed5 100644 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -35,33 +35,33 @@ class Tracking { $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN); $condition_time = ''; - + if (empty($time_filter)) { $time_filter = 'last_week'; - } - + } + $today = date('Y-m-d H:i:s'); - + switch ($time_filter) { case 'last_7_days': - $new_date = strtotime('-7 day'); + $new_date = strtotime('-7 day'); $new_date = date('Y-m-d H:i:s', $new_date); $condition_time = ' AND (login_date >= "'.$new_date.'" AND logout_date <= "'.$today.'") '; break; case 'last_30_days': - $new_date = strtotime('-30 day'); + $new_date = strtotime('-30 day'); $new_date = date('Y-m-d H:i:s', $new_date); $condition_time = ' AND (login_date >= "'.$new_date.'" AND logout_date <= "'.$today.'") '; - break; + break; case 'custom': if (!empty($start_date) && !empty($end_date)) { - $condition_time = ' AND (login_date >= "'.$start_date.'" AND logout_date <= "'.$end_date.'" ) '; + $condition_time = ' AND (login_date >= "'.$start_date.'" AND logout_date <= "'.$end_date.'" ) '; } break; } $sql = 'SELECT login_date, logout_date FROM '.$tbl_track_login.' - WHERE login_user_id = '.intval($user_id).$condition_time; + WHERE login_user_id = '.intval($user_id).$condition_time; $rs = Database::query($sql); $nb_seconds = 0; @@ -127,7 +127,7 @@ class Tracking { $sql = "SELECT SUM(UNIX_TIMESTAMP(logout_course_date) - UNIX_TIMESTAMP(login_course_date)) as nb_seconds FROM $tbl_track_course WHERE UNIX_TIMESTAMP(logout_course_date) > UNIX_TIMESTAMP(login_course_date) AND course_code='$course_code' AND session_id = '$session_id' $condition_user"; - + $rs = Database::query($sql); $row = Database::fetch_array($rs); return $row['nb_seconds']; @@ -372,8 +372,8 @@ class Tracking { $session_id = intval($session_id); $condition_session = " AND session_id = $session_id "; } - $sql = "SELECT count(id) FROM $tbl_course_quiz - WHERE c_id = {$a_course['real_id']} AND active <> -1 $condition_quiz "; + $sql = "SELECT count(id) FROM $tbl_course_quiz + WHERE c_id = {$a_course['real_id']} AND active <> -1 $condition_quiz "; $count_quiz = Database::fetch_row(Database::query($sql)); $quiz_avg_total_score = 0; @@ -386,7 +386,7 @@ class Tracking { } if (empty($exercise_id)) { - $sql = "SELECT id FROM $tbl_course_quiz + $sql = "SELECT id FROM $tbl_course_quiz WHERE c_id = {$a_course['real_id']} AND active <> -1 $condition_quiz"; $exercises = Database::fetch_row(Database::query($sql)); $exercise_list = array(); @@ -414,15 +414,15 @@ class Tracking { $res = Database::query($sql); $row = Database::fetch_array($res); $quiz_avg_score = 0; - - if (!empty($row['avg_score'])) { - $quiz_avg_score = round($row['avg_score'],2); + + if (!empty($row['avg_score'])) { + $quiz_avg_score = round($row['avg_score'],2); } - - if(!empty($row['num_attempts'])) { - $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2); + + if(!empty($row['num_attempts'])) { + $quiz_avg_score = round($quiz_avg_score / $row['num_attempts'], 2); } - if (is_array($student_id)) { + if (is_array($student_id)) { $quiz_avg_score = round($quiz_avg_score / count($student_id), 2); } return $quiz_avg_score; @@ -433,7 +433,7 @@ class Tracking { /** - * Get count student's exercise COMPLETED attempts + * Get count student's exercise COMPLETED attempts * @param int Student id * @param string Course code * @param int Exercise id @@ -451,7 +451,7 @@ class Tracking { if (!empty($lp_id)) $lp_id = intval($lp_id); if (!empty($lp_item_id)) $lp_id = intval($lp_item_id); - + $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex @@ -460,13 +460,13 @@ class Tracking { AND status = '' AND orig_lp_id = $lp_id AND orig_lp_item_id = $lp_item_id - AND exe_user_id= $student_id + AND exe_user_id= $student_id AND session_id = $session_id "; - + $rs = Database::query($sql); $row = Database::fetch_row($rs); $count_attempts = $row[0]; - + return $count_attempts; } @@ -476,32 +476,32 @@ class Tracking { * @param string course code * @param int session id */ - + function get_exercise_student_progress($exercise_list, $user_id, $course_code, $session_id) { $course_code = Database::escape_string($course_code); $user_id = intval($user_id); - $session_id = intval($session_id); - + $session_id = intval($session_id); + if (empty($exercise_list)) { return '0%'; - } + } $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); - $exercise_list = array_keys($exercise_list); + $exercise_list = array_keys($exercise_list); $exercise_list = array_map('intval', $exercise_list); - + $exercise_list_imploded = implode("' ,'", $exercise_list); - + $sql = "SELECT COUNT(DISTINCT ex.exe_exo_id) FROM $tbl_stats_exercices AS ex WHERE ex.exe_cours_id = '$course_code' AND ex.session_id = $session_id AND ex.exe_user_id = $user_id AND ex.exe_exo_id IN ('$exercise_list_imploded') "; - + $rs = Database::query($sql); $count = 0; if ($rs) { $row = Database::fetch_row($rs); $count = $row[0]; - } + } $count = ($count != 0 ) ? 100*round(intval($count)/count($exercise_list), 2) .'%' : '0%'; return $count; } @@ -510,17 +510,17 @@ class Tracking { function get_exercise_student_average_best_attempt($exercise_list, $user_id, $course_code, $session_id) { $result = 0; foreach($exercise_list as $exercise_data) { - $exercise_id = $exercise_data['id']; + $exercise_id = $exercise_data['id']; $best_attempt = get_best_attempt_exercise_results_per_user($user_id, $exercise_id , $course_code, $session_id); - - if (!empty($best_attempt)) { - $result += $best_attempt['exe_result']/$best_attempt['exe_weighting']; + + if (!empty($best_attempt)) { + $result += $best_attempt['exe_result']/$best_attempt['exe_weighting']; } } $result = $result/ count($exercise_list); $result = round($result, 2)*100; - return $result.'%'; - + return $result.'%'; + } /** @@ -577,10 +577,10 @@ class Tracking { // Get last view for each student (in case of multi-attempt) // Also filter on LPs of this session $sql_maxes = "SELECT MAX(view_count), progress FROM $tbl_course_lp_view lp_view ". - "WHERE c_id = {$a_course['real_id']} AND - $condition_user session_id = $session_id AND + "WHERE c_id = {$a_course['real_id']} AND + $condition_user session_id = $session_id AND lp_view.lp_id IN (".implode(',',$lp_id).") ". - "GROUP BY lp_id, user_id"; + "GROUP BY lp_id, user_id"; $res_maxes = Database::query($sql_maxes); $sum = 0; while ($row_maxes = Database::fetch_array($res_maxes)) { @@ -627,7 +627,7 @@ class Tracking { } if ($debug) echo '

Tracking::get_avg_student_score

'; - // get global tables names + // get global tables names $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $tbl_stats_attempts = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); @@ -641,7 +641,7 @@ class Tracking { $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM); $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW); $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW); - + $course_id = $course['real_id']; // Compose a filter based on optional learning paths list given @@ -701,10 +701,10 @@ class Tracking { // Getting latest LP result for a student //@todo problem when a course have more than 1500 users $sql = "SELECT MAX(view_count) as vc, id, progress, lp_id, user_id FROM $lp_view_table - WHERE c_id = $course_id AND - lp_id IN (".implode(',',$lp_list).") - $condition_user1 AND - session_id = $session_id + WHERE c_id = $course_id AND + lp_id IN (".implode(',',$lp_list).") + $condition_user1 AND + session_id = $session_id GROUP BY lp_id, user_id"; if ($debug) echo $sql; $rs_last_lp_view_id = Database::query($sql); @@ -712,7 +712,7 @@ class Tracking { $global_result = 0; if (Database::num_rows($rs_last_lp_view_id) > 0) { - // Cycle through each line of the results (grouped by lp_id, user_id) + // Cycle through each line of the results (grouped by lp_id, user_id) while ($row_lp_view = Database::fetch_array($rs_last_lp_view_id)) { $count_items = 0; $lp_partial_total = 0; @@ -724,9 +724,9 @@ class Tracking { $user_id = $row_lp_view['user_id']; if ($debug) echo '

LP id '.$lp_id.'

'; - if ($get_only_latest_attempt_results) { + if ($get_only_latest_attempt_results) { //Getting lp_items done by the user - $sql = "SELECT DISTINCT lp_item_id FROM $lp_item_view_table + $sql = "SELECT DISTINCT lp_item_id FROM $lp_item_view_table WHERE c_id = $course_id AND lp_view_id = $lp_view_id ORDER BY lp_item_id"; $res_lp_item = Database::query($sql); @@ -735,12 +735,12 @@ class Tracking { //Getting the most recent attempt $sql = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid - FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."') - WHERE lp_iv.c_id = $course_id AND + FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."') + WHERE lp_iv.c_id = $course_id AND lp_i.c_id = $course_id AND - lp_item_id = $my_lp_item_id AND - lp_view_id = $lp_view_id - ORDER BY view_count DESC + lp_item_id = $my_lp_item_id AND + lp_view_id = $lp_view_id + ORDER BY view_count DESC LIMIT 1"; $res_lp_item_result = Database::query($sql); while ($row_max_score = Database::fetch_array($res_lp_item_result,'ASSOC')) { @@ -751,21 +751,21 @@ class Tracking { // For the currently analysed view, get the score and // max_score of each item if it is a sco or a TOOL_QUIZ $sql_max_score = "SELECT lp_iv.id as lp_item_view_id, lp_iv.score as score,lp_i.max_score, lp_iv.max_score as max_score_item_view, lp_i.path, lp_i.item_type, lp_i.id as iid - FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."') - WHERE lp_iv.c_id = $course_id AND + FROM $lp_item_view_table as lp_iv INNER JOIN $lp_item_table as lp_i ON lp_i.id = lp_iv.lp_item_id AND (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."') + WHERE lp_iv.c_id = $course_id AND lp_i.c_id = $course_id AND lp_view_id = $lp_view_id "; if ($debug) echo $sql_max_score.'
'; $res_max_score = Database::query($sql_max_score); - + while ($row_max_score = Database::fetch_array($res_max_score,'ASSOC')) { $list[]= $row_max_score; } - } + } // Go through each scorable element of this view - + $score_of_scorm_calculate = 0; foreach ($list as $row_max_score) { @@ -802,12 +802,12 @@ class Tracking { // Get last attempt to this exercise through // the current lp for the current user $sql_last_attempt = "SELECT exe_id FROM $tbl_stats_exercices WHERE - exe_exo_id = '$item_path' AND - exe_user_id = $user_id AND - orig_lp_item_id = $item_id AND - orig_lp_item_view_id = $lp_item_view_id AND + exe_exo_id = '$item_path' AND + exe_user_id = $user_id AND + orig_lp_item_id = $item_id AND + orig_lp_item_view_id = $lp_item_view_id AND exe_cours_id = '$course_code' AND - session_id = $session_id + session_id = $session_id ORDER BY exe_date DESC LIMIT 1"; if ($debug) echo $sql_last_attempt .'
'; $result_last_attempt = Database::query($sql_last_attempt); @@ -826,7 +826,7 @@ class Tracking { // made of (we need to make this call dynamic // because of random questions selection) $sql = "SELECT SUM(t.ponderation) as maxscore FROM - ( SELECT distinct question_id, marks, ponderation FROM $tbl_stats_attempts AS at INNER JOIN $tbl_quiz_questions AS q ON (q.id = at.question_id) + ( SELECT distinct question_id, marks, ponderation FROM $tbl_stats_attempts AS at INNER JOIN $tbl_quiz_questions AS q ON (q.id = at.question_id) WHERE exe_id ='$id_last_attempt' ) AS t"; $res_max_score_bis = Database::query($sql); $row_max_score_bis = Database :: fetch_array($res_max_score_bis); @@ -857,7 +857,7 @@ class Tracking { if ($debug) echo '

$count_items '.$count_items.'

'; if ($debug) echo '

$score_of_scorm_calculate '.$score_of_scorm_calculate.'

'; - + // var_dump($score_of_scorm_calculate); $global_result += $score_of_scorm_calculate; if ($debug) echo '

$global_result '.$global_result.'

'; @@ -924,7 +924,7 @@ class Tracking { $lp_table = Database :: get_course_table(TABLE_LP_MAIN); $t_lpv = Database :: get_course_table(TABLE_LP_VIEW); $t_lpiv = Database :: get_course_table(TABLE_LP_ITEM_VIEW); - + $course_id = $course['real_id']; // Compose a filter based on optional learning paths list given @@ -937,7 +937,7 @@ class Tracking { $condition_session = ""; $session_id = intval($session_id); - + if (isset($session_id)) { $condition_session = " AND session_id = $session_id "; } @@ -958,9 +958,9 @@ class Tracking { ON item_view.lp_view_id = view.id WHERE item_view.c_id = '.$course_id.' AND - view.c_id = '.$course_id.' AND + view.c_id = '.$course_id.' AND view.lp_id = '.$lp_id.' - AND view.user_id = '.$student_id.' AND + AND view.user_id = '.$student_id.' AND session_id = '.$session_id; $rs = Database::query($sql); @@ -988,7 +988,7 @@ class Tracking { $session_id = intval($session_id); if (!empty($course)) { - + $course_id = $course['real_id']; $lp_table = Database :: get_course_table(TABLE_LP_MAIN); @@ -1008,9 +1008,9 @@ class Tracking { ON item_view.lp_view_id = view.id WHERE item_view.c_id = '.$course_id.' AND - view.c_id = '.$course_id.' AND + view.c_id = '.$course_id.' AND view.lp_id = '.$lp_id.' - AND view.user_id = '.$student_id.' + AND view.user_id = '.$student_id.' AND view.session_id = '.$session_id; $rs = Database::query($sql); if (Database :: num_rows($rs) > 0) { @@ -1038,6 +1038,19 @@ class Tracking { // At first, courses where $coach_id is coach of the course // $sql = 'SELECT id_session, course_code FROM ' . $tbl_session_course_user . ' WHERE id_user=' . $coach_id.' AND status=2'; + + global $_configuration; + if ($_configuration['multiple_access_urls']) { + $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1) { + $sql = 'SELECT scu.id_session, scu.course_code + FROM ' . $tbl_session_course_user . ' scu INNER JOIN '.$tbl_session_rel_access_url.' sru + ON (scu.id_session=sru.session_id) + WHERE scu.id_user=' . $coach_id.' AND scu.status=2 AND sru.access_url_id = '.$access_url_id; + } + } + $result = Database::query($sql); while ($a_courses = Database::fetch_array($result)) { @@ -1067,6 +1080,24 @@ class Tracking { INNER JOIN ' . $tbl_session . ' as session ON session.id = session_course.id_session AND session.id_coach = ' . $coach_id; + if ($_configuration['multiple_access_urls']) { + $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1){ + $sql = 'SELECT session_course_user.id_user + FROM ' . $tbl_session_course_user . ' as session_course_user + INNER JOIN '.$tbl_session_user.' sru ON session_course_user.id_user = sru.id_user AND session_course_user.id_session = sru.id_session + INNER JOIN ' . $tbl_session_course . ' as session_course + ON session_course.course_code = session_course_user.course_code + AND session_course_user.id_session = session_course.id_session + INNER JOIN ' . $tbl_session . ' as session + ON session.id = session_course.id_session + AND session.id_coach = ' . $coach_id.' + INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url + ON session.id = session_rel_url.session_id WHERE access_url_id = '.$access_url_id; + } + } + $result = Database::query($sql); while ($row = Database::fetch_array($result)) { @@ -1258,7 +1289,7 @@ class Tracking { $sql .= ' WHERE access_url_id = '.$access_url_id; } - $result = Database::query($sql); + $result = Database::query($sql); while ($row = Database::fetch_array($result)) { $a_courses[$row['course_code']] = $row['course_code']; } @@ -1284,6 +1315,19 @@ class Tracking { $sql = 'SELECT DISTINCT id, name, date_start, date_end FROM ' . $tbl_session . ' WHERE id_coach=' . $coach_id; + + global $_configuration; + if ($_configuration['multiple_access_urls']) { + $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1){ + $sql = 'SELECT DISTINCT id, name, date_start, date_end + FROM ' . $tbl_session . ' session INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url + ON (session.id = session_rel_url.session_id) + WHERE id_coach=' . $coach_id.' AND access_url_id = '.$access_url_id; + } + } + $rs = Database::query($sql); while ($row = Database::fetch_array($rs)) { $a_sessions[$row["id"]] = $row; @@ -1296,6 +1340,21 @@ class Tracking { ON session.id = session_course_user.id_session AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2'; + global $_configuration; + if ($_configuration['multiple_access_urls']) { + $tbl_session_rel_access_url= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $access_url_id = api_get_current_access_url_id(); + if ($access_url_id != -1){ + $sql = 'SELECT DISTINCT session.id, session.name, session.date_start, session.date_end + FROM ' . $tbl_session . ' as session + INNER JOIN ' . $tbl_session_course_user . ' as session_course_user + ON session.id = session_course_user.id_session AND session_course_user.id_user=' . $coach_id.' AND session_course_user.status=2 + INNER JOIN '.$tbl_session_rel_access_url.' session_rel_url + ON (session.id = session_rel_url.session_id) + WHERE access_url_id = '.$access_url_id; + } + } + $rs = Database::query($sql); while ($row = Database::fetch_array($rs)) { $a_sessions[$row["id"]] = $row; @@ -1372,7 +1431,7 @@ class Tracking { // table definition $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY); $tbl_document = Database :: get_course_table(TABLE_DOCUMENT); - + $course_id = $a_course['real_id']; $condition_user = ""; @@ -1388,13 +1447,13 @@ class Tracking { $condition_session = " AND pub.session_id = $session_id "; } - $sql = "SELECT count(ip.tool) - FROM $tbl_item_property ip INNER JOIN $tbl_document pub - ON ip.ref = pub.id - WHERE ip.c_id = $course_id AND + $sql = "SELECT count(ip.tool) + FROM $tbl_item_property ip INNER JOIN $tbl_document pub + ON ip.ref = pub.id + WHERE ip.c_id = $course_id AND pub.c_id = $course_id AND pub.filetype ='file' AND - ip.tool = 'document' + ip.tool = 'document' $condition_user $condition_session "; $rs = Database::query($sql); $row = Database::fetch_row($rs); @@ -1420,7 +1479,7 @@ class Tracking { // table definition $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY); $tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION); - + $course_id = $a_course['real_id']; $condition_user = ""; @@ -1436,12 +1495,12 @@ class Tracking { $condition_session = " AND pub.session_id = $session_id "; } - $sql = "SELECT count(ip.tool) - FROM $tbl_item_property ip INNER JOIN $tbl_student_publication pub - ON ip.ref = pub.id - WHERE ip.c_id = $course_id AND + $sql = "SELECT count(ip.tool) + FROM $tbl_item_property ip INNER JOIN $tbl_student_publication pub + ON ip.ref = pub.id + WHERE ip.c_id = $course_id AND pub.c_id = $course_id AND - ip.tool='work' + ip.tool='work' $condition_user $condition_session "; $rs = Database::query($sql); $row = Database::fetch_row($rs); @@ -1459,7 +1518,7 @@ class Tracking { * @return int Count of messages */ function count_student_messages($student_id, $course_code, $session_id = null) { - + // protect datas $student_id = intval($student_id); $course_code = addslashes($course_code); @@ -1468,11 +1527,11 @@ class Tracking { $a_course = CourseManager :: get_course_information($course_code); if (!empty($a_course)) { - + // table definition $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST); $tbl_forum = Database :: get_course_table(TABLE_FORUM); - + $course_id = $a_course['real_id']; $condition_user = ""; @@ -1488,11 +1547,11 @@ class Tracking { $condition_session = " AND forum.session_id = $session_id"; } - $sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum - ON forum.forum_id = post.forum_id + $sql = "SELECT 1 FROM $tbl_forum_post post INNER JOIN $tbl_forum forum + ON forum.forum_id = post.forum_id WHERE post.c_id = $course_id AND forum.c_id = $course_id - $condition_user $condition_session "; + $condition_user $condition_session "; $rs = Database::query($sql); return Database::num_rows($rs); } else { @@ -1515,20 +1574,20 @@ class Tracking { if (!empty($a_course)) { $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST); $tbl_forums = Database :: get_course_table(TABLE_FORUM); - + $condition_session = ''; if (isset($session_id)) { $session_id = intval($session_id); $condition_session = ' AND f.session_id = '. $session_id; } - + $course_id = $a_course['real_id']; - - $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f + + $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f ON f.forum_id = p.forum_id - WHERE p.c_id = $course_id AND + WHERE p.c_id = $course_id AND f.c_id = $course_id - $condition_session + $condition_session "; $result = Database::query($sql); $row = Database::fetch_row($result); @@ -1549,11 +1608,11 @@ class Tracking { $course_info = api_get_course_info($course_code); if (empty($course_info)) { return null; - } + } $course_id = $course_info['real_id']; - + $count = 0; - + $tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD); $tbl_forums = Database :: get_course_table(TABLE_FORUM); $condition_session = ''; @@ -1561,8 +1620,8 @@ class Tracking { $session_id = intval($session_id); $condition_session = ' AND f.session_id = '. $session_id; } - - $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id + + $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id WHERE t.c_id = $course_id AND f.c_id = $course_id $condition_session "; $result = Database::query($sql); if (Database::num_rows($result)) { @@ -1584,14 +1643,14 @@ class Tracking { $course_info = api_get_course_info($course_code); if (empty($course_info)) { return null; - } + } $course_id = $course_info['real_id']; $condition_session = ''; if (isset($session_id)) { $session_id = intval($session_id); $condition_session = ' session_id = '. $session_id; - } + } $tbl_forums = Database :: get_course_table(TABLE_FORUM); $sql = "SELECT count(*) FROM $tbl_forums WHERE c_id = $course_id AND $condition_session"; @@ -1612,26 +1671,26 @@ class Tracking { * @param int Session id (optional) * @return int Chat last connections by course in x days */ - public static function chat_connections_during_last_x_days_by_course($course_code,$last_days, $session_id = 0) { + public static function chat_connections_during_last_x_days_by_course($course_code,$last_days, $session_id = 0) { $course_info = api_get_course_info($course_code); if (empty($course_info)) { return null; - } + } $course_id = $course_info['real_id']; - + //protect data $last_days = intval($last_days); $course_code = Database::escape_string($course_code); $session_id = intval($session_id); - + $count = 0; - + $tbl_stats_access = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ACCESS); $sql = "SELECT count(*) FROM $tbl_stats_access WHERE DATE_SUB(NOW(),INTERVAL $last_days DAY) <= access_date AND access_cours_code = '$course_code' AND access_tool='".TOOL_CHAT."' AND access_session_id='$session_id' "; $result = Database::query($sql); - if (Database::num_rows($result)) { + if (Database::num_rows($result)) { $row = Database::fetch_row($result); $count = $row[0]; return $count; @@ -1835,7 +1894,7 @@ class Tracking { * @param int User id * @param string Course id * @return float average of test - * @author isaac flores paz + * @author isaac flores paz * @deprecated get_avg_student_score should be use */ public static function get_average_test_scorm_and_lp ($user_id, $course_id) { @@ -1843,12 +1902,12 @@ class Tracking { //the score inside the Reporting table $course_info = api_get_course_info($course_id); $course_id = $course_info['real_id']; - + $lp_table = Database :: get_course_table(TABLE_LP_MAIN); $lp_view_table = Database :: get_course_table(TABLE_LP_VIEW); $lp_item_view_table = Database :: get_course_table(TABLE_LP_ITEM_VIEW); $lp_item_table = Database :: get_course_table(TABLE_LP_ITEM); - + $sql_type = "SELECT id, lp_type FROM $lp_table WHERE c_id = $course_id"; $rs_type=Database::query($sql_type); $average_data=0; @@ -1863,12 +1922,12 @@ class Tracking { $rs_last_lp_view_id = Database::query($sql); $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id')); - $sql_list_view="SELECT li.max_score,lv.user_id,liw.score,(liw.score/li.max_score) as sum_data + $sql_list_view="SELECT li.max_score,lv.user_id,liw.score,(liw.score/li.max_score) as sum_data FROM $lp_item_table li INNER JOIN $lp_view_table lv - ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id - WHERE li.c_id = $course_id AND + ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id + WHERE li.c_id = $course_id AND liw.c_id = $course_id AND - lv.c_id = $course_id AND + lv.c_id = $course_id AND lv.user_id= $user_id AND li.item_type = 'quiz' AND liw.lp_view_id= $lp_view_id"; $sum=0; $tot=0; @@ -1891,12 +1950,12 @@ class Tracking { $rs_last_lp_view_id = Database::query($sql); $lp_view_id = intval(Database::result($rs_last_lp_view_id,0,'id')); - $sql_list_view = "SELECT li.max_score,lv.user_id,liw.score,((liw.score/li.max_score)*100) as sum_data + $sql_list_view = "SELECT li.max_score,lv.user_id,liw.score,((liw.score/li.max_score)*100) as sum_data FROM $lp_item_table li INNER JOIN $lp_view_table lv - ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id - WHERE li.c_id = $course_id AND + ON li.lp_id=lv.lp_id INNER JOIN $lp_item_view_table liw ON liw.lp_item_id=li.id + WHERE li.c_id = $course_id AND liw.c_id = $course_id AND - lv.c_id = $course_id AND + lv.c_id = $course_id AND lv.user_id= $user_id AND (li.item_type = 'sco' OR li.item_type='quiz') AND liw.lp_view_id = $lp_view_id"; $tot=0; $sum=0; @@ -1922,7 +1981,7 @@ class Tracking { foreach($lp_list as $lp_id) { //check if LP have a score - $sql = "SELECT count(id) as count FROM $lp_item_table + $sql = "SELECT count(id) as count FROM $lp_item_table WHERE c_id = $course_id AND item_type = 'quiz' AND lp_id = ".$lp_id." "; $result_have_quiz = Database::query($sql); @@ -2018,9 +2077,9 @@ class Tracking { //protect data $course_code = Database::escape_string($course_code); $course_info = api_get_course_info($course_code); - - $course_id = $course_info['real_id']; - + + $course_id = $course_info['real_id']; + $data = array(); $TABLETRACK_LINKS = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LINKS); @@ -2034,7 +2093,7 @@ class Tracking { $sql = "SELECT cl.title, cl.url,count(DISTINCT sl.links_user_id), count(cl.title) as count_visits FROM $TABLETRACK_LINKS AS sl, $TABLECOURSE_LINKS AS cl - WHERE cl.c_id = $course_id AND + WHERE cl.c_id = $course_id AND sl.links_link_id = cl.id AND sl.links_cours_id = '$course_code' $condition_session @@ -2062,6 +2121,7 @@ class Tracking { $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); + $tbl_access_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $tbl_access_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); $user_id = intval($user_id); @@ -2071,28 +2131,33 @@ class Tracking { FROM '.$tbl_course_user.' cu INNER JOIN '.$tbl_access_rel_course.' a ON(a.course_code = cu.course_code) INNER JOIN '.$tbl_course.' c ON( cu.course_code = c.code) WHERE user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY title '; } else { - $sql = 'SELECT course_code as code, title FROM '.$tbl_course_user.' u INNER JOIN '.$tbl_course.' c ON(course_code = c.code) + $sql = 'SELECT course_code as code, title FROM '.$tbl_course_user.' u INNER JOIN '.$tbl_course.' c ON(course_code = c.code) WHERE u.user_id='.$user_id.' AND relation_type<>'.COURSE_RELATION_TYPE_RRHH.' ORDER BY title '; } $rs = Database::query($sql); $courses = $course_in_session = $temp_course_in_session = array(); - + $courses = array(); while($row = Database :: fetch_array($rs, 'ASSOC')) { $courses[$row['code']] = $row['title']; } - + /* if (!empty($courses)) { //sort need to be improved sort($courses); }*/ - + // Get the list of sessions where the user is subscribed as student - $sql = 'SELECT DISTINCT course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' u INNER JOIN '.$tbl_session.' s ON(s.id = u.id_session) + if ($_configuration['multiple_access_urls']) { + $sql = 'SELECT DISTINCT cu.course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' cu INNER JOIN '.$tbl_access_rel_session.' a ON(a.session_id = cu.id_session) INNER JOIN '.$tbl_session.' s ON(s.id = a.session_id) + WHERE id_user='.$user_id.' AND access_url_id = '.api_get_current_access_url_id().' ORDER BY name '; + } else { + $sql = 'SELECT DISTINCT course_code, id_session as session_id, name FROM '.$tbl_session_course_user.' u INNER JOIN '.$tbl_session.' s ON(s.id = u.id_session) WHERE id_user='.$user_id.' ORDER BY name '; - + } + $rs = Database::query($sql); $simple_session_array = array(); while ($row = Database :: fetch_array($rs)) { @@ -2100,28 +2165,28 @@ class Tracking { $temp_course_in_session[$row['session_id']]['course_list'][$course_info['id']] = $course_info; $temp_course_in_session[$row['session_id']]['name'] = $row['name']; $simple_session_array[$row['session_id']] = $row['name']; - } + } foreach($simple_session_array as $my_session_id => $session_name) { $course_list = $temp_course_in_session[$my_session_id]['course_list']; $my_course_data = array(); - + foreach($course_list as $course_data) { $my_course_data[$course_data['id']] = $course_data['title']; } - $my_course_data = utf8_sort($my_course_data); + $my_course_data = utf8_sort($my_course_data); $final_course_data = array(); - + foreach($my_course_data as $course_id => $value) { $final_course_data[$course_id] = $course_list[$course_id]; } $course_in_session[$my_session_id]['course_list'] = $final_course_data; $course_in_session[$my_session_id]['name'] = $session_name; - } - + } + $html = ''; // Course list - + if ($show_courses) { if (!empty($courses)) { $html .= Display::page_subheader(Display::return_icon('course.png', get_lang('MyCourses'), array(), ICON_SIZE_SMALL).' '.get_lang('MyCourses')); @@ -2131,7 +2196,7 @@ class Tracking { '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).' '.Display::tag('th', get_lang('Progress'), array('class'=>'head')).' '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')),array('class'=>'head')).' - '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' + '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' '.Display::tag('th', get_lang('Details'), array('class'=>'head')).' '; @@ -2140,10 +2205,10 @@ class Tracking { $total_time_login = Tracking :: get_time_spent_on_the_course($user_id, $course_code); $time = api_time_to_hms($total_time_login); - $progress = Tracking :: get_avg_student_progress($user_id, $course_code); + $progress = Tracking :: get_avg_student_progress($user_id, $course_code); $percentage_score = Tracking :: get_avg_student_score($user_id, $course_code, array()); $last_connection = Tracking :: get_last_connection_date_on_the_course($user_id, $course_code); - + if (is_null($progress)) { $progress = '0%'; } else { @@ -2188,50 +2253,50 @@ class Tracking { // Session list if (!empty($course_in_session)) { $main_session_graph = ''; - + if (!isset($_GET['session_id']) && !isset($_GET['course'])) { - - //Load graphics only when calling to an specific session + + //Load graphics only when calling to an specific session $session_graph = array(); - + $all_exercise_graph_name_list = array(); $my_results = array(); $all_exercise_graph_list = array(); - + $all_exercise_start_time = array(); - + foreach ($course_in_session as $my_session_id => $session_data) { - - $course_list = $session_data['course_list']; + + $course_list = $session_data['course_list']; $session_name = $session_data['name']; - + $user_count = count(SessionManager::get_users_by_session($my_session_id)); - + $exercise_graph_name_list = array(); //$user_results = array(); $exercise_graph_list = array(); - + foreach ($course_list as $course_data) { - + $exercise_list = get_all_exercises($course_data, $my_session_id); - - foreach ($exercise_list as $exercise_data) { + + foreach ($exercise_list as $exercise_data) { $exercise_obj = new Exercise($course_data['id']); $exercise_obj->read($exercise_data['id']); //Exercise is not necessary to be visible to show results check the result_disable configuration instead //$visible_return = $exercise_obj->is_visible(); - + if ($exercise_data['results_disabled'] == 0 || $exercise_data['results_disabled'] == 2) { //if ($visible_return['value'] == true) { $best_average = intval(get_best_average_score_by_exercise($exercise_data['id'], $course_data['code'], $my_session_id, $user_count)); $exercise_graph_list[] = $best_average; $all_exercise_graph_list[] = $best_average; - + $user_result_data = get_best_attempt_by_user(api_get_user_id(), $exercise_data['id'], $course_data['code'], $my_session_id); $score = 0; if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) { $score = intval($user_result_data['exe_result']/$user_result_data['exe_weighting'] * 100); - } + } //$user_results[] = $score; $time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0; $all_exercise_start_time[] = $time; @@ -2247,23 +2312,23 @@ class Tracking { $all_exercise_graph_name_list[]= $title; } } - } + } } //Graph per session - //if (!empty($user_results) && !empty($exercise_graph_list)) { + //if (!empty($user_results) && !empty($exercise_graph_list)) { //$session_graph[$my_session_id] = self::generate_session_exercise_graph($exercise_graph_name_list, $user_results, $exercise_graph_list); //} - } - + } + //Complete graph - if (!empty($my_results) && !empty($all_exercise_graph_list)) { + if (!empty($my_results) && !empty($all_exercise_graph_list)) { asort($all_exercise_start_time); - + //Fix exams order $final_all_exercise_graph_name_list = array(); $my_results_final = array(); $final_all_exercise_graph_list = array(); - + foreach ($all_exercise_start_time as $key => $time) { $label_time = ''; if (!empty($time)) { @@ -2278,48 +2343,48 @@ class Tracking { $main_session_graph = self::generate_session_exercise_graph($final_all_exercise_graph_name_list, $my_results_final, $final_all_exercise_graph_list); } } - - + + $html .= Display::page_subheader(Display::return_icon('session.png', get_lang('Sessions'), array(), ICON_SIZE_SMALL).' '.get_lang('Sessions')); - + $html .= ''; //'.Display::tag('th', get_lang('DoneExercises'), array('class'=>'head')).' $html .= ' '.Display::tag('th', get_lang('Session'), array('width'=>'300px')).' '.Display::tag('th', get_lang('PublishedExercises'), array('width'=>'300px')).' - '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).' + '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).' '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).' - '.Display::tag('th', get_lang('Details'), array('class'=>'head')).' + '.Display::tag('th', get_lang('Details'), array('class'=>'head')).' '; foreach ($course_in_session as $my_session_id => $session_data) { $course_list = $session_data['course_list']; $session_name = $session_data['name']; - + if (isset($session_id) && !empty($session_id)) { if ($session_id != $my_session_id) { continue; } } - + $all_exercises = 0; - $all_unanswered_exercises_by_user = 0; + $all_unanswered_exercises_by_user = 0; $all_average = 0; $stats_array = array(); - foreach($course_list as $course_data) { - //All exercises in the course @todo change for a real count + foreach($course_list as $course_data) { + //All exercises in the course @todo change for a real count $exercises = get_all_exercises($course_data, $my_session_id); $count_exercises = 0; if (!empty($exercises)) { $count_exercises = count($exercises); } - - //Count of user results + + //Count of user results //$done_exercises = get_count_exercises_attempted_by_course($course_data['code'], $my_session_id); $done_exercises = null; - + $answered_exercises = 0; if (!empty($exercises)) { foreach($exercises as $exercise_item) { @@ -2327,14 +2392,14 @@ class Tracking { if ($attempts > 1) { $answered_exercises++; } - } + } } - + //Average $average = get_average_score_by_course($course_data['code'], $my_session_id); $all_exercises += $count_exercises; - + $all_unanswered_exercises_by_user += $count_exercises - $answered_exercises; //$all_done_exercise += $done_exercises; $all_average += $average; @@ -2349,14 +2414,14 @@ class Tracking { $html .= ''; } $url = api_get_path(WEB_CODE_PATH)."session/?session_id={$my_session_id}"; - + $html .= Display::tag('td', Display::url($session_name, $url, array('target'=>SESSION_LINK_TARGET))); $html .= Display::tag('td', $all_exercises); $html .= Display::tag('td', $all_unanswered_exercises_by_user); - + //$html .= Display::tag('td', $all_done_exercise); $html .= Display::tag('td', convert_to_percentage($all_average)); - + if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) { $icon = Display::url(Display::return_icon('2rightarrow_na.gif', get_lang('Details')), '?session_id='.$my_session_id); } else { @@ -2365,9 +2430,9 @@ class Tracking { $html .= Display::tag('td', $icon); $html .= ''; } - $html .= '

'; + $html .= '
'; $html .= Display::div($main_session_graph, array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') ); - + //Checking selected session if (isset($_GET['session_id'])) { @@ -2375,7 +2440,7 @@ class Tracking { $session_data = $course_in_session[$session_id_from_get]; $course_list = $session_data['course_list']; - + $html .= Display::tag('h3',$session_data['name'].' - '.get_lang('CourseList')); $html .= ''; @@ -2385,18 +2450,18 @@ class Tracking { '.Display::tag('th', get_lang('PublishedExercises'), array('class'=>'head')).' '.Display::tag('th', get_lang('NewExercises'), array('class'=>'head')).' - '.Display::tag('th', get_lang('MyAverage'), array('class'=>'head')).' - '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).' + '.Display::tag('th', get_lang('MyAverage'), array('class'=>'head')).' + '.Display::tag('th', get_lang('AverageExerciseResult'), array('class'=>'head')).' '.Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class'=>'head')).' '.Display::tag('th', get_lang('LPProgress') , array('class'=>'head')).' '.Display::tag('th', get_lang('Score').Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array ('align' => 'absmiddle', 'hspace' => '3px')), array('class'=>'head')).' - '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' + '.Display::tag('th', get_lang('LastConnexion'), array('class'=>'head')).' '.Display::tag('th', get_lang('Details'), array('class'=>'head')).' '; foreach ($course_list as $course_data) { $course_code = $course_data['code']; - $course_title = $course_data['title']; + $course_title = $course_data['title']; //All exercises in the course @todo change for a real count $exercises = get_all_exercises($course_data, $session_id_from_get); @@ -2406,27 +2471,27 @@ class Tracking { } //Count of user results //$done_exercises = get_best_exercise_results_by_course($course_code, $session_id_from_get); - + //From course exercises NOT from LP exercises!!! - //$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get); + //$done_exercises = get_count_exercises_attempted_by_course($course_code, $session_id_from_get); $answered_exercises = 0; - foreach($exercises as $exercise_item) { - $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_code, $session_id_from_get); + foreach($exercises as $exercise_item) { + $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $course_code, $session_id_from_get); if ($attempts > 1) { $answered_exercises++; } } - + $unanswered_exercises = $count_exercises - $answered_exercises; - + //Average $average = get_average_score_by_course($course_code, $session_id_from_get); $my_average = get_average_score_by_course_by_user(api_get_user_id(), $course_code, $session_id_from_get); - - $stats_array[$course_code] = array( 'exercises' => $count_exercises, + + $stats_array[$course_code] = array( 'exercises' => $count_exercises, 'unanswered_exercises_by_user' => $unanswered_exercises, - 'done_exercises' => $done_exercises, - 'average' => $average, + 'done_exercises' => $done_exercises, + 'average' => $average, 'my_average' => $my_average); $weighting = 0; @@ -2450,8 +2515,8 @@ class Tracking { $html .= Display::tag('td', $stats_array[$course_code]['unanswered_exercises_by_user']); //$html .= Display::tag('td', $stats_array[$course_code]['done_exercises']); $html .= Display::tag('td', convert_to_percentage($stats_array[$course_code]['my_average'])); - - $html .= Display::tag('td', $stats_array[$course_code]['average'] == 0 ? '-' : '('.convert_to_percentage($stats_array[$course_code]['average']).')'); + + $html .= Display::tag('td', $stats_array[$course_code]['average'] == 0 ? '-' : '('.convert_to_percentage($stats_array[$course_code]['average']).')'); $html .= Display::tag('td', $time, array('align'=>'center')); if (is_numeric($progress)) { @@ -2465,8 +2530,8 @@ class Tracking { $percentage_score = $percentage_score.'%'; } else { $percentage_score = '0%'; - } - //Score + } + //Score $html .= Display::tag('td', $percentage_score, array('align'=>'center')); $html .= Display::tag('td', $last_connection, array('align'=>'center')); @@ -2485,9 +2550,9 @@ class Tracking { if (!empty($session_graph[$session_id_from_get])) { //$html .= Display::div($session_graph[$session_id_from_get], array('id'=>'session_graph','class'=>'chart-session', 'style'=>'position:relative; text-align: center;') ); - } + } } - } + } return $html; } @@ -2500,69 +2565,69 @@ class Tracking { */ function show_course_detail($user_id, $course_code, $session_id) { $html = ''; - if (isset($course_code)) { + if (isset($course_code)) { $user_id = intval($user_id); $session_id = intval($session_id); $course = Database::escape_string($course_code); $course_info = CourseManager::get_course_information($course); - - //$course_id = $course_info['real_id']; + + //$course_id = $course_info['real_id']; //$session_name = api_get_session_name($session_id); - + $html .= Display::page_subheader($course_info['title']); - + $html .= '
'.get_lang('Course').'
'; - + //Course details $html .= ' - + - + '; - + if (empty($session_id)) { $user_list = UserManager::get_user_list(); - } else { - $user_list = SessionManager::get_users_by_session($session_id); + } else { + $user_list = SessionManager::get_users_by_session($session_id); } - - //$exercise_list = get_all_exercises($course_info, $session_id, true); + + //$exercise_list = get_all_exercises($course_info, $session_id, true); // Show exercise results of invisible exercises? see BT#4091 $exercise_list = get_all_exercises($course_info, $session_id, false); - - $to_graph_exercise_result = array(); - + + $to_graph_exercise_result = array(); + if (!empty($exercise_list)) { $score = $weighting = $exe_id = 0; foreach ($exercise_list as $exercices) { - + $exercise_obj = new Exercise($course_info['real_id']); $exercise_obj->read($exercices['id']); $visible_return = $exercise_obj->is_visible(); - + //user can see the exercise results even if the exercise was set to invisible? /*if ($visible_return['value'] == false) { continue; }*/ - + $score = $weighting = $attempts = 0; - + //Getting count of attempts by user $attempts = count_exercise_attempts_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id); - + $html .= ''; $url = api_get_path(WEB_CODE_PATH)."exercice/overview.php?cidReq={$course_info['code']}&id_session=$session_id&exerciseId={$exercices['id']}"; - + if ($visible_return['value'] == true) { $exercices['title'] = Display::url($exercices['title'], $url, array('target'=>SESSION_LINK_TARGET)); } - + $html .= Display::tag('td', $exercices['title']); - + //Exercise configuration show results or show only score if ($exercices['results_disabled'] == 0 || $exercices['results_disabled'] == 2) { //For graphics @@ -2572,20 +2637,20 @@ class Tracking { $latest_attempt_url = ''; $best_score = $position = $percentage_score_result = '-'; $graph = $normal_graph = null; - + //Getting best results $best_score_data = get_best_attempt_in_course($exercices['id'], $course_info['code'], $session_id); $best_score = show_score($best_score_data['exe_result'], $best_score_data['exe_weighting']); - + if ($attempts > 0) { $exercise_stat = get_best_attempt_by_user(api_get_user_id(), $exercices['id'], $course_info['code'], $session_id); if (!empty($exercise_stat)) { - + //Always getting the BEST attempt $score = $exercise_stat['exe_result']; $weighting = $exercise_stat['exe_weighting']; $exe_id = $exercise_stat['exe_id']; - + //$latest_attempt_url .= ' '.Display::return_icon('quiz.gif', get_lang('Quiz')).' '; $latest_attempt_url .= '../exercice/exercise_show.php?origin=myprogress&id='.$exe_id.'&cidReq='.$course_info['code'].'&id_session='.$session_id; $percentage_score_result = Display::url(show_score($score, $weighting), $latest_attempt_url); @@ -2594,27 +2659,27 @@ class Tracking { $my_score = $score/$weighting; } $position = get_exercise_result_ranking($my_score, $exe_id, $exercices['id'], $course_info['code'], $session_id, $user_list); - + $graph = self::generate_exercise_result_thumbnail_graph($to_graph_exercise_result[$exercices['id']]); $normal_graph = self::generate_exercise_result_graph($to_graph_exercise_result[$exercices['id']]); } } - + $html .= Display::div($normal_graph, array('id'=>'main_graph_'.$exercices['id'],'class'=>'dialog', 'style'=>'display:none') ); - + if (empty($graph)) { $graph = '-'; } else { $graph = Display::url($graph, '#', array('id'=>$exercices['id'], 'class'=>'opener')); } - + $html .= Display::tag('td', $attempts, array('align'=>'center')); $html .= Display::tag('td', $percentage_score_result, array('align'=>'center')); $html .= Display::tag('td', $position, array('align'=>'center')); $html .= Display::tag('td', $best_score, array('align'=>'center')); $html .= Display::tag('td', $graph, array('align'=>'center')); //$html .= Display::tag('td', $latest_attempt_url, array('align'=>'center', 'width'=>'25')); - + } else { // Exercise configuration NO results $html .= Display::tag('td', $attempts, array('align'=>'center')); @@ -2629,9 +2694,9 @@ class Tracking { $html .= ''; } $html .= '
'.get_lang('Exercices').''.get_lang('Attempts').''.get_lang('Attempts').' '.get_lang('BestAttempt').' '.get_lang('Ranking').' '.get_lang('BestResultInCourse').''.get_lang('Statistics').' '.Display :: return_icon('info3.gif', get_lang('OnlyBestResultsPerStudent'), array('align' => 'absmiddle', 'hspace' => '3px')).''.get_lang('Statistics').' '.Display :: return_icon('info3.gif', get_lang('OnlyBestResultsPerStudent'), array('align' => 'absmiddle', 'hspace' => '3px')).'
'.get_lang('NoEx').'
'; - - - //LP table results + + + //LP table results $html .=''; $html .= Display::tag('th', get_lang('Learnpaths'), array('class'=>'head', 'style'=>'color:#000')); $html .= Display::tag('th', get_lang('LatencyTimeSpent'), array('class'=>'head', 'style'=>'color:#000')); @@ -2640,12 +2705,12 @@ class Tracking { $html .= Display::tag('th', get_lang('LastConnexion'), array('class'=>'head', 'style'=>'color:#000')); $html .= ''; - $list = new LearnpathList(api_get_user_id(), $course_info['code'], $session_id, 'publicated_on ASC', true); + $list = new LearnpathList(api_get_user_id(), $course_info['code'], $session_id, 'publicated_on ASC', true); $lp_list = $list->get_flat_list(); - + if (!empty($lp_list) > 0) { foreach($lp_list as $lp_id => $learnpath) { - + $progress = Tracking::get_avg_student_progress($user_id, $course, array($lp_id), $session_id); $last_connection_in_lp = Tracking::get_last_connection_time_in_lp($user_id, $course, $lp_id, $session_id); $time_spent_in_lp = Tracking::get_time_spent_in_lp($user_id, $course, array($lp_id), $session_id); @@ -2659,7 +2724,7 @@ class Tracking { $time_spent_in_lp = api_time_to_hms($time_spent_in_lp); $html .= ''; - $url = api_get_path(WEB_CODE_PATH)."newscorm/lp_controller.php?cidReq={$course_code}&id_session=$session_id&lp_id=$lp_id&action=view"; + $url = api_get_path(WEB_CODE_PATH)."newscorm/lp_controller.php?cidReq={$course_code}&id_session=$session_id&lp_id=$lp_id&action=view"; $html .= Display::tag('td', Display::url($learnpath['lp_name'], $url, array('target'=>SESSION_LINK_TARGET))); $html .= Display::tag('td', $time_spent_in_lp, array('align'=>'center')); if (is_numeric($progress)) { @@ -2683,7 +2748,7 @@ class Tracking { '; } $html .='
'; - } + } return $html; } @@ -2728,7 +2793,7 @@ class Tracking { $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',8); $graph->setGraphArea(65,50,$main_width-20, $main_height-140); - + $graph->drawFilledRoundedRectangle(7,7,$main_width-7,$main_height-7,5,240,240,240); $graph->drawRoundedRectangle(5,5,$main_width-5,$main_height -5,5,230,230,230); $graph->drawGraphArea(255,255,255,TRUE); @@ -2748,7 +2813,7 @@ class Tracking { // Finish the graph $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',10); $graph->drawLegend($main_width - 150,70,$data_set->GetDataDescription(),255,255,255); - + $graph->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf',11); $graph->drawTitle(50, 30, get_lang('ExercisesInTimeProgressChart'), 50,50,50,$main_width-110, true); @@ -2788,7 +2853,7 @@ class Tracking { if (empty($attempts)) { return null; } - + foreach ($attempts as $attempt) { if (api_get_user_id() == $attempt['exe_user_id']) { if ($attempt['exe_weighting'] != 0 ) { @@ -2857,7 +2922,7 @@ class Tracking { //var_dump($my_final_array, $final_array); echo '
'; //echo '
'; var_dump($my_exercise_result, $exercise_result,$x_axis);
-
+			 
 			$cache = new pCache();
 
 			// Dataset definition
@@ -2866,7 +2931,7 @@ class Tracking {
 			$data_set->AddPoint($my_final_array,"Serie2");
 			//$data_set->AddPoint($x_axis,"Serie3");
 			$data_set->AddAllSeries();
-
+			 
 			// Initialise the graph
 
 			$main_width  = 80;
@@ -3020,7 +3085,7 @@ class Tracking {
 
 			//SCALE_NORMAL, SCALE_START0, SCALE_ADDALLSTART0
 			$main_graph->drawScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_ADDALLSTART0, 150,150,150,TRUE,0,1,TRUE);
-
+			 
 			$main_graph->drawGrid(4,TRUE,230,230,230,50);
 
 			// Draw the 0 line
@@ -3090,7 +3155,7 @@ class TrackingCourseLog {
 		$table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
 		$table_user = Database :: get_main_table(TABLE_MAIN_USER);
 		$table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
-
+		
 		$session_id = intval($session_id);
 
 		$sql = "SELECT
@@ -3101,8 +3166,8 @@ class TrackingCourseLog {
                     insert_date as col5,
                     visibility as col6
                 FROM $table_item_property track_resource, $table_user user
-                WHERE   track_resource.c_id = $course_id AND
-                        track_resource.insert_user_id = user.user_id AND
+                WHERE   track_resource.c_id = $course_id AND 
+                        track_resource.insert_user_id = user.user_id AND 
                         id_session = $session_id ";
 
 		if (isset($_GET['keyword'])) {
@@ -3156,7 +3221,7 @@ class TrackingCourseLog {
 
 			if (!empty($recorset)) {
 				$obj = Database::fetch_object($recorset);
-
+                
 				$name_session = '';
 				$coach_name = '';
 				if (!empty($obj)) {
@@ -3501,7 +3566,7 @@ class TrackingCourseLog {
 			$user_ids = intval($user_ids);
 			$condition_user = " WHERE user.user_id = $user_ids ";
 		}
-
+		 
 		if (!empty($_GET['user_keyword'])) {
 			$keyword = trim(Database::escape_string($_GET['user_keyword']));
 			$condition_user .=  " AND  (user.firstname LIKE '%".$keyword."%' OR user.lastname LIKE '%".$keyword."%'  OR user.username LIKE '%".$keyword."%'  OR user.email LIKE '%".$keyword."%' ) ";
@@ -3523,7 +3588,7 @@ class TrackingCourseLog {
 		if (!in_array($direction, array('ASC','DESC'))) {
 			$direction = 'ASC';
 		}
-
+		
 		$column = intval($column);
 
 		if ($is_western_name_order) {
@@ -3545,28 +3610,28 @@ class TrackingCourseLog {
 		$users    = array ();
 		$t        = time();
 		$row      = array();
-
+        
         $course_info = api_get_course_info($course_code);
-
+        
         $total_surveys = 0;
-
+        
         $total_exercises = get_all_exercises($course_info, $session_id);
-
+                
         if (empty($session_id)) {
             $survey_user_list = array();
             $survey_list = survey_manager::get_surveys($course_code, $session_id);
-
+            
             $total_surveys = count($survey_list);
             $survey_data = array();
             foreach ($survey_list as $survey) {
                 $user_list = survey_manager::get_people_who_filled_survey($survey['survey_id'], false, $course_info['real_id']);
-
+                
                 foreach ($user_list as $user_id) {
                     isset($survey_user_list[$user_id]) ? $survey_user_list[$user_id]++ : $survey_user_list[$user_id] = 1;
                 }
             }
         }
-
+        
 		while ($user = Database::fetch_array($res, 'ASSOC')) {
 			$user['official_code']  = $user['col0'];
 			if ($is_western_name_order) {
@@ -3578,7 +3643,7 @@ class TrackingCourseLog {
 			}
 			$user['username']           = $user['col3'];
 			$user['time']                = api_time_to_hms(Tracking::get_time_spent_on_the_course($user['user_id'], $course_code, $session_id));
-
+    
 			$avg_student_score           = Tracking::get_avg_student_score($user['user_id'], $course_code, array(), $session_id);
 
 			$avg_student_progress        = Tracking::get_avg_student_progress($user['user_id'], $course_code, array(), $session_id);
@@ -3586,20 +3651,20 @@ class TrackingCourseLog {
 				$avg_student_progress=0;
 			}
 			$user['average_progress']   = $avg_student_progress.'%';
-
-            $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id);
+            
+            $total_user_exercise = Tracking::get_exercise_student_progress($total_exercises, $user['user_id'], $course_code, $session_id);            
             $user['exercise_progress']  = $total_user_exercise;
-
+            
             $total_user_exercise = Tracking::get_exercise_student_average_best_attempt($total_exercises, $user['user_id'], $course_code, $session_id);
-            $user['exercise_average_best_attempt']  = $total_user_exercise;
-
+            $user['exercise_average_best_attempt']  = $total_user_exercise;  
+            
 
 			if (is_numeric($avg_student_score)) {
 				$user['student_score']  = $avg_student_score.'%';
 			} else {
 				$user['student_score']  = $avg_student_score;
 			}
-
+            
 			$user['count_assignments']  = Tracking::count_student_assignments($user['user_id'], $course_code, $session_id);
 			$user['count_messages']     = Tracking::count_student_messages($user['user_id'], $course_code, $session_id);
 			$user['first_connection']   = Tracking::get_first_connection_date_on_the_course($user['user_id'], $course_code, $session_id);
@@ -3607,7 +3672,7 @@ class TrackingCourseLog {
 
 			// we need to display an additional profile field
 			$user['additional'] = '';
-
+            
 			if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) {
 				if (isset($additional_user_profile_info[$user['user_id']]) && is_array($additional_user_profile_info[$user['user_id']])) {
 					$user['additional'] = implode(', ', $additional_user_profile_info[$user['user_id']]);
@@ -3617,16 +3682,16 @@ class TrackingCourseLog {
             if (empty($session_id)) {
                 $user['survey'] = (isset($survey_user_list[$user['user_id']]) ? $survey_user_list[$user['user_id']] : 0) .' / '.$total_surveys;
             }
-
+                        
 			$user['link'] = '
'; // store columns in array $users - + $is_western_name_order = api_is_western_name_order(); $user_row = array(); - + $user_row[]= $user['official_code']; //0 - + if ($is_western_name_order) { $user_row[]= $user['lastname']; $user_row[]= $user['firstname']; @@ -3635,34 +3700,34 @@ class TrackingCourseLog { $user_row[]= $user['lastname']; } $user_row[]= $user['username']; // hubr - $user_row[]= $user['time']; //3 - $user_row[]= $user['average_progress']; + $user_row[]= $user['time']; //3 + $user_row[]= $user['average_progress']; $user_row[]= $user['exercise_progress']; + + $user_row[]= $user['exercise_average_best_attempt']; - $user_row[]= $user['exercise_average_best_attempt']; - - + $user_row[]= $user['student_score']; $user_row[]= $user['count_assignments']; $user_row[]= $user['count_messages']; //8 - + if (empty($session_id)) { $user_row[]= $user['survey']; } - + $user_row[]= $user['first_connection']; - $user_row[]= $user['last_connection']; + $user_row[]= $user['last_connection']; if (isset($_GET['additional_profile_field']) AND is_numeric($_GET['additional_profile_field'])) { - $user_row[]= $user['additional']; + $user_row[]= $user['additional']; } - + $user_row[]= $user['link']; - + $users[] = $user_row; - + if ($export_csv) { if (empty($session_id)) { - $user_row[11] = strip_tags($user_row[11]); + $user_row[11] = strip_tags($user_row[11]); $user_row[12] = strip_tags($user_row[12]); unset($user_row[14]); unset($user_row[15]); @@ -3672,7 +3737,7 @@ class TrackingCourseLog { unset($user_row[13]); unset($user_row[14]); } - + $csv_content[] = $user_row; } } diff --git a/main/inc/lib/urlmanager.lib.php b/main/inc/lib/urlmanager.lib.php index 2aa95f0271..2f7ce7a14e 100644 --- a/main/inc/lib/urlmanager.lib.php +++ b/main/inc/lib/urlmanager.lib.php @@ -204,14 +204,22 @@ class UrlManager * @param int access url id * @return array Database::store_result of the result * */ - public static function get_url_rel_session_data($access_url_id='') { + public static function get_url_rel_session_data($access_url_id='') + { + $where =''; + $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); + + if (!empty($access_url_id)) + $where ="WHERE $table_url_rel_session.access_url_id = ".Database::escape_string($access_url_id); - $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION); $sql="SELECT id, name, access_url_id FROM $tbl_session u INNER JOIN $table_url_rel_session ON $table_url_rel_session.session_id = id + $where ORDER BY name, id"; + $result=Database::query($sql); $sessions=Database::store_result($result); return $sessions; @@ -272,6 +280,24 @@ class UrlManager } + /** + * Checks the relationship between an URL and a Session (return the num_rows) + * @author Julio Montoya + * @param int user id + * @param int url id + * @return boolean true if success + * */ + public static function relation_url_session_exist($session_id, $url_id) { + $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $session_id = intval($session_id); + $url_id = intval($url_id); + $sql= "SELECT session_id FROM $table_url_rel_session WHERE access_url_id = ".Database::escape_string($url_id)." AND session_id = ".Database::escape_string($session_id); + $result = Database::query($sql); + $num = Database::num_rows($result); + return $num; + } + + /** * Add a group of users into a group of URLs * @author Julio Montoya @@ -333,6 +359,36 @@ class UrlManager } + /** + * Add a group of sessions into a group of URLs + * @author Julio Montoya + * @param array of session ids + * @param array of url_ids + * */ + public static function add_sessions_to_urls($session_list,$url_list) + { + $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $result_array=array(); + + if (is_array($session_list) && is_array($url_list)){ + foreach ($url_list as $url_id) { + foreach ($session_list as $session_id) { + $count = UrlManager::relation_url_session_exist($session_id,$url_id); + + if ($count==0) { + $sql = "INSERT INTO $table_url_rel_session + SET session_id = ".Database::escape_string($session_id).", access_url_id = ".Database::escape_string($url_id); + $result = Database::query($sql); + if($result) + $result_array[$url_id][$session_id]=1; + else + $result_array[$url_id][$session_id]=0; + } + } + } + } + return $result_array; + } /** * Add a user into a url @@ -366,6 +422,28 @@ class UrlManager return $result; } + /** + * Inserts a session to a URL (access_url_rel_session table) + * @param int Session ID + * @param int URL ID + * @return bool True on success, false session already exists or insert failed + */ + public static function add_session_to_url($session_id, $url_id = 1) { + $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + if (empty($url_id)) $url_id=1; + $result = false; + $count = UrlManager::relation_url_session_exist($session_id,$url_id); + $session_id = intval($session_id); + if (empty($count) && !empty($session_id)) { + $url_id = intval($url_id); + $sql = "INSERT INTO $table_url_rel_session + SET session_id = ".Database::escape_string($session_id).", access_url_id = ".Database::escape_string($url_id); + $result = Database::query($sql); + } + return $result; + } + + /** * Deletes an url and user relationship * @author Julio Montoya @@ -398,18 +476,33 @@ class UrlManager return $result; } + /** + * Deletes an url and session relationship + * @author Julio Montoya + * @param char course code + * @param int url id + * @return boolean true if success + * */ + public static function delete_url_rel_session($session_id, $url_id) { + $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $sql= "DELETE FROM $table_url_rel_session WHERE session_id = ".Database::escape_string($session_id)." AND access_url_id=".Database::escape_string($url_id)." "; + $result = Database::query($sql,'ASSOC'); + return $result; + } + + /** * Updates the access_url_rel_user table with a given user list * @author Julio Montoya * @param array user list * @param int access_url_id * */ - public static function update_urls_rel_user($user_list, $access_url_id) { + public static function update_urls_rel_user($user_list, $access_url_id) { $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $sql = "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".intval($access_url_id); $result = Database::query($sql); $existing_users = array(); - + //Getting all users while($row = Database::fetch_array($result)){ $existing_users[] = $row['user_id']; @@ -425,7 +518,7 @@ class UrlManager } } } - + $users_deleted = array(); //deleting old users foreach($existing_users as $user_id_to_delete) { @@ -436,7 +529,7 @@ class UrlManager } } } - + if (empty($users_added) && empty($users_deleted)) { return false; } @@ -481,6 +574,44 @@ class UrlManager } } + /** + * Updates the access_url_rel_session table with a given user list + * @author Julio Montoya + * @param array user list + * @param int access_url_id + * */ + public static function update_urls_rel_session($session_list,$access_url_id) { + $table_session = Database :: get_main_table(TABLE_MAIN_SESSION); + $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + + $sql = "SELECT session_id FROM $table_url_rel_session WHERE access_url_id=".Database::escape_string($access_url_id); + $result = Database::query($sql); + $existing_sessions = array(); + + while($row = Database::fetch_array($result)){ + $existing_sessions[] = $row['session_id']; + } + + //adding users + foreach($session_list as $session) { + if(!in_array($session, $existing_sessions)) { + if (!empty($session) && !empty($access_url_id)) { + UrlManager::add_session_to_url($session, $access_url_id); + } + } + } + + //deleting old users + foreach($existing_sessions as $existing_session) { + if(!in_array($existing_session, $session_list)) { + if (!empty($existing_session) && !empty($access_url_id)) { + UrlManager::delete_url_rel_session($existing_session,$access_url_id); + } + } + } + } + + public static function get_access_url_from_user($user_id) { $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); $table_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL); @@ -491,6 +622,18 @@ class UrlManager $url_list = Database::store_result($result,'ASSOC'); return $url_list; } + + public static function get_access_url_from_session($session_id) { + $table_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); + $table_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL); + $sql = "SELECT url, access_url_id FROM $table_url_rel_session url_rel_session INNER JOIN $table_url u + ON (url_rel_session.access_url_id = u.id) + WHERE session_id = ".Database::escape_string($session_id); + $result = Database::query($sql); + $url_list = Database::store_result($result); + return $url_list; + } + /** * diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php index 380da16b66..1ed9be1ebe 100644 --- a/main/inc/lib/usermanager.lib.php +++ b/main/inc/lib/usermanager.lib.php @@ -15,8 +15,8 @@ * @package chamilo.include.user */ class UserManager { - - // Constants for user extra field types. + + // Constants for user extra field types. CONST USER_FIELD_TYPE_TEXT = 1; CONST USER_FIELD_TYPE_TEXTAREA = 2; CONST USER_FIELD_TYPE_RADIO = 3; @@ -64,8 +64,8 @@ class UserManager { global $_user, $_configuration; $original_password = $password; $access_url_id = 1; - - if (api_get_multiple_access_url()) { + + if (api_get_multiple_access_url()) { $access_url_id = api_get_current_access_url_id(); } if (is_array($_configuration[$access_url_id]) && isset($_configuration[$access_url_id]['hosting_limit_users']) && $_configuration[$access_url_id]['hosting_limit_users'] > 0) { @@ -85,12 +85,12 @@ class UserManager { $lastName = Security::remove_XSS($lastName); $loginName = Security::remove_XSS($loginName); $phone = Security::remove_XSS($phone); - + // database table definition $table_user = Database::get_main_table(TABLE_MAIN_USER); //Checking the user language - $languages = api_get_languages(); + $languages = api_get_languages(); if (!in_array($language, $languages['folder'])) { $language = api_get_setting('platformLanguage'); } @@ -140,14 +140,14 @@ class UserManager { $result = Database::query($sql); if ($result) { //echo "id returned"; - $return = Database::insert_id(); - if (api_get_multiple_access_url()) { - UrlManager::add_user_to_url($return, api_get_current_access_url_id()); + $return = Database::insert_id(); + if (api_get_multiple_access_url()) { + UrlManager::add_user_to_url($return, api_get_current_access_url_id()); } else { //we are adding by default the access_url_user table with access_url_id = 1 UrlManager::add_user_to_url($return, 1); } - + if (!empty($email) && $send_mail) { $recipient_name = api_get_person_name($firstName, $lastName, null, PERSON_NAME_EMAIL_ADDRESS); $emailsubject = '['.api_get_setting('siteName').'] '.get_lang('YourReg').' '.api_get_setting('siteName'); @@ -163,7 +163,7 @@ class UserManager { } } else { $emailbody = get_lang('Dear')." ".stripslashes(api_get_person_name($firstName, $lastName)).",\n\n".get_lang('YouAreReg')." ".api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $loginName ."\n". get_lang('Pass')." : ".stripslashes($original_password)."\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $_configuration['root_web'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator'); - } + } /* MANAGE EVENT WITH MAIL */ @@ -171,22 +171,22 @@ class UserManager { { $values["about_user"] = $return; $values["password"] = $original_password; - + $values["send_to"] = array($return); $values["prior_lang"] = null; - + EventsDispatcher::events('user_registration', $values); } else { - @api_mail_html($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin); + @api_mail_html($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin); } - /* ENDS MANAGE EVENT WITH MAIL */ - + /* ENDS MANAGE EVENT WITH MAIL */ + } + - - // Add event to system log + // Add event to system log $user_id_manager = api_get_user_id(); $user_info = api_get_user_info($return); event_system(LOG_USER_CREATE, LOG_USER_ID, $return, api_get_utc_datetime(), $user_id_manager, null, $user_info); @@ -218,7 +218,7 @@ class UserManager { global $_configuration; if (isset($_configuration['delete_users']) && $_configuration['delete_users'] == false) { return false; - } + } $table_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER); if ($user_id != strval(intval($user_id))) return false; if ($user_id === false) return false; @@ -240,7 +240,7 @@ class UserManager { * @return boolean true if user is succesfully deleted, false otherwise */ public static function delete_user($user_id) { - + if ($user_id != strval(intval($user_id))) return false; if ($user_id === false) return false; @@ -255,12 +255,12 @@ class UserManager { $table_session_user = Database :: get_main_table(TABLE_MAIN_SESSION_USER); $table_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $table_group = Database :: get_course_table(TABLE_GROUP_USER); - + // Unsubscribe the user from all groups in all his courses - $sql = "SELECT c.id FROM $table_course c, $table_course_user cu + $sql = "SELECT c.id FROM $table_course c, $table_course_user cu WHERE cu.user_id = '".$user_id."' AND relation_type<>".COURSE_RELATION_TYPE_RRHH." AND c.code = cu.course_code"; $res = Database::query($sql); - while ($course = Database::fetch_object($res)) { + while ($course = Database::fetch_object($res)) { $sql = "DELETE FROM $table_group WHERE c_id = {$course->id} AND user_id = $user_id"; Database::query($sql); } @@ -318,8 +318,8 @@ class UserManager { $resv = Database::query($sqlv); require_once api_get_path(LIBRARY_PATH).'urlmanager.lib.php'; - if (api_get_multiple_access_url()) { - $url_id = api_get_current_access_url_id(); + if (api_get_multiple_access_url()) { + $url_id = api_get_current_access_url_id(); UrlManager::delete_url_rel_user($user_id, $url_id); } else { //we delete the user from the url_id =1 @@ -327,7 +327,7 @@ class UserManager { } if (api_get_setting('allow_social_tool')=='true' ) { - + require_once api_get_path(LIBRARY_PATH).'group_portal_manager.lib.php'; //Delete user from portal groups $group_list = GroupPortalManager::get_groups_by_user($user_id); @@ -336,23 +336,23 @@ class UserManager { GroupPortalManager::delete_user_rel_group($user_id, $group_id); } } - + //Delete user from friend lists SocialManager::remove_user_rel_user($user_id, true); } - // Add event to system log + // Add event to system log $user_id_manager = api_get_user_id(); event_system(LOG_USER_DELETE, LOG_USER_ID, $user_id, api_get_utc_datetime(), $user_id_manager, null, $user_info); event_system(LOG_USER_DELETE, LOG_USER_OBJECT, implode(';',$user_info), api_get_utc_datetime(), $user_id_manager, null, $user_info); return true; } - + /** * Deactivate users. Can be called either as: - * + * * - UserManager :: delete_users(1, 2, 3); * - UserManager :: delete_users(array(1, 2, 3)); - * + * * @param array|int $ids * @return boolean True if at least one user was successfuly deleted. False otherwise. * @author Laurent Opprecht @@ -360,7 +360,7 @@ class UserManager { static function delete_users($ids = array()) { $result = false; - $ids = is_array($ids) ? $ids : func_get_args(); + $ids = is_array($ids) ? $ids : func_get_args(); $ids = array_map('intval', $ids); foreach($ids as $id) { @@ -372,12 +372,12 @@ class UserManager { /** * Deactivate users. Can be called either as: - * + * * - UserManager :: deactivate_users(1, 2, 3); * - UserManager :: deactivate_users(array(1, 2, 3)); - * + * * @param array|int $ids - * @return boolean + * @return boolean * @author Laurent Opprecht */ static function deactivate_users($ids = array()) @@ -391,19 +391,19 @@ class UserManager { $ids = is_array($ids) ? $ids : func_get_args(); $ids = array_map('intval', $ids); $ids = implode(',', $ids); - + $sql = "UPDATE $table_user SET active = 0 WHERE user_id IN ($ids)"; return Database::query($sql); } /** * Activate users. Can be called either as: - * + * * - UserManager :: activate_users(1, 2, 3); * - UserManager :: activate_users(array(1, 2, 3)); - * + * * @param array|int $ids - * @return boolean + * @return boolean * @author Laurent Opprecht */ static function activate_users($ids = array()) @@ -417,11 +417,11 @@ class UserManager { $ids = is_array($ids) ? $ids : func_get_args(); $ids = array_map('intval', $ids); $ids = implode(',', $ids); - + $sql = "UPDATE $table_user SET active = 1 WHERE user_id IN ($ids)"; return Database::query($sql); } - + /** * Update user information with new openid * @param int $user_id @@ -459,9 +459,9 @@ class UserManager { public static function update_user($user_id, $firstname, $lastname, $username, $password = null, $auth_source = null, $email, $status, $official_code, $phone, $picture_uri, $expiration_date, $active, $creator_id = null, $hr_dept_id = 0, $extra = null, $language = 'english', $encrypt_method = '', $send_email = false, $reset_password = 0) { global $_configuration; $original_password = $password; - + $user_info = api_get_user_info($user_id, false, true); - + if ($reset_password == 0) { $password = null; $auth_source = $user_info['auth_source']; @@ -475,24 +475,24 @@ class UserManager { $password = $password; $auth_source = $auth_source; } - + if ($user_id != strval(intval($user_id))) return false; if ($user_id === false) return false; - + $table_user = Database :: get_main_table(TABLE_MAIN_USER); - + //Checking the user language - $languages = api_get_languages(); + $languages = api_get_languages(); if (!in_array($language, $languages['folder'])) { $language = api_get_setting('platformLanguage'); - } - + } + $sql = "UPDATE $table_user SET lastname='".Database::escape_string($lastname)."', firstname='".Database::escape_string($firstname)."', username='".Database::escape_string($username)."', language='".Database::escape_string($language)."',"; - + if (!is_null($password)) { if ($encrypt_method == '') { $password = api_get_encrypted_password($password); @@ -532,7 +532,7 @@ class UserManager { $res = $res && self::update_extra_field_value($user_id,$fname,$fvalue); } } - + if (!empty($email) && $send_email) { $recipient_name = api_get_person_name($firstname, $lastname, null, PERSON_NAME_EMAIL_ADDRESS); $emailsubject = '['.api_get_setting('siteName').'] '.get_lang('YourReg').' '.api_get_setting('siteName'); @@ -547,10 +547,10 @@ class UserManager { } } else { $emailbody=get_lang('Dear')." ".stripslashes(api_get_person_name($firstname, $lastname)).",\n\n".get_lang('YouAreReg')." ". api_get_setting('siteName') ." ".get_lang('WithTheFollowingSettings')."\n\n".get_lang('Username')." : ". $username . (($reset_password > 0) ? "\n". get_lang('Pass')." : ".stripslashes($original_password) : "") . "\n\n" .get_lang('Address') ." ". api_get_setting('siteName') ." ". get_lang('Is') ." : ". $_configuration['root_web'] ."\n\n". get_lang('Problem'). "\n\n". get_lang('Formula').",\n\n".api_get_person_name(api_get_setting('administratorName'), api_get_setting('administratorSurname'))."\n". get_lang('Manager'). " ".api_get_setting('siteName')."\nT. ".api_get_setting('administratorTelephone')."\n" .get_lang('Email') ." : ".api_get_setting('emailAdministrator'); - } + } @api_mail_html($recipient_name, $email, $emailsubject, $emailbody, $sender_name, $email_admin); } - + return $return; } @@ -635,12 +635,12 @@ class UserManager { $language = api_get_interface_language(); } $firstname = api_substr(preg_replace(USERNAME_PURIFIER, '', api_transliterate($firstname, '', $encoding)), 0, 1); // The first letter only. - + //Looking for a space in the lastname $pos = api_strpos($lastname, ' '); if ($pos !== false ) { $lastname = api_substr($lastname, 0, $pos); - } + } $lastname = preg_replace(USERNAME_PURIFIER, '', api_transliterate($lastname, '', $encoding)); //$username = api_is_western_name_order(null, $language) ? $firstname.$lastname : $lastname.$firstname; @@ -753,28 +753,28 @@ class UserManager { public static function is_username_too_long($username) { return (strlen($username) > USERNAME_MAX_LENGTH); } - - public static function get_user_list_by_ids($ids = array(), $active = null) + + public static function get_user_list_by_ids($ids = array(), $active = null) { if(empty($ids)) { return array(); } - - $ids = is_array($ids) ? $ids : array($ids); - $ids = array_map('intval', $ids); + + $ids = is_array($ids) ? $ids : array($ids); + $ids = array_map('intval', $ids); $ids = implode(',', $ids); - + $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $sql = "SELECT * FROM $tbl_user WHERE user_id IN ($ids)"; if(! is_null($active)) { - $sql .= ' AND active=' . ($active ? '1' : '0'); + $sql .= ' AND active=' . ($active ? '1' : '0'); } - + $rs = Database::query($sql); $result = array(); - while ($row = Database::fetch_array($rs)) + while ($row = Database::fetch_array($rs)) { $result[] = $row; } @@ -803,12 +803,12 @@ class UserManager { if (count($order_by) > 0) { $sql_query .= ' ORDER BY '.Database::escape_string(implode(',', $order_by)); } - + if (is_numeric($limit_from) && is_numeric($limit_from)) { $limit_from = intval($limit_from); $limit_to = intval($limit_to); - $sql_query .= " LIMIT $limit_from, $limit_to"; - } + $sql_query .= " LIMIT $limit_from, $limit_to"; + } $sql_result = Database::query($sql_query); while ($result = Database::fetch_array($sql_result)) { $return_array[] = $result; @@ -828,7 +828,7 @@ class UserManager { $return_array = array(); $sql_query = "SELECT * FROM $user_table"; if (count($conditions) > 0) { - $sql_query .= ' WHERE '; + $sql_query .= ' WHERE '; $temp_conditions = array(); foreach ($conditions as $field => $value) { $field = Database::escape_string($field); @@ -845,7 +845,7 @@ class UserManager { } if (count($order_by) > 0) { $sql_query .= ' ORDER BY '.Database::escape_string(implode(',', $order_by)); - } + } $sql_result = Database::query($sql_query); while ($result = Database::fetch_array($sql_result)) { $return_array[] = $result; @@ -981,7 +981,7 @@ class UserManager { } if (empty($picture_filename) && $anonymous) { return array('dir' => $base.'img/', 'file' => 'unknown.jpg'); - } + } return array('dir' => $dir, 'file' => $picture_filename); } @@ -990,10 +990,10 @@ class UserManager { * Creates new user pfotos in various sizes of a user, or deletes user pfotos. * Note: This method relies on configuration setting from dokeos/main/inc/conf/profile.conf.php * @param int $user_id The user internal identitfication number. - * @param string $file The common file name for the newly created pfotos. + * @param string $file The common file name for the newly created pfotos. * It will be checked and modified for compatibility with the file system. * If full name is provided, path component is ignored. - * If an empty name is provided, then old user photos are deleted only, + * If an empty name is provided, then old user photos are deleted only, * @see UserManager::delete_user_picture() as the prefered way for deletion. * @param string $source_file The full system name of the image from which user photos will be created. * @return string/bool Returns the resulting common file name of created images which usually should be stored in database. @@ -1007,7 +1007,7 @@ class UserManager { if (empty($source_file)) { $source_file = $file; } - + // Configuration options about user photos. require_once api_get_path(CONFIGURATION_PATH).'profile.conf.php'; @@ -1068,18 +1068,18 @@ class UserManager { $filename = $user_id.'_'.$filename; } - // Storing the new photos in 4 versions with various sizes. + // Storing the new photos in 4 versions with various sizes. $small = self::resize_picture($source_file, 22); - $medium = self::resize_picture($source_file, 85); + $medium = self::resize_picture($source_file, 85); $normal = self::resize_picture($source_file, 200); - + $big = new Image($source_file); // This is the original picture. $ok = false; - $ok = $small->send_image($path.'small_'.$filename) && - $medium->send_image($path.'medium_'.$filename) && - $normal->send_image($path.$filename) && + $ok = $small->send_image($path.'small_'.$filename) && + $medium->send_image($path.'medium_'.$filename) && + $normal->send_image($path.$filename) && $big->send_image( $path.'big_'.$filename); return $ok ? $filename : false; } @@ -1129,7 +1129,7 @@ class UserManager { $production_dir = $production_path['dir'].$user_id.'/'; $del_image = api_get_path(WEB_CODE_PATH).'img/delete.gif'; $del_text = get_lang('Delete'); - $production_list = ''; + $production_list = ''; if (count($productions) > 0) { $production_list = '