From 84c3d6a97831a779a847112ad038aa9daadf25c9 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 19 Jul 2018 11:23:14 +0200
Subject: [PATCH] FEAT #8000 Get doctypes + type_id mandatory when creating
 document

---
 rest/index.php                                    |  1 +
 src/app/doctype/controllers/DoctypeController.php | 15 ++++++++++-----
 src/app/doctype/models/DoctypeModelAbstract.php   |  6 ++----
 src/app/resource/controllers/ResController.php    | 12 ++++++++++++
 4 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 24a377a3e3f..7044ce78332 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -126,6 +126,7 @@ $app->post('/doctypes/secondLevel', \Doctype\controllers\SecondLevelController::
 $app->get('/doctypes/secondLevel/{id}', \Doctype\controllers\SecondLevelController::class . ':getById');
 $app->put('/doctypes/secondLevel/{id}', \Doctype\controllers\SecondLevelController::class . ':update');
 $app->delete('/doctypes/secondLevel/{id}', \Doctype\controllers\SecondLevelController::class . ':delete');
+$app->get('/doctypes/types', \Doctype\controllers\DoctypeController::class . ':get');
 $app->post('/doctypes/types', \Doctype\controllers\DoctypeController::class . ':create');
 $app->get('/doctypes/types/{id}', \Doctype\controllers\DoctypeController::class . ':getById');
 $app->put('/doctypes/types/{id}', \Doctype\controllers\DoctypeController::class . ':update');
diff --git a/src/app/doctype/controllers/DoctypeController.php b/src/app/doctype/controllers/DoctypeController.php
index 8f2070f61cd..23b7c37203d 100644
--- a/src/app/doctype/controllers/DoctypeController.php
+++ b/src/app/doctype/controllers/DoctypeController.php
@@ -27,12 +27,17 @@ use Resource\models\ResModel;
 
 class DoctypeController
 {
-    public function getById(Request $request, Response $response, $aArgs)
+    public function get(Request $request, Response $response)
+    {
+        $doctypes = DoctypeModel::get();
+
+        return $response->withJson(['doctypes' => $doctypes]);
+    }
+
+    public function getById(Request $request, Response $response, array $aArgs)
     {
         if (!Validator::intVal()->validate($aArgs['id']) || !Validator::notEmpty()->validate($aArgs['id'])) {
-            return $response
-                ->withStatus(500)
-                ->withJson(['errors' => 'wrong format for id']);
+            return $response->withStatus(500)->withJson(['errors' => 'wrong format for id']);
         }
 
         $obj['doctype'] = DoctypeModel::getById(['id' => $aArgs['id']]);
@@ -44,7 +49,7 @@ class DoctypeController
                 $obj['doctype']['enabled'] = false;
             }
         }
-  
+
         $doctypeExt = DoctypeExtModel::getById(['id' => $obj['doctype']['type_id']]);
         $template   = TemplateDoctypeModel::getById(["id" => $obj['doctype']['type_id']]);
 
diff --git a/src/app/doctype/models/DoctypeModelAbstract.php b/src/app/doctype/models/DoctypeModelAbstract.php
index f45b3156584..f686dac496f 100644
--- a/src/app/doctype/models/DoctypeModelAbstract.php
+++ b/src/app/doctype/models/DoctypeModelAbstract.php
@@ -32,7 +32,7 @@ class DoctypeModelAbstract
         return $firstLevel;
     }
 
-    public static function getById(array $aArgs = [])
+    public static function getById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id']);
         ValidatorModel::intVal($aArgs, ['id']);
@@ -50,9 +50,7 @@ class DoctypeModelAbstract
             return [];
         }
 
-        $aReturn = $aReturn[0];
-       
-        return $aReturn;
+        return $aReturn[0];
     }
 
     public static function create(array $aArgs)
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index be33b7c0f9a..51b34a439c8 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -67,6 +67,18 @@ class ResController
             return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
         }
 
+        $mandatoryColumns = ['type_id'];
+        foreach ($data['data'] as $value) {
+            foreach ($mandatoryColumns as $columnKey => $column) {
+                if ($column == $value['column']) {
+                    unset($mandatoryColumns[$columnKey]);
+                }
+            }
+        }
+        if (!empty($mandatoryColumns)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Data array needs column(s) [' . implode(', ', $mandatoryColumns) . ']']);
+        }
+
         $resId = StoreController::storeResource($data);
 
         if (empty($resId) || !empty($resId['errors'])) {
-- 
GitLab