Report: Lesson progress of course refs BT#7015

1.9.x
César Perales 12 years ago
parent b0e9bf8d93
commit 92a6e58481
  1. 28
      main/inc/ajax/model.ajax.php
  2. 97
      main/inc/lib/sessionmanager.lib.php
  3. 39
      main/mySpace/myspace.lib.php
  4. 27
      main/newscorm/learnpathList.class.php

@ -238,9 +238,9 @@ switch ($action) {
$count = SessionManager::get_count_admin($where_condition);
break;
case 'get_session_lp_progress':
$count = SessionManager::get_count_session_lp_progress(intval($_GET['session_id']));
break;
case 'get_session_progress':
#$count = SessionManager::get_count_session_lp_progress(intval($_GET['session_id']));
#break;
$courses = SessionManager::get_course_list_by_session_id(intval($_GET['session_id']));
//TODO let select course
$course = current($courses);
@ -564,14 +564,32 @@ switch ($action) {
);
break;
case 'get_session_lp_progress':
$columns = array(
'username', 'firstname', 'lastname', 'name', 'progress'
);
$sessionId = 0;
if (isset($_GET['session_id']) && !empty($_GET['session_id']))
{
$sessionId = intval($_GET['session_id']);
$courses = SessionManager::get_course_list_by_session_id($sessionId);
//TODO let select course
$course = current($courses);
}
/**
* Add lessons of course
*
*/
$columns = array(
'username',
'firstname',
'lastname',
);
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
$lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
foreach ($lessons as $lesson_id => $lesson)
{
$columns[] = $lesson_id;
}
$columns[] = 'total';
$result = SessionManager::get_session_lp_progress($sessionId,
array(
'where' => $where_condition,

@ -509,45 +509,84 @@ class SessionManager
*/
public static function get_session_lp_progress($sessionId = 0, $options)
{
$tbl_lp = Database::get_course_table(TABLE_LP_MAIN);
$tbl_lp_view = Database::get_course_table(TABLE_LP_VIEW);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
//tables
$session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_course_lp_view = Database::get_course_table(TABLE_LP_VIEW);
$courses = SessionManager::get_course_list_by_session_id($sessionId);
//TODO let select course
$course = current($courses);
//TODO fix this
$course_info = array('real_id' => $course['id']);
$select = "select u.username, u.firstname, u.lastname, l.name, v.progress
FROM $tbl_lp_view v
INNER JOIN $tbl_lp l ON l.id = v.lp_id
INNER JOIN $tbl_user u ON u.user_id = v.user_id
INNER JOIN $tbl_course c
";
//getting all the students of the course
//we are not using this because it only returns user ids
/*if (empty($sessionId)
{
// Registered students in a course outside session.
$users = CourseManager :: get_student_list_from_course_code($course_code);
} else {
// Registered students in session.
$users = CourseManager :: get_student_list_from_course_code($course_code, true, $sessionId);
}*/
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, u.email, s.course_code FROM $session_course_user s
INNER JOIN $user u ON u.user_id = s.id_user
WHERE course_code = '%s'
AND s.status <> 2 and id_session = %s";
$where = ' WHERE 1=1 ';
if (!empty($options['where'])) {
$where .= ' AND '.$options['where'];
$sql_query = sprintf($sql, $course['code'], $sessionId);
$rs = Database::query($sql_query);
while ($user = Database::fetch_array($rs))
{
$users[$user['user_id']] = $user;
}
$where .= ' AND v.session_id = ' . $sessionId;
//Get lessons
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
$lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
$order = null;
if (!empty($options['order'])) {
$order = " ORDER BY ".$options['order'];
}
$table = array();
foreach ($users as $user)
{
$data = array(
'lastname' => $user[1],
'firstname' => $user[2],
'username' => $user[3],
);
$limit = null;
if (!empty($options['limit'])) {
$limit = " LIMIT ".$options['limit'];
}
//Get lessons progress by user
$sql = "SELECT v.lp_id as id, v.progress
FROM $tbl_course_lp_view v
WHERE v.session_id = %d
AND v.c_id = %d
AND v.user_id = %d";
$sql_query = sprintf($sql, $sessionId, $course_info['real_id'], $user['user_id']);
$result = Database::query($sql_query);
$select .= $where.$order.$limit;
$result = Database::query($select);
$formatted_sessions = array();
if (Database::num_rows($result) > 0) {
while ($row = Database::fetch_assoc($result)) {
$formatted_sessions[] = $row;
$user_lessons = array();
while ($row = Database::fetch_array($result))
{
$user_lessons[$row['id']] = $row;
}
//Match course lessons with user progress
$progress = 0;
$count = 0;
foreach ($lessons as $lesson)
{
$data[$lesson['id']] = (!empty($user_lessons[$lesson['id']]['progress'])) ? $user_lessons[$lesson['id']]['progress'] : 0;
$progress += $data[$lesson['id']];
$count++;
}
$data['total'] = round($progress / $count, 2);
$table[] = $data;
}
return $formatted_sessions;
return $table;
}
/**
* Gets the progress of the given session

@ -276,17 +276,44 @@ class MySpace {
*/
function display_tracking_lp_progress_overview($sessionId = 0) {
//The order is important you need to check the the $column variable in the model.ajax.php file
$columns = array(get_lang('Username'), get_lang('FirstName'), get_lang('LastName'), get_lang('Name'), get_lang('Progress'));
$courses = SessionManager::get_course_list_by_session_id($sessionId);
//TODO let select course
$course = current($courses);
/**
* Column name
* The order is important you need to check the $column variable in the model.ajax.php file
*/
$columns = array(
get_lang('Username'),
get_lang('FirstName'),
get_lang('LastName'),
);
//add lessons of course
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
$lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
foreach ($lessons as $lesson_id => $lesson)
{
$columns[] = $lesson['name'];
}
//Column config
$columns[] = get_lang('Total');
/**
* Column config
*/
$column_model = array(
array('name'=>'username', 'index'=>'username', 'width'=>'160', 'align'=>'left', 'search' => 'true', 'wrap_cell' => "true"),
array('name'=>'firstname', 'index'=>'firstname', 'width'=>'100', 'align'=>'left', 'search' => 'true'),
array('name'=>'lastname', 'index'=>'lastname', 'width'=>'100', 'align'=>'left', 'search' => 'true'),
array('name'=>'name', 'index'=>'name', 'width'=>'100', 'align'=>'left', 'search' => 'true'),
array('name'=>'progress', 'index'=>'progress', 'width'=>'70', 'align'=>'left', 'search' => 'true'),
);
);
//get dinamic column names
foreach ($lessons as $lesson_id => $lesson)
{
$column_model[] = array('name'=> $lesson['id'], 'index'=>$lesson['id'], 'width'=>'70', 'align'=>'left', 'search' => 'true');
}
$column_model[] = array('name'=>'total', 'index'=>'total', 'width'=>'70', 'align'=>'left', 'search' => 'true');
$action_links = '';
// jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_session_lp_progress&session_id=' . intval($sessionId);

@ -163,4 +163,31 @@ class learnpathList {
function get_flat_list() {
return $this->list;
}
/**
* Gets a list of lessons of the given course_code and session_id
* This functions doesn't need user_id
* @param string Text code of the course
* @param int Id of session
* @return array List of lessons with lessons id as keys
*/
function get_course_lessons($course_code, $session_id) {
$tbl_course_lp = Database::get_course_table(TABLE_LP_MAIN);
$course = api_get_course_info($course_code);
//QUery
$sql = "SELECT * FROM $tbl_course_lp
WHERE c_id = %s "; //TODO AND session_id = %s ?
$sql_query = sprintf($sql, $course['real_id']);
$result = Database::query($sql_query);
$lessons = array();
while ($row = Database::fetch_array($result))
{
if (api_get_item_visibility($course, 'learnpath', $row['id'], $session_id))
{
$lessons[$row['id']] = $row;
}
}
return $lessons;
}
}

Loading…
Cancel
Save