|
@@ -24,18 +24,28 @@ class Tracking
|
|
|
{
|
|
|
/**
|
|
|
* Calculates the time spent on the platform by a user
|
|
|
- * @param int User id
|
|
|
+ * @param int|array User id
|
|
|
* @param string type of time filter: 'last_week' or 'custom'
|
|
|
* @param strgin start date date('Y-m-d H:i:s')
|
|
|
* @param strgin end date date('Y-m-d H:i:s')
|
|
|
* @return timestamp $nb_seconds
|
|
|
*/
|
|
|
- public static function get_time_spent_on_the_platform($user_id, $time_filter = 'last_7_days', $start_date = null, $end_date = null)
|
|
|
- {
|
|
|
- $tbl_track_login = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
|
|
|
-
|
|
|
+ public static function get_time_spent_on_the_platform(
|
|
|
+ $user_id,
|
|
|
+ $time_filter = 'last_7_days',
|
|
|
+ $start_date = null,
|
|
|
+ $end_date = null
|
|
|
+ ) {
|
|
|
+ $tbl_track_login = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
|
|
|
$condition_time = '';
|
|
|
|
|
|
+ if (is_array($user_id)) {
|
|
|
+ $userList = array_map('intval', $user_id);
|
|
|
+ $userCondition = " login_user_id IN ('".implode("','", $userList)."')";
|
|
|
+ } else {
|
|
|
+ $userCondition = " login_user_id = ".intval($user_id);
|
|
|
+ }
|
|
|
+
|
|
|
if (empty($time_filter)) {
|
|
|
$time_filter = 'last_week';
|
|
|
}
|
|
@@ -54,47 +64,24 @@ class Tracking
|
|
|
$condition_time = ' AND (login_date >= "'.$new_date.'" AND logout_date <= "'.$today.'") ';
|
|
|
break;
|
|
|
case 'custom':
|
|
|
- if (!empty($start_date) && !empty($end_date)) {
|
|
|
+ if (!empty($start_date) && !empty($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;
|
|
|
+ $sql = 'SELECT SUM(TIMESTAMPDIFF(SECOND, login_date, logout_date)) diff
|
|
|
+ FROM '.$tbl_track_login.'
|
|
|
+ WHERE '.$userCondition.$condition_time;
|
|
|
$rs = Database::query($sql);
|
|
|
+ $row = Database::fetch_array($rs, 'ASSOC');
|
|
|
+ $diff = $row['diff'];
|
|
|
|
|
|
- $nb_seconds = 0;
|
|
|
-
|
|
|
- $wrong_logout_dates = false;
|
|
|
-
|
|
|
- while ($a_connections = Database::fetch_array($rs)) {
|
|
|
-
|
|
|
- $s_login_date = $a_connections["login_date"];
|
|
|
- $s_logout_date = $a_connections["logout_date"];
|
|
|
-
|
|
|
- $i_timestamp_login_date = strtotime($s_login_date);
|
|
|
- $i_timestamp_logout_date = strtotime($s_logout_date);
|
|
|
-
|
|
|
- if ($i_timestamp_logout_date > 0) {
|
|
|
- // @TODO YW 20110708: for some reason the result here is often
|
|
|
- // negative, resulting in a negative time total. Considering the
|
|
|
- // logout_date is > 0, this can only mean that the database
|
|
|
- // contains items where the login_date is higher (=later) than
|
|
|
- // the logout date for a specific connexion. This has to be
|
|
|
- // analyzed and fixed. Also see the get_time_spent_on_the_course
|
|
|
- // for SQL summing.
|
|
|
- $nb_seconds += abs($i_timestamp_logout_date - $i_timestamp_login_date);
|
|
|
- } else { // there are wrong datas in db, then we can't give a wrong time
|
|
|
- $wrong_logout_dates = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if($nb_seconds>0 || !$wrong_logout_dates) {
|
|
|
- return $nb_seconds;
|
|
|
- } else {
|
|
|
- return -1; //-1 means we have wrong datas in the db
|
|
|
- }
|
|
|
+ if ($diff >= 0) {
|
|
|
+ return $diff;
|
|
|
+ } else {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -106,13 +93,10 @@ class Tracking
|
|
|
*/
|
|
|
public static function get_time_spent_on_the_course($user_id, $course_code, $session_id = 0)
|
|
|
{
|
|
|
- // protect datas
|
|
|
$course_code = Database::escape_string($course_code);
|
|
|
$session_id = intval($session_id);
|
|
|
|
|
|
$tbl_track_course = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
|
|
|
-
|
|
|
- $condition_user = "";
|
|
|
if (is_array($user_id)) {
|
|
|
$user_id = array_map('intval', $user_id);
|
|
|
$condition_user = " AND user_id IN (".implode(',',$user_id).") ";
|
|
@@ -122,7 +106,9 @@ class Tracking
|
|
|
}
|
|
|
|
|
|
$sql = "SELECT
|
|
|
- SUM(UNIX_TIMESTAMP(logout_course_date) - UNIX_TIMESTAMP(login_course_date)) as nb_seconds
|
|
|
+ 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
|
|
@@ -155,7 +141,6 @@ class Tracking
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* Get las connection date for a student
|
|
|
* @param int Student id
|
|
@@ -198,6 +183,44 @@ class Tracking
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Get las connection date for a student
|
|
|
+ * @param array Student id array
|
|
|
+ * @param int $days
|
|
|
+ * @param bool $getCount
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+ public static function getInactiveUsers($studentList, $days, $getCount = true)
|
|
|
+ {
|
|
|
+ if (empty($studentList)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ $days = intval($days);
|
|
|
+ $date = api_get_utc_datetime(strtotime($days.' days ago'));
|
|
|
+ $studentList = array_map('intval', $studentList);
|
|
|
+
|
|
|
+ $tbl_track_login = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN);
|
|
|
+ $select = " SELECT login_user_id ";
|
|
|
+ if ($getCount) {
|
|
|
+ $select = " SELECT count(DISTINCT login_user_id) as count";
|
|
|
+ }
|
|
|
+ $sql = "$select
|
|
|
+ FROM $tbl_track_login
|
|
|
+ WHERE
|
|
|
+ login_user_id IN (' ". implode("','", $studentList) . "' ) AND
|
|
|
+ login_date < '$date'
|
|
|
+ ";
|
|
|
+ $rs = Database::query($sql);
|
|
|
+ if (Database::num_rows($rs) > 0) {
|
|
|
+ if ($getCount) {
|
|
|
+ $count = Database::fetch_array($rs);
|
|
|
+ return $count['count'];
|
|
|
+ }
|
|
|
+ return Database::store_result($rs, 'ASSOC');
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Get first user's connection date on the course
|
|
|
* @param int User id
|
|
@@ -555,69 +578,60 @@ class Tracking
|
|
|
* @param bool Will return an array of the type: [sum_of_progresses, number] if it is set to true
|
|
|
* @return double Average progress of the user in this course
|
|
|
*/
|
|
|
- public static function get_avg_student_progress($student_id, $course_code, $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();
|
|
|
// Get the information of the course.
|
|
|
$course_info = api_get_course_info($course_code);
|
|
|
if (!empty($course_info)) {
|
|
|
- // table definition
|
|
|
- $tbl_course_lp_view = Database :: get_course_table(TABLE_LP_VIEW);
|
|
|
- $tbl_course_lp = Database :: get_course_table(TABLE_LP_MAIN);
|
|
|
+ $conditions[] = " c_id = {$course_info['real_id']} ";
|
|
|
+ }
|
|
|
+ // table definition
|
|
|
+ $tbl_course_lp_view = Database :: get_course_table(TABLE_LP_VIEW);
|
|
|
|
|
|
- // Compose a filter based on optional learning paths list given
|
|
|
- $condition_lp = "";
|
|
|
+ // Compose a filter based on optional learning paths list given
|
|
|
+ $condition_lp = null;
|
|
|
+ if (!empty($lp_ids)) {
|
|
|
+ if (count($lp_ids) > 0) {
|
|
|
+ $lp_ids = array_map('intval', $lp_ids);
|
|
|
+ $conditions[] = " lp_view.lp_id IN(".implode(',', $lp_ids).") ";
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (!empty($lp_ids)) {
|
|
|
- if (count($lp_ids) > 0) {
|
|
|
- $condition_lp =" AND id IN(".implode(',',$lp_ids).") ";
|
|
|
- }
|
|
|
- }
|
|
|
- $session_id = intval($session_id);
|
|
|
- $sql = "SELECT id FROM $tbl_course_lp lp WHERE c_id = {$course_info['real_id']} $condition_lp";
|
|
|
- $res_count_lp = Database::query($sql);
|
|
|
-
|
|
|
- // count the number of learning paths
|
|
|
- $lp_id = array();
|
|
|
- while ($row_lp = Database::fetch_array($res_count_lp,'ASSOC')) {
|
|
|
- $lp_id[] = $row_lp['id'];
|
|
|
+ // If there is at least one learning path and one student.
|
|
|
+ if (!empty($student_id)) {
|
|
|
+ if (is_array($student_id)) {
|
|
|
+ $student_id = array_map('intval', $student_id);
|
|
|
+ $conditions[] = " lp_view.user_id IN (".implode(',', $student_id).") ";
|
|
|
+ } else {
|
|
|
+ $student_id = intval($student_id);
|
|
|
+ $conditions[] = " lp_view.user_id = '$student_id' ";
|
|
|
}
|
|
|
- $count_lp = count($lp_id);
|
|
|
- // If there is at least one learning path and one student.
|
|
|
- if ($count_lp>0 && !empty($student_id)) {
|
|
|
- if (is_array($student_id)) {
|
|
|
- array_walk($student_id,'intval');
|
|
|
- $condition_user = " lp_view.user_id IN (".implode(',',$student_id).") AND ";
|
|
|
- } else {
|
|
|
- $student_id = intval($student_id);
|
|
|
- $condition_user = " lp_view.user_id = '$student_id' AND ";
|
|
|
- }
|
|
|
- // 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 = {$course_info['real_id']} AND
|
|
|
- $condition_user session_id = $session_id AND
|
|
|
- lp_view.lp_id IN (".implode(',',$lp_id).")
|
|
|
- GROUP BY lp_id, user_id";
|
|
|
- $res_maxes = Database::query($sql_maxes);
|
|
|
- $sum = 0;
|
|
|
- while ($row_maxes = Database::fetch_array($res_maxes)) {
|
|
|
- $sum += $row_maxes[1];
|
|
|
- }
|
|
|
- // average progress = total sum divided by the number of views
|
|
|
- // summed up.
|
|
|
- $number_items = count($lp_id);
|
|
|
- if ($number_items == 0) {
|
|
|
- return 0; //not necessary to return something else if there is no view
|
|
|
- }
|
|
|
- if (!$return_array) {
|
|
|
- $avg_progress = round($sum / $number_items, 1);
|
|
|
- return $avg_progress;
|
|
|
- } else {
|
|
|
- return array($sum, $number_items);
|
|
|
- }
|
|
|
+ if (!empty($session_id)) {
|
|
|
+ $conditions[] = " session_id = $session_id ";
|
|
|
+ }
|
|
|
+ $conditionToString = implode('AND', $conditions);
|
|
|
+
|
|
|
+ // Get last view for each student (in case of multi-attempt)
|
|
|
+ // Also filter on LPs of this session
|
|
|
+ $sql = " SELECT
|
|
|
+ MAX(view_count),
|
|
|
+ AVG(progress) average,
|
|
|
+ SUM(progress) sum_progress,
|
|
|
+ count(progress) count_progress
|
|
|
+ FROM $tbl_course_lp_view lp_view
|
|
|
+ WHERE
|
|
|
+ $conditionToString
|
|
|
+ GROUP BY lp_id";
|
|
|
+ $result = Database::query($sql);
|
|
|
+ $row = Database::fetch_array($result, 'ASSOC');
|
|
|
+ if (!$return_array) {
|
|
|
+ $avg_progress = round($row['average'], 1);
|
|
|
+ return $avg_progress;
|
|
|
+ } else {
|
|
|
+ return array($row['sum_progress'], $row['count_progress']);
|
|
|
}
|
|
|
}
|
|
|
- return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -946,6 +960,89 @@ class Tracking
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * This function gets:
|
|
|
+ * 1. The score average from all SCORM Test items in all LP in a course-> All the answers / All the max scores.
|
|
|
+ * 2. The score average from all Tests (quiz) in all LP in a course-> All the answers / All the max scores.
|
|
|
+ * 3. And finally it will return the average between 1. and 2.
|
|
|
+ * This function does not take the results of a Test out of a LP
|
|
|
+ *
|
|
|
+ * @param int|array Array of user ids or an user id
|
|
|
+ * @param string Course code
|
|
|
+ * @param array List of LP ids
|
|
|
+ * @param int Session id (optional), if param $session_id is null(default) it'll return results including sessions, 0 = session is not filtered
|
|
|
+ * @param bool Returns an array of the type [sum_score, num_score] if set to true
|
|
|
+ * @param bool get only the latest attempts or ALL attempts
|
|
|
+ * @return string Value (number %) Which represents a round integer explain in got in 3.
|
|
|
+ */
|
|
|
+ public static function getAverageStudentScore(
|
|
|
+ $student_id,
|
|
|
+ $course_code = null,
|
|
|
+ $lp_ids = array(),
|
|
|
+ $session_id = null
|
|
|
+ ) {
|
|
|
+ $tbl_stats_exercices = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
|
|
|
+ $tbl_stats_attempts = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT);
|
|
|
+
|
|
|
+ if (empty($student_id)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ $conditions = array();
|
|
|
+
|
|
|
+ if (!empty($course_code)) {
|
|
|
+ $course = api_get_course_info($course_code);
|
|
|
+ $course_id = $course['real_id'];
|
|
|
+ $conditions[] = " c_id = {$course['real_id']}";
|
|
|
+ }
|
|
|
+
|
|
|
+ // get course tables names
|
|
|
+ $tbl_quiz_questions = Database :: get_course_table(TABLE_QUIZ_QUESTION);
|
|
|
+ $lp_table = Database :: get_course_table(TABLE_LP_MAIN);
|
|
|
+ $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);
|
|
|
+
|
|
|
+ // Compose a filter based on optional learning paths list given
|
|
|
+
|
|
|
+ if (!empty($lp_ids) && count($lp_ids) > 0) {
|
|
|
+ $conditions[] = " id IN(".implode(',', $lp_ids).") ";
|
|
|
+ }
|
|
|
+
|
|
|
+ // Compose a filter based on optional session id
|
|
|
+ $session_id = intval($session_id);
|
|
|
+ if (!empty($session_id)) {
|
|
|
+ $conditions[] = " session_id = $session_id ";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (is_array($student_id)) {
|
|
|
+ array_walk($student_id, 'intval');
|
|
|
+ $conditions[] =" lp_view.user_id IN (".implode(',', $student_id).") ";
|
|
|
+ } else {
|
|
|
+ $conditions[] =" lp_view.user_id = $student_id ";
|
|
|
+ }
|
|
|
+
|
|
|
+ $conditionsToString = implode('AND ', $conditions);
|
|
|
+ //lp_iv.max_score as max_score_item_view,
|
|
|
+ $sql = "SELECT SUM(lp_iv.score) sum_score,
|
|
|
+ SUM(lp_i.max_score) sum_max_score,
|
|
|
+ count(*) as count
|
|
|
+ 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
|
|
|
+ INNER JOIN $lp_table as lp
|
|
|
+ ON lp.id = lp_i.lp_id
|
|
|
+ INNER JOIN $lp_view_table as lp_view
|
|
|
+ ON (lp_view.lp_id = lp.id)
|
|
|
+ WHERE (lp_i.item_type='sco' OR lp_i.item_type='".TOOL_QUIZ."') AND
|
|
|
+ $conditionsToString
|
|
|
+ ";
|
|
|
+ $result = Database::query($sql);
|
|
|
+ $row = Database::fetch_array($result, 'ASSOC');
|
|
|
+ return ($row['sum_score'] / $row['sum_max_score'])*100;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* This function gets time spent in learning path for a student inside a course
|
|
|
* @param int|array Student id(s)
|
|
@@ -1478,12 +1575,12 @@ class Tracking
|
|
|
$a_course = CourseManager::get_course_information($course_code);
|
|
|
if (!empty($a_course)) {
|
|
|
// table definition
|
|
|
- $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
- $tbl_document = Database :: get_course_table(TABLE_DOCUMENT);
|
|
|
+ $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
+ $tbl_document = Database :: get_course_table(TABLE_DOCUMENT);
|
|
|
$course_id = $a_course['real_id'];
|
|
|
if (is_array($student_id)) {
|
|
|
- $student_id = array_map('intval', $student_id);
|
|
|
- $condition_user = " AND ip.insert_user_id IN (".implode(',', $student_id).") ";
|
|
|
+ $studentList = array_map('intval', $student_id);
|
|
|
+ $condition_user = " AND ip.insert_user_id IN ('".implode(',', $studentList)."') ";
|
|
|
} else {
|
|
|
$student_id = intval($student_id);
|
|
|
$condition_user = " AND ip.insert_user_id = '$student_id' ";
|
|
@@ -1495,7 +1592,7 @@ class Tracking
|
|
|
$condition_session = " AND pub.session_id = $session_id ";
|
|
|
}
|
|
|
|
|
|
- $sql = "SELECT count(ip.tool)
|
|
|
+ $sql = "SELECT count(ip.tool) AS count
|
|
|
FROM $tbl_item_property ip INNER JOIN $tbl_document pub
|
|
|
ON ip.ref = pub.id
|
|
|
WHERE ip.c_id = $course_id AND
|
|
@@ -1505,7 +1602,7 @@ class Tracking
|
|
|
$condition_user $condition_session ";
|
|
|
$rs = Database::query($sql);
|
|
|
$row = Database::fetch_row($rs);
|
|
|
- return $row[0];
|
|
|
+ return $row['count'];
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
@@ -1517,83 +1614,98 @@ class Tracking
|
|
|
* @param int Session id (optional), if param $session_id is null(default) return count of assignments including sessions, 0 = session is not filtered
|
|
|
* @return int Count of assignments
|
|
|
*/
|
|
|
- public static function count_student_assignments($student_id, $course_code, $session_id = null)
|
|
|
+ public static function count_student_assignments($student_id, $course_code = null, $session_id = null)
|
|
|
{
|
|
|
+ if (empty($student_id)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ $conditions = array();
|
|
|
+
|
|
|
// Get the information of the course
|
|
|
$a_course = CourseManager::get_course_information($course_code);
|
|
|
if (!empty($a_course)) {
|
|
|
- // 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'];
|
|
|
+ $conditions[]= " ip.c_id = $course_id AND pub.c_id = $course_id ";
|
|
|
+ }
|
|
|
|
|
|
- if (is_array($student_id)) {
|
|
|
- $condition_user = " AND ip.insert_user_id IN (".implode(',',$student_id).") ";
|
|
|
- } else {
|
|
|
- $condition_user = " AND ip.insert_user_id = '$student_id' ";
|
|
|
- }
|
|
|
-
|
|
|
- $condition_session = "";
|
|
|
- if (isset($session_id)) {
|
|
|
- $session_id = intval($session_id);
|
|
|
- $condition_session = " AND pub.session_id = $session_id ";
|
|
|
- }
|
|
|
+ // table definition
|
|
|
+ $tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
|
|
|
+ $tbl_student_publication = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
|
|
|
|
|
|
- $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'
|
|
|
- $condition_user $condition_session ";
|
|
|
- $rs = Database::query($sql);
|
|
|
- $row = Database::fetch_row($rs);
|
|
|
- return $row[0];
|
|
|
+ if (is_array($student_id)) {
|
|
|
+ $studentList = array_map('intval', $student_id);
|
|
|
+ $conditions[]= " ip.insert_user_id IN ('".implode("','", $studentList)."') ";
|
|
|
+ } else {
|
|
|
+ $student_id = intval($student_id);
|
|
|
+ $conditions[]= " ip.insert_user_id = '$student_id' ";
|
|
|
}
|
|
|
- return null;
|
|
|
+ if (isset($session_id)) {
|
|
|
+ $session_id = intval($session_id);
|
|
|
+ $conditions[]= " pub.session_id = $session_id ";
|
|
|
+ }
|
|
|
+ $conditionToString = implode('AND', $conditions);
|
|
|
+
|
|
|
+ $sql = "SELECT count(ip.tool) as count
|
|
|
+ FROM $tbl_item_property ip
|
|
|
+ INNER JOIN $tbl_student_publication pub ON ip.ref = pub.id
|
|
|
+ WHERE
|
|
|
+ ip.tool='work' AND
|
|
|
+ $conditionToString";
|
|
|
+ $rs = Database::query($sql);
|
|
|
+ $row = Database::fetch_array($rs, 'ASSOC');
|
|
|
+ return $row['count'];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Count messages per student inside forum tool
|
|
|
- * @param int Student id
|
|
|
+ * @param int|array Student id
|
|
|
* @param string Course code
|
|
|
- * @param int Session id (optional), if param $session_id is null(default) return count of messages including sessions, 0 = session is not filtered
|
|
|
+ * @param int Session id (optional), if param $session_id is
|
|
|
+ * null(default) return count of messages including sessions, 0 = session is not filtered
|
|
|
* @return int Count of messages
|
|
|
*/
|
|
|
- public static function count_student_messages($student_id, $courseCode, $session_id = null)
|
|
|
+ public static function count_student_messages($student_id, $courseCode = null, $session_id = null)
|
|
|
{
|
|
|
- $student_id = intval($student_id);
|
|
|
+ if (empty($student_id)) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
|
|
|
$courseInfo = api_get_course_info($courseCode);
|
|
|
+ $courseCondition = null;
|
|
|
+ $conditions = array();
|
|
|
if (!empty($courseInfo)) {
|
|
|
-
|
|
|
- // Table definition
|
|
|
- $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST);
|
|
|
- $tbl_forum = Database :: get_course_table(TABLE_FORUM);
|
|
|
$course_id = $courseInfo['real_id'];
|
|
|
+ $conditions[]= " post.c_id = $course_id AND forum.c_id = $course_id ";
|
|
|
+ }
|
|
|
|
|
|
- if (is_array($student_id)) {
|
|
|
- $condition_user = " AND post.poster_id IN (".implode(',',$student_id).") ";
|
|
|
- } else {
|
|
|
- $condition_user = " AND post.poster_id = '$student_id' ";
|
|
|
- }
|
|
|
-
|
|
|
- $condition_session = "";
|
|
|
- if (isset($session_id)) {
|
|
|
- $session_id = intval($session_id);
|
|
|
- $condition_session = " AND forum.session_id = $session_id";
|
|
|
- }
|
|
|
+ // Table definition.
|
|
|
+ $tbl_forum_post = Database :: get_course_table(TABLE_FORUM_POST);
|
|
|
+ $tbl_forum = Database :: get_course_table(TABLE_FORUM);
|
|
|
|
|
|
- $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 ";
|
|
|
- $rs = Database::query($sql);
|
|
|
- return Database::num_rows($rs);
|
|
|
+ if (is_array($student_id)) {
|
|
|
+ $studentList = array_map('intval', $student_id);
|
|
|
+ $conditions[]= " post.poster_id IN ('".implode("','", $studentList)."') ";
|
|
|
} else {
|
|
|
- return null;
|
|
|
+ $student_id = intval($student_id);
|
|
|
+ $conditions[]= " post.poster_id = '$student_id' ";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isset($session_id)) {
|
|
|
+ $session_id = intval($session_id);
|
|
|
+ $conditions[]= " forum.session_id = $session_id";
|
|
|
}
|
|
|
+
|
|
|
+ $conditionsToString = implode('AND ', $conditions);
|
|
|
+ $sql = "SELECT count(poster_id) as count
|
|
|
+ FROM $tbl_forum_post post INNER JOIN $tbl_forum forum
|
|
|
+ ON forum.forum_id = post.forum_id
|
|
|
+ WHERE $conditionsToString";
|
|
|
+
|
|
|
+ $rs = Database::query($sql);
|
|
|
+ $row = Database::fetch_array($rs, 'ASSOC');
|
|
|
+ $count = $row['count'];
|
|
|
+ return $count;
|
|
|
}
|
|
|
|
|
|
/**
|