From bbff4f84165c60ababda477072140849265eec28 Mon Sep 17 00:00:00 2001 From: Anton Bagliy <taccessviolation@gmail.com> Date: Thu, 24 Oct 2019 19:06:34 +0300 Subject: [PATCH] ADD: logging discipine activations from dean page #503 --- db/postgresql/issue503_log_inactives.sql | 48 +++++++++++++++++++ .../classes/Controller/Handler/Discipline.php | 2 + .../application/classes/Model/Logs.php | 13 +++++ 3 files changed, 63 insertions(+) create mode 100644 db/postgresql/issue503_log_inactives.sql diff --git a/db/postgresql/issue503_log_inactives.sql b/db/postgresql/issue503_log_inactives.sql new file mode 100644 index 000000000..b45e041b8 --- /dev/null +++ b/db/postgresql/issue503_log_inactives.sql @@ -0,0 +1,48 @@ +CREATE SEQUENCE seq_logs_discipline_deactivate + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +DROP TABLE IF EXISTS logs_discipline_deactivate; +CREATE TABLE logs_discipline_deactivate ( + id integer DEFAULT nextval('seq_logs_discipline_deactivate'::regclass) NOT NULL, + discipline_id integer NOT NULL, + account_id integer NOT NULL, + isActive bool DEFAULT FALSE NOT NULL, + date timestamp(0) without time zone DEFAULT now() NOT NULL +); + +CREATE INDEX key_logs_discipline_deactivate ON logs_discipline_deactivate USING btree (discipline_id); + +ALTER TABLE ONLY logs_discipline_deactivate + ADD CONSTRAINT logs_discipline_deactivate_pkey PRIMARY KEY (id); + +ALTER TABLE ONLY logs_discipline_deactivate + ADD CONSTRAINT logs_discipline_deactivate_ibfk_1 FOREIGN KEY (discipline_id) REFERENCES disciplines(id); + +ALTER TABLE ONLY logs_discipline_deactivate + ADD CONSTRAINT logs_discipline_deactivate_ibfk_2 FOREIGN KEY (account_id) REFERENCES accounts(id); + +DROP FUNCTION IF EXISTS public.LogDisciplineDeactivation(paccountid integer, pdisciplineid integer); +CREATE OR REPLACE FUNCTION public.LogDisciplineDeactivation(paccountid integer, pdisciplineid integer) + RETURNS integer + LANGUAGE plpgsql +AS $function$ +begin + INSERT INTO logs_discipline_deactivate (discipline_id, account_id, isActive) VALUES (pdisciplineid, paccountid, FALSE); + RETURN 0; +END +$function$; + +DROP FUNCTION IF EXISTS public.LogDisciplineActivation(paccountid integer, pdisciplineid integer); +CREATE OR REPLACE FUNCTION public.LogDisciplineActivation(paccountid integer, pdisciplineid integer) + RETURNS integer + LANGUAGE plpgsql +AS $function$ +begin + INSERT INTO logs_discipline_deactivate (discipline_id, account_id, isActive) VALUES (pdisciplineid, paccountid, TRUE); + RETURN 0; +END +$function$; \ No newline at end of file diff --git a/~dev_rating/application/classes/Controller/Handler/Discipline.php b/~dev_rating/application/classes/Controller/Handler/Discipline.php index 975e464b3..03b60cf54 100644 --- a/~dev_rating/application/classes/Controller/Handler/Discipline.php +++ b/~dev_rating/application/classes/Controller/Handler/Discipline.php @@ -153,6 +153,7 @@ class Controller_Handler_Discipline extends Controller_Handler_Api if (($discipline->AuthorID != $this->user->TeacherID) && !($this->user->isDean() || $this->user->isAdmin())) throw new LogicException(Error::ACCESS_DENIED); $code = $discipline->setInactive(); + Model_Logs::logDisciplineActivations($this->user->ID, $id, false); $code = $code.''; return json_encode($code); } @@ -164,6 +165,7 @@ class Controller_Handler_Discipline extends Controller_Handler_Api if (($discipline->AuthorID != $this->user->TeacherID) && !($this->user->isDean() || $this->user->isAdmin())) throw new LogicException(Error::ACCESS_DENIED); $code = $discipline->setActive(); + Model_Logs::logDisciplineActivations($this->user->ID, $id, true); $code = $code.''; return json_encode($code); } diff --git a/~dev_rating/application/classes/Model/Logs.php b/~dev_rating/application/classes/Model/Logs.php index 0cf8f1c8a..44dc976ba 100644 --- a/~dev_rating/application/classes/Model/Logs.php +++ b/~dev_rating/application/classes/Model/Logs.php @@ -56,6 +56,19 @@ class Model_Logs extends Model return $result; } + public static function logDisciplineActivations($accountID, $disciplineID, $isActive) { + $query = 'SELECT * FROM LogDisciplineDeactivation(:account, :discipline)'; + if ($isActive) { + $query = 'SELECT * FROM LogDisciplineActivation(:account, :discipline)'; + } + + $result = DB::query(Database::UPDATE, $query) + ->param(':account', $accountID) + ->param(':discipline', $disciplineID) + ->execute(); + return $result; + } + public static function setLastFormExportError($disciplineID, $groupID, $semesterID, $error) { $query = 'SELECT * FROM SetLastFormExportError(:discipline, :group, :semester, :error)'; -- GitLab