diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql index ce20a0fd5517d023f957a604a5248f506136beed..50cba8c3aff4dab888aba0ca0f239c7aa1a63fc3 100644 --- a/db/StoredFunctions.sql +++ b/db/StoredFunctions.sql @@ -16,6 +16,9 @@ DROP FUNCTION IF EXISTS InternalNotify// DROP FUNCTION IF EXISTS GetDisciplineMaxRate// DROP FUNCTION IF EXISTS OrderModuleTypesForSession// +DROP FUNCTION IF EXISTS CreateStudyGroup// + + # ------------------------------------------------------------------------------------------- # Label: abbreviations # ------------------------------------------------------------------------------------------- @@ -76,7 +79,7 @@ CREATE FUNCTION `InternalIsTeacherAuthor` NO SQL BEGIN RETURN EXISTS (SELECT * FROM `disciplines` - WHERE disciplines.ID = pDisciplineID AND disciplines.AuthorID = pTeacherID); + WHERE disciplines.ID = pDisciplineID AND disciplines.AuthorID = pTeacherID); END // @@ -124,6 +127,7 @@ BEGIN ); END // +# ordering helper DROP FUNCTION IF EXISTS InternalOrderModuleTypesForSession// CREATE FUNCTION `InternalOrderModuleTypesForSession` (`pModuleType` INT ) RETURNS INT(3) @@ -149,6 +153,8 @@ NO SQL # Label: magic # ------------------------------------------------------------------------------------------- +# set values of record with key \pKey, +# if doesn't exist, then create. DROP FUNCTION IF EXISTS SetSettings// CREATE FUNCTION `SetSettings` (`pKey` VARCHAR(50) CHARSET utf8, `pVal` INT, `pValS` VARCHAR(300) CHARSET utf8 @@ -196,6 +202,7 @@ END // # Label: semesters # ------------------------------------------------------------------------------------------- +# set current(for user) semester, life time - db session DROP FUNCTION IF EXISTS SetSemesterID// CREATE FUNCTION `SetSemesterID` (`pSemesterID` INT) RETURNS int(11) NO SQL @@ -211,8 +218,9 @@ END // # Label: study groups # ------------------------------------------------------------------------------------------- -DROP FUNCTION IF EXISTS CreateStudyGroup// -CREATE FUNCTION `CreateStudyGroup` +# negative int, if already exists +DROP FUNCTION IF EXISTS CreateGroup// +CREATE FUNCTION `CreateGroup` ( `pGradeID` INT, `pGroupNum` INT, `pSpecializationID` INT, `pGroupName` VARCHAR(50) CHARSET utf8 ) RETURNS int(11) @@ -524,7 +532,6 @@ CREATE FUNCTION `CreateStudent` `pFirstName` VARCHAR(30) CHARSET utf8, `pSecondName` VARCHAR(30) CHARSET utf8, `pGradeID` INT, `pGroupNum` INT, `pFacultyID` INT, - # TODO: delete pGradeID `pActivationCode` VARCHAR(40) CHARSET utf8 ) RETURNS int(11) NO SQL @@ -557,13 +564,14 @@ BEGIN END // - +# unlike fn CreateStudent, this can create all missing records (group, grade, specialization) DROP FUNCTION IF EXISTS CreateStudentEx// CREATE FUNCTION `CreateStudentEx` ( `pLastName` VARCHAR(30) CHARSET utf8, `pFirstName` VARCHAR(30) CHARSET utf8, `pSecondName` VARCHAR(30) CHARSET utf8, - `pGradeNum` INT, `pGroupNum` INT, + `pGradeNum` INT, + `pGroupNum` INT, `pDegree` VARCHAR(20) CHARSET utf8, `pSpecName` VARCHAR(50) CHARSET utf8, `pFacultyID` INT, @@ -656,16 +664,19 @@ BEGIN DECLARE vChecker, vDisciplineID INT DEFAULT -1; DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; + # create discipline INSERT INTO `disciplines` (AuthorID, GradeID, SubjectID, ExamType, LectureCount, PracticeCount,LabCount, SemesterID,FacultyID) VALUES ( pTeacherID, pGradeID, pSubjectID, pExamType, pLectureCount, pPracticeCount, pLabCount, @CurrentSemesterID, pFacultyID); SET vDisciplineID = LAST_INSERT_ID(); + # bind teacher(author) INSERT INTO `disciplines_teachers` (DisciplineID,TeacherID) VALUES (vDisciplineID, pTeacherID); + # add exam and extra modules IF pExamType = 'exam' THEN SET vChecker = AddModuleExam(pTeacherID, vDisciplineID); END IF; @@ -763,36 +774,41 @@ BEGIN IF vExtraID <= 0 THEN RETURN -1; END IF; - # check changed change exam type + # check that exam type really changed IF (vOldExamType = pExamType) THEN RETURN 0; END IF; - IF pExamType = 'exam' THEN + IF pExamType = 'exam' THEN # change to exam SET vExtraMax = 7; + # count discipline's current max rate SELECT view_disciplines_results.DisciplineRateMax INTO vChecker FROM `view_disciplines_results` WHERE view_disciplines_results.DisciplineID = pDisciplineID LIMIT 1; + # can't add exam module IF vChecker >= 61 THEN RETURN 1; END IF; SET vChecker = AddModuleExam(pTeacherID, pDisciplineID); - # delete extra submodules + # delete extra submodules(only 1 extra for exam) DELETE FROM `submodules` WHERE submodules.OrderNum > 1 AND submodules.ModuleID = vExtraID; - ELSE + ELSE # change to credit SET vExtraMax = 29; SET vChecker = DeleteModuleExam(pTeacherID, pDisciplineID); + # 2 extra submodules (1 created for exam) SET vChecker = AddSubmodule(pTeacherID, vExtraID, vExtraMax, '', NULL, 'LandmarkControl'); END IF; + # set new exam type UPDATE `disciplines` SET disciplines.ExamType = pExamType WHERE disciplines.ID = pDisciplineID LIMIT 1; + # set max rate for extra UPDATE `submodules` SET submodules.MaxRate = vExtraMax WHERE submodules.ModuleID = vExtraID; @@ -842,15 +858,14 @@ BEGIN DECLARE vChecker INT DEFAULT -1; DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; -# 1. check if AccessedTeacher is author + # 1. check if AccessedTeacher is author IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR InternalIsMapLocked(pDisciplineID) THEN RETURN -1; END IF; -# 2. check if study group is bound to discipline - # TODO: extract method + # 2. check if group is bound to discipline SELECT disciplines_groups.ID INTO vChecker FROM `disciplines_groups` WHERE disciplines_groups.GroupID = pGroupID AND @@ -860,7 +875,7 @@ BEGIN RETURN 1; END IF; -# 3. delete students of this group which were bound to discipline before + # 3. delete students of this group which were bound to discipline before DELETE FROM `disciplines_students` WHERE disciplines_students.DisciplineID = pDisciplineID AND disciplines_students.StudentID IN @@ -869,7 +884,7 @@ BEGIN WHERE students.GroupID = pGroupID ); -# 4. bind whole group + # 4. bind whole group INSERT INTO `disciplines_groups` (DisciplineID, GroupID) VALUES (pDisciplineID, pGroupID ); @@ -887,12 +902,12 @@ BEGIN DECLARE vInGroup, vChecker, vGroupID, vTemp INT DEFAULT -1; DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; -# 1. check if AccessedTeacher is author + # 1. check if AccessedTeacher is author IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) THEN RETURN -1; END IF; -# 2. check if student's group is bound yet + # 2. check if student's group is bound yet SELECT disciplines_groups.ID INTO vInGroup FROM `students` INNER JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = pDisciplineID AND @@ -910,7 +925,7 @@ BEGIN END IF; -# 3. try bind student + # 3. try bind student INSERT INTO `disciplines_students` (DisciplineID, StudentID, Type) VALUES (pDisciplineID, pStudentID, 'attach') @@ -918,7 +933,6 @@ BEGIN ON DUPLICATE KEY UPDATE disciplines_students.StudentID = disciplines_students.StudentID; RETURN 0; - END // @@ -933,6 +947,7 @@ BEGIN RETURN -1; END IF; + # detach group from the discipline DELETE FROM `disciplines_groups` WHERE disciplines_groups.DisciplineID = pDisciplineID AND disciplines_groups.GroupID = pGroupID @@ -962,6 +977,7 @@ BEGIN RETURN -1; END IF; + # try to get general group, if student in it. SELECT disciplines_groups.ID INTO vInGroup FROM `students` INNER JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = pDisciplineID AND @@ -969,7 +985,7 @@ BEGIN WHERE students.ID = pStudentID LIMIT 1; - IF vInGroup > 0 THEN + IF vInGroup > 0 THEN # student in general group INSERT INTO `disciplines_students` (DisciplineID, StudentID, Type) VALUES (pDisciplineID, pStudentID, 'detach'); @@ -990,6 +1006,7 @@ CREATE FUNCTION `BindTeacher` ) RETURNS int(11) NO SQL BEGIN + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) THEN RETURN -1; END IF; @@ -1024,7 +1041,7 @@ BEGIN END // - +# assign new author to discipline DROP FUNCTION IF EXISTS DelegateDiscipline// CREATE FUNCTION `DelegateDiscipline` ( `pAuthorID` INT, `pNewAuthorID` INT, `pDisciplineID` INT @@ -1059,18 +1076,21 @@ BEGIN RETURN -1; END IF; + # clear logs DELETE FROM `logs_rating` WHERE logs_rating.SubModuleID IN (SELECT view_roadmap.SubmoduleID FROM `view_roadmap` WHERE view_roadmap.DisciplineID = pDisciplineID); + # clear rating DELETE FROM `rating_table` WHERE rating_table.SubModuleID IN (SELECT view_roadmap.SubmoduleID FROM `view_roadmap` WHERE view_roadmap.DisciplineID = pDisciplineID); + # unlock discipline UPDATE `disciplines` SET disciplines.IsLocked = 0 WHERE disciplines.ID = pDisciplineID @@ -1100,33 +1120,31 @@ BEGIN RETURN -1; END IF; + # delete only if discipline cleared(doesn't exists related rating's records) SET vTemp = CountRatings(pAuthorID, pDisciplineID); IF vTemp > 0 THEN RETURN -1; END IF; - # TODO: ClearDiscipline if need - - + # delete roadmap DELETE FROM `submodules` WHERE submodules.ModuleID IN (SELECT modules.ID FROM `modules` WHERE modules.DisciplineID = pDisciplineID ); - DELETE FROM `modules` WHERE modules.DisciplineID = pDisciplineID; + # detach all entities from discipline DELETE FROM `disciplines_teachers` WHERE disciplines_teachers.DisciplineID = pDisciplineID; - DELETE FROM `disciplines_students` WHERE disciplines_students.DisciplineID = pDisciplineID; - DELETE FROM `disciplines_groups` WHERE disciplines_groups.DisciplineID = pDisciplineID; + # delete discipline DELETE FROM `disciplines` WHERE disciplines.ID = pDisciplineID LIMIT 1; @@ -1135,7 +1153,7 @@ BEGIN END // - +# get count of related with discipline records in rating_table DROP FUNCTION IF EXISTS CountRatings// CREATE FUNCTION `CountRatings` ( `pTeacherID` INT, `pDisciplineID` INT @@ -1204,25 +1222,11 @@ CREATE FUNCTION `ChangeModuleName` ) RETURNS int(11) NO SQL BEGIN - DECLARE vDisciplineID INT DEFAULT -1; - DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - - SELECT disciplines.ID INTO vDisciplineID - FROM `modules` - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID AND - disciplines.AuthorID = pTeacherID - WHERE modules.ID = pModuleID AND - modules.Type = 'regular' - LIMIT 1; - IF vDisciplineID <= 0 OR - InternalIsMapLocked(vDisciplineID) - THEN - RETURN -1; - END IF; - UPDATE `modules` SET modules.Name = pName - WHERE modules.ID = pModuleID + WHERE modules.ID = pModuleID AND + modules.Type = 'regular' AND + NOT InternalIsMapLocked(modules.DisciplineID) LIMIT 1; RETURN ROW_COUNT()-1; END // @@ -1236,7 +1240,7 @@ CREATE FUNCTION `AddModule` ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker INT DEFAULT 0; + DECLARE vOrderNum INT DEFAULT 0; DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR @@ -1245,14 +1249,15 @@ BEGIN RETURN -1; END IF; - SELECT MAX(modules.OrderNum)+1 INTO vChecker + # get free orderNum + SELECT MAX(modules.OrderNum)+1 INTO vOrderNum FROM `modules` WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'regular' LIMIT 1; INSERT INTO `modules` (Name, OrderNum, DisciplineID ) - VALUES (pName, vChecker, pDisciplineID); + VALUES (pName, vOrderNum, pDisciplineID); RETURN LAST_INSERT_ID(); END // @@ -1271,6 +1276,7 @@ BEGIN RETURN -1; END IF; + # check exam module existence SELECT modules.ID INTO vChecker FROM `modules` @@ -1282,9 +1288,10 @@ BEGIN INSERT INTO `modules` (Name, OrderNum, DisciplineID, Type) - VALUES ('Ркзамен' , 3141692 , pDisciplineID, 'exam'); + VALUES ('Ркзамен' , 3141592 , pDisciplineID, 'exam'); SET vModule = LAST_INSERT_ID(); + # 3 attempt for pass exam SET vChecker = AddSubmodule(pTeacherID, vModule, 40, '', NULL, 'LandmarkControl'); SET vChecker = AddSubmodule(pTeacherID, vModule, 40, '', NULL, 'LandmarkControl'); SET vChecker = AddSubmodule(pTeacherID, vModule, 40, '', NULL, 'LandmarkControl'); @@ -1299,11 +1306,13 @@ CREATE FUNCTION `AddModuleExtra` NO SQL BEGIN DECLARE vChecker, vModule, vType, vGap INT DEFAULT -1; + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) THEN RETURN -1; END IF; + # try to find existing extra module SELECT modules.ID INTO vChecker FROM `modules` WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'extra' @@ -1312,11 +1321,13 @@ BEGIN RETURN -2; END IF; + # add extra module INSERT INTO `modules` (Name, OrderNum, DisciplineID, Type) VALUES ('Добор баллов' , 2900666 , pDisciplineID, 'extra'); + # get discipline exam type SELECT modules.ID, disciplines.ExamType INTO vModule, vType FROM `modules` @@ -1328,13 +1339,12 @@ BEGIN RETURN -1; END IF; + # 1 extra attempt for exam and 2 for credit SET vGap = -1; - IF vType = 1 THEN - # exam + IF vType = 1 THEN # exam SET vGap = 7; END IF; - IF vType = 2 THEN - # credit + IF vType = 2 THEN # credit SET vGap = 29; SET vChecker = AddSubmodule(pTeacherID, vModule, vGap, '', NULL, 'LandmarkControl'); END IF; @@ -1350,35 +1360,33 @@ CREATE FUNCTION `DeleteModule` ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker INT DEFAULT -1; + DECLARE vDisciplineID INT DEFAULT -1; - SELECT disciplines.ID - INTO vChecker + # get discipline ID + SELECT disciplines.ID INTO vDisciplineID FROM `modules` INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID AND disciplines.AuthorID = pTeacherID WHERE modules.ID = pModuleID LIMIT 1; - IF vChecker <= 0 THEN - RETURN -1; - END IF; - IF NOT InternalIsTeacherAuthor(pTeacherID, vChecker) OR - InternalIsMapLocked(vChecker) + # check rights + IF NOT InternalIsTeacherAuthor(pTeacherID, vDisciplineID) OR + InternalIsMapLocked(vDisciplineID) THEN RETURN -1; END IF; DELETE FROM `submodules` WHERE submodules.ModuleID = pModuleID; - DELETE FROM `modules` WHERE modules.ID = pModuleID; + # restore continuous ordering SET @counter = 0; UPDATE `modules` SET modules.OrderNum = (@counter := @counter + 1) - WHERE modules.DisciplineID = vChecker AND + WHERE modules.DisciplineID = vDisciplineID AND modules.Type = 'regular' ORDER BY modules.OrderNum ASC; @@ -1400,8 +1408,8 @@ BEGIN RETURN -1; END IF; - SELECT modules.ID - INTO vExamModuleID + # get exam module ID + SELECT modules.ID INTO vExamModuleID FROM `modules` WHERE modules.Type = 'exam' AND modules.DisciplineID = pDisciplineID @@ -1412,7 +1420,6 @@ BEGIN DELETE FROM `submodules` WHERE vExamModuleID = submodules.ModuleID; - DELETE FROM `modules` WHERE vExamModuleID = modules.ID LIMIT 1; @@ -1431,6 +1438,7 @@ BEGIN DECLARE vChecker, vOrder1, vOrder2, vDisciplineID1, vDisciplineID2 INT DEFAULT -1; + # get disciplineID and orderNum for 1st module(pModuleID1) SELECT modules.OrderNum, modules.DisciplineID INTO vOrder1, vDisciplineID1 @@ -1441,6 +1449,7 @@ BEGIN modules.Type = 'regular' LIMIT 1; + # get disciplineID and orderNum for 2st module(pModuleID2) SELECT modules.OrderNum, modules.DisciplineID INTO vOrder2, vDisciplineID2 @@ -1450,20 +1459,21 @@ BEGIN modules.ID = pModuleID2 AND modules.Type = 'regular' LIMIT 1; + + # check that modules belong to one discipline, check rights IF vDisciplineID1 != vDisciplineID2 OR vDisciplineID1 <= 0 OR InternalIsMapLocked(vDisciplineID1) THEN RETURN -1; END IF; + # swap UPDATE `modules` SET modules.OrderNum = 271828 WHERE modules.ID = pModuleID1; - UPDATE `modules` SET modules.OrderNum = vOrder1 WHERE modules.ID = pModuleID2 LIMIT 1; - UPDATE `modules` SET modules.OrderNum = vOrder2 WHERE modules.ID = pModuleID1 @@ -1487,8 +1497,8 @@ BEGIN RETURN -1; END IF; - SELECT modules.ID - INTO vChecker + # check existing of bonus module + SELECT modules.ID INTO vChecker FROM `modules` WHERE modules.DisciplineID = pDisciplineID AND modules.Type = 'bonus'; @@ -1496,21 +1506,11 @@ BEGIN RETURN -2; END IF; - INSERT INTO `modules` (Name, OrderNum, DisciplineID, Type) - VALUES ('Бонусные баллы' , 2141692 , pDisciplineID, 3 ); - - SELECT modules.ID - INTO vModuleID - FROM `modules` - WHERE modules.DisciplineID = pDisciplineID AND - modules.Type = 'bonus' - LIMIT 1; - IF vModuleID <= 0 THEN - RETURN -1; - END IF; + VALUES ('Бонусные баллы' , 2141692 , pDisciplineID, 'bonus'); + SET vModuleID = LAST_INSERT_ID(); SET vChecker = AddSubmodule(pTeacherID, vModuleID, 10, '', NULL, 'LandmarkControl'); RETURN 0; END // @@ -1529,12 +1529,12 @@ BEGIN RETURN -1; END IF; - SELECT modules.ID - INTO vBonusModuleID - FROM `modules` - WHERE modules.Type = 'bonus' AND - modules.DisciplineID = pDisciplineID - LIMIT 1; + # get bonus module ID + SELECT modules.ID INTO vBonusModuleID + FROM `modules` + WHERE modules.Type = 'bonus' AND + modules.DisciplineID = pDisciplineID + LIMIT 1; IF vBonusModuleID <= 0 THEN RETURN -1; END IF; @@ -1556,108 +1556,94 @@ END // # ------------------------------------------------------------------------------------------- DROP FUNCTION IF EXISTS ChangeSubmoduleMaxAndControl// -CREATE FUNCTION `ChangeSubmoduleMaxAndControl` ( `TeacherID` INT, - `SubmoduleID` INT, - `MaxRate` INT, - `ControlType` VARCHAR(30) CHARSET utf8 - ) RETURNS int(11) +CREATE FUNCTION `ChangeSubmoduleMaxAndControl` + ( `pTeacherID` INT, + `pSubmoduleID` INT, + `pMaxRate` INT, + `pControlType` VARCHAR(30) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker, disciplineID INT; + DECLARE vChecker, vDisciplineID, vIsLocked INT DEFAULT -1; - SET vChecker = -1; - SET disciplineID = -1; - SELECT submodules.ID, - disciplines.ID - INTO vChecker, disciplineID - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - WHERE TeacherID = disciplines.AuthorID AND - SubmoduleID = submodules.ID - LIMIT 1; - IF vChecker <= 0 OR - disciplineID <= 0 OR - InternalIsMapLocked(disciplineID) THEN + # check that discipline and submodule exists and doesn't locked + SELECT disciplines.IsLocked INTO vIsLocked + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + WHERE disciplines.AuthorID = pTeacherID AND + submodules.ID = pSubmoduleID + LIMIT 1; + IF vIsLocked != 0 THEN RETURN -1; END IF; UPDATE `submodules` - SET submodules.MaxRate = MaxRate, - submodules.Type = ControlType - WHERE submodules.ID = SubmoduleID - LIMIT 1; + SET submodules.MaxRate = MaxRate, + submodules.Type = pControlType + WHERE submodules.ID = pSubmoduleID + LIMIT 1; RETURN 0; END // DROP FUNCTION IF EXISTS ChangeSubmoduleName// -CREATE FUNCTION `ChangeSubmoduleName` ( `TeacherID` INT, - `SubmoduleID` INT, - `Name` VARCHAR(200) CHARSET utf8 - ) RETURNS int(11) +CREATE FUNCTION `ChangeSubmoduleName` + ( `pTeacherID` INT, + `pSubmoduleID` INT, + `pName` VARCHAR(200) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker, disciplineID INT; + DECLARE vIsLocked INT DEFAULT -1; - SET disciplineID = -1; - SET vChecker = -1; - SELECT submodules.ID, - disciplines.ID - INTO vChecker, disciplineID - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - WHERE TeacherID = disciplines.AuthorID AND - SubmoduleID = submodules.ID - LIMIT 1; - IF vChecker <= 0 OR - disciplineID <= 0 OR - InternalIsMapLocked(disciplineID) THEN + SELECT disciplines.IsLocked INTO vIsLocked + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + WHERE disciplines.AuthorID = pTeacherID AND + submodules.ID = pSubmoduleID + LIMIT 1; + IF vIsLocked != 0 THEN RETURN -1; END IF; UPDATE `submodules` - SET submodules.Name = Name - WHERE submodules.ID = SubmoduleID - LIMIT 1; + SET submodules.Name = pName + WHERE submodules.ID = pSubmoduleID + LIMIT 1; RETURN 0; END // DROP FUNCTION IF EXISTS ChangeSubmoduleDescription// -CREATE FUNCTION `ChangeSubmoduleDescription` ( `TeacherID` INT, - `SubmoduleID` INT, - `Description` VARCHAR(200) CHARSET utf8 - ) RETURNS int(11) +CREATE FUNCTION `ChangeSubmoduleDescription` + ( `pTeacherID` INT, + `pSubmoduleID` INT, + `pDescription` VARCHAR(200) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker, disciplineID INT; + DECLARE vIsLocked INT DEFAULT -1; - SET vChecker = -1; - SET disciplineID = -1; - SELECT submodules.ID, - disciplines.ID - INTO vChecker, disciplineID - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - WHERE TeacherID = disciplines.AuthorID AND - SubmoduleID = submodules.ID - LIMIT 1; - IF vChecker <= 0 OR - disciplineID <= 0 OR - InternalIsMapLocked(disciplineID) THEN + SELECT disciplines.IsLocked INTO vIsLocked + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + WHERE disciplines.AuthorID = pTeacherID AND + submodules.ID = pSubmoduleID + LIMIT 1; + IF vIsLocked != 0 THEN RETURN -1; END IF; UPDATE `submodules` - SET submodules.Description = Description - WHERE submodules.ID = SubmoduleID - LIMIT 1; + SET submodules.Description = pDescription + WHERE submodules.ID = pSubmoduleID + LIMIT 1; RETURN 0; END // @@ -1670,37 +1656,27 @@ CREATE FUNCTION `DeleteSubmodule` ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker, vModuleID, vDisciplineID INT DEFAULT -1; + DECLARE vIsLocked, vModuleID INT DEFAULT -1; + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - SELECT submodules.ID, modules.ID, disciplines.ID - INTO vChecker, vModuleID, vDisciplineID + SELECT modules.ID, disciplines.IsLocked + INTO vModuleID, vIsLocked FROM `submodules` INNER JOIN `modules` ON modules.ID = submodules.ModuleID INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID WHERE disciplines.AuthorID = pTeacherID AND submodules.ID = pSubmoduleID LIMIT 1; - IF vChecker <= 0 OR - vDisciplineID <= 0 OR - InternalIsMapLocked(vDisciplineID) THEN + IF vIsLocked != 0 THEN RETURN -1; END IF; - SET vChecker = -1; - SELECT rating_table.StudentID - INTO vChecker - FROM `rating_table` - WHERE rating_table.SubmoduleID = pSubmoduleID - LIMIT 1; - IF vChecker > 0 THEN - RETURN -2; - END IF; - + # handler will catch constraint violation DELETE FROM `submodules` WHERE submodules.ID = pSubmoduleID LIMIT 1; - + # restore continuous ordering SET @counter = 0; UPDATE `submodules` SET submodules.OrderNum = (@counter := @counter + 1) @@ -1721,49 +1697,39 @@ CREATE FUNCTION `AddSubmodule` ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker INT DEFAULT -1; + DECLARE vOrderNum, vIsLocked INT DEFAULT -1; + DECLARE vDescription VARCHAR(200) CHARSET utf8 DEFAULT pDescription; + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - SELECT disciplines.ID - INTO vChecker + # check author and discipline lock + SELECT disciplines.IsLocked INTO vIsLocked FROM `modules` - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID WHERE disciplines.AuthorID = pTeacherID AND modules.ID = pModuleID LIMIT 1; - IF vChecker <= 0 OR - InternalIsMapLocked(vChecker) - THEN + IF vIsLocked != 0 THEN RETURN -1; END IF; - - SET vChecker = 0; - SELECT MAX(submodules.OrderNum) - INTO vChecker + # get free order + SET vOrderNum = 0; + SELECT MAX(submodules.OrderNum) INTO vOrderNum FROM `submodules` WHERE submodules.ModuleID = pModuleID LIMIT 1; - IF vChecker IS NULL THEN - SET vChecker = 0; - END IF; - SET vChecker = vChecker + 1; + SET vOrderNum = vOrderNum + 1; - IF pDescription = '' THEN - INSERT INTO `submodules` - (ModuleID, MaxRate, OrderNum, Name, Description, Type) - VALUES (pModuleID, pMaxRate, vChecker, pName, NULL, pControlType); - ELSE - INSERT INTO `submodules` - (ModuleID, MaxRate, OrderNum, Name, Description, Type ) - VALUES (pModuleID, pMaxRate, vChecker, pName, pDescription, pControlType); + # insert submodule + + IF vDescription = '' THEN + SET vDescription = NULL; END IF; + INSERT INTO `submodules` + (ModuleID, MaxRate, OrderNum, Name, Description, Type) + VALUES (pModuleID, pMaxRate, vOrderNum, pName, vDescription, pControlType); - RETURN (SELECT submodules.ID - FROM `submodules` - WHERE submodules.ModuleID = pModuleID AND - submodules.OrderNum = vChecker - LIMIT 1 - ); + RETURN LAST_INSERT_ID(); END // @@ -1785,7 +1751,7 @@ BEGIN INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID WHERE disciplines.AuthorID = pTeacherID AND submodules.ID = pSubmoduleID1 - LIMIT 1; + LIMIT 1; SELECT submodules.OrderNum, submodules.ModuleID @@ -1797,12 +1763,14 @@ BEGIN submodules.ID = pSubmoduleID2 LIMIT 1; + # check, that modules exists and belong to one discipline IF vModule1 <= 0 OR vModule1 != vModule2 OR InternalIsMapLocked(vDisciplineID) THEN RETURN -1; END IF; + # swap UPDATE `submodules` SET submodules.OrderNum = 271828 WHERE submodules.ID = pSubmoduleID1 @@ -1872,99 +1840,76 @@ END // DROP FUNCTION IF EXISTS SetStudentRate// CREATE FUNCTION `SetStudentRate` -( `pTeacherID` INT, `pStudentID` INT, - `pSubmoduleID` INT, `pRate` INT ) RETURNS int(11) + ( `pTeacherID` INT, + `pStudentID` INT, + `pSubmoduleID` INT, + `pRate` INT + ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker, vDisciplineID, vGroupID, vRateID, vMaxRate, vMtype INT DEFAULT -1; - DECLARE vIsOver, vIsLocked, vIsUsed tinyint DEFAULT 0; - - SELECT students.GroupID - INTO vGroupID - FROM `students` - WHERE students.ID = pStudentID - LIMIT 1; - IF vGroupID <= 0 THEN - RETURN -1; - END IF; - - SET vMaxRate = CalculateMaxRateForExtra(pSubmoduleID, pStudentID); + DECLARE vDisciplineID, vMaxRate, vModuleType INT DEFAULT -1; + DECLARE vIsOver, vIsLocked, vIsUsed BOOLEAN DEFAULT FALSE; + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - SET vIsOver = 1; - SELECT modules.DisciplineID, + SET vIsOver = TRUE; + SELECT disciplines.ID, disciplines.IsLocked, - disciplines.isMilestone, - rating_table.StudentID, + disciplines.IsMilestone, submodules.IsUsed, - CASE - WHEN modules.type='extra' THEN - CalculateMaxRateForExtra(pSubmoduleID, pStudentID) - ELSE - submodules.maxRate - END, + submodules.maxRate, modules.Type - INTO vDisciplineID, vIsLocked, vIsOver, vRateID, vIsUsed, vMaxRate, vMtype - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID - INNER JOIN `disciplines_teachers` ON disciplines.ID = disciplines_teachers.DisciplineID AND - pTeacherID = disciplines_teachers.TeacherID - LEFT JOIN `disciplines_groups` ON disciplines.ID = disciplines_groups.DisciplineID AND - vGroupID = disciplines_groups.GroupID - LEFT JOIN `disciplines_students` ON disciplines.ID = disciplines_students.DisciplineID AND - pStudentID = disciplines_students.StudentID AND - 1 = disciplines_students.Type - LEFT JOIN `rating_table` ON pSubmoduleID = rating_table.SubmoduleID AND - pStudentID = rating_table.StudentID - WHERE submodules.ID = pSubModuleID AND - ( disciplines_students.ID IS NOT NULL OR - disciplines_groups.ID IS NOT NULL - ) - LIMIT 1; + INTO vDisciplineID, vIsLocked, vIsOver, vIsUsed, vMaxRate, vModuleType + FROM `submodules` + INNER JOIN `modules` ON submodules.ModuleID = modules.ID + INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID + WHERE submodules.ID = pSubModuleID + LIMIT 1; - IF vDisciplineID <= 0 OR + # correct max rate for extra module + IF vModuleType = 4 THEN # 4 - extra + SET vMaxRate = CalculateMaxRateForExtra(pSubmoduleID, pStudentID); + END IF; + + # 1) check rights + # 2) check, you can't rate regular and bonus after milestone + IF NOT InternalIsStudentAttached(pStudentID, vDisciplineID) OR + NOT InternalIsTeacherBounded(pTeacherID, vDisciplineID) OR pRate > vMaxRate OR - (vIsOver > 0 AND (vMtype = 1 OR vMtype = 3)) + (vIsOver AND (vModuleType = 1 OR vModuleType = 3)) # 1 - regular, 3 - bonus THEN RETURN -2; END IF; - - IF vRateID IS NOT NULL AND vRateID > 0 THEN - INSERT INTO `logs_rating` - (StudentID, SubmoduleID, TeacherID, Rate, Action ) - VALUES (pStudentID, pSubModuleID, pTeacherID, pRate, 'change'); - - UPDATE `rating_table` - SET rating_table.TeacherID = pTeacherID, - rating_table.Rate = pRate, - rating_table.Date = CURDATE() - WHERE pSubmoduleID = rating_table.SubmoduleID AND - pStudentID = rating_table.StudentID + # add rate, or update old + SET @tmp = -1; + INSERT INTO `rating_table` + (StudentID, TeacherID, SubmoduleID, Rate, Date) + VALUES ( pStudentID, pTeacherID, pSubmoduleID, pRate, CURDATE()) + ON DUPLICATE KEY UPDATE + rating_table.TeacherID = (@tmp = pTeacherID), + rating_table.Rate = pRate, + rating_table.Date = CURDATE(); + + # log rate + INSERT INTO `logs_rating` + (StudentID, SubmoduleID, TeacherID, Rate, Action ) + VALUES (pStudentID, pSubModuleID, pTeacherID, pRate, + CASE WHEN @tmp >= 0 THEN 'add' ELSE 'change' END); + + # lock discipline for structure editing + IF NOT vIsLocked THEN + UPDATE `disciplines` + SET disciplines.IsLocked = TRUE + WHERE disciplines.ID = vDisciplineID LIMIT 1; + END IF; - ELSE - IF NOT vIsLocked THEN - UPDATE `disciplines` - SET disciplines.IsLocked = 1 - WHERE disciplines.ID = vDisciplineID - LIMIT 1; - END IF; - - INSERT INTO `logs_rating` - (StudentID, SubmoduleID, TeacherID, Rate, Action ) - VALUES (pStudentID, pSubModuleID, pTeacherID, pRate, 'add'); - - INSERT INTO `rating_table` - ( StudentID, TeacherID, SubmoduleID, Rate, Date) - VALUES ( pStudentID, pTeacherID, pSubmoduleID, pRate, CURDATE() ); - - IF NOT vIsUsed THEN - UPDATE `submodules` - SET submodules.IsUsed = 1 + # add submodule to max rate counting + IF NOT vIsUsed THEN + UPDATE `submodules` + SET submodules.IsUsed = TRUE WHERE submodules.ID = pSubModuleID LIMIT 1; - END IF; END IF; RETURN 0; END // @@ -1981,23 +1926,28 @@ END // DROP FUNCTION IF EXISTS SetRequestStatus// CREATE FUNCTION `SetRequestStatus` -(`pRequestID` INT, `pStatus` VARCHAR(20) CHARSET utf8) RETURNS int(11) + (`pRequestID` INT, `pStatus` VARCHAR(20) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN UPDATE `requests` SET requests.Status = pStatus WHERE requests.ID = pRequestID LIMIT 1; - RETURN 0; + RETURN ROW_COUNT()-1; END// DROP FUNCTION IF EXISTS CreateRequest// CREATE FUNCTION `CreateRequest` -( `pAccountID` INT, `pTitle` VARCHAR(50) CHARSET utf8, - `pDescription` TEXT CHARSET utf8) RETURNS int(11) + ( `pAccountID` INT, + `pTitle` VARCHAR(50) CHARSET utf8, + `pDescription` TEXT CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; + INSERT INTO `requests` (AccountID, Title, Description, Status) VALUES (pAccountID, pTitle, pDescription, 'opened'); @@ -2015,15 +1965,16 @@ END// DROP FUNCTION IF EXISTS CreateRecoveryToken// CREATE FUNCTION `CreateRecoveryToken` -( `pAccountOrEMail` VARCHAR(255) CHARSET utf8, - `pToken` VARCHAR(100) CHARSET utf8) RETURNS int(11) + ( `pAccountOrEMail` VARCHAR(255) CHARSET utf8, + `pToken` VARCHAR(100) CHARSET utf8 + ) RETURNS int(11) NO SQL BEGIN - DECLARE vChecker INT DEFAULT 0; DECLARE vAccountID INT DEFAULT -1; + DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1; - SELECT accounts.ID - INTO vAccountID + # get account ID + SELECT accounts.ID INTO vAccountID FROM `accounts` WHERE accounts.EMail = pAccountOrEMail LIMIT 1; @@ -2031,15 +1982,7 @@ BEGIN RETURN -1; END IF; - SELECT recovery_tokens.ID - INTO vChecker - FROM `recovery_tokens` - WHERE recovery_tokens.Token = pToken - LIMIT 1; - IF vChecker > 0 THEN - RETURN -1; - END IF; - + # handle catch constraints violations INSERT INTO `recovery_tokens` (AccountID, Token ) VALUES (vAccountID, pToken); @@ -2055,20 +1998,12 @@ CREATE FUNCTION `UseRecoveryToken` BEGIN DECLARE vChecker INT DEFAULT -1; - SELECT recovery_tokens.ID - INTO vChecker - FROM `recovery_tokens` - WHERE recovery_tokens.Token = pToken - LIMIT 1; - IF vChecker <= 0 THEN - RETURN -1; - END IF; - + # set token used UPDATE `recovery_tokens` SET recovery_tokens.IsUsed = 1 WHERE recovery_tokens.Token = pToken LIMIT 1; - RETURN 0; + RETURN ROW_COUNT()-1; END// diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index db5f9dadde7b723e9b8b7cf03558e35269e9be60..23e62b1bb7bf353d415b3fb0ffcb6ee0f1f78e88 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -9,6 +9,10 @@ DROP PROCEDURE IF EXISTS GetStudyGroupsForDisciplineFull// DROP PROCEDURE IF EXISTS GetStudyGroupsForDiscipline// DROP PROCEDURE IF EXISTS GetStudyGroups// +DROP PROCEDURE IF EXISTS GetDisciplineInfoByID// +DROP PROCEDURE IF EXISTS GetMapForDisciplineExam// +DROP PROCEDURE IF EXISTS GetMapForDiscipline// + # ------------------------------------------------------------------------------------------- # Label: abbreviations # ------------------------------------------------------------------------------------------- @@ -628,10 +632,12 @@ BEGIN END // - - +DROP PROCEDURE IF EXISTS GetMapForStudent// +DROP PROCEDURE IF EXISTS GetMapForStudentExam// DROP PROCEDURE IF EXISTS GetRatesForStudentsGroup// -CREATE PROCEDURE `GetRatesForStudentsGroup` + +DROP PROCEDURE IF EXISTS GetRatesForGroup// +CREATE PROCEDURE `GetRatesForGroup` ( IN `pDisciplineID` INT, IN `pGroupID` INT) NO SQL BEGIN @@ -666,9 +672,8 @@ END // -# TODO: rename GetRatesForStudent -DROP PROCEDURE IF EXISTS GetMapForStudent// -CREATE PROCEDURE `GetMapForStudent` +DROP PROCEDURE IF EXISTS GetRates// +CREATE PROCEDURE `GetRates` ( IN `pStudentID` INT, IN `pDisciplineID` INT) NO SQL BEGIN @@ -704,8 +709,8 @@ END // # TODO: rename ~ GetRatesForStudent, Rating -DROP PROCEDURE IF EXISTS GetMapForStudentExam// -CREATE PROCEDURE `GetMapForStudentExam` +DROP PROCEDURE IF EXISTS GetRatesExam// +CREATE PROCEDURE `GetRatesExam` ( IN `pStudentID` INT, IN `pDisciplineID` INT) NO SQL BEGIN @@ -727,11 +732,10 @@ BEGIN END // -# TODO: rename GetRoadMap # TODO: order hardcode # get roadmap of discipline -DROP PROCEDURE IF EXISTS GetMapForDiscipline// -CREATE PROCEDURE `GetMapForDiscipline` +DROP PROCEDURE IF EXISTS GetRoadmap// +CREATE PROCEDURE `GetRoadmap` ( IN `pDisciplineID` INT) NO SQL BEGIN @@ -755,10 +759,9 @@ BEGIN END // -# TODO: rename GetRoadMap # get roadmap of discipline exam -DROP PROCEDURE IF EXISTS GetMapForDisciplineExam// -CREATE PROCEDURE `GetMapForDisciplineExam` +DROP PROCEDURE IF EXISTS GetRoadmapExam// +CREATE PROCEDURE `GetRoadmapExam` ( IN `pDisciplineID` INT) NO SQL BEGIN @@ -781,9 +784,8 @@ BEGIN END // -# TODO: rename GetDisciplineInfo -DROP PROCEDURE IF EXISTS GetDisciplineInfoByID// -CREATE PROCEDURE `GetDisciplineInfoByID` +DROP PROCEDURE IF EXISTS GetDisciplineInfo// +CREATE PROCEDURE `GetDisciplineInfo` ( IN `pDisciplineID` INT) NO SQL BEGIN diff --git a/db/Views.sql b/db/Views.sql index e30a36d8592a0993cba00789018008f07c83f578..c39efedeae9de1994a548eb699459a6b25369930 100644 --- a/db/Views.sql +++ b/db/Views.sql @@ -147,11 +147,10 @@ CREATE OR REPLACE VIEW `view_rating_result` AS (rating_table.Rate IS NULL) ASC, view_roadmap.SubmoduleOrderNum DESC LIMIT 1 - ) AS 'RateExam', - (RateRegular + RateExtra + RateExam + RateBonus) AS 'RateResult' + ) AS 'RateExam' FROM `rating_table` LEFT JOIN `view_roadmap` ON view_roadmap.SubmoduleID = rating_table.SubmoduleID - GROUP BY view_rating.StudentID, view_rating.DisciplineID; + GROUP BY rating_table.StudentID, view_roadmap.DisciplineID; diff --git a/db/fix.sql b/db/fix.sql index a65baddf95fa3cf19e9d34955e231d45e08ffd06..a8caae05f9e12749047033ee9aa717ec3780fb7d 100644 --- a/db/fix.sql +++ b/db/fix.sql @@ -35,5 +35,9 @@ UPDATE `general_settings` SET general_settings.Name = 'SemesterID' WHERE general UPDATE `general_settings` SET general_settings.Name = 'HashKey' WHERE general_settings.ID = 2; ALTER TABLE `general_settings` ADD UNIQUE (`Name`); +# just for fun :/ +UPDATE `modules` +SET modules.OrderNum = 3141592 +WHERE modules.OrderNum = 3141692; diff --git a/~dev_rating/application/classes/Model/Student.php b/~dev_rating/application/classes/Model/Student.php index 331dd6bb63872d1fc5cbe74741ff03d688215367..a6d82f2f3b5d57482e6b91eb6e86af6030c70e8c 100644 --- a/~dev_rating/application/classes/Model/Student.php +++ b/~dev_rating/application/classes/Model/Student.php @@ -10,13 +10,13 @@ class Model_Student extends Model public function getDisciplineMap($student_id, $subject_id) { - $sql = "CALL `GetMapForStudent`('$student_id', '$subject_id'); "; + $sql = "CALL `GetRates`('$student_id', '$subject_id'); "; return DB::query(Database::SELECT, $sql)->execute(); } public function getDisciplineInfoByID($discipline_id) { - $sql = "CALL `GetDisciplineInfoByID`('$discipline_id'); "; + $sql = "CALL `GetDisciplineInfo`('$discipline_id'); "; return DB::query(Database::SELECT, $sql)->execute(); } diff --git a/~dev_rating/application/classes/Model/Teacher/Map.php b/~dev_rating/application/classes/Model/Teacher/Map.php index 250f9775c4932bc18dbecafbc3af4eab533e333f..c5fc6e1c7ca7a26454c376ad3c2885530e45b8e0 100644 --- a/~dev_rating/application/classes/Model/Teacher/Map.php +++ b/~dev_rating/application/classes/Model/Teacher/Map.php @@ -93,13 +93,13 @@ class Model_Teacher_Map extends Model public function getDisciplineInfoByID($discipline_id) { - $sql = "CALL `GetDisciplineInfoByID`('$discipline_id'); "; + $sql = "CALL `GetDisciplineInfo`('$discipline_id'); "; return DB::query(Database::SELECT, $sql)->execute(); } public function getMapForDiscipline($disciplineID) { - $sql = "CALL `GetMapForDiscipline`('$disciplineID'); "; + $sql = "CALL `GetRoadmap`('$disciplineID'); "; return DB::query(Database::SELECT, $sql)->execute(); } diff --git a/~dev_rating/application/classes/Model/Teacher/Rating.php b/~dev_rating/application/classes/Model/Teacher/Rating.php index f359f6751a8cb009ef46ec366b7860cf97599f72..6ab1dcde29e64db0f7092f3d6d4eb8c870e7db70 100644 --- a/~dev_rating/application/classes/Model/Teacher/Rating.php +++ b/~dev_rating/application/classes/Model/Teacher/Rating.php @@ -16,25 +16,25 @@ class Model_Teacher_Rating extends Model public function getMapForDiscipline($disciplineID) { - $sql = "CALL `GetMapForDiscipline`('$disciplineID'); "; + $sql = "CALL `GetRoadmap`('$disciplineID'); "; return DB::query(Database::SELECT, $sql)->execute(); } public function getMapForStudent($studentID, $disciplineID) { - $sql = "CALL `GetMapForStudent`('$studentID', '$disciplineID'); "; + $sql = "CALL `GetRates`('$studentID', '$disciplineID'); "; return DB::query(Database::SELECT, $sql)->execute(); } public function getMapForStudentExam($studentID, $disciplineID) { - $sql = "CALL `GetMapForStudentExam`('$studentID', '$disciplineID'); "; + $sql = "CALL `GetRatesExam`('$studentID', '$disciplineID'); "; return DB::query(Database::SELECT, $sql)->execute(); } public function GetMapForDisciplineExam($disciplineID) { - $sql = "CALL `GetMapForDisciplineExam`('$disciplineID'); "; + $sql = "CALL `GetRoadmapExam`('$disciplineID'); "; return DB::query(Database::SELECT, $sql)->execute(); } @@ -52,7 +52,7 @@ class Model_Teacher_Rating extends Model public function getRatesForStudentsGroup($disciplineID, $groupID) { - $sql = "CALL `getRatesForStudentsGroup`('$disciplineID', '$groupID')"; + $sql = "CALL `GetRatesForGroup`('$disciplineID', '$groupID')"; return DB::query(Database::SELECT, $sql)->execute(); }