From 93e61f97b46643f9b5328845d7bec2083f5b40fc Mon Sep 17 00:00:00 2001
From: PavelBegunkov <asml.Silence@gmail.com>
Date: Sat, 6 Dec 2014 21:52:39 +0300
Subject: [PATCH] sql restrict

---
 db/StoredProcedures.sql | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index 298771938..3ce85f839 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -2170,7 +2170,8 @@ BEGIN
     DECLARE checker INT;  					 
 	
 -- 1. check if AccessedTeacher is author
-	IF NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) 
+	IF 	NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) OR
+		InternalIsMapLocked(disciplineID)
 	THEN 
 		RETURN -1;
 	END IF;
@@ -2278,7 +2279,8 @@ CREATE FUNCTION `UnbindGroup`	(	`TeacherID` 	INT,
 					 			) 	RETURNS int(11)
     NO SQL
 BEGIN 				 
-	IF NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) 
+	IF 	NOT InternalIsTeacherAuthor(TeacherID,DisciplineID) OR
+		InternalIsMapLocked(disciplineID) 
 	THEN 
 		RETURN -1;
 	END IF;
@@ -3268,7 +3270,7 @@ CREATE FUNCTION `SetStudentRate`(	`TeacherID` 	INT,
 									RETURNS int(11)
     NO SQL
 BEGIN
-    DECLARE checker, DisciplineID, groupID, rateID INT;
+    DECLARE checker, DisciplineID, groupID, rateID, maxRate INT;
     DECLARE isLocked, isUsed tinyint; 
 
 	SET groupID = -1;
@@ -3283,8 +3285,8 @@ BEGIN
 
     SET isLocked = 0;
     SET DisciplineID = -1;
-    SELECT modules.DisciplineID, disciplines.isLocked, rating_table.StudentID, submodules.isUsed
-    INTO DisciplineID, isLocked, rateID, isUsed
+    SELECT modules.DisciplineID, disciplines.isLocked, rating_table.StudentID, submodules.isUsed, submodules.MaxRate
+    INTO DisciplineID, isLocked, rateID, isUsed, maxRate
 	FROM `submodules`
 	INNER JOIN `modules` 				ON 	submodules.ModuleID = modules.ID
 	INNER JOIN `disciplines` 			ON 	modules.DisciplineID = disciplines.ID
@@ -3302,7 +3304,7 @@ BEGIN
 				disciplines_groups.ID IS NOT NULL
 			)
 	LIMIT 1;
-	IF DisciplineID <= 0 THEN
+	IF DisciplineID <= 0 OR Rate > maxRate THEN
 		RETURN -1;
 	END IF;
 
-- 
GitLab