From 084c1dd2b177b4a6debeaa8f43da402514b4dec3 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Wed, 9 Oct 2019 12:17:07 +0200
Subject: [PATCH] FEAT #11694 TIME 0:30 Get history resource

---
 migration/19.12/1912.sql                        | 10 +++++-----
 rest/index.php                                  |  1 +
 .../history/controllers/HistoryController.php   | 12 ++++++++++++
 src/app/history/models/HistoryModelAbstract.php | 17 +++++++++++++++++
 4 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/migration/19.12/1912.sql b/migration/19.12/1912.sql
index 0112f77f97b..ff6bbbc2c55 100644
--- a/migration/19.12/1912.sql
+++ b/migration/19.12/1912.sql
@@ -158,6 +158,8 @@ CREATE TABLE indexing_models_fields
 )
 WITH (OIDS=FALSE);
 
+ALTER TABLE res_letterbox ADD COLUMN model_id INTEGER;
+
 
 /* TAGS */
 DO $$ BEGIN
@@ -318,11 +320,13 @@ WHERE service_id = 'edit_recipient_outside_process' OR service_id = 'update_diff
 DELETE FROM usergroups_services WHERE service_id = 'edit_recipient_outside_process';
 DELETE FROM usergroups_services WHERE service_id = 'update_list_diff_in_details';
 DELETE FROM usergroups_services WHERE service_id = 'edit_recipient_in_process';
+UPDATE priorities SET delays = 30 WHERE delays IS NULL;
 
 
 /* REFACTORING MODIFICATION */
 ALTER TABLE notif_email_stack ALTER COLUMN attachments TYPE text;
 ALTER TABLE tags ALTER COLUMN label TYPE character varying(128);
+ALTER TABLE priorities ALTER COLUMN delays SET NOT NULL;
 
 
 /* REFACTORING SUPPRESSION */
@@ -363,12 +367,8 @@ DROP TABLE IF EXISTS foldertypes_doctypes_level1;
 DROP TABLE IF EXISTS foldertypes_indexes;
 ALTER TABLE doctypes DROP COLUMN IF EXISTS coll_id;
 DROP TABLE IF EXISTS mlb_doctype_ext;
-ALTER TABLE res_letterbox ADD COLUMN model_id INTEGER;
-
-/* PRIORITIES */
 ALTER TABLE priorities DROP COLUMN IF EXISTS working_days;
-UPDATE priorities SET delays = 30 WHERE delays IS NULL;
-ALTER TABLE priorities ALTER COLUMN delays SET NOT NULL;
+
 
 /* RE CREATE VIEWS */
 CREATE OR REPLACE VIEW res_view_letterbox AS
diff --git a/rest/index.php b/rest/index.php
index ea787c03c93..90c631399d2 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -216,6 +216,7 @@ $app->put('/groups/{id}/reassign/{newGroupId}', \Group\controllers\GroupControll
 //Histories
 $app->get('/histories', \History\controllers\HistoryController::class . ':get');
 $app->get('/histories/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId');
+$app->get('/histories/resources/{resId}', \History\controllers\HistoryController::class . ':getByResourceId');
 
 //Header
 $app->get('/header', \SrcCore\controllers\CoreController::class . ':getHeader');
diff --git a/src/app/history/controllers/HistoryController.php b/src/app/history/controllers/HistoryController.php
index c09c29764fd..ca7fc39c21e 100755
--- a/src/app/history/controllers/HistoryController.php
+++ b/src/app/history/controllers/HistoryController.php
@@ -14,6 +14,7 @@
 
 namespace History\controllers;
 
+use Resource\controllers\ResController;
 use Respect\Validation\Validator;
 use SrcCore\controllers\LogsController;
 use Group\models\ServiceModel;
@@ -106,4 +107,15 @@ class HistoryController
 
         return $response->withJson(['histories' => $aHistories]);
     }
+
+    public function getByResourceId(Request $request, Response $response, array $args)
+    {
+        if (!Validator::intVal()->validate($args['resId']) || !ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
+        }
+
+        $history = HistoryModel::getByResourceId(['resId' => $args['resId'], 'select' => ['info', 'event_date']]);
+
+        return $response->withJson(['history' => $history]);
+    }
 }
diff --git a/src/app/history/models/HistoryModelAbstract.php b/src/app/history/models/HistoryModelAbstract.php
index b1ede87ac41..f9a31bc5594 100755
--- a/src/app/history/models/HistoryModelAbstract.php
+++ b/src/app/history/models/HistoryModelAbstract.php
@@ -77,6 +77,23 @@ abstract class HistoryModelAbstract
         return $aHistories;
     }
 
+    public static function getByResourceId(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['resId']);
+        ValidatorModel::stringType($args, ['resId']);
+
+        $history = DatabaseModel::select([
+            'select'   => empty($args['select']) ? ['*'] : $args['select'],
+            'table'    => ['history'],
+            'where'    => ['table_name in (?)', 'record_id = ?', 'event_date > (CURRENT_TIMESTAMP - interval \'30 DAYS\')'],
+            'data'     => [['res_letterbox', 'res_view_letterbox'], $args['resId']],
+            'order_by' => ['event_date DESC'],
+            'limit'    => 200
+        ]);
+
+        return $history;
+    }
+
     public static function getFilter(array $aArgs = [])
     {
         ValidatorModel::notEmpty($aArgs, ['select','event_date']);
-- 
GitLab