From e9ba6fa4c6efbb2d1626e56a61d7c926980da2b9 Mon Sep 17 00:00:00 2001 From: Carlos Vargas Date: Fri, 30 Apr 2010 17:16:24 -0500 Subject: [PATCH] Add condition to access url in administration / statics Part#1 CT#1099 --- main/admin/statistics/statistics.lib.php | 138 ++++++++++++++++++----- 1 file changed, 108 insertions(+), 30 deletions(-) diff --git a/main/admin/statistics/statistics.lib.php b/main/admin/statistics/statistics.lib.php index ffab4a4ad8..78545ece39 100755 --- a/main/admin/statistics/statistics.lib.php +++ b/main/admin/statistics/statistics.lib.php @@ -24,10 +24,20 @@ class Statistics { * @return int Number of courses counted */ function count_courses($category_code = NULL) { + global $_configuration; $course_table = Database :: get_main_table(TABLE_MAIN_COURSE); - $sql = "SELECT COUNT(*) AS number FROM ".$course_table." "; - if (isset ($category_code)) { - $sql .= " WHERE category_code = '".Database::escape_string($category_code)."'"; + $access_url_rel_course_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $sql = "SELECT COUNT(*) AS number FROM ".$course_table." as c, ".$access_url_rel_course_table." as u WHERE u.course_code=c.code AND access_url_id='".$current_url_id."'"; + if (isset ($category_code)) { + $sql .= " AND category_code = '".Database::escape_string($category_code)."'"; + } + } else { + $sql = "SELECT COUNT(*) AS number FROM ".$course_table." "; + if (isset ($category_code)) { + $sql .= " WHERE category_code = '".Database::escape_string($category_code)."'"; + } } $res = Database::query($sql); $obj = Database::fetch_object($res); @@ -41,14 +51,24 @@ class Statistics { * @return int Number of users counted */ function count_users($status, $category_code = NULL, $count_invisible_courses = true) { + + global $_configuration; // Database table definitions $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $course_table = Database :: get_main_table(TABLE_MAIN_COURSE); $user_table = Database :: get_main_table(TABLE_MAIN_USER); - - $sql = "SELECT COUNT(DISTINCT(user_id)) AS number FROM $user_table WHERE status = ".intval(Database::escape_string($status))." "; - if (isset ($category_code)) { - $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number FROM $course_user_table cu, $course_table c WHERE cu.status = ".intval(Database::escape_string($status))." AND c.code = cu.course_code AND c.category_code = '".Database::escape_string($category_code)."' "; + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $sql = "SELECT COUNT(DISTINCT(u.user_id)) AS number FROM $user_table as u, $access_url_rel_user_table as url WHERE status = ".intval(Database::escape_string($status))." AND u.user_id=url.user_id AND access_url_id='".$current_url_id."'"; + if (isset ($category_code)) { + $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number FROM $course_user_table cu, $course_table c, $access_url_rel_user_table as url WHERE cu.status = ".intval(Database::escape_string($status))." AND c.code = cu.course_code AND c.category_code = '".Database::escape_string($category_code)."' AND cu.user_id=url.user_id AND access_url_id='".$current_url_id."'"; + } + } else { + $sql = "SELECT COUNT(DISTINCT(user_id)) AS number FROM $user_table WHERE status = ".intval(Database::escape_string($status))." "; + if (isset ($category_code)) { + $sql = "SELECT COUNT(DISTINCT(cu.user_id)) AS number FROM $course_user_table cu, $course_table c WHERE cu.status = ".intval(Database::escape_string($status))." AND c.code = cu.course_code AND c.category_code = '".Database::escape_string($category_code)."' "; + } } $res = Database::query($sql); $obj = Database::fetch_object($res); @@ -61,9 +81,16 @@ class Statistics { */ function get_number_of_activities() { // Database table definitions + global $_configuration; $track_e_default = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_DEFAULT); $table_user = Database::get_main_table(TABLE_MAIN_USER); - $sql = "SELECT count(default_id) AS total_number_of_items FROM $track_e_default, $table_user user WHERE default_user_id = user.user_id "; + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $sql = "SELECT count(default_id) AS total_number_of_items FROM $track_e_default, $table_user user, $access_url_rel_user_table url WHERE default_user_id = user.user_id AND user.user_id=url.user_id AND access_url_id='".$current_url_id."'"; + } else { + $sql = "SELECT count(default_id) AS total_number_of_items FROM $track_e_default, $table_user user WHERE default_user_id = user.user_id "; + } if (isset($_GET['keyword'])) { $keyword = Database::escape_string(trim($_GET['keyword'])); @@ -78,10 +105,12 @@ class Statistics { * Get activities data to display */ function get_activities_data($from, $number_of_items, $column, $direction) { - global $dateTimeFormatLong; + global $dateTimeFormatLong, $_configuration; $track_e_default = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_DEFAULT); $table_user = Database::get_main_table(TABLE_MAIN_USER); $table_course = Database::get_main_table(TABLE_MAIN_COURSE); + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); $column = intval($column); $from = intval($from); @@ -90,15 +119,25 @@ class Statistics { if (!in_array($direction, array('ASC','DESC'))) { $direction = 'DESC'; } - - $sql = "SELECT - default_event_type as col0, - default_value_type as col1, - default_value as col2, - user.username as col3, - default_date as col4 - FROM $track_e_default track_default, $table_user user - WHERE track_default.default_user_id = user.user_id "; + if ($_configuration['multiple_access_urls'] == true){ + $sql = "SELECT + default_event_type as col0, + default_value_type as col1, + default_value as col2, + user.username as col3, + default_date as col4 + FROM $track_e_default as track_default, $table_user as user, $access_url_rel_user_table as url + WHERE track_default.default_user_id = user.user_id AND url.user_id=user.user_id AND access_url_id='".$current_url_id."'"; + } else { + $sql = "SELECT + default_event_type as col0, + default_value_type as col1, + default_value as col2, + user.username as col3, + default_date as col4 + FROM $track_e_default track_default, $table_user user + WHERE track_default.default_user_id = user.user_id "; + } if (isset($_GET['keyword'])) { $keyword = Database::escape_string(trim($_GET['keyword'])); @@ -209,21 +248,31 @@ class Statistics { * @param string $type month, hour or day */ function print_login_stats($type) { + global $_configuration; $table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN); + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $table_url = ", $access_url_rel_user_table"; + $where_url = " WHERE login_user_id=user_id AND access_url_id='".$current_url_id."'"; + } else { + $table_url = ''; + $where_url=''; + } switch ($type) { case 'month': $months = api_get_months_long(); $period = get_lang('PeriodMonth'); - $sql = "SELECT DATE_FORMAT( login_date, '%Y-%m' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table." GROUP BY stat_date ORDER BY login_date "; + $sql = "SELECT DATE_FORMAT( login_date, '%Y-%m' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table.$table_url.$where_url." GROUP BY stat_date ORDER BY login_date "; break; case 'hour': $period = get_lang('PeriodHour'); - $sql = "SELECT DATE_FORMAT( login_date, '%H' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table." GROUP BY stat_date ORDER BY stat_date "; + $sql = "SELECT DATE_FORMAT( login_date, '%H' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table.$table_url.$where_url." GROUP BY stat_date ORDER BY stat_date "; break; case 'day': $week_days = api_get_week_days_long(); $period = get_lang('PeriodDay'); - $sql = "SELECT DATE_FORMAT( login_date, '%w' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table." GROUP BY stat_date ORDER BY DATE_FORMAT( login_date, '%w' ) "; + $sql = "SELECT DATE_FORMAT( login_date, '%w' ) AS stat_date , count( login_id ) AS number_of_logins FROM ".$table.$table_url.$where_url." GROUP BY stat_date ORDER BY DATE_FORMAT( login_date, '%w' ) "; break; } $res = Database::query($sql); @@ -248,12 +297,22 @@ class Statistics { * Print the number of recent logins */ function print_recent_login_stats() { + global $_configuration; $total_logins = array(); $table = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_LOGIN); - $sql[get_lang('Thisday')] = "SELECT count(login_user_id) AS number FROM $table WHERE DATE_ADD(login_date, INTERVAL 1 DAY) >= NOW()"; - $sql[get_lang('Last7days')] = "SELECT count(login_user_id) AS number FROM $table WHERE DATE_ADD(login_date, INTERVAL 7 DAY) >= NOW()"; - $sql[get_lang('Last31days')] = "SELECT count(login_user_id) AS number FROM $table WHERE DATE_ADD(login_date, INTERVAL 31 DAY) >= NOW()"; - $sql[get_lang('Total')] = "SELECT count(login_user_id) AS number FROM $table"; + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $table_url = ", $access_url_rel_user_table"; + $where_url = " AND login_user_id=user_id AND access_url_id='".$current_url_id."'"; + } else { + $table_url = ''; + $where_url=''; + } + $sql[get_lang('Thisday')] = "SELECT count(login_user_id) AS number FROM $table $table_url WHERE DATE_ADD(login_date, INTERVAL 1 DAY) >= NOW() $where_url"; + $sql[get_lang('Last7days')] = "SELECT count(login_user_id) AS number FROM $table $table_url WHERE DATE_ADD(login_date, INTERVAL 7 DAY) >= NOW() $where_url"; + $sql[get_lang('Last31days')] = "SELECT count(login_user_id) AS number FROM $table $table_url WHERE DATE_ADD(login_date, INTERVAL 31 DAY) >= NOW() $where_url"; + $sql[get_lang('Total')] = "SELECT count(login_user_id) AS number FROM $table $table_url WHERE 1=1 $where_url"; foreach ($sql as $index => $query) { $res = Database::query($query); $obj = Database::fetch_object($res); @@ -289,10 +348,19 @@ class Statistics { * Show some stats about the number of courses per language */ function print_course_by_language_stats() { - $table = Database::get_main_table(TABLE_MAIN_COURSE); - $sql = "SELECT course_language, count( code ) + global $_configuration; + $table = Database :: get_main_table(TABLE_MAIN_COURSE); + $access_url_rel_course_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $sql = "SELECT course_language, count( c.code ) + AS number_of_courses + FROM $table as c, $access_url_rel_course_table as u WHERE u.course_code=c.code AND access_url_id='".$current_url_id."' GROUP BY course_language"; + } else { + $sql = "SELECT course_language, count( code ) AS number_of_courses FROM $table GROUP BY course_language "; + } $res = Database::query($sql); $result = array(); while ($obj = Database::fetch_object($res)) { @@ -304,12 +372,22 @@ class Statistics { * Shows the number of users having their picture uploaded in Dokeos. */ function print_user_pictures_stats() { + global $_configuration; $user_table = Database :: get_main_table(TABLE_MAIN_USER); - $sql = "SELECT COUNT(*) AS n FROM $user_table"; + $access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); + $current_url_id = api_get_current_access_url_id(); + if ($_configuration['multiple_access_urls'] == true){ + $url_condition = ", $access_url_rel_user_table as url WHERE url.user_id=u.user_id AND access_url_id='".$current_url_id."'"; + $url_condition2 = " AND url.user_id=u.user_id AND access_url_id='".$current_url_id."'"; + $table = ", $access_url_rel_user_table as url "; + } + $sql = "SELECT COUNT(*) AS n FROM $user_table as u ".$url_condition; $res = Database::query($sql); $count1 = Database::fetch_object($res); - $sql = "SELECT COUNT(*) AS n FROM $user_table - WHERE LENGTH(picture_uri) > 0"; + $sql = "SELECT COUNT(*) AS n FROM $user_table as u $table + WHERE LENGTH(picture_uri) > 0 $url_condition2"; + + $res = Database::query($sql); $count2 = Database::fetch_object($res); // #users without picture