Browse Source

More fixes in the attendance lib in order to called the class elsewhere

Julio Montoya 12 years ago
parent
commit
f4b10515c4
1 changed files with 67 additions and 58 deletions
  1. 67 58
      main/inc/lib/attendance.lib.php

+ 67 - 58
main/inc/lib/attendance.lib.php

@@ -90,7 +90,7 @@ class Attendance
 	 */
 	static function get_attendance_data($from, $number_of_items, $column, $direction) {
         $tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE);
-        $course_id = api_get_course_int_id;
+        $course_id = api_get_course_int_id();
         $session_id = api_get_session_id();
         $condition_session = api_get_session_condition($session_id);
         $column = intval($column);
@@ -101,6 +101,10 @@ class Attendance
             $direction = 'ASC';
         }
         
+        $att = new Attendance();
+        $att->set_session_id($session_id);
+        $att->set_course_int_id($course_id);
+        
         $active_plus = 'att.active = 1';
         
         if (api_is_platform_admin()) { 
@@ -119,8 +123,8 @@ class Attendance
 				WHERE c_id = $course_id AND $active_plus $condition_session
 				ORDER BY col$column $direction LIMIT $from,$number_of_items ";        
         
-		$res = Database::query($sql);
-		$attendances = array ();
+		$res = Database::query($sql);        
+		$attendances = array();
 
 		$param_gradebook = '';
 		if (isset($_SESSION['gradebook'])) {
@@ -176,7 +180,7 @@ class Attendance
                 }
 
                 // display lock/unlock icon
-                $is_done_all_calendar = self::is_all_attendance_calendar_done($attendance[0]);
+                $is_done_all_calendar = $att->is_all_attendance_calendar_done($attendance[0]);
 
                 if ($is_done_all_calendar) {
                     $locked   = $attendance[4];
@@ -196,7 +200,6 @@ class Attendance
                     }
                 } 
                 $actions .= '</center>';
-
 				$attendances[] = array($attendance[0], $attendance[1], $attendance[2], $attendance[3],$actions);
 			} else {
 				$attendance[0] = '&nbsp;';
@@ -330,11 +333,12 @@ class Attendance
 	 * @param 	int|array	   one or many attendances id
 	 * @return 	int    		   affected rows
 	 */
-	public function attendance_restore($attendance_id) {
-		global $_course;
+	public function attendance_restore($attendance_id) {		
 		$tbl_attendance	= Database :: get_course_table(TABLE_ATTENDANCE);
 		$user_id 		= api_get_user_id();
         $course_id      = $this->get_course_int_id();
+        $course_info    = api_get_course_info_by_id($course_id);
+        
 		if (is_array($attendance_id)) {
 			foreach ($attendance_id as $id) {
 				$id	= intval($id);
@@ -343,7 +347,7 @@ class Attendance
 				$affected_rows = Database::affected_rows();
 				if (!empty($affected_rows)) {
 					// update row item property table
-					api_item_property_update($_course, TOOL_ATTENDANCE, $id,"restore", $user_id);
+					api_item_property_update($course_info, TOOL_ATTENDANCE, $id,"restore", $user_id);
 				}
 			}
 		} else  {
@@ -353,7 +357,7 @@ class Attendance
 			$affected_rows = Database::affected_rows();
 			if (!empty($affected_rows)) {
 				// update row item property table
-				api_item_property_update($_course, TOOL_ATTENDANCE, $attendance_id,"restore", $user_id);
+				api_item_property_update($course_info, TOOL_ATTENDANCE, $attendance_id,"restore", $user_id);
 			}
 		}
 		return $affected_rows;
@@ -365,11 +369,12 @@ class Attendance
 	 * @param 	int|array	   one or many attendances id
 	 * @return 	int    		   affected rows
 	 */
-	public function attendance_delete($attendance_id) {
-		global $_course;
+	public function attendance_delete($attendance_id) {		
 		$tbl_attendance	= Database :: get_course_table(TABLE_ATTENDANCE);
 		$user_id 		= api_get_user_id();
 		$course_id      = $this->get_course_int_id();
+        $course_info    = api_get_course_info_by_id($course_id);
+        
 		if (is_array($attendance_id)) {
 			foreach ($attendance_id as $id) {
 				$id	= intval($id);
@@ -378,7 +383,7 @@ class Attendance
 				$affected_rows = Database::affected_rows();
 				if (!empty($affected_rows)) {
 					// update row item property table
-					api_item_property_update($_course, TOOL_ATTENDANCE, $id,"delete", $user_id);
+					api_item_property_update($course_info, TOOL_ATTENDANCE, $id,"delete", $user_id);
 				}
 			}
 		} else  {
@@ -388,7 +393,7 @@ class Attendance
 			$affected_rows = Database::affected_rows();
 			if (!empty($affected_rows)) {
 				// update row item property table
-				api_item_property_update($_course, TOOL_ATTENDANCE, $attendance_id,"delete", $user_id);
+				api_item_property_update($course_info, TOOL_ATTENDANCE, $attendance_id,"delete", $user_id);
 			}
 		}
 		return $affected_rows;
@@ -485,7 +490,7 @@ class Attendance
 	 * @param	int	   attendance id
 	 * @return 	int    affected rows
 	 */
-	public function attendance_sheet_add($calendar_id, $users_present, $attendance_id) {
+	public function attendance_sheet_add($calendar_id, $users_present, $attendance_id, $save_user_absents = true) {
 		$tbl_attendance_sheet 	= Database::get_course_table(TABLE_ATTENDANCE_SHEET);
 		$tbl_attendance_calendar= Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
 		
@@ -527,25 +532,27 @@ class Attendance
 		}
 
 		// save users absent in class
-		foreach ($users_absent as $user_absent) {
-			$uid = intval($user_absent);
-			// check if user already was registered with the $calendar_id
-			$sql = "SELECT user_id FROM $tbl_attendance_sheet WHERE c_id = $course_id AND user_id='$uid' AND attendance_calendar_id = '$calendar_id'";
-			$rs  = Database::query($sql);
-			if (Database::num_rows($rs) == 0) {
-				$sql = "INSERT INTO $tbl_attendance_sheet SET
-						c_id = $course_id, 
-						user_id ='$uid', 
-						attendance_calendar_id = '$calendar_id', 
-						presence = 0";
-				Database::query($sql);
-				$affected_rows += Database::affected_rows();
-			} else {
-				$sql = "UPDATE $tbl_attendance_sheet SET presence = 0 WHERE c_id = $course_id AND user_id ='$uid' AND attendance_calendar_id = '$calendar_id'";
-				Database::query($sql);
-				$affected_rows += Database::affected_rows();
-			}
-		}
+        if ($save_user_absents) {
+            foreach ($users_absent as $user_absent) {
+                $uid = intval($user_absent);
+                // check if user already was registered with the $calendar_id
+                $sql = "SELECT user_id FROM $tbl_attendance_sheet WHERE c_id = $course_id AND user_id='$uid' AND attendance_calendar_id = '$calendar_id'";
+                $rs  = Database::query($sql);
+                if (Database::num_rows($rs) == 0) {
+                    $sql = "INSERT INTO $tbl_attendance_sheet SET
+                            c_id = $course_id, 
+                            user_id ='$uid', 
+                            attendance_calendar_id = '$calendar_id', 
+                            presence = 0";
+                    Database::query($sql);
+                    $affected_rows += Database::affected_rows();
+                } else {
+                    $sql = "UPDATE $tbl_attendance_sheet SET presence = 0 WHERE c_id = $course_id AND user_id ='$uid' AND attendance_calendar_id = '$calendar_id'";
+                    Database::query($sql);
+                    $affected_rows += Database::affected_rows();
+                }
+            }
+        }
 
 		// update done_attendance inside attendance calendar table
 		$sql = "UPDATE $tbl_attendance_calendar SET done_attendance = 1 WHERE c_id = $course_id AND id = '$calendar_id'";
@@ -589,25 +596,30 @@ class Attendance
 			foreach ($user_ids as $uid) {
 				$count_presences = 0;
 				if (count($calendar_ids) > 0) {
-					$sql = "SELECT count(presence) as count_presences FROM $tbl_attendance_sheet 
-					        WHERE c_id = $course_id AND user_id = '$uid' AND attendance_calendar_id IN (".implode(',', $calendar_ids).") AND presence = 1";
+					$sql = "SELECT count(presence) as count_presences 
+                            FROM $tbl_attendance_sheet 
+					        WHERE   c_id = $course_id AND 
+                                    user_id = '$uid' AND 
+                                    attendance_calendar_id IN (".implode(',', $calendar_ids).") AND 
+                                    presence = 1";
 					$rs_count  = Database::query($sql);
 					$row_count = Database::fetch_array($rs_count);
 					$count_presences = $row_count['count_presences'];
 				}
-				// save results
-				$sql = "SELECT id FROM $tbl_attendance_result WHERE c_id = $course_id AND user_id='$uid' AND attendance_id='$attendance_id'";
+                
+				// Save results
+				$sql = "SELECT id FROM $tbl_attendance_result WHERE c_id = $course_id AND user_id = '$uid' AND attendance_id='$attendance_id'";
 				$rs_check_result = Database::query($sql);
 				if (Database::num_rows($rs_check_result) > 0) {
 					// update result
 					$sql = "UPDATE $tbl_attendance_result SET 
-							score='$count_presences' 
+							score = '$count_presences' 
 							WHERE c_id = $course_id AND user_id='$uid' AND attendance_id='$attendance_id'";
 					Database::query($sql);
 				} else {
 					// insert new result
 					$sql = "INSERT INTO $tbl_attendance_result SET
-								c_id = $course_id , 
+								c_id            = $course_id , 
 								user_id			= '$uid', 
 								attendance_id 	= '$attendance_id', 
 								score			= '$count_presences'";
@@ -616,12 +628,11 @@ class Attendance
 			}
 		}
 		// update attendance qualify max
-		$count_done_calendar = self::get_done_attendance_calendar($attendance_id);
+		$count_done_calendar = $this->get_done_attendance_calendar($attendance_id);
 		$sql = "UPDATE $tbl_attendance SET attendance_qualify_max='$count_done_calendar' WHERE c_id = $course_id AND id = '$attendance_id'";
 		Database::query($sql);
 	}
 
-
     /**
         * update attendance_sheet_log table, is used as history of an attendance sheet
         * @param   int     Attendance id
@@ -661,13 +672,15 @@ class Attendance
 	 * @param	int	   attendance id
 	 * @return 	int	   number of done attendances
 	 */
-	public static function get_done_attendance_calendar($attendance_id) {
+	public function get_done_attendance_calendar($attendance_id) {
 		$tbl_attendance_calendar = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
 		$attendance_id = intval($attendance_id);
-        $course_id = api_get_course_int_id();
+        $course_id = $this->get_course_int_id();
 		$sql = "SELECT count(done_attendance) as count 
                 FROM $tbl_attendance_calendar 
-                WHERE c_id = $course_id AND attendance_id = '$attendance_id' AND done_attendance=1";
+                WHERE   c_id = $course_id AND 
+                        attendance_id = '$attendance_id' AND 
+                        done_attendance = 1";
 		$rs  = Database::query($sql);
 		$row = Database::fetch_array($rs);
 		$count = $row['count'];
@@ -681,15 +694,12 @@ class Attendance
 	 * @return 	array  results containing number of faults, total done attendance, porcent of faults and color depend on result (red, orange)
 	 */
 	public function get_faults_of_user($user_id, $attendance_id) {
-
-		// initializing database table and variables
-		$tbl_attendance_result 	= Database::get_course_table(TABLE_ATTENDANCE_RESULT);
 		$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 	= $this->get_number_of_attendance_calendar($attendance_id);
 		
 		$total_done_attendance 	= $attendance_data['attendance_qualify_max'];
 		
@@ -1009,10 +1019,10 @@ class Attendance
 	 * @param	int	attendance id
 	 * @return	int     number of dates in attendance calendar
 	 */
-	public static function get_number_of_attendance_calendar($attendance_id) {
+	public function get_number_of_attendance_calendar($attendance_id) {
 		$tbl_attendance_calendar = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
 		$attendance_id = intval($attendance_id);
-        $course_id = api_get_course_int_id();
+        $course_id = $this->get_course_int_id();
 		$sql = "SELECT count(id) FROM $tbl_attendance_calendar 
                 WHERE c_id = $course_id AND attendance_id = '$attendance_id'";
 		$rs = Database::query($sql);
@@ -1026,10 +1036,10 @@ class Attendance
 	 * @param	int	attendance id
 	 * @return	int     count of dates
 	 */
-	public static function get_count_dates_inside_attendance_calendar($attendance_id) {
+	public function get_count_dates_inside_attendance_calendar($attendance_id) {
 		$tbl_attendance_calendar = Database::get_course_table(TABLE_ATTENDANCE_CALENDAR);
 		$attendance_id = intval($attendance_id);
-         $course_id = api_get_course_int_id();
+        $course_id = $this->get_course_int_id();
 		$sql = "SELECT count(id) FROM $tbl_attendance_calendar 
                 WHERE c_id = $course_id AND attendance_id = '$attendance_id'";
 		$rs = Database::query($sql);
@@ -1047,12 +1057,11 @@ class Attendance
      * @param   int     attendance id
      * @return  bool    True if all calendar is done, otherwise false
      */
-    public static function is_all_attendance_calendar_done($attendance_id) {
+    public function is_all_attendance_calendar_done($attendance_id) {
         $attendance_id = intval($attendance_id);
-        $done_calendar = self::get_done_attendance_calendar($attendance_id);
-        $count_dates_in_calendar = self::get_count_dates_inside_attendance_calendar($attendance_id);
-        $number_of_dates = self::get_number_of_attendance_calendar($attendance_id);
-
+        $done_calendar = $this->get_done_attendance_calendar($attendance_id);
+        $count_dates_in_calendar = $this->get_count_dates_inside_attendance_calendar($attendance_id);
+        $number_of_dates = $this->get_number_of_attendance_calendar($attendance_id);
         $result = false;
         if ($number_of_dates && (intval($count_dates_in_calendar) == intval($done_calendar))) {
             $result = true;
@@ -1114,7 +1123,7 @@ class Attendance
 		}
 
         // update locked attendance
-        $is_all_calendar_done = self::is_all_attendance_calendar_done($attendance_id);
+        $is_all_calendar_done = $this->is_all_attendance_calendar_done($attendance_id);
         if (!$is_all_calendar_done) {
             $unlock = self::lock_attendance($attendance_id, false);
         } else {