From d989fd18142a189d9100d9aae41be95fecad3879 Mon Sep 17 00:00:00 2001
From: PavelBegunkov <asml.Silence@gmail.com>
Date: Mon, 8 Jun 2015 22:44:37 +0300
Subject: [PATCH] sql stored proc: @CurrentSemesterID annihilation

---
 db/StoredFunctions.sql                        | 16 +++++++++++
 db/StoredProcedures.sql                       | 27 ++++++++++++-------
 .../application/classes/Model/Students.php    |  3 ++-
 3 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql
index f3c150373..2e17a8d2c 100644
--- a/db/StoredFunctions.sql
+++ b/db/StoredFunctions.sql
@@ -805,6 +805,22 @@ END //
 
 
 
+DROP FUNCTION IF EXISTS GetDisciplineSemesterID//
+CREATE FUNCTION `GetDisciplineSemesterID` (
+    `pDisciplineID` INT
+) RETURNS int(11)
+    NO SQL
+BEGIN
+    DECLARE vSemesterID INT DEFAULT -1;
+
+    SELECT disciplines.SemesterID INTO vSemesterID
+        FROM `disciplines`
+        WHERE disciplines.ID = pDisciplineID
+        LIMIT 1;
+
+    RETURN vSemesterID;
+END //
+
 DROP FUNCTION IF EXISTS AddDiscipline//
 DROP FUNCTION IF EXISTS Discipline_Create//
 CREATE FUNCTION `Discipline_Create` (
diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 9cf8beaad..d7aedae59 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -459,7 +459,8 @@ CREATE PROCEDURE `SearchStudents` (
         IN `pGroupID` INT,
         IN `pFacultyID` INT,
         IN `pFullName` VARCHAR(100) CHARSET utf8,
-        IN `pDisciplineID` INT
+        IN `pDisciplineID` INT,
+        IN `pSemesterID` INT
     )
     NO SQL
 BEGIN
@@ -477,7 +478,7 @@ BEGIN
                                             disciplines_students.DisciplineID = pDisciplineID
         LEFT JOIN `disciplines_groups` ON   disciplines_groups.GroupID = view_students.GroupID AND
                                             disciplines_groups.DisciplineID = pDisciplineID
-        WHERE   view_students.SemesterID = @CurrentSemesterID AND
+        WHERE   view_students.SemesterID = pSemesterID AND
                 view_students.FacultyID = pFacultyID AND
                 view_students.GradeID = pGradeID AND
                 (view_students.GroupID = pGroupID OR pGroupID = 0) AND
@@ -727,17 +728,23 @@ END //
 # -------------------------------------------------------------------------------------------
 
 DROP PROCEDURE IF EXISTS GetRatesForGroup//
-CREATE PROCEDURE `GetRatesForGroup`
-    (   IN `pDisciplineID` INT, IN `pGroupID` INT)
+CREATE PROCEDURE `GetRatesForGroup` (
+    IN `pDisciplineID` INT,
+    IN `pGroupID` INT
+)
     NO SQL
 BEGIN
     DECLARE vChecker BOOLEAN DEFAULT FALSE;
+    DECLARE vSemesterID INT DEFAULT -1;
+
     SELECT disciplines_groups.ID IS NOT NULL INTO vChecker
         FROM `disciplines_groups`
         WHERE disciplines_groups.DisciplineID = pDisciplineID AND
               disciplines_groups.GroupID = pGroupID
         LIMIT 1;
 
+    SET vSemesterID = GetDisciplineSemesterID(pDisciplineID);
+
     IF !vChecker THEN
         SELECT  students.ID,
             students.LastName,
@@ -750,7 +757,7 @@ BEGIN
             LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND
                                               view_rating_result.StudentID = students.ID
             INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND
-                                            students_groups.SemesterID = @CurrentSemesterID
+                                            students_groups.SemesterID = vSemesterID
         WHERE students_groups.GroupID = pGroupID AND
               EXISTS(SELECT * FROM `disciplines_students`
               WHERE  disciplines_students.DisciplineID = pDisciplineID AND
@@ -769,7 +776,7 @@ BEGIN
             LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND
                                                view_rating_result.StudentID = students.ID
             INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND
-                                            students_groups.SemesterID = @CurrentSemesterID
+                                            students_groups.SemesterID = vSemesterID
             WHERE students_groups.GroupID = pGroupID AND
                   NOT EXISTS(SELECT * FROM `disciplines_students`
                                 WHERE  disciplines_students.DisciplineID = pDisciplineID AND
@@ -1048,8 +1055,10 @@ END //
 
 
 DROP PROCEDURE IF EXISTS GetFinalFormInfo//
-CREATE PROCEDURE `GetFinalFormInfo`
-(IN `pDisciplineID` INT, IN `pGroupID` INT)
+CREATE PROCEDURE `GetFinalFormInfo` (
+    IN `pDisciplineID` INT,
+    IN `pGroupID` INT
+)
     NO SQL
 BEGIN
     SELECT  study_groups.GroupNum AS 'GroupNum',
@@ -1086,7 +1095,7 @@ BEGIN
         INNER JOIN `teachers` ON teachers.ID = disciplines.AuthorID
         INNER JOIN `departments` ON departments.ID = teachers.DepartmentID
         INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID
-        INNER JOIN `semesters` ON semesters.ID = @CurrentSemesterID
+        INNER JOIN `semesters` ON disciplines.SemesterID
         WHERE study_groups.ID = pGroupID
         LIMIT 1;
 END //
diff --git a/~dev_rating/application/classes/Model/Students.php b/~dev_rating/application/classes/Model/Students.php
index a9278ca04..eac86847e 100644
--- a/~dev_rating/application/classes/Model/Students.php
+++ b/~dev_rating/application/classes/Model/Students.php
@@ -37,7 +37,8 @@ class Model_Students extends Model
 
     public static function searchStudents($GradeID, $GroupID, $FacultyID, $Name, $DisciplineID) {
         $Name = Database::instance()->escape($Name);
-        $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID'); ";
+        $semesterID = User::instance()->offsetGet('SemesterID');
+        $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID', $semesterID); ";
         return DB::query(Database::SELECT, $sql)->execute();
     }
 
-- 
GitLab