From 33d35179b066a6de4145ff13bfbd325ac4ba03d6 Mon Sep 17 00:00:00 2001
From: Vinciane <vinciane.bizet@maarch.org>
Date: Wed, 13 Mar 2019 17:13:08 +0100
Subject: [PATCH] FEAT #9692 Delete email

---
 src/app/email/controllers/EmailController.php | 35 +++++++++++++++++++
 src/app/email/models/EmailModel.php           | 14 ++++++++
 src/core/lang/lang-en.php                     |  1 +
 src/core/lang/lang-fr.php                     |  1 +
 src/core/lang/lang-nl.php                     |  1 +
 5 files changed, 52 insertions(+)

diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php
index cc070855f0d..a22276c6bac 100644
--- a/src/app/email/controllers/EmailController.php
+++ b/src/app/email/controllers/EmailController.php
@@ -329,4 +329,39 @@ class EmailController
 
         return ['success' => 'success'];
     }
+
+    public static function deleteEmail(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['userId', 'id']);
+        ValidatorModel::intVal($args, ['userId', 'id']);
+
+        $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]);
+        if (empty($user)) {
+            return ['errors' => 'user not found'];
+        }
+
+        $email = EmailModel::getById(['select' => ['id', 'user_id'], 'id' => $args['id']]);
+        if (empty($email)) {
+            return ['errors' => 'email not found'];
+        }
+
+        if ($email['user_id'] != $user['id']) {
+            return ['errors' => 'email out of perimeter'];
+        }
+        
+        EmailModel::delete([
+            'where' => ['id = ?'],
+            'data'  => [$args['id']]
+        ]);
+
+        HistoryController::add([
+            'tableName'    => 'emails',
+            'recordId'     => $args['id'],
+            'eventType'    => 'DEL',
+            'eventId'      => 'emailDeletion',
+            'info'         => _EMAIL_REMOVED
+        ]);
+
+        return ['success' => 'email deleted'];
+    }
 }
diff --git a/src/app/email/models/EmailModel.php b/src/app/email/models/EmailModel.php
index d3dedc6c06a..46d8bcfead0 100644
--- a/src/app/email/models/EmailModel.php
+++ b/src/app/email/models/EmailModel.php
@@ -83,4 +83,18 @@ class EmailModel
 
         return true;
     }
+
+    public static function delete(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['where', 'data']);
+
+        DatabaseModel::delete([
+            'table' => 'emails',
+            'where' => $aArgs['where'],
+            'data'  => $aArgs['data']
+        ]);
+
+        return true;
+    }
 }
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index e931c745074..0a95b4f86f4 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -54,6 +54,7 @@ define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Doctype second level edited');
 define('_DOCUMENT_NOT_FOUND', 'Document not found');
 define('_DOCUMENT_OUT_PERIMETER', 'Document out of perimeter');
 define('_EMAIL_ADDED', 'Email added');
+define('_EMAIL_REMOVED', 'Email removed');
 define('_ENTITY_CREATION', 'Entity creation');
 define('_ENTITY_MODIFICATION', 'Entity modification');
 define('_ENTITY_SUPPRESSION', 'Entity suppression');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index 502bb9a876f..48eede03e8f 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -54,6 +54,7 @@ define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Sous-chemise modifiée');
 define('_DOCUMENT_NOT_FOUND', 'Document introuvable');
 define('_DOCUMENT_OUT_PERIMETER', 'Document en dehors du périmètre');
 define('_EMAIL_ADDED', 'Courriel ajouté');
+define('_EMAIL_REMOVED', 'Courriel supprimé');
 define('_ENTITY_CREATION', 'Création entité');
 define('_ENTITY_MODIFICATION', 'Modification entité');
 define('_ENTITY_SUPPRESSION', 'Suppression entité');
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index 4b4b6e952be..1290d29ae31 100644
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -44,6 +44,7 @@ define('_DOCTYPE_SECONDLEVEL_UPDATED', 'Submap gewijzigd');
 define('_DOCUMENT_NOT_FOUND', 'Document onvindbaar');
 define('_DOCUMENT_OUT_PERIMETER', 'Document buiten de omtrek'); //_TO_TRANSLATE
 define('_EMAIL_ADDED', 'TO_TRANSLATE : Email added');
+define('_EMAIL_REMOVED', 'E-mail verwijderd');
 define('_ENTITY_CREATION', 'Aanmaak eenheid');
 define('_ENTITY_MODIFICATION', 'Wijziging eenheid');
 define('_ENTITY_SUPPRESSION', 'Verwijdering eenheid');
-- 
GitLab