From 0d7416dcd07d5561e63ae75240e2281f03616b76 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 31 May 2018 16:56:48 +0200
Subject: [PATCH] FEAT #7731 Docserver update and delete

---
 core/Test/ListTemplateControllerTest.php      |  9 +--
 rest/index.php                                |  3 +
 .../controllers/DocserverController.php       | 59 ++++++++++++++++---
 .../models/DocserverModelAbstract.php         | 12 ++--
 src/core/lang/lang-fr.php                     |  6 +-
 5 files changed, 67 insertions(+), 22 deletions(-)

diff --git a/core/Test/ListTemplateControllerTest.php b/core/Test/ListTemplateControllerTest.php
index 60a2b9b29b8..e505cca14d2 100644
--- a/core/Test/ListTemplateControllerTest.php
+++ b/core/Test/ListTemplateControllerTest.php
@@ -67,9 +67,8 @@ class ListTemplateControllerTest extends TestCase
                 $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION', $listTemplate->description);
             }
         }
-        if (empty(self::$id)) {
-            $this->assertSame('Error', 'Creation failed');
-        }
+
+        $this->assertNotEmpty(self::$id);
 
         //  READ
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
@@ -153,9 +152,7 @@ class ListTemplateControllerTest extends TestCase
                 $this->assertSame('TEST LISTTEMPLATE123 DESCRIPTION UPDATED', $listTemplate->description);
             }
         }
-        if (empty(self::$id)) {
-            $this->assertSame('Error', 'Update failed');
-        }
+        $this->assertNotEmpty(self::$id);
 
         //  READ
         $environment    = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']);
diff --git a/rest/index.php b/rest/index.php
index c9fbfbf0d11..6e3064d88a5 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -103,7 +103,10 @@ $app->get('/contactsTypes', \Contact\controllers\ContactTypeController::class .
 
 //Docservers
 $app->get('/docservers', \Docserver\controllers\DocserverController::class . ':get');
+$app->post('/docservers', \Docserver\controllers\DocserverController::class . ':create');
 $app->get('/docservers/{id}', \Docserver\controllers\DocserverController::class . ':getById');
+$app->put('/docservers/{id}', \Docserver\controllers\DocserverController::class . ':update');
+$app->delete('/docservers/{id}', \Docserver\controllers\DocserverController::class . ':delete');
 
 //DocserverTypes
 $app->get('/docserverTypes', \Docserver\controllers\DocserverTypeController::class . ':get');
diff --git a/src/app/docserver/controllers/DocserverController.php b/src/app/docserver/controllers/DocserverController.php
index 4891556da6c..0261dfe73b8 100644
--- a/src/app/docserver/controllers/DocserverController.php
+++ b/src/app/docserver/controllers/DocserverController.php
@@ -58,7 +58,7 @@ class DocserverController
 
         $data = $request->getParams();
 
-        $check = Validator::stringType()->notEmpty()->validate($data['id']) && preg_match("/^[\w-]*$/", $data['id']) && (strlen($data['id']) < 32);
+        $check = Validator::stringType()->notEmpty()->validate($data['docserver_id']) && preg_match("/^[\w-]*$/", $data['docserver_id']) && (strlen($data['docserver_id']) < 32);
         $check = $check && Validator::stringType()->notEmpty()->validate($data['docserver_type_id']);
         $check = $check && Validator::stringType()->notEmpty()->validate($data['device_label']);
         $check = $check && Validator::intVal()->notEmpty()->validate($data['size_limit_number']);
@@ -70,7 +70,7 @@ class DocserverController
             return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
         }
 
-        $existingDocserver = DocserverModel::getById(['id' => $data['id'], 'select' => ['1']]);
+        $existingDocserver = DocserverModel::getById(['id' => $data['docserver_id'], 'select' => ['1']]);
         if (!empty($existingDocserver)) {
             return $response->withStatus(400)->withJson(['errors' => _ID. ' ' . _ALREADY_EXISTS]);
         }
@@ -80,14 +80,52 @@ class DocserverController
         DocserverModel::create($data);
         HistoryController::add([
             'tableName' => 'docservers',
-            'recordId'  => $data['id'],
+            'recordId'  => $data['docserver_id'],
             'eventType' => 'ADD',
-            'info'      => _BASKET_CREATION . " : {$data['id']}",
+            'info'      => _DOCSERVER_ADDED . " : {$data['docserver_id']}",
             'moduleId'  => 'docserver',
             'eventId'   => 'docserverCreation',
         ]);
 
-        return $response->withJson(['basket' => $data['id']]);
+        return $response->withJson(['docserver' => $data['docserver_id']]);
+    }
+
+    public function update(Request $request, Response $response, array $aArgs)
+    {
+        if (!ServiceModel::hasService(['id' => 'admin_docservers', 'userId' => $GLOBALS['userId'], 'location' => 'basket', 'type' => 'admin'])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $data = $request->getParams();
+
+        $check = Validator::stringType()->notEmpty()->validate($data['device_label']);
+        $check = $check && Validator::intVal()->notEmpty()->validate($data['size_limit_number']);
+        $check = $check && Validator::stringType()->notEmpty()->validate($data['path_template']);
+        $check = $check && Validator::intVal()->notEmpty()->validate($data['priority_number']);
+        $check = $check && Validator::intVal()->notEmpty()->validate($data['adr_priority_number']);
+        if (!$check) {
+            return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
+        }
+
+        $docserver = DocserverModel::getById(['id' => $aArgs['id'], 'select' => ['1']]);
+        if (empty($docserver)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Docserver not found']);
+        }
+
+        $data['is_readonly'] = empty($data['is_readonly']) ? 'N' : 'Y';
+        $data['docserver_id'] = $aArgs['id'];
+
+        DocserverModel::update($data);
+        HistoryController::add([
+            'tableName' => 'docservers',
+            'recordId'  => $aArgs['id'],
+            'eventType' => 'UP',
+            'info'      => _DOCSERVER_UPDATED . " : {$aArgs['id']}",
+            'moduleId'  => 'docserver',
+            'eventId'   => 'docserverModification',
+        ]);
+
+        return $response->withJson(['success' => 'success']);
     }
 
     public function delete(Request $request, Response $response, array $aArgs)
@@ -97,12 +135,19 @@ class DocserverController
         }
 
         $docserver = DocserverModel::getById(['id' => $aArgs['id']]);
-
         if(empty($docserver)){
             return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']);
         }
 
-        DocserverModel::delete(['id' => $aArgs['id']]);
+        DocserverModel::delete(['docserver_id' => $aArgs['id']]);
+        HistoryController::add([
+            'tableName' => 'docservers',
+            'recordId'  => $aArgs['id'],
+            'eventType' => 'DEL',
+            'info'      => _DOCSERVER_DELETED . " : {$aArgs['id']}",
+            'moduleId'  => 'docserver',
+            'eventId'   => 'docserverSuppression',
+        ]);
 
         return $response->withJson(['docservers' => DocserverModel::get()]);
     }
diff --git a/src/app/docserver/models/DocserverModelAbstract.php b/src/app/docserver/models/DocserverModelAbstract.php
index 039ab4c8919..0977b348de0 100644
--- a/src/app/docserver/models/DocserverModelAbstract.php
+++ b/src/app/docserver/models/DocserverModelAbstract.php
@@ -92,14 +92,14 @@ class DocserverModelAbstract
 
     public static function create(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'size_limit_number', 'priority_number', 'adr_priority_number', 'is_readonly']);
-        ValidatorModel::stringType($aArgs, ['id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'is_readonly']);
+        ValidatorModel::notEmpty($aArgs, ['docserver_id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'size_limit_number', 'priority_number', 'adr_priority_number', 'is_readonly']);
+        ValidatorModel::stringType($aArgs, ['docserver_id', 'docserver_type_id', 'device_label', 'path_template', 'coll_id', 'is_readonly']);
         ValidatorModel::intVal($aArgs, ['size_limit_number', 'priority_number', 'adr_priority_number']);
 
         DatabaseModel::insert([
             'table'         => 'docservers',
             'columnsValues' => [
-                'docserver_id'          => $aArgs['id'],
+                'docserver_id'          => $aArgs['docserver_id'],
                 'docserver_type_id'     => $aArgs['docserver_type_id'],
                 'device_label'          => $aArgs['device_label'],
                 'path_template'         => $aArgs['path_template'],
@@ -131,13 +131,13 @@ class DocserverModelAbstract
 
     public static function delete(array $aArgs)
     {
-        ValidatorModel::notEmpty($aArgs, ['id']);
-        ValidatorModel::stringType($aArgs, ['id']);
+        ValidatorModel::notEmpty($aArgs, ['docserver_id']);
+        ValidatorModel::stringType($aArgs, ['docserver_id']);
 
         DatabaseModel::delete([
             'table'     => 'docservers',
             'where'     => ['docserver_id = ?'],
-            'data'      => [$aArgs['id']]
+            'data'      => [$aArgs['docserver_id']]
         ]);
 
         return true;
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 81bc1ec9b40..ac6fc1917ac 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -38,9 +38,9 @@ define('_CONTACTS_GROUP_LIST_DELETED', 'Suppression de contacts dans le groupe')
 define('_CONTACTS_GROUP_LABEL_ALREADY_EXISTS', 'Un groupe avec ce libellé existe déjà');
 define('_DELETE_NOTIFICATIONS', 'Notification supprimée');
 define('_DEST_USER', 'Destinataire');
-define('_DOCSERVER_ADDED', 'Docserver ajouté');
-define('_DOCSERVER_UPDATED', 'Docserver modifié');
-define('_DOCSERVER_DELETED', 'Docserver supprimé');
+define('_DOCSERVER_ADDED', 'Zone de stockage ajoutée');
+define('_DOCSERVER_UPDATED', 'Zone de stockage modifiée');
+define('_DOCSERVER_DELETED', 'Zone de stockage supprimée');
 define('_DOCTYPE_FIRSTLEVEL_ADDED', 'Chemise ajoutée');
 define('_DOCTYPE_FIRSTLEVEL_DELETED', 'Chemise supprimée');
 define('_DOCTYPE_FIRSTLEVEL_UPDATED', 'Chemise modifiée');
-- 
GitLab