Browse Source

Fix group count see BT#9428

Julio Montoya 9 years ago
parent
commit
aadab8c462
1 changed files with 27 additions and 9 deletions
  1. 27 9
      main/inc/lib/attendance.lib.php

+ 27 - 9
main/inc/lib/attendance.lib.php

@@ -651,7 +651,7 @@ class Attendance
 			}
 
 			if (!empty($attendance_id)) {
-				$user_faults = $this->get_faults_of_user($uid, $attendance_id);
+				$user_faults = $this->get_faults_of_user($uid, $attendance_id, $groupId);
 				$value['attendance_result'] = $user_faults['faults'].'/'.$user_faults['total'].' ('.$user_faults['faults_porcent'].'%)';
 				$value['result_color_bar'] 	= $user_faults['color_bar'];
 			}
@@ -935,19 +935,20 @@ class Attendance
 
 	/**
 	 * Get results of faults (absents) by user
-	 * @param	int	   user id
-	 * @param	int	   attendance id
+	 * @param int $user_id
+	 * @param int $attendance_id
+	 * @param int $groupId
 	 * @return 	array  results containing number of faults, total done attendance,
 	 * percent of faults and color depend on result (red, orange)
 	 */
-	public function get_faults_of_user($user_id, $attendance_id)
+	public function get_faults_of_user($user_id, $attendance_id, $groupId = null)
 	{
 		// initializing database table and variables
 		$user_id 		= intval($user_id);
 		$attendance_id 	= intval($attendance_id);
 		$results = array();
 		$attendance_data = $this->get_attendance_by_id($attendance_id);
-		$calendar_count = self::get_number_of_attendance_calendar($attendance_id);
+		$calendar_count = self::get_number_of_attendance_calendar($attendance_id, $groupId);
 		$total_done_attendance 	= $attendance_data['attendance_qualify_max'];
 		$attendance_user_score  = $this->get_user_score($user_id, $attendance_id);
 
@@ -1323,15 +1324,32 @@ class Attendance
 	/**
 	 * Get number of attendance calendar inside current attendance
 	 * @param	int	$attendance_id
-	 * @return	int     number of dates in attendance calendar
+	 * @param	int	$groupId
+	 * @return	int number of dates in attendance calendar
 	 */
-	public static function get_number_of_attendance_calendar($attendance_id)
+	public static function get_number_of_attendance_calendar($attendance_id, $groupId = 0)
 	{
 		$tbl_attendance_calendar = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
+		$calendarRelGroup = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR_REL_GROUP);
 		$attendance_id = intval($attendance_id);
+		$groupId = intval($groupId);
+
+		$groupCondition = " group_id = $groupId ";
+		if (empty($groupId)) {
+			$groupCondition = "group_id IS NULL OR group_id = 0 ";
+		}
+
 		$course_id = api_get_course_int_id();
-		$sql = "SELECT count(id) FROM $tbl_attendance_calendar
-                WHERE c_id = $course_id AND attendance_id = '$attendance_id'";
+		$sql = "SELECT count(a.id)
+				FROM $tbl_attendance_calendar a
+				INNER JOIN $calendarRelGroup g
+				ON (a.id = g.calendar_id AND a.c_id = g.c_id)
+                WHERE
+                	a.c_id = $course_id AND
+                	attendance_id = '$attendance_id' AND
+                	$groupCondition
+				";
+
 		$rs = Database::query($sql);
 		$row = Database::fetch_row($rs);
 		$count = $row[0];