diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index a69607c0fca0f66cb5e1067a7a678316f9833ecf..26e9bb8e133fa56b04aa089ce51d3913f887d9f7 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1593,8 +1593,8 @@ END // DROP FUNCTION IF EXISTS BindTeacher// -CREATE FUNCTION `BindTeacher`( `AccessedTeacher` INT, - `BindingTeacher` INT, +CREATE FUNCTION `BindTeacher`( `AccessedTeacherID` INT, + `BindingTeacherID` INT, `DisciplineID` INT ) RETURNS int(11) NO SQL @@ -1602,12 +1602,11 @@ BEGIN DECLARE checker INT; -- 1. check if AccessedTeacher is author - SELECT disciplines.ID INTO checker FROM `disciplines` WHERE disciplines.ID = DisciplineID AND - disciplines.AuthorID = AccessedTeacher + disciplines.AuthorID = AccessedTeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; @@ -1619,7 +1618,7 @@ BEGIN INTO checker FROM `disciplines_teachers` WHERE disciplines_teachers.DisciplineID = DisciplineID AND - disciplines_teachers.TeacherID = BindingTeacher + disciplines_teachers.TeacherID = BindingTeacherID LIMIT 1; IF checker > 0 THEN RETURN 0; @@ -1814,7 +1813,7 @@ END // DROP FUNCTION IF EXISTS BindGroup// -CREATE FUNCTION `BindGroup` ( `TeacherID` INT, +CREATE FUNCTION `BindGroup` ( `AccessedTeacherID` INT, `DisciplineID` INt, `StudyGroupID` INT ) RETURNS int(11) @@ -1822,26 +1821,18 @@ CREATE FUNCTION `BindGroup` ( `TeacherID` INT, BEGIN DECLARE checker INT; - SELECT disciplines_teachers.ID - INTO checker - FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND - disciplines_teachers.TeacherID = TeacherID - LIMIT 1; - IF NOT (checker > 0) THEN - RETURN -1; - END IF; - - SET checker = -1; - SELECT study_groups.ID +-- 1. check if AccessedTeacher is author + SELECT disciplines.ID INTO checker - FROM `study_groups` - WHERE study_groups.ID = StudyGroupID + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = AccessedTeacherID LIMIT 1; - IF NOT (checker > 0) THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - + +-- 2. check if study group is bound to discipline SET checker = -1; SELECT disciplines_groups.ID INTO checker @@ -1853,6 +1844,7 @@ BEGIN RETURN 0; END IF; +-- 3. delete students of this group which were bound to discipline before DELETE FROM `disciplines_students` WHERE disciplines_students.DisciplineID = DisciplineID AND disciplines_students.StudentID IN @@ -1860,7 +1852,8 @@ BEGIN FROM `students` WHERE students.StudyGroupID = StudyGroupID ); - + +-- 4. bind whole group INSERT INTO `disciplines_groups` ( disciplines_groups.DisciplineID, disciplines_groups.StudyGroupID ) @@ -1873,7 +1866,7 @@ END // DROP FUNCTION IF EXISTS BindStudent// -CREATE FUNCTION `BindStudent` ( `TeacherID` INT, +CREATE FUNCTION `BindStudent` ( `AccessedTeacherID` INT, `DisciplineID` INT, `StudentID` INT ) RETURNS int(11) @@ -1881,47 +1874,56 @@ CREATE FUNCTION `BindStudent` ( `TeacherID` INT, BEGIN DECLARE checker, SG, temp INT; - SELECT disciplines_teachers.ID +-- 1. check if AccessedTeacher is author + SELECT disciplines.ID INTO checker - FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND - disciplines_teachers.TeacherID = TeacherID + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = AccessedTeacherID LIMIT 1; - IF NOT (checker > 0) THEN + IF NOT (checker > 0) THEN RETURN -1; END IF; - SELECT students.StudyGroupID - INTO SG - FROM `students` - WHERE students.ID = StudentID - LIMIT 1; - IF NOT (SG > 0) THEN - RETURN -1; - END IF; - +-- 2. check if student's group is bound yet + SET checker = -1; SELECT disciplines_groups.ID - INTO temp + INTO checker FROM `disciplines_groups` WHERE disciplines_groups.DisciplineID = DisciplineID AND - disciplines_groups.StudyGroupID = SG + disciplines_groups.StudyGroupID IN + ( SELECT students.StudyGroupID + FROM `students` + WHERE students.ID = StudentID ) LIMIT 1; - - - IF temp > 0 THEN + + IF checker > 0 THEN DELETE FROM `disciplines_students` WHERE disciplines_students.DisciplineID = DisciplineID AND disciplines_students.StudentID = StudentID; - ELSE - INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID, - disciplines_students.StudentID, - disciplines_students.Type - ) - VALUES ( DisciplineID, StudentID, 'attach'); - + RETURN 0; END IF; - RETURN 0; +-- 3. check if student is bound + SET checker = -1; + SELECT disciplines_students.ID + INTO checker + FROM `disciplines_students` + WHERE disciplines_students.DisciplineID = DisciplineID AND + disciplines_students.StudentID = StudentID + LIMIT 1; + IF checker > 0 THEN + RETURN 0; + END IF; + +-- 4. bind student + INSERT INTO `disciplines_students` ( disciplines_students.DisciplineID, + disciplines_students.StudentID, + disciplines_students.Type + ) + VALUES ( DisciplineID, StudentID, 'attach'); + RETURN 1; + END //