Attendance sheet chart plugin improved avoid calling unnecesary functions like api_get_course_info, api_get_user_info see CT#1225

skala
Julio Montoya 16 years ago
parent e12f3ab3f6
commit 1867133f85
  1. 43
      main/inc/lib/attendance.lib.php
  2. 96
      plugin/dashboard/block_student_graph/block_student_graph.class.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 <christian1827@gmail.com>
* @author Julio Montoya <gugli100@gmail.com> 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

@ -1,14 +1,18 @@
<?php
/* For licensing terms, see /license.txt */
/**
* This file is part of student graph block plugin for dashboard,
* it should be required inside dashboard controller for showing it into dashboard interface from plattform
* @package chamilo.dashboard
* @author Christian Fasanando
* @author Julio Montoya <gugli100@gmail.com>
*/
/**
* 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 = '
<li class="widget color-orange" id="intro">
<div class="widget-head">
<h3>'.get_lang('StudentsInformationsGraph').'</h3>
<div class="widget-actions"><a onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,$charset)).'\')) return false;" href="index.php?action=disable_block&path='.$this->path.'">'.Display::return_icon('close.gif',get_lang('Close')).'</a></div>
</div>
<div class="widget-content" align="center">
<div style="padding:10px;"><strong>'.get_lang('AttendancesFaults').'</strong></div>
'.$students_attendance_graph.'
</div>
</li>
';
$html = '<li class="widget color-orange" id="intro">
<div class="widget-head">
<h3>'.get_lang('StudentsInformationsGraph').'</h3>
<div class="widget-actions"><a onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('ConfirmYourChoice'),ENT_QUOTES,$charset)).'\')) return false;" href="index.php?action=disable_block&path='.$this->path.'">'.Display::return_icon('close.gif',get_lang('Close')).'</a></div>
</div>
<div class="widget-content" align="center">
<div style="padding:10px;"><strong>'.get_lang('AttendancesFaults').'</strong></div>
'.$students_attendance_graph.'
</div>
</li>';
$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);
}
}
}
?>
Loading…
Cancel
Save