From f4853f1f844d8f2440b81901f2ce777e89f7477f Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 12 Apr 2018 17:45:30 +0200
Subject: [PATCH] FEAT After created an entity without parent, become part of
 this entity

---
 .../entity/controllers/EntityController.php   | 22 ++++++-
 src/app/entity/models/UserEntityModel.php     | 19 ------
 .../entity/models/UserEntityModelAbstract.php | 65 -------------------
 .../resource/controllers/ResController.php    | 43 ++++++------
 .../user/models/UserEntityModelAbstract.php   | 44 +++++++++++++
 5 files changed, 85 insertions(+), 108 deletions(-)
 delete mode 100644 src/app/entity/models/UserEntityModel.php
 delete mode 100644 src/app/entity/models/UserEntityModelAbstract.php

diff --git a/src/app/entity/controllers/EntityController.php b/src/app/entity/controllers/EntityController.php
index 46b0ef26c59..fa5cbb1759b 100644
--- a/src/app/entity/controllers/EntityController.php
+++ b/src/app/entity/controllers/EntityController.php
@@ -18,7 +18,6 @@ use Basket\models\BasketModel;
 use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use Entity\models\ListTemplateModel;
-use Entity\models\UserEntityModel;
 use Group\models\ServiceModel;
 use History\controllers\HistoryController;
 use Resource\models\ResModel;
@@ -26,6 +25,7 @@ use Respect\Validation\Validator;
 use Slim\Http\Request;
 use Slim\Http\Response;
 use Template\models\TemplateModel;
+use User\models\UserEntityModel;
 use User\models\UserModel;
 
 class EntityController
@@ -161,7 +161,6 @@ class EntityController
         $check = $check && Validator::stringType()->notEmpty()->validate($data['entity_label']);
         $check = $check && Validator::stringType()->notEmpty()->validate($data['short_label']);
         $check = $check && Validator::stringType()->notEmpty()->validate($data['entity_type']);
-        
         if (!empty($data['email'])) {
             $check = $check && preg_match("/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/", $data['email']);
         }
@@ -184,6 +183,25 @@ class EntityController
             'eventId'   => 'entityCreation',
         ]);
 
+        if (empty($data['parent_entity_id']) && $GLOBALS['userId'] != 'superadmin') {
+            $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]);
+            $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $GLOBALS['userId']]);
+            $pEntity = 'N';
+            if (empty($primaryEntity)) {
+                $pEntity = 'Y';
+            }
+
+            UserEntityModel::addUserEntity(['id' => $user['id'], 'entityId' => $data['entity_id'], 'role' => '', 'primaryEntity' => $pEntity]);
+            HistoryController::add([
+                'tableName' => 'users',
+                'recordId'  => $GLOBALS['userId'],
+                'eventType' => 'UP',
+                'info'      => _USER_ENTITY_CREATION . " : {$GLOBALS['userId']} {$data['entity_id']}",
+                'moduleId'  => 'user',
+                'eventId'   => 'userModification',
+            ]);
+        }
+
         return $response->withJson(['entities' => EntityModel::getAllowedEntitiesByUserId(['userId' => $GLOBALS['userId']])]);
     }
 
diff --git a/src/app/entity/models/UserEntityModel.php b/src/app/entity/models/UserEntityModel.php
deleted file mode 100644
index 587339d9c97..00000000000
--- a/src/app/entity/models/UserEntityModel.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
-* Copyright Maarch since 2008 under licence GPLv3.
-* See LICENCE.txt file at the root folder for more details.
-* This file is part of Maarch software.
-*
-*/
-
-/**
-* @brief User Entity Model
-* @author dev@maarch.org
-*/
-
-namespace Entity\models;
-
-class UserEntityModel extends UserEntityModelAbstract
-{
-}
diff --git a/src/app/entity/models/UserEntityModelAbstract.php b/src/app/entity/models/UserEntityModelAbstract.php
deleted file mode 100644
index 51765cae139..00000000000
--- a/src/app/entity/models/UserEntityModelAbstract.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/**
-* Copyright Maarch since 2008 under licence GPLv3.
-* See LICENCE.txt file at the root folder for more details.
-* This file is part of Maarch software.
-*
-*/
-
-/**
-* @brief User Entity Model Abstract
-* @author dev@maarch.org
-*/
-
-namespace Entity\models;
-
-use SrcCore\models\ValidatorModel;
-use SrcCore\models\DatabaseModel;
-
-class UserEntityModelAbstract
-{
-    public static function get(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['select', 'where', 'data']);
-        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']);
-
-        $users = DatabaseModel::select([
-            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
-            'table'     => ['users_entities'],
-            'where'     => $aArgs['where'],
-            'data'      => $aArgs['data']
-        ]);
-
-        return $users;
-    }
-
-    public static function update(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']);
-        ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']);
-
-        DatabaseModel::update([
-            'table' => 'users_entities',
-            'set'   => $aArgs['set'],
-            'where' => $aArgs['where'],
-            'data'  => $aArgs['data']
-        ]);
-
-        return true;
-    }
-
-    public static function delete(array $aArgs)
-    {
-        ValidatorModel::notEmpty($aArgs, ['where', 'data']);
-        ValidatorModel::arrayType($aArgs, ['where', 'data']);
-
-        DatabaseModel::delete([
-            'table' => 'users_entities',
-            'where' => $aArgs['where'],
-            'data'  => $aArgs['data']
-        ]);
-
-        return true;
-    }
-}
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index a9c042ec18c..ee8bef75d24 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -160,19 +160,18 @@ class ResController
         return $response->withJson(['success' => 'success']);
     }
 
-    //EXTERNAL INFOS
-    public function updateExternalInfos(Request $request, Response $response){
+    public function updateExternalInfos(Request $request, Response $response)
+    {
         $data = $request->getParams();
-        if(empty($data['externalInfos'])){
+
+        if (empty($data['externalInfos'])) {
             return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
         }
-
-        if(empty($data['status'])){
+        if (empty($data['status'])) {
             return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
         }
 
-        $externalInfos = $data['externalInfos'];
-        foreach($externalInfos as $mail){
+        foreach ($data['externalInfos'] as $mail) {
             if(!Validator::intType()->validate($mail['res_id'])){
                 return $response->withStatus(400)->withJson(['errors' => 'Bad Request: invalid res_id']);
             }
@@ -184,7 +183,7 @@ class ResController
             }          
         }
 
-        foreach($externalInfos as $mail){
+        foreach ($data['externalInfos'] as $mail) {
             $document = ResModel::getById(['resId' => $mail['res_id'], 'select' => ['res_id']]);
             if (empty($document)) {
                 return $response->withStatus(400)->withJson(['errors' => _DOCUMENT_NOT_FOUND]);
@@ -261,26 +260,27 @@ class ResController
     public function getList(Request $request, Response $response)
     {
         $data = $request->getParams();
-        if(!Validator::stringType()->notEmpty()->validate($data['select'])){
-            return $response->withStatus(400)->withJson(['errors' => 'Bad Request: select parameter not valid']);
+
+        if (!Validator::stringType()->notEmpty()->validate($data['select'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Bad Request: select is not valid']);
         }
-        if(!Validator::stringType()->notEmpty()->validate($data['clause'])){
-            return $response->withStatus(400)->withJson(['errors' => 'Bad Request: clause parameter not valid']);
+        if (!Validator::stringType()->notEmpty()->validate($data['clause'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Bad Request: clause is not valid']);
         }
-        if(!empty($data['withFile'])){
+        if (!empty($data['withFile'])) {
             if(!Validator::boolType()->validate($data['withFile'])){
                 return $response->withStatus(400)->withJson(['errors' => 'Bad Request: withFile parameter is not a boolean']);
             }            
         }
 
-        if(!empty($data['orderBy'])){
-            if(!Validator::arrayType()->notEmpty()->validate($data['orderBy'])){
+        if (!empty($data['orderBy'])) {
+            if (!Validator::arrayType()->notEmpty()->validate($data['orderBy'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Bad Request: orderBy parameter not valid']);
             }            
         }
 
-        if(!empty($data['limit'])){
-            if(!Validator::intType()->validate($data['limit'])){
+        if (!empty($data['limit'])) {
+            if (!Validator::intType()->validate($data['limit'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Bad Request: limit parameter not valid']);
             }
         }
@@ -306,15 +306,14 @@ class ResController
         }
 
         $resources = ResModel::getOnView(['select' => $select, 'where' => $where, 'orderBy' => $orderBy, 'limit' => $limit]);
-        if($data['withFile'] === true){
-            foreach($resources as &$res){
+        if ($data['withFile'] === true) {
+            foreach ($resources as $key => $res) {
                 $path = ResDocserverModel::getSourceResourcePath(['resId' => $res['res_id'], 'resTable' => 'res_letterbox', 'adrTable' => 'null']);
                 $file = file_get_contents($path);
                 $base64Content = base64_encode($file);
-                $res['fileBase64Content'] = $base64Content;
-            };            
+                $resources[$key]['fileBase64Content'] = $base64Content;
+            }
         }
-        unset($res);
 
         return $response->withJson(['resources' => $resources, 'count' => count($resources)]);
     }
diff --git a/src/app/user/models/UserEntityModelAbstract.php b/src/app/user/models/UserEntityModelAbstract.php
index 366a3ef6fbc..b52afe10bcb 100644
--- a/src/app/user/models/UserEntityModelAbstract.php
+++ b/src/app/user/models/UserEntityModelAbstract.php
@@ -20,6 +20,50 @@ use SrcCore\models\ValidatorModel;
 
 class UserEntityModelAbstract
 {
+    public static function get(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['select', 'where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']);
+
+        $users = DatabaseModel::select([
+            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+            'table'     => ['users_entities'],
+            'where'     => $aArgs['where'],
+            'data'      => $aArgs['data']
+        ]);
+
+        return $users;
+    }
+
+    public static function update(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['set', 'where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['set', 'where', 'data']);
+
+        DatabaseModel::update([
+            'table' => 'users_entities',
+            'set'   => $aArgs['set'],
+            'where' => $aArgs['where'],
+            'data'  => $aArgs['data']
+        ]);
+
+        return true;
+    }
+
+    public static function delete(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['where', 'data']);
+        ValidatorModel::arrayType($aArgs, ['where', 'data']);
+
+        DatabaseModel::delete([
+            'table' => 'users_entities',
+            'where' => $aArgs['where'],
+            'data'  => $aArgs['data']
+        ]);
+
+        return true;
+    }
+
     public static function getUsersWithoutEntities(array $aArgs)
     {
         ValidatorModel::arrayType($aArgs, ['select']);
-- 
GitLab