From 1867133f857c4bebbf663701eb7b67a85d922988 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 4 May 2010 16:17:48 +0200 Subject: [PATCH] Attendance sheet chart plugin improved avoid calling unnecesary functions like api_get_course_info, api_get_user_info see CT#1225 --- main/inc/lib/attendance.lib.php | 43 ++++----- .../block_student_graph.class.php | 96 ++++++++++--------- 2 files changed, 72 insertions(+), 67 deletions(-) diff --git a/main/inc/lib/attendance.lib.php b/main/inc/lib/attendance.lib.php index 37f30abb8c..dc67c39825 100755 --- a/main/inc/lib/attendance.lib.php +++ b/main/inc/lib/attendance.lib.php @@ -4,12 +4,12 @@ /** * This file contains class used like library, provides functions for attendance tool. It's also used like model to attendance_controller (MVC pattern) * @author Christian Fasanando + * @author Julio Montoya improvements * @package chamilo.attendance */ /** * Attendance can be used to instanciate objects or as a library to manage attendances - * @package chamilo.attendance */ class Attendance @@ -42,19 +42,19 @@ class Attendance /** - * Get attendance list - * @param string course code (optional) + * Get attendance list only the id, name and attendance_qualify_max fields + * @param string course db name (optional) * @param int session id (optional) * @return array attendances list */ - function get_attendances_list($course_code = '', $session_id = null) { - // initializing database table and variables + function get_attendances_list($course_db_name = '', $session_id = null) { + // Initializing database table and variables $tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE); $data = array(); - if (!empty($course_code)) { - $course_info = api_get_course_info($course_code); - $tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE, $course_info['dbName']); + if (!empty($course_db_name)) { + //$course_info = api_get_course_info($course_code); + $tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE, $course_db_name); } $condition_session = ''; @@ -66,11 +66,11 @@ class Attendance $condition_session = api_get_session_condition($session_id); } - // get attendance data - $sql = "SELECT * FROM $tbl_attendance WHERE active = 1 $condition_session "; + // Get attendance data + $sql = "SELECT id, name, attendance_qualify_max FROM $tbl_attendance WHERE active = 1 $condition_session "; $rs = Database::query($sql); - if (Database::num_rows($rs) > 0){ - while ($row = Database::fetch_array($rs)) { + if (Database::num_rows($rs) > 0) { + while ($row = Database::fetch_array($rs,'ASSOC')) { $data[$row['id']] = $row; } } @@ -494,17 +494,16 @@ class Attendance public function get_faults_average_inside_courses($user_id) { // get all courses of current user - $courses = CourseManager::get_courses_list_by_user_id($user_id, true); + $courses = CourseManager::get_courses_list_by_user_id($user_id, true); $user_id = intval($user_id); - $results = array(); $total_faults = $total_weight = $porcent = 0; - foreach ($courses as $course) { - - $course_code = $course['code']; - $course_info = api_get_course_info($course_code); - $tbl_attendance_result = Database::get_course_table(TABLE_ATTENDANCE_RESULT, $course_info['dbName']); - $attendances_by_course = $this->get_attendances_list($course_code); + foreach ($courses as $course) { + //$course_code = $course['code']; + //$course_info = api_get_course_info($course_code); + $tbl_attendance_result = Database::get_course_table(TABLE_ATTENDANCE_RESULT, $course['db_name']); + $attendances_by_course = $this->get_attendances_list($course['db_name']); + foreach ($attendances_by_course as $attendance) { // get total faults and total weight $attendance_id = $attendance['id']; @@ -527,8 +526,8 @@ class Attendance $results['faults'] = $total_faults; $results['total'] = $total_weight; $results['porcent'] = $porcent; + return $results; - } /** @@ -546,7 +545,7 @@ class Attendance $user_id = intval($user_id); $results = array(); $total_faults = $total_weight = $porcent = 0; - $attendances_by_course = $this->get_attendances_list($course_code, $session_id); + $attendances_by_course = $this->get_attendances_list($course_info['dbName'], $session_id); foreach ($attendances_by_course as $attendance) { // get total faults and total weight diff --git a/plugin/dashboard/block_student_graph/block_student_graph.class.php b/plugin/dashboard/block_student_graph/block_student_graph.class.php index aec75371bf..6ee75271f5 100755 --- a/plugin/dashboard/block_student_graph/block_student_graph.class.php +++ b/plugin/dashboard/block_student_graph/block_student_graph.class.php @@ -1,14 +1,18 @@ */ /** * required files for getting data */ + require_once api_get_path(LIBRARY_PATH).'usermanager.lib.php'; require_once api_get_path(LIBRARY_PATH).'course.lib.php'; require_once api_get_path(LIBRARY_PATH).'tracking.lib.php'; @@ -77,67 +81,65 @@ class BlockStudentGraph extends Block { $column = 1; $data = array(); $students_attendance_graph = $this->get_students_attendance_graph(); - - $html = ' -
  • -
    -

    '.get_lang('StudentsInformationsGraph').'

    - -
    -
    -
    '.get_lang('AttendancesFaults').'
    - '.$students_attendance_graph.' -
    -
  • - '; - + + $html = '
  • +
    +

    '.get_lang('StudentsInformationsGraph').'

    + +
    +
    +
    '.get_lang('AttendancesFaults').'
    + '.$students_attendance_graph.' +
    +
  • '; $data['column'] = $column; - $data['content_html'] = $html; - - return $data; - + $data['content_html'] = $html; + return $data; } /** * This method return a graph containing informations about students evaluation, it's used inside get_block method for showing it inside dashboard interface * @return string img html */ - public function get_students_attendance_graph() { - + public function get_students_attendance_graph() { $students = $this->students; $attendance = new Attendance(); // get data $attendances_faults_avg = array(); - - foreach ($students as $student) { - $student_id = $student['user_id']; - $student_info = api_get_user_info($student_id); - // get average of faults in attendances by student - $results_faults_avg = $attendance->get_faults_average_inside_courses($student_id); - if (!empty($results_faults_avg)) { - $attendances_faults_avg[$student_info['username']] = $results_faults_avg['porcent']; - } else { - $attendances_faults_avg[$student_info['username']] = 0; - } + if (is_array($students) && count($students) > 0) { + + foreach ($students as $student) { + $student_id = $student['user_id']; + //$student_info = api_get_user_info($student_id); + // get average of faults in attendances by student + $results_faults_avg = $attendance->get_faults_average_inside_courses($student_id); + + if (!empty($results_faults_avg)) { + $attendances_faults_avg[$student['username']] = $results_faults_avg['porcent']; + } else { + $attendances_faults_avg[$student['username']] = 0; + } + } } - - arsort($attendances_faults_avg); + + arsort($attendances_faults_avg); $usernames = array_keys($attendances_faults_avg); - + $faults = array(); foreach ($usernames as $username) { $faults[] = $attendances_faults_avg[$username]; } - + $graph = ''; $img_file = ''; if (is_array($usernames) && count($usernames) > 0) { // Defining data - $data_set = new pData; + $data_set = new pData; + $data_set->AddPoint($faults,"Promedio"); $data_set->AddPoint($usernames,"Usuario"); $data_set->AddAllSeries(); @@ -149,7 +151,8 @@ class BlockStudentGraph extends Block { $data = $data_set->GetData(); // return $this->DataDescription - if ($cache->IsInCache($graph_id, $data_set->GetData())) { + if ($cache->IsInCache($graph_id, $data_set->GetData())) { + //if (0) { //if we already created the img $img_file = $cache->GetHash($graph_id, $data_set->GetData()); // image file with hash } else { @@ -163,17 +166,20 @@ class BlockStudentGraph extends Block { // Initialise the graph $test = new MyHorBar(400,($height+30)); $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 8); - $test->setGraphArea(65,30,350,$height); + $test->setGraphArea(100,30,370,$height); + $test->drawFilledRoundedRectangle(7,7,393,$height,5,240,240,240); $test->drawRoundedRectangle(5,5,395,$height,5,230,230,230); $test->drawGraphArea(255,255,255,TRUE); - $test->setFixedScale(0,100,5); - $test->drawHorScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE); - $test->setColorPalette(0,255,0,0); + + //X axis + $test->setFixedScale(0,100,10); + //var_dump($data_set->GetDataDescription()); + $test->drawHorScale($data_set->GetData(),$data_set->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE); + $test->setColorPalette(0,255,0,0); $test->drawHorGrid(10,TRUE,230,230,230,50); // Draw the 0 line - //$Test->setFontProperties("Fonts/tahoma.ttf",6); $test->setFontProperties(api_get_path(LIBRARY_PATH).'pchart/fonts/tahoma.ttf', 6); $test->drawTreshold(0,143,55,72,TRUE,TRUE); @@ -181,9 +187,11 @@ class BlockStudentGraph extends Block { $test->drawHorBarGraph($data_set->GetData(),$data_set->GetDataDescription(),FALSE); $cache->WriteToCache($graph_id, $data_set->GetData(), $test); + ob_start(); $test->Stroke(); ob_end_clean(); + $img_file = $cache->GetHash($graph_id, $data_set->GetData()); } if (!empty($img_file)) { @@ -201,8 +209,6 @@ class BlockStudentGraph extends Block { */ function get_number_of_students() { return count($this->students); - } - + } } - ?> \ No newline at end of file