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