Format code, adding Database::escape_string() due recent merge.

1.9.x
Julio Montoya 11 years ago
parent aa8b1517da
commit e288b7776a
  1. 20
      main/announcements/announcement_email.class.php
  2. 4
      main/announcements/announcements.inc.php
  3. 5
      main/inc/ajax/course.ajax.php
  4. 76
      main/inc/ajax/course_home.ajax.php
  5. 14
      main/inc/ajax/model.ajax.php
  6. 5
      main/inc/ajax/session.ajax.php
  7. 18
      main/inc/lib/course.lib.php
  8. 4
      main/inc/lib/display.lib.php
  9. 21
      main/inc/lib/events.lib.inc.php
  10. 6
      main/inc/lib/formvalidator/Element/select_ajax.php
  11. 7
      main/inc/lib/main_api.lib.php
  12. 133
      main/inc/lib/sessionmanager.lib.php
  13. 214
      main/inc/lib/tracking.lib.php
  14. 4
      main/inc/local.inc.php
  15. 14
      main/mySpace/myStudents.php
  16. 61
      main/mySpace/myspace.lib.php
  17. 2
      main/newscorm/lp_stats.php

@ -220,12 +220,16 @@ class AnnouncementEmail
*/ */
public function message($receiverUserId) public function message($receiverUserId)
{ {
$content = $this->announcement('content'); $content = $this->announcement('content');
$content = stripslashes($content);
$content = AnnouncementManager::parse_content($content, $this->course('code'), $session_id);
$session_id = $this->session_id; $session_id = $this->session_id;
$content = AnnouncementManager::parse_content(
$receiverUserId,
$content,
$this->course('code'),
$session_id
);
$user_email = $this->sender('mail'); $user_email = $this->sender('mail');
//$course_param = api_get_cidreq(); //$course_param = api_get_cidreq();
// Build the link by hand because api_get_cidreq() doesn't accept course params // Build the link by hand because api_get_cidreq() doesn't accept course params
@ -235,7 +239,7 @@ class AnnouncementEmail
$result = "<div>$content</div>"; $result = "<div>$content</div>";
// Adding attachment // Adding attachment
$attachment = $this->attachement(); $attachment = $this->attachment();
if (!empty($attachment)) { if (!empty($attachment)) {
$result .= '<br />'; $result .= '<br />';
$result .= Display::url( $result .= Display::url(
@ -245,7 +249,11 @@ class AnnouncementEmail
} }
$result .= '<hr />'; $result .= '<hr />';
$sender_name = api_get_person_name($this->sender('firstName'), $this->sender('lastName'), PERSON_NAME_EMAIL_ADDRESS); $sender_name = api_get_person_name(
$this->sender('firstName'),
$this->sender('lastName'),
PERSON_NAME_EMAIL_ADDRESS
);
$result .= '<a href="mailto:'.$user_email.'">'.$sender_name.'</a><br/>'; $result .= '<a href="mailto:'.$user_email.'">'.$sender_name.'</a><br/>';
$result .= '<a href="'.api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.$course_param.'">'.$course_name.'</a><br/>'; $result .= '<a href="'.api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.$course_param.'">'.$course_name.'</a><br/>';
@ -257,7 +265,7 @@ class AnnouncementEmail
* *
* @return array * @return array
*/ */
public function attachement() public function attachment()
{ {
$result = array(); $result = array();
$tbl_announcement_attachment = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT); $tbl_announcement_attachment = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT);

@ -35,6 +35,7 @@ class AnnouncementManager
* @param int $userId * @param int $userId
* @param string $content * @param string $content
* @param string $course_code * @param string $course_code
* @param int $session_id
* *
* @return mixed * @return mixed
*/ */
@ -52,7 +53,8 @@ class AnnouncementManager
break; break;
} }
} }
$course_link = api_get_course_url($course_code, $session_id);
$courseLink = api_get_course_url($course_code, $session_id);
$data['user_name'] = $readerInfo['username']; $data['user_name'] = $readerInfo['username'];
$data['user_firstname'] = $readerInfo['firstname']; $data['user_firstname'] = $readerInfo['firstname'];

@ -131,7 +131,10 @@ switch ($action) {
$_GET['session_id'] = '%'; $_GET['session_id'] = '%';
} }
$results = SessionManager::get_course_list_by_session_id_like($_GET['session_id'], $_GET['q']); $results = SessionManager::get_course_list_by_session_id_like(
$_GET['session_id'],
$_GET['q']
);
$results2 = array(); $results2 = array();
if (!empty($results)) { if (!empty($results)) {
foreach ($results as $item) { foreach ($results as $item) {

@ -5,7 +5,7 @@
* Responses to AJAX calls * Responses to AJAX calls
*/ */
$action = $_GET['a']; $action = $_GET['a'];
$now = time(); $now = time();
switch ($action) { switch ($action) {
case 'set_visibility': case 'set_visibility':
@ -36,7 +36,7 @@ switch ($action) {
$requested_view = ($tool_visibility == 0 ) ? 'visible.gif' : 'invisible.gif'; $requested_view = ($tool_visibility == 0 ) ? 'visible.gif' : 'invisible.gif';
$requested_visible = ($tool_visibility == 0 ) ? 1 : 0; $requested_visible = ($tool_visibility == 0 ) ? 1 : 0;
//HIDE AND REACTIVATE TOOL //HIDE AND REACTIVATE TOOL
if ($_GET["id"]==strval(intval($_GET["id"]))) { if ($_GET["id"] == strval(intval($_GET["id"]))) {
/* -- session condition for visibility /* -- session condition for visibility
if (!empty($session_id)) { if (!empty($session_id)) {
@ -66,15 +66,12 @@ switch ($action) {
echo json_encode($response_data); echo json_encode($response_data);
} }
break; break;
case 'show_course_information' : case 'show_course_information' :
$language_file = array('course_description'); $language_file = array('course_description');
require_once '../global.inc.php'; require_once '../global.inc.php';
// Get the name of the database course. // Get the name of the database course.
$tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION); $tbl_course_description = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
$course_info = api_get_course_info($_GET['code']); $course_info = api_get_course_info($_GET['code']);
if ($course_info['visibility'] != COURSE_VISIBILITY_OPEN_WORLD) { if ($course_info['visibility'] != COURSE_VISIBILITY_OPEN_WORLD) {
@ -85,22 +82,29 @@ switch ($action) {
echo Display::tag('h2', $course_info['name']); echo Display::tag('h2', $course_info['name']);
echo '<br />'; echo '<br />';
$sql = "SELECT * FROM $tbl_course_description WHERE c_id = ".$course_info['real_id']." AND session_id = 0 ORDER BY id"; $sql = "SELECT * FROM $tbl_course_description
WHERE c_id = ".$course_info['real_id']." AND session_id = 0
ORDER BY id";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0 ) { if (Database::num_rows($result) > 0 ) {
while ($description = Database::fetch_object($result)) { while ($description = Database::fetch_object($result)) {
$descriptions[$description->id] = $description; $descriptions[$description->id] = $description;
} }
// Function that displays the details of the course description in html. // Function that displays the details of the course description in html.
echo CourseManager::get_details_course_description_html($descriptions, api_get_system_encoding(), false); echo CourseManager::get_details_course_description_html(
$descriptions,
api_get_system_encoding(),
false
);
} else { } else {
echo get_lang('NoDescription'); echo get_lang('NoDescription');
} }
break; break;
/**
* @todo this functions need to belong to a class or a special wrapper to process the AJAX petitions from the jqgrid
*/
case 'session_courses_lp_default': case 'session_courses_lp_default':
/**
* @todo this functions need to belong to a class or a special
* wrapper to process the AJAX petitions from the jqgrid
*/
require_once '../global.inc.php'; require_once '../global.inc.php';
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php'; require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
@ -128,22 +132,15 @@ switch ($action) {
} }
} }
if(!$sidx) $sidx = 1; if (!$sidx) {
$sidx = 1;
}
$start = $limit*$page - $limit; $start = $limit*$page - $limit;
$course_list = SessionManager::get_course_list_by_session_id($session_id); $course_list = SessionManager::get_course_list_by_session_id($session_id);
$count = 0; $count = 0;
foreach ($course_list as $item) { foreach ($course_list as $item) {
// var_dump($course_list);Exit;
// if(!$item['visibility']) {
// echo "xxx";Exit;
// }
// if (isset($course_id) && !empty($course_id)) {
// if ($course_id != $item['id']) {
// continue;
// }
// }
$list = new LearnpathList(api_get_user_id(), $item['code'], $session_id); $list = new LearnpathList(api_get_user_id(), $item['code'], $session_id);
$flat_list = $list->get_flat_list(); $flat_list = $list->get_flat_list();
$lps[$item['code']] = $flat_list; $lps[$item['code']] = $flat_list;
@ -266,8 +263,8 @@ switch ($action) {
} }
} }
$list = new LearnpathList(api_get_user_id(),$item['code'], $session_id, 'publicated_on DESC'); $list = new LearnpathList(api_get_user_id(),$item['code'], $session_id, 'publicated_on DESC');
$flat_list = $list->get_flat_list(); $flat_list = $list->get_flat_list();
$lps[$item['code']] = $flat_list; $lps[$item['code']] = $flat_list;
$item['title'] = Display::url($item['title'],api_get_path(WEB_COURSE_PATH).$item['directory'].'/?id_session='.$session_id,array('target'=>SESSION_LINK_TARGET)); $item['title'] = Display::url($item['title'],api_get_path(WEB_COURSE_PATH).$item['directory'].'/?id_session='.$session_id,array('target'=>SESSION_LINK_TARGET));
@ -334,12 +331,12 @@ switch ($action) {
} }
} }
if($count > 0 && $limit > 0) { if ($count > 0 && $limit > 0) {
$total_pages = ceil($count/$limit); $total_pages = ceil($count/$limit);
} else { } else {
$total_pages = 0; $total_pages = 0;
} }
$response->total = $total_pages; $response->total = $total_pages;
if ($page > $total_pages) { if ($page > $total_pages) {
$response->page = $total_pages; $response->page = $total_pages;
} else { } else {
@ -348,10 +345,7 @@ switch ($action) {
$response->records = $count; $response->records = $count;
echo json_encode($response); echo json_encode($response);
break; break;
case 'session_courses_lp_by_course': case 'session_courses_lp_by_course':
require_once '../global.inc.php'; require_once '../global.inc.php';
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php'; require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
@ -378,10 +372,11 @@ switch ($action) {
} }
} }
if(!$sidx) $sidx =1; if (!$sidx) {
$sidx = 1;
}
$start = $limit*$page - $limit; $start = $limit*$page - $limit;
$course_list = SessionManager::get_course_list_by_session_id($session_id); $course_list = SessionManager::get_course_list_by_session_id($session_id);
$count = 0; $count = 0;
@ -393,10 +388,13 @@ switch ($action) {
} }
} }
$list = new LearnpathList(api_get_user_id(),$item['code'],$session_id); $list = new LearnpathList(api_get_user_id(),$item['code'],$session_id);
$flat_list = $list->get_flat_list(); $flat_list = $list->get_flat_list();
$lps[$item['code']] = $flat_list; $lps[$item['code']] = $flat_list;
$item['title'] = Display::url($item['title'],api_get_path(WEB_COURSE_PATH).$item['directory'].'/?id_session='.$session_id, array('target'=>SESSION_LINK_TARGET)); $item['title'] = Display::url(
$item['title'],
api_get_path(WEB_COURSE_PATH).$item['directory'].'/?id_session='.$session_id, array('target'=>SESSION_LINK_TARGET)
);
foreach($flat_list as $lp_id => $lp_item) { foreach($flat_list as $lp_id => $lp_item) {
$temp[$count]['id']= $lp_id; $temp[$count]['id']= $lp_id;
$lp_url = api_get_path(WEB_CODE_PATH).'newscorm/lp_controller.php?cidReq='.$item['code'].'&id_session='.$session_id.'&lp_id='.$lp_id.'&action=view'; $lp_url = api_get_path(WEB_CODE_PATH).'newscorm/lp_controller.php?cidReq='.$item['code'].'&id_session='.$session_id.'&lp_id='.$lp_id.'&action=view';
@ -430,7 +428,11 @@ switch ($action) {
continue; continue;
} }
} }
$temp[$count]['cell'] = array($date, $item['title'], Display::url($icons.' '.$lp_item['lp_name'], $lp_url, array('target'=>SESSION_LINK_TARGET))); $temp[$count]['cell'] = array(
$date,
$item['title'],
Display::url($icons.' '.$lp_item['lp_name'], $lp_url, array('target'=>SESSION_LINK_TARGET))
);
$temp[$count]['course'] = strip_tags($item['title']); $temp[$count]['course'] = strip_tags($item['title']);
$temp[$count]['lp'] = $lp_item['lp_name']; $temp[$count]['lp'] = $lp_item['lp_name'];
$temp[$count]['date'] = $lp_item['publicated_on']; $temp[$count]['date'] = $lp_item['publicated_on'];
@ -454,14 +456,14 @@ switch ($action) {
} }
} }
if($count > 0 && $limit > 0) { if ($count > 0 && $limit > 0) {
$total_pages = ceil($count/$limit); $total_pages = ceil($count / $limit);
} else { } else {
$total_pages = 0; $total_pages = 0;
} }
$response->total = $total_pages; $response->total = $total_pages;
if ($page > $total_pages) { if ($page > $total_pages) {
$response->page= $total_pages; $response->page = $total_pages;
} else { } else {
$response->page = $page; $response->page = $page;
} }

@ -761,7 +761,12 @@ switch ($action) {
'correct', 'correct',
); );
$result = Tracking::get_exercise_progress($sessionId, $courseId, $exerciseId, $date_from, $date_to, $result = Tracking::get_exercise_progress(
$sessionId,
$courseId,
$exerciseId,
$date_from,
$date_to,
array( array(
'where' => $whereCondition, 'where' => $whereCondition,
'order' => "$sidx $sord", 'order' => "$sidx $sord",
@ -788,8 +793,7 @@ switch ($action) {
); );
require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php'; require_once api_get_path(SYS_CODE_PATH).'newscorm/learnpathList.class.php';
$lessons = LearnpathList::get_course_lessons($course['code'], $sessionId); $lessons = LearnpathList::get_course_lessons($course['code'], $sessionId);
foreach ($lessons as $lesson_id => $lesson) foreach ($lessons as $lesson_id => $lesson) {
{
$columns[] = $lesson_id; $columns[] = $lesson_id;
} }
$columns[] = 'total'; $columns[] = 'total';
@ -854,8 +858,6 @@ switch ($action) {
'wikis', 'wikis',
'surveys', 'surveys',
//exercises //exercises
'course_description_progress',
//exercises
'lessons_total' , 'lessons_total' ,
'lessons_done' , 'lessons_done' ,
'lessons_left' , 'lessons_left' ,
@ -890,7 +892,7 @@ switch ($action) {
$sessionId = 0; $sessionId = 0;
if (!empty($_GET['course_id']) && !empty($_GET['session_id'])) { if (!empty($_GET['course_id']) && !empty($_GET['session_id'])) {
$sessionId = intval($_GET['session_id']); $sessionId = intval($_GET['session_id']);
$courseId = intval($_GET['course_id']); $courseId = intval($_GET['course_id']);
} }
$result = SessionManager::get_session_progress($sessionId, $courseId, $result = SessionManager::get_session_progress($sessionId, $courseId,
array( array(

@ -26,7 +26,10 @@ switch ($action) {
break; break;
case 'search_session': case 'search_session':
if (api_is_platform_admin()) { if (api_is_platform_admin()) {
$results = SessionManager::get_sessions_list(array('s.name LIKE' => "%".$_REQUEST['q']."%")); //$results = SessionManager::get_sessions_list(array('s.name LIKE' => "%".$_REQUEST['q']."%"));
$results = SessionManager::get_sessions_list(
array('s.name LIKE' => "%".$_REQUEST['q']."%")
);
$results2 = array(); $results2 = array();
if (!empty($results)) { if (!empty($results)) {
foreach ($results as $item) { foreach ($results as $item) {

@ -1623,10 +1623,16 @@ class CourseManager
* @param date $date_to * @param date $date_to
* @return array with user id * @return array with user id
*/ */
public static function get_student_list_from_course_code($course_code, $with_session = false, $session_id = 0, $date_from = null, $date_to = null) { public static function get_student_list_from_course_code(
$course_code,
$with_session = false,
$session_id = 0,
$date_from = null,
$date_to = null
) {
$session_id = intval($session_id); $session_id = intval($session_id);
$course_code = Database::escape_string($course_code); $course_code = Database::escape_string($course_code);
$students = array(); $students = array();
if ($session_id == 0) { if ($session_id == 0) {
@ -1642,23 +1648,23 @@ class CourseManager
// students subscribed to the course through a session // students subscribed to the course through a session
if ($with_session) { if ($with_session) {
$joinSession = ""; $joinSession = "";
//Session creation date //Session creation date
if (!empty($date_from) && !empty($date_to)) { if (!empty($date_from) && !empty($date_to)) {
$joinSession = "INNER JOIN " . Database::get_main_table(TABLE_MAIN_SESSION) . " s"; $joinSession = "INNER JOIN " . Database::get_main_table(TABLE_MAIN_SESSION) . " s";
} }
$sql_query = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." scu $sql_query = "SELECT * FROM ".Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER)." scu
$joinSession $joinSession
WHERE scu.course_code = '$course_code' AND scu.status <> 2"; WHERE scu.course_code = '$course_code' AND scu.status <> 2";
if (!empty($date_from) && !empty($date_to)) { if (!empty($date_from) && !empty($date_to)) {
$date_from = Database::escape_string($date_from); $date_from = Database::escape_string($date_from);
$date_to = Database::escape_string($date_to); $date_to = Database::escape_string($date_to);
$sql_query .= " AND s.date_start >= '$date_from' AND s.date_end <= '$date_to'"; $sql_query .= " AND s.date_start >= '$date_from' AND s.date_end <= '$date_to'";
} }
if ($session_id != 0) { if ($session_id != 0) {
$sql_query .= ' AND scu.id_session = '.$session_id; $sql_query .= ' AND scu.id_session = '.$session_id;
} }

@ -1042,7 +1042,7 @@ class Display
$json_encode = json_encode($obj); $json_encode = json_encode($obj);
if (!empty($data)) { if (!empty($data)) {
//Converts the "data":"js_variable" to "data":js_variable, //Converts the "data":"js_variable" to "data":js_variable,
// otherwise it will not work // otherwise it will not work
$json_encode = str_replace('"data":"'.$data_var.'"', '"data":'.$data_var.'', $json_encode); $json_encode = str_replace('"data":"'.$data_var.'"', '"data":'.$data_var.'', $json_encode);
} }
@ -1063,7 +1063,7 @@ class Display
$json .= '});'; $json .= '});';
//Grouping headers option // Grouping headers option
if (isset($extra_params['groupHeaders'])) { if (isset($extra_params['groupHeaders'])) {
$groups = ''; $groups = '';
foreach ($extra_params['groupHeaders'] as $group) { foreach ($extra_params['groupHeaders'] as $group) {

@ -1495,7 +1495,8 @@ function delete_attempt_hotspot($exe_id, $user_id, $course_code, $session_id = 0
* @param int $user_id * @param int $user_id
* @param int $session_id * @param int $session_id
*/ */
function event_course_login($course_code, $user_id, $session_id) { function event_course_login($course_code, $user_id, $session_id)
{
global $course_tracking_table; global $course_tracking_table;
//@todo use api_get_utc_datetime //@todo use api_get_utc_datetime
@ -1506,16 +1507,16 @@ function event_course_login($course_code, $user_id, $session_id) {
$session_id = intval($session_id); $session_id = intval($session_id);
$session_lifetime = 3600; $session_lifetime = 3600;
//We select the last record for the current course in the course tracking table //We select the last record for the current course in the course tracking table
$sql = "SELECT course_access_id FROM $course_tracking_table $sql = "SELECT course_access_id
WHERE user_id = $user_id AND FROM $course_tracking_table
course_code = '$course_code' AND WHERE
session_id = $session_id AND user_id = $user_id AND
login_course_date > '$time' - INTERVAL $session_lifetime SECOND course_code = '$course_code' AND
ORDER BY login_course_date DESC LIMIT 0,1"; session_id = $session_id AND
login_course_date > '$time' - INTERVAL $session_lifetime SECOND
ORDER BY login_course_date DESC LIMIT 0,1";
$result = Database::query($sql); $result = Database::query($sql);
//error_log(preg_replace('/\s+/',' ',$sql));
if (Database::num_rows($result) > 0) { if (Database::num_rows($result) > 0) {
$i_course_access_id = Database::result($result,0,0); $i_course_access_id = Database::result($result,0,0);
@ -1523,12 +1524,10 @@ function event_course_login($course_code, $user_id, $session_id) {
$sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1 $sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1
WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".$session_id; WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".$session_id;
Database::query($sql); Database::query($sql);
//error_log(preg_replace('/\s+/',' ',$sql));
} else { } else {
$sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" . $sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" .
"VALUES('".$course_code."', '".$user_id."', '$time', '$time', '1','".$session_id."')"; "VALUES('".$course_code."', '".$user_id."', '$time', '$time', '1','".$session_id."')";
Database::query($sql); Database::query($sql);
//error_log(preg_replace('/\s+/',' ',$sql));
} }
// Course catalog stats modifications see #4191 // Course catalog stats modifications see #4191
CourseManager::update_course_ranking(null, null, null, null, true, false); CourseManager::update_course_ranking(null, null, null, null, true, false);

@ -60,7 +60,7 @@ class HTML_QuickForm_Select_Ajax extends HTML_QuickForm_select
} }
//Get the minimumInputLength for select2 //Get the minimumInputLength for select2
$minimumInputLength = ($this->getAttribute('minimumInputLength') > 3)? $minimumInputLength = $this->getAttribute('minimumInputLength') > 3 ?
$this->getAttribute('minimumInputLength') : $this->getAttribute('minimumInputLength') :
3 3
; ;
@ -69,7 +69,7 @@ class HTML_QuickForm_Select_Ajax extends HTML_QuickForm_select
if (empty($plHolder)) { if (empty($plHolder)) {
$plHolder = get_lang('SelectAnOption'); $plHolder = get_lang('SelectAnOption');
} }
$html .= '<script> $html .= '<script>
$(function() { $(function() {
$("#'.$this->getAttribute('name').'").select2({ $("#'.$this->getAttribute('name').'").select2({
@ -105,4 +105,4 @@ class HTML_QuickForm_Select_Ajax extends HTML_QuickForm_select
$html .= '<input id="'.$this->getAttribute('name').'" name="'.$this->getAttribute('name').'" />'; $html .= '<input id="'.$this->getAttribute('name').'" name="'.$this->getAttribute('name').'" />';
return $html; return $html;
} }
} }

@ -3223,7 +3223,7 @@ function api_get_datetime($time = null) {
* @param int The session ID (optional) * @param int The session ID (optional)
* @return int -1 on error, 0 if invisible, 1 if visible * @return int -1 on error, 0 if invisible, 1 if visible
*/ */
function api_get_item_visibility($_course, $tool, $id, $session=0) function api_get_item_visibility($_course, $tool, $id, $session = 0)
{ {
if (!is_array($_course) || count($_course) == 0 || empty($tool) || empty($id)) { if (!is_array($_course) || count($_course) == 0 || empty($tool) || empty($id)) {
return -1; return -1;
@ -3242,8 +3242,11 @@ function api_get_item_visibility($_course, $tool, $id, $session=0)
LIMIT 1"; LIMIT 1";
$res = Database::query($sql); $res = Database::query($sql);
if ($res === false || Database::num_rows($res) == 0) { return -1; } if ($res === false || Database::num_rows($res) == 0) {
return -1;
}
$row = Database::fetch_array($res); $row = Database::fetch_array($res);
return $row['visibility']; return $row['visibility'];
} }

@ -14,7 +14,6 @@
*/ */
class SessionManager class SessionManager
{ {
public static $_debug = false; public static $_debug = false;
public function __construct() public function __construct()
@ -64,9 +63,23 @@ class SessionManager
* @return mixed Session ID on success, error message otherwise * @return mixed Session ID on success, error message otherwise
* */ * */
public static function create_session( 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 $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; global $_configuration;
//Check portal limits //Check portal limits
@ -563,7 +576,7 @@ class SessionManager
INNER JOIN $user u ON u.user_id = s.id_user INNER JOIN $user u ON u.user_id = s.id_user
$where $order $limit"; $where $order $limit";
$sql_query = sprintf($sql, $course['code'], $sessionId); $sql_query = sprintf($sql, Database::escape_string($course['code']), $sessionId);
$rs = Database::query($sql_query); $rs = Database::query($sql_query);
while ($user = Database::fetch_array($rs)) { while ($user = Database::fetch_array($rs)) {
@ -589,12 +602,16 @@ class SessionManager
//Get lessons progress by user //Get lessons progress by user
$sql = "SELECT v.lp_id as id, v.progress $sql = "SELECT v.lp_id as id, v.progress
FROM $tbl_course_lp_view v FROM $tbl_course_lp_view v
WHERE v.c_id = %d WHERE v.c_id = %d
AND v.user_id = %d AND v.user_id = %d
$sessionCond"; $sessionCond";
$sql_query = sprintf($sql, $courseId, $user['user_id'], $sessionId); $sql_query = sprintf($sql,
intval($courseId),
Database::escape_string($user['user_id']),
$sessionId
);
$result = Database::query($sql_query); $result = Database::query($sql_query);
@ -674,11 +691,11 @@ class SessionManager
} */ } */
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, u.email, s.course_code $sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, u.email, s.course_code
FROM $session_course_user s FROM $session_course_user s
INNER JOIN $user u ON u.user_id = s.id_user INNER JOIN $user u ON u.user_id = s.id_user
$where $order $limit"; $where $order $limit";
$sql_query = sprintf($sql, $course['code'], $sessionId); $sql_query = sprintf($sql, Database::escape_string($course['code']), $sessionId);
$rs = Database::query($sql_query); $rs = Database::query($sql_query);
while ($user = Database::fetch_array($rs)) { while ($user = Database::fetch_array($rs)) {
$users[$user['user_id']] = $user; $users[$user['user_id']] = $user;
@ -702,13 +719,19 @@ class SessionManager
//Get questions by user //Get questions by user
$sql = "SELECT sa.question_id, sa.option_id, sqo.option_text, sq.type $sql = "SELECT sa.question_id, sa.option_id, sqo.option_text, sq.type
FROM $c_survey_answer sa FROM $c_survey_answer sa
INNER JOIN $c_survey_question sq ON sq.question_id = sa.question_id INNER JOIN $c_survey_question sq
LEFT JOIN $c_survey_question_option sqo ON sqo.c_id = sa.c_id ON sq.question_id = sa.question_id
AND sqo.question_id = sq.question_id LEFT JOIN $c_survey_question_option sqo
AND sqo.question_option_id = sa.option_id ON
AND sqo.survey_id = sq.survey_id sqo.c_id = sa.c_id AND
WHERE sa.survey_id = %d AND sa.c_id = %d AND sa.user = %d sqo.question_id = sq.question_id AND
sqo.question_option_id = sa.option_id AND
sqo.survey_id = sq.survey_id
WHERE
sa.survey_id = %d AND
sa.c_id = %d AND
sa.user = %d
"; //. $where_survey; "; //. $where_survey;
$sql_query = sprintf($sql, $surveyId, $courseId, $user['user_id']); $sql_query = sprintf($sql, $surveyId, $courseId, $user['user_id']);
@ -741,11 +764,14 @@ class SessionManager
*/ */
public static function get_session_progress($sessionId, $courseId, $date_from, $date_to, $options) public static function get_session_progress($sessionId, $courseId, $date_from, $date_to, $options)
{ {
$sessionId = intval($sessionId);
$getAllSessions = false; $getAllSessions = false;
if (empty($sessionId)) { if (empty($sessionId)) {
$sessionId = 0; $sessionId = 0;
$getAllSessions = true; $getAllSessions = true;
} }
//tables //tables
$session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$user = Database::get_main_table(TABLE_MAIN_USER); $user = Database::get_main_table(TABLE_MAIN_USER);
@ -771,8 +797,7 @@ class SessionManager
// Registered students in session. // Registered students in session.
$users = CourseManager :: get_student_list_from_course_code($course_code, true, $sessionId); $users = CourseManager :: get_student_list_from_course_code($course_code, true, $sessionId);
} */ } */
$where = " WHERE course_code = '%s' $where = " WHERE course_code = '%s' AND s.status <> 2 ";
AND s.status <> 2 ";
$limit = null; $limit = null;
if (!empty($options['limit'])) { if (!empty($options['limit'])) {
@ -793,24 +818,23 @@ class SessionManager
if (!empty($sessionId)) { if (!empty($sessionId)) {
$where .= ' AND id_session = %s'; $where .= ' AND id_session = %s';
$queryVariables[] = $sessionId; $queryVariables[] = $sessionId;
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, $sql = "SELECT
u.email, s.course_code, s.id_session u.user_id, u.lastname, u.firstname, u.username,
FROM $session_course_user s u.email, s.course_code, s.id_session
INNER JOIN $user u ON u.user_id = s.id_user FROM $session_course_user s
$where $order $limit"; INNER JOIN $user u
ON u.user_id = s.id_user
$where $order $limit";
} else { } else {
$sql = "SELECT u.user_id, u.lastname, u.firstname, u.username, $sql = "SELECT
u.email, s.course_code, s.id_session u.user_id, u.lastname, u.firstname, u.username,
FROM $session_course_user s u.email, s.course_code, s.id_session
INNER JOIN $user u ON u.user_id = s.id_user FROM $session_course_user s
$where $order $limit"; INNER JOIN $user u ON u.user_id = s.id_user
$where $order $limit";
} }
$sql_query = vsprintf($sql, $queryVariables); $sql_query = vsprintf($sql, $queryVariables);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$rs = Database::query($sql_query); $rs = Database::query($sql_query);
while ($user = Database::fetch_array($rs)) { while ($user = Database::fetch_array($rs)) {
$users[$user['user_id']] = $user; $users[$user['user_id']] = $user;
@ -819,12 +843,8 @@ class SessionManager
/** /**
* Lessons * Lessons
*/ */
$sql = "SELECT * FROM $tbl_course_lp $sql = "SELECT * FROM $tbl_course_lp WHERE c_id = %s "; //AND session_id = %s
WHERE c_id = %s "; //AND session_id = %s
$sql_query = sprintf($sql, $course['real_id']); $sql_query = sprintf($sql, $course['real_id']);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$arrLesson = array(array()); $arrLesson = array(array());
while ($row = Database::fetch_array($result)) { while ($row = Database::fetch_array($result)) {
@ -867,9 +887,6 @@ class SessionManager
} }
$sql_query = sprintf($sql, $course['real_id'], $sessionId); $sql_query = sprintf($sql, $course['real_id'], $sessionId);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
$assignments_total = $row['count']; $assignments_total = $row['count'];
@ -885,9 +902,6 @@ class SessionManager
WHERE c_id = %s and session_id = %s"; WHERE c_id = %s and session_id = %s";
} }
$sql_query = sprintf($sql, $course['real_id'], $sessionId); $sql_query = sprintf($sql, $course['real_id'], $sessionId);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
$wiki_total = $row['count']; $wiki_total = $row['count'];
@ -920,14 +934,10 @@ class SessionManager
where f.c_id = %s and f.session_id = %s"; where f.c_id = %s and f.session_id = %s";
} }
$sql_query = sprintf($sql, $course['real_id'], $sessionId); $sql_query = sprintf($sql, $course['real_id'], $sessionId);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
$forums_total = $row['count']; $forums_total = $row['count'];
//process table info //process table info
foreach ($users as $user) { foreach ($users as $user) {
//Course description //Course description
@ -938,9 +948,7 @@ class SessionManager
AND access_session_id = %s AND access_session_id = %s
AND access_user_id = %s "; AND access_user_id = %s ";
$sql_query = sprintf($sql, $course['code'], $user['id_session'], $user['user_id']); $sql_query = sprintf($sql, $course['code'], $user['id_session'], $user['user_id']);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
$course_description_progress = ($row['count'] > 0) ? 100 : 0; $course_description_progress = ($row['count'] > 0) ? 100 : 0;
@ -978,9 +986,6 @@ class SessionManager
FROM $wiki FROM $wiki
where c_id = %s and session_id = %s and user_id = %s"; where c_id = %s and session_id = %s and user_id = %s";
$sql_query = sprintf($sql, $course['real_id'], $user['id_session'], $user['user_id']); $sql_query = sprintf($sql, $course['real_id'], $user['id_session'], $user['user_id']);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
$wiki_revisions = $row['count']; $wiki_revisions = $row['count'];
@ -993,9 +998,6 @@ class SessionManager
AND default_value_type = 'wiki_page_id' AND default_value_type = 'wiki_page_id'
AND c_id = %s"; AND c_id = %s";
$sql_query = sprintf($sql, $user['user_id'], $course['code'], $course['real_id']); $sql_query = sprintf($sql, $user['user_id'], $course['code'], $course['real_id']);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
@ -1023,9 +1025,7 @@ class SessionManager
INNER JOIN $forum f ON f.forum_id = p.forum_id INNER JOIN $forum f ON f.forum_id = p.forum_id
WHERE p.poster_id = %s and f.session_id = %s and p.c_id = %s"; WHERE p.poster_id = %s and f.session_id = %s and p.c_id = %s";
$sql_query = sprintf($sql, $user['user_id'], $user['id_session'], $course['real_id']); $sql_query = sprintf($sql, $user['user_id'], $user['id_session'], $course['real_id']);
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$result = Database::query($sql_query); $result = Database::query($sql_query);
$row = Database::fetch_array($result); $row = Database::fetch_array($result);
@ -2182,7 +2182,6 @@ class SessionManager
*/ */
public static function get_sessions_list($conditions = array(), $order_by = array()) public static function get_sessions_list($conditions = array(), $order_by = array())
{ {
$session_table = Database::get_main_table(TABLE_MAIN_SESSION); $session_table = Database::get_main_table(TABLE_MAIN_SESSION);
$session_category_table = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); $session_category_table = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
$user_table = Database::get_main_table(TABLE_MAIN_USER); $user_table = Database::get_main_table(TABLE_MAIN_USER);
@ -2214,9 +2213,6 @@ class SessionManager
if (count($order_by) > 0) { if (count($order_by) > 0) {
$sql_query .= ' ORDER BY ' . Database::escape_string(implode(',', $order_by)); $sql_query .= ' ORDER BY ' . Database::escape_string(implode(',', $order_by));
} }
if (self::$_debug) {
error_log(preg_replace('/\s+/', ' ', $sql_query));
}
$sql_result = Database::query($sql_query); $sql_result = Database::query($sql_query);
if (Database::num_rows($sql_result) > 0) { if (Database::num_rows($sql_result) > 0) {
while ($result = Database::fetch_array($sql_result)) { while ($result = Database::fetch_array($sql_result)) {
@ -2661,7 +2657,8 @@ class SessionManager
$course_name = Database::escape_string($course_name); $course_name = Database::escape_string($course_name);
// select the courses // 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 LIKE '$session_id'"; WHERE src.id_session LIKE '$session_id'";
if (!empty($course_name)) { if (!empty($course_name)) {
$sql .= " AND UPPER(c.title) LIKE UPPER('%$course_name%') "; $sql .= " AND UPPER(c.title) LIKE UPPER('%$course_name%') ";

@ -564,15 +564,22 @@ class Tracking
* 1 for active <> -1 * 1 for active <> -1
* 0 for active <> 0 * 0 for active <> 0
* @param int $into_lp 1 for all exercises * @param int $into_lp 1 for all exercises
* 0 for whitout LP * 0 for without LP
* @internal param \Student $mixed id * @internal param \Student $mixed id
* @internal param \Course $string code * @internal param \Course $string code
* @internal param \Exercise $int id (optional), filtered by exercise * @internal param \Exercise $int id (optional), filtered by exercise
* @internal param \Session $int id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered * @internal param \Session $int id (optional), if param $session_id is null it'll return results including sessions, 0 = session is not filtered
* @return string value (number %) Which represents a round integer about the score average. * @return string value (number %) Which represents a round integer about the score average.
*/ */
public static function get_avg_student_exercise_score($student_id, $course_code, $exercise_id = 0, $session_id = null) public static function get_avg_student_exercise_score(
{ $student_id,
$course_code,
$exercise_id = 0,
$session_id = null,
$active_filter = 1,
$into_lp = 0
) {
$course_code = Database::escape_string($course_code);
$course_info = api_get_course_info($course_code); $course_info = api_get_course_info($course_code);
if (!empty($course_info)) { if (!empty($course_info)) {
// table definition // table definition
@ -613,8 +620,10 @@ class Tracking
if (!empty($count_quiz[0]) && !empty($student_id)) { if (!empty($count_quiz[0]) && !empty($student_id)) {
if (is_array($student_id)) { if (is_array($student_id)) {
$condition_user = " AND exe_user_id IN (".implode(',',$student_id).") "; $student_id = array_map('intval', $student_id);
$condition_user = " AND exe_user_id IN (".implode(',', $student_id).") ";
} else { } else {
$student_id = intval($student_id);
$condition_user = " AND exe_user_id = '$student_id' "; $condition_user = " AND exe_user_id = '$student_id' ";
} }
@ -636,15 +645,18 @@ class Tracking
$count_quiz = Database::fetch_row(Database::query($sql)); $count_quiz = Database::fetch_row(Database::query($sql));
$sql = "SELECT SUM(exe_result/exe_weighting*100) as avg_score, COUNT(*) as num_attempts $sql = "SELECT
SUM(exe_result/exe_weighting*100) as avg_score,
COUNT(*) as num_attempts
$select_lp_id $select_lp_id
FROM $tbl_stats_exercise FROM $tbl_stats_exercise
WHERE exe_exo_id IN ('".$exercise_id."') WHERE
$condition_user AND exe_exo_id IN ('".$exercise_id."')
status = '' AND $condition_user AND
exe_cours_id = '$course_code' status = '' AND
$condition_session exe_cours_id = '$course_code'
$condition_into_lp $condition_session
$condition_into_lp
ORDER BY exe_date DESC"; ORDER BY exe_date DESC";
$res = Database::query($sql); $res = Database::query($sql);
@ -667,12 +679,14 @@ class Tracking
if (!empty($row['lp_id'])) { if (!empty($row['lp_id'])) {
$tbl_lp = Database::get_course_table(TABLE_LP_MAIN); $tbl_lp = Database::get_course_table(TABLE_LP_MAIN);
$tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "SELECT lp.name FROM $tbl_lp as lp, $tbl_course as c WHERE $sql = "SELECT lp.name
c.code = '$course_code' AND FROM $tbl_lp as lp, $tbl_course as c
lp.id = ".$row['lp_id']." AND WHERE
lp.c_id = c.id c.code = '$course_code' AND
LIMIT 1; lp.id = ".$row['lp_id']." AND
"; lp.c_id = c.id
LIMIT 1;
";
$result = Database::query($sql); $result = Database::query($sql);
$row_lp = Database::fetch_row($result); $row_lp = Database::fetch_row($result);
$lp_name = $row_lp[0]; $lp_name = $row_lp[0];
@ -704,17 +718,22 @@ class Tracking
* @internal param \Learning $int path item id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required. * @internal param \Learning $int path item id (optional), for showing attempts inside a learning path $lp_id and $lp_item_id params are required.
* @return int count of attempts * @return int count of attempts
*/ */
public static function count_student_exercise_attempts($student_id, $course_code, $exercise_id, $lp_id = 0, $lp_item_id = 0, $session_id = 0, $find_all_lp = 0) { public static function count_student_exercise_attempts(
$student_id,
$course_code,
$exercise_id,
$lp_id = 0,
$lp_item_id = 0,
$session_id = 0,
$find_all_lp = 0
) {
$course_code = Database::escape_string($course_code); $course_code = Database::escape_string($course_code);
$student_id = intval($student_id); $student_id = intval($student_id);
$exercise_id = intval($exercise_id); $exercise_id = intval($exercise_id);
$session_id = intval($session_id); $session_id = intval($session_id);
$count_attempts = 0;
if (!empty($lp_id)) $lp_id = intval($lp_id);
if (!empty($lp_item_id)) $lp_id = intval($lp_item_id);
$lp_id = intval($lp_id);
$lp_item_id = intval($lp_item_id);
$tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $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 $sql = "SELECT COUNT(ex.exe_id) as essais FROM $tbl_stats_exercices AS ex
@ -811,14 +830,18 @@ class Tracking
static function get_teachers_progress_by_course($courseId, $sessionId) static function get_teachers_progress_by_course($courseId, $sessionId)
{ {
$course = api_get_course_info_by_id($courseId); $course = api_get_course_info_by_id($courseId);
$sessionId = intval($sessionId);
$courseId = intval($courseId);
//get teachers //get teachers
$sql = "SELECT scu.id_session, scu.id_user, s.name $sql = "SELECT scu.id_session, scu.id_user, s.name
FROM session_rel_course_rel_user scu, session s FROM session_rel_course_rel_user scu, session s
WHERE scu.id_session = s.id WHERE
AND scu.status = 2 scu.id_session = s.id
AND scu.visibility = 1 AND scu.status = 2
AND scu.course_code = '%s' AND scu.visibility = 1
AND scu.id_session = %s"; AND scu.course_code = '%s'
AND scu.id_session = %s";
$query = sprintf($sql,$course['code'], $sessionId); $query = sprintf($sql,$course['code'], $sessionId);
$rs = Database::query($query); $rs = Database::query($query);
$teachers = array(); $teachers = array();
@ -834,11 +857,11 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
//error_log($query);
$rs = Database::query($query); $rs = Database::query($query);
$totalDocuments = 0; $totalDocuments = 0;
if ($rs) { if ($rs) {
@ -853,12 +876,12 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
$rs = Database::query($query); $rs = Database::query($query);
$totalLinks = 0; $totalLinks = 0;
if ($rs) { if ($rs) {
$row = Database::fetch_row($rs); $row = Database::fetch_row($rs);
@ -872,12 +895,12 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
$rs = Database::query($query); $rs = Database::query($query);
$totalForums = 0; $totalForums = 0;
if ($rs) { if ($rs) {
$row = Database::fetch_row($rs); $row = Database::fetch_row($rs);
@ -891,12 +914,12 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
$rs = Database::query($query); $rs = Database::query($query);
$totalWikis = 0; $totalWikis = 0;
if ($rs) { if ($rs) {
$row = Database::fetch_row($rs); $row = Database::fetch_row($rs);
@ -911,12 +934,12 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
$rs = Database::query($query); $rs = Database::query($query);
$totalWorks = 0; $totalWorks = 0;
if ($rs) { if ($rs) {
$row = Database::fetch_row($rs); $row = Database::fetch_row($rs);
@ -930,12 +953,12 @@ class Tracking
AND insert_user_id = %s AND insert_user_id = %s
AND id_session = %s"; AND id_session = %s";
$query = sprintf($sql, $query = sprintf($sql,
$courseId, $courseId,
$teacher['id_user'], $teacher['id_user'],
$teacher['id_session'] $teacher['id_session']
); );
$rs = Database::query($query); $rs = Database::query($query);
$totalAnnouncements = 0; $totalAnnouncements = 0;
if ($rs) { if ($rs) {
$row = Database::fetch_row($rs); $row = Database::fetch_row($rs);
@ -952,8 +975,9 @@ class Tracking
'works' => $totalWorks, 'works' => $totalWorks,
'wikis' => $totalWikis, 'wikis' => $totalWikis,
'announcements' => $totalAnnouncements, 'announcements' => $totalAnnouncements,
); );
} }
return $data; return $data;
} }
@ -971,6 +995,8 @@ class Tracking
public static function get_avg_student_progress($student_id, $course_code = null, $lp_ids = array(), $session_id = null, $return_array = false) public static function get_avg_student_progress($student_id, $course_code = null, $lp_ids = array(), $session_id = null, $return_array = false)
{ {
$conditions = array(); $conditions = array();
$session_id = intval($session_id);
// Get the information of the course. // Get the information of the course.
$course_info = api_get_course_info($course_code); $course_info = api_get_course_info($course_code);
if (!empty($course_info)) { if (!empty($course_info)) {
@ -1009,10 +1035,10 @@ class Tracking
AVG(progress) average, AVG(progress) average,
SUM(progress) sum_progress, SUM(progress) sum_progress,
count(progress) count_progress count(progress) count_progress
FROM $tbl_course_lp_view lp_view FROM $tbl_course_lp_view lp_view
WHERE WHERE
$conditionToString $conditionToString
GROUP BY lp_id"; GROUP BY lp_id";
$result = Database::query($sql); $result = Database::query($sql);
$row = Database::fetch_array($result, 'ASSOC'); $row = Database::fetch_array($result, 'ASSOC');
if (!$return_array) { if (!$return_array) {
@ -2578,7 +2604,7 @@ class Tracking
} }
/** /**
* Get total clicks * Get total clicks
* THIS FUNCTION IS NOT BEEN USED, IT WAS MEANT TO BE USE WITH track_e_course_access.date_from and track_e_course_access.date_to, * THIS FUNCTION IS NOT BEEN USED, IT WAS MEANT TO BE USE WITH track_e_course_access.date_from and track_e_course_access.date_to,
* BUT NO ROW MATCH THE CONDITION, IT SHOULD BE FINE TO USE IT WHEN YOU USE USER DEFINED DATES AND NO CHAMILO DATES * BUT NO ROW MATCH THE CONDITION, IT SHOULD BE FINE TO USE IT WHEN YOU USE USER DEFINED DATES AND NO CHAMILO DATES
* @param int User Id * @param int User Id
* @param int Course Id * @param int Course Id
@ -2588,7 +2614,7 @@ class Tracking
* @return array Data * @return array Data
* @author César Perales cesar.perales@beeznest.com 2014-01-16 * @author César Perales cesar.perales@beeznest.com 2014-01-16
*/ */
public static function get_total_clicks($userId, $courseId, $sessionId = 0, $date_from = '', $date_to = '') public static function get_total_clicks($userId, $courseId, $sessionId = 0, $date_from = '', $date_to = '')
{ {
$course = api_get_course_info_by_id($courseId); $course = api_get_course_info_by_id($courseId);
$tables = array( $tables = array(
@ -2669,7 +2695,7 @@ class Tracking
if (!empty($date_from) && !empty($date_to)) { if (!empty($date_from) && !empty($date_to)) {
$fieldStartDate = $fields['start_date']; $fieldStartDate = $fields['start_date'];
if (!isset($fields['end_date'])) { if (!isset($fields['end_date'])) {
$where .= sprintf(" AND ($fieldStartDate BETWEEN '%s' AND '%s' )", $date_from, $date_to) ; $where .= sprintf(" AND ($fieldStartDate BETWEEN '%s' AND '%s' )", $date_from, $date_to) ;
} else { } else {
$fieldEndDate = $fields['end_date']; $fieldEndDate = $fields['end_date'];
$where .= sprintf(" AND fieldStartDate >= '%s' $where .= sprintf(" AND fieldStartDate >= '%s'
@ -2685,9 +2711,9 @@ class Tracking
AND %s = %s AND %s = %s
$where $where
GROUP BY %s"; GROUP BY %s";
$sql = sprintf($sql, $sql = sprintf($sql,
$fields['user'], //user field $fields['user'], //user field
$tableName, //FROM $tableName, //FROM
$fields['course'], //course condition $fields['course'], //course condition
$course['code'], //course condition $course['code'], //course condition
$fields['user'], //user condition $fields['user'], //user condition
@ -3823,8 +3849,14 @@ class Tracking
* @param array $options An array of options you can pass to the query (limit, where and order) * @param array $options An array of options you can pass to the query (limit, where and order)
* @return array An array with the data of exercise(s) progress * @return array An array with the data of exercise(s) progress
*/ */
public static function get_exercise_progress($sessionId = 0, $courseId = 0, $exerciseId = 0, $date_from, $date_to, $options = array()) public static function get_exercise_progress(
{ $sessionId = 0,
$courseId = 0,
$exerciseId = 0,
$date_from = null,
$date_to = null,
$options = array()
) {
$sessionId = intval($sessionId); $sessionId = intval($sessionId);
$courseId = intval($courseId); $courseId = intval($courseId);
$exerciseId = intval($exerciseId); $exerciseId = intval($exerciseId);
@ -3842,9 +3874,9 @@ class Tracking
$tquiz_rel_question = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); $tquiz_rel_question = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$ttrack_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); $ttrack_exercises = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$ttrack_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); $ttrack_attempt = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php'; require_once api_get_path(SYS_CODE_PATH).'exercice/exercise.lib.php';
$sessions = array(); $sessions = array();
$courses = array(); $courses = array();
// if session ID is defined but course ID is empty, get all the courses // if session ID is defined but course ID is empty, get all the courses
@ -3948,20 +3980,20 @@ class Tracking
INNER JOIN $ttrack_attempt ta ON ta.exe_id = te.exe_id INNER JOIN $ttrack_attempt ta ON ta.exe_id = te.exe_id
INNER JOIN $tquiz q ON q.id = te.exe_exo_id INNER JOIN $tquiz q ON q.id = te.exe_exo_id
INNER JOIN $tquiz_rel_question rq ON rq.exercice_id = q.id AND rq.c_id = q.c_id INNER JOIN $tquiz_rel_question rq ON rq.exercice_id = q.id AND rq.c_id = q.c_id
INNER JOIN $tquiz_question qq ON qq.id = rq.question_id INNER JOIN $tquiz_question qq ON qq.id = rq.question_id
AND qq.c_id = rq.c_id AND qq.c_id = rq.c_id
AND qq.position = rq.question_order AND qq.position = rq.question_order
AND ta.question_id = rq.question_id AND ta.question_id = rq.question_id
WHERE te.exe_cours_id = '$whereCourseCode' ".(empty($whereSessionParams)?'':"AND te.session_id IN ($whereSessionParams)")." WHERE te.exe_cours_id = '$whereCourseCode' ".(empty($whereSessionParams)?'':"AND te.session_id IN ($whereSessionParams)")."
AND q.c_id = $courseIdx AND q.c_id = $courseIdx
$where $order $limit"; $where $order $limit";
$sql_query = vsprintf($sql, $whereParams); $sql_query = vsprintf($sql, $whereParams);
// Now browse through the results and get the data // Now browse through the results and get the data
$rs = Database::query($sql_query); $rs = Database::query($sql_query);
$userIds = array(); $userIds = array();
$questionIds = array(); $questionIds = array();
$answerIds = array(); $answerIds = array();
while ($row = Database::fetch_array($rs)) { while ($row = Database::fetch_array($rs)) {
//only show if exercise is visible //only show if exercise is visible
if (api_get_item_visibility($courseData, 'quiz', $row['exercise_id'])) { if (api_get_item_visibility($courseData, 'quiz', $row['exercise_id'])) {
@ -3973,11 +4005,14 @@ class Tracking
} }
} }
// Now fill questions data. Query all questions and answers for this test to avoid // Now fill questions data. Query all questions and answers for this test to avoid
$sqlQuestions = "SELECT tq.c_id, tq.id as question_id, tq.question, tqa.id_auto, $sqlQuestions = "SELECT tq.c_id, tq.id as question_id, tq.question, tqa.id_auto,
tqa.answer, tqa.correct, tq.position, tqa.id_auto as answer_id tqa.answer, tqa.correct, tq.position, tqa.id_auto as answer_id
FROM $tquiz_question tq, $tquiz_answer tqa FROM $tquiz_question tq, $tquiz_answer tqa
WHERE tqa.question_id =tq.id and tqa.c_id = tq.c_id WHERE
AND tq.c_id = $courseIdx AND tq.id IN (".implode(',',$questionIds).")"; tqa.question_id = tq.id AND
tqa.c_id = tq.c_id AND
tq.c_id = $courseIdx AND
tq.id IN (".implode(',', $questionIds).")";
$resQuestions = Database::query($sqlQuestions); $resQuestions = Database::query($sqlQuestions);
$answer = array(); $answer = array();
@ -3986,26 +4021,25 @@ class Tracking
$questionId = $rowQuestion['question_id']; $questionId = $rowQuestion['question_id'];
$answerId = $rowQuestion['answer_id']; $answerId = $rowQuestion['answer_id'];
$answer[$questionId][$answerId] = array( $answer[$questionId][$answerId] = array(
'position' => $rowQuestion['position'], 'position' => $rowQuestion['position'],
'question' => $rowQuestion['question'], 'question' => $rowQuestion['question'],
'answer' => $rowQuestion['answer'], 'answer' => $rowQuestion['answer'],
'correct' => $rowQuestion['correct'] 'correct' => $rowQuestion['correct']
); );
$question[$questionId]['question'] = $rowQuestion['question']; $question[$questionId]['question'] = $rowQuestion['question'];
} }
// Now fill users data // Now fill users data
$sqlUsers = "SELECT user_id, username, lastname, firstname FROM $tuser WHERE user_id IN (".implode(',',$userIds).")"; $sqlUsers = "SELECT user_id, username, lastname, firstname FROM $tuser WHERE user_id IN (".implode(',',$userIds).")";
$resUsers = Database::query($sqlUsers); $resUsers = Database::query($sqlUsers);
while ($rowUser = Database::fetch_assoc($resUsers)) { while ($rowUser = Database::fetch_assoc($resUsers)) {
$users[$rowUser['user_id']] = $rowUser; $users[$rowUser['user_id']] = $rowUser;
} }
foreach ($data as $id => $row) { foreach ($data as $id => $row) {
$rowQuestId = $row['question_id']; $rowQuestId = $row['question_id'];
$rowAnsId = $row['answer_id']; $rowAnsId = $row['answer_id'];
$data[$id]['session'] = $sessions[$row['session_id']]['name']; $data[$id]['session'] = $sessions[$row['session_id']]['name'];
$data[$id]['firstname'] = $users[$row['user_id']]['firstname']; $data[$id]['firstname'] = $users[$row['user_id']]['firstname'];
$data[$id]['lastname'] = $users[$row['user_id']]['lastname']; $data[$id]['lastname'] = $users[$row['user_id']]['lastname'];

@ -374,7 +374,6 @@ if (!empty($_SESSION['_user']['user_id']) && !($login || $logout)) {
} }
} }
} else { } else {
//error_log('Loggedin');
ConditionalLogin::check_conditions($uData); ConditionalLogin::check_conditions($uData);
$_user['user_id'] = $uData['user_id']; $_user['user_id'] = $uData['user_id'];
$_user['status'] = $uData['status']; $_user['status'] = $uData['status'];
@ -763,7 +762,6 @@ if (isset($cidReset) && $cidReset) {
//Course login //Course login
if (isset($_user['user_id'])) { if (isset($_user['user_id'])) {
event_course_login($_course['code'], $_user['user_id'], api_get_session_id()); event_course_login($_course['code'], $_user['user_id'], api_get_session_id());
error_log(__FILE__);
} }
} }
} else { } else {
@ -892,12 +890,10 @@ if (isset($cidReset) && $cidReset) {
$sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1 $sql = "UPDATE $course_tracking_table SET logout_course_date = '$time', counter = counter+1
WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".api_get_session_id(); WHERE course_access_id = ".intval($i_course_access_id)." AND session_id = ".api_get_session_id();
Database::query($sql); Database::query($sql);
//error_log(preg_replace('/\s+/',' ',$sql));
} else { } else {
$sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" . $sql="INSERT INTO $course_tracking_table (course_code, user_id, login_course_date, logout_course_date, counter, session_id)" .
"VALUES('".$course_code."', '".$_user['user_id']."', '$time', '$time', '1','".api_get_session_id()."')"; "VALUES('".$course_code."', '".$_user['user_id']."', '$time', '$time', '1','".api_get_session_id()."')";
Database::query($sql); Database::query($sql);
//error_log(preg_replace('/\s+/',' ',$sql));
} }
} }
} }

@ -886,7 +886,7 @@ if (empty($_GET['details'])) {
if (Database :: num_rows($result_exercices) > 0) { if (Database :: num_rows($result_exercices) > 0) {
while ($exercices = Database :: fetch_array($result_exercices)) { while ($exercices = Database :: fetch_array($result_exercices)) {
$exercise_id = intval($exercices['id']); $exercise_id = intval($exercices['id']);
$lp_name = '';
$count_attempts = Tracking::count_student_exercise_attempts($student_id, $course_code, $exercise_id, 0, 0, $session_id, 2); $count_attempts = Tracking::count_student_exercise_attempts($student_id, $course_code, $exercise_id, 0, 0, $session_id, 2);
$score_percentage = Tracking::get_avg_student_exercise_score($student_id, $course_code, $exercise_id, $session_id, 1, 0); $score_percentage = Tracking::get_avg_student_exercise_score($student_id, $course_code, $exercise_id, $session_id, 1, 0);
@ -897,19 +897,20 @@ if (empty($_GET['details'])) {
} else { } else {
$lp_name = '-'; $lp_name = '-';
} }
$lp_name = (!empty($lp_name))? $lp_name: get_lang('NoLearnpath'); $lp_name = !empty($lp_name) ? $lp_name : get_lang('NoLearnpath');
$csv_content[] = array ( $csv_content[] = array (
$exercices['title'], $exercices['title'],
$score_percentage . '%', $score_percentage . '%',
$count_attempts $count_attempts
); );
if ($i % 2) $css_class = 'row_odd'; if ($i % 2) {
else $css_class = 'row_even'; $css_class = 'row_odd';
} else {
$css_class = 'row_even';
}
echo '<tr class="'.$css_class.'"><td>'.$exercices['title'].'</td>'; echo '<tr class="'.$css_class.'"><td>'.$exercices['title'].'</td>';
echo '<td>'; echo '<td>';
if (!empty($lp_name)) { if (!empty($lp_name)) {
@ -919,7 +920,6 @@ if (empty($_GET['details'])) {
} }
echo '</td>'; echo '</td>';
echo '<td>'; echo '<td>';
if ($count_attempts > 0) { if ($count_attempts > 0) {

@ -1,19 +1,15 @@
<?php <?php
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
/**
* MySpace class definition
* @package chamilo.reporting
*/
/**
* Init
*/
require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php'; require_once api_get_path(LIBRARY_PATH).'export.lib.inc.php';
require_once api_get_path(LIBRARY_PATH).'tracking.lib.php'; require_once api_get_path(LIBRARY_PATH).'tracking.lib.php';
/** /**
* MySpace class definition * Class MySpace
* @package chamilo.reporting
*/ */
class MySpace { class MySpace
{
/** /**
* This function serves exporting data in CSV format. * This function serves exporting data in CSV format.
* @param array $header The header labels. * @param array $header The header labels.
@ -60,8 +56,8 @@ class MySpace {
* @param int Session id (optional, default = 0) * @param int Session id (optional, default = 0)
* @return array Conections * @return array Conections
*/ */
static function get_connections_to_course($user_id, $course_code, $session_id = 0) { static function get_connections_to_course($user_id, $course_code, $session_id = 0)
{
// Database table definitions // Database table definitions
$tbl_track_course = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS); $tbl_track_course = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
@ -351,7 +347,15 @@ class MySpace {
* @return string HTML array of results formatted for gridJS * @return string HTML array of results formatted for gridJS
* @author César Perales <cesar.perales@beeznest.com>, Beeznest Team * @author César Perales <cesar.perales@beeznest.com>, Beeznest Team
*/ */
static function display_tracking_exercise_progress_overview($sessionId = 0, $courseId = 0, $exerciseId = 0, $date_from, $date_to) { static function display_tracking_exercise_progress_overview(
$sessionId = 0,
$courseId = 0,
$exerciseId = 0,
$date_from = null,
$date_to = null
) {
$date_from = Security::remove_XSS($date_from);
$date_to = Security::remove_XSS($date_to);
/** /**
* Column names * Column names
* The column order is important. Check $column variable in the main/inc/ajax/model.ajax.php file * The column order is important. Check $column variable in the main/inc/ajax/model.ajax.php file
@ -393,10 +397,10 @@ class MySpace {
// jqgrid will use this URL to do the selects // jqgrid will use this URL to do the selects
$url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_exercise_progress&session_id=' . $sessionId . '&course_id=' . $courseId . '&exercise_id=' . $exerciseId . '&date_to=' . $date_to . '&date_from=' . $date_from; $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_exercise_progress&session_id=' . $sessionId . '&course_id=' . $courseId . '&exercise_id=' . $exerciseId . '&date_to=' . $date_to . '&date_from=' . $date_from;
//Autowidth // Autowidth
$extra_params['autowidth'] = 'true'; $extra_params['autowidth'] = 'true';
//height auto // height auto
$extra_params['height'] = 'auto'; $extra_params['height'] = 'auto';
$tableId = 'exerciseProgressOverview'; $tableId = 'exerciseProgressOverview';
@ -489,7 +493,7 @@ class MySpace {
if (!empty($exercises[$cnt - 4]['title'])) { if (!empty($exercises[$cnt - 4]['title'])) {
$title = ucwords(strtolower(trim($exercises[$cnt - 4]['title']))); $title = ucwords(strtolower(trim($exercises[$cnt - 4]['title'])));
} }
$column[] = $title; $column[] = $title;
$column_model[] = array( $column_model[] = array(
'name' => 'exer' . $i, 'name' => 'exer' . $i,
@ -534,9 +538,8 @@ class MySpace {
* Display a sortable table that contains an overview off all the progress of the user in a session * Display a sortable table that contains an overview off all the progress of the user in a session
* @author César Perales <cesar.perales@beeznest.com>, Beeznest Team * @author César Perales <cesar.perales@beeznest.com>, Beeznest Team
*/ */
function display_survey_overview($sessionId = 0, $courseId = 0, $surveyId = 0, $date_from, $date_to) { function display_survey_overview($sessionId = 0, $courseId = 0, $surveyId = 0, $date_from, $date_to)
{
$course = api_get_course_info_by_id($courseId);
/** /**
* Column name * Column name
* The order is important you need to check the $column variable in the model.ajax.php file * The order is important you need to check the $column variable in the model.ajax.php file
@ -549,8 +552,7 @@ class MySpace {
//add lessons of course //add lessons of course
$questions = survey_manager::get_questions($surveyId, $courseId); $questions = survey_manager::get_questions($surveyId, $courseId);
foreach ($questions as $question_id => $question) foreach ($questions as $question) {
{
$columns[] = $question['question']; $columns[] = $question['question'];
} }
@ -563,9 +565,14 @@ class MySpace {
array('name'=>'lastname', 'index'=>'lastname', 'align'=>'left', 'search' => 'true'), array('name'=>'lastname', 'index'=>'lastname', 'align'=>'left', 'search' => 'true'),
); );
//get dinamic column names //get dinamic column names
foreach ($questions as $question_id => $question) foreach ($questions as $question_id => $question) {
{ $column_model[] = array(
$column_model[] = array('name'=> $question_id, 'index'=>$question_id, 'width'=>'70', 'align'=>'left', 'search' => 'true'); 'name'=> $question_id,
'index'=>$question_id,
'width'=>'70',
'align'=>'left',
'search' => 'true'
);
} }
$action_links = ''; $action_links = '';
@ -595,14 +602,16 @@ class MySpace {
}); });
});</script>'; });</script>';
$return .= Display::grid_html($tableId); $return .= Display::grid_html($tableId);
return $return; return $return;
} }
/** /**
* Display a sortable table that contains an overview off all the progress of the user in a session * Display a sortable table that contains an overview off all the progress of the user in a session
* @author César Perales <cesar.perales@beeznest.com>, Beeznest Team * @author César Perales <cesar.perales@beeznest.com>, Beeznest Team
*/ */
static function display_tracking_progress_overview($sessionId = 0, $courseId = 0, $date_from, $date_to) { static function display_tracking_progress_overview($sessionId = 0, $courseId = 0, $date_from, $date_to)
{
//The order is important you need to check the the $column variable in the model.ajax.php file //The order is important you need to check the the $column variable in the model.ajax.php file
$columns = array( $columns = array(
get_lang('LastName'), get_lang('LastName'),

@ -48,7 +48,7 @@ $course_id = $course_info['real_id'];
if (isset($_GET['student_id'])) { if (isset($_GET['student_id'])) {
$student_id = intval($_GET['student_id']); $student_id = intval($_GET['student_id']);
} }
$session_id = ($_GET['id_session'])? intval($_GET['id_session']) : api_get_session_id(); $session_id = isset($_GET['id_session']) ? intval($_GET['id_session']) : api_get_session_id();
$session_condition = api_get_session_condition($session_id); $session_condition = api_get_session_condition($session_id);
//When origin is not set that means that the lp_stats are viewed from the "man running" icon //When origin is not set that means that the lp_stats are viewed from the "man running" icon

Loading…
Cancel
Save