From 253e8d8d4851cb526f86454a58e74f98bf9952fb Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 30 Apr 2019 17:27:26 +0200
Subject: [PATCH] FEAT #9419 TIME 1:00 Remove entity_path from table, only
 available for fusion

---
 .../class/class_manage_entities_Abstract.php  | 62 +------------------
 .../datasources/letterbox_attachment.php      |  1 +
 rest/schema.json                              |  5 --
 sql/develop.sql                               |  1 +
 sql/structure.sql                             |  1 -
 .../entity/controllers/EntityController.php   |  2 +-
 src/app/entity/models/EntityModelAbstract.php | 27 +++++++-
 7 files changed, 29 insertions(+), 70 deletions(-)

diff --git a/modules/entities/class/class_manage_entities_Abstract.php b/modules/entities/class/class_manage_entities_Abstract.php
index 4f275b56b63..913bb8b2c03 100755
--- a/modules/entities/class/class_manage_entities_Abstract.php
+++ b/modules/entities/class/class_manage_entities_Abstract.php
@@ -1078,36 +1078,7 @@ abstract class entity_Abstract extends functions
                 }
                 else
                 {
-                    if ($_SESSION['m_admin']['entity']['parent'] == '') {
-                        $entityPath = '/' . $_SESSION['m_admin']['entity']['entityId'];
-                    } else {
-                        require_once 'modules/entities/class/EntityControler.php';
-                        $entityCtrl = new EntityControler();
-                        $entityTree = $entityCtrl->getEntityParentTreeOf($_SESSION['m_admin']['entity']['parent']);
-                        
-                        if (count($entityTree) > 0) {
-                            for ($cptTree = 0;$cptTree<count($entityTree);$cptTree++) {
-                                $stmt = $db->query("select entity_id from entities where entity_id = ?",array($entityTree[$cptTree]->__get('parent_entity_id')));
-                                $resShortLabel = $stmt->fetchObject();
-                                if ($resShortLabel->entity_id <> '') {
-                                    $entityIdForTree = functions::show_string($resShortLabel->entity_id);
-                                } else {
-                                    $entityIdForTree = $entityTree[$cptTree]->__get('parent_entity_id');
-                                }
-                                $entityPath .=  $entityIdForTree . '/';
-                            }
-                        }
-                        $stmt = $db->query("select entity_id from entities where entity_id = ?",array($_SESSION['m_admin']['entity']['parent']));
-                        $resShortLabel = $stmt->fetchObject();
-                        if ($resShortLabel->entity_id <> '') {
-                            $entityIdForTree = functions::show_string($resShortLabel->entity_id);
-                        } else {
-                            $entityIdForTree = $_SESSION['m_admin']['entity']['parent'];
-                        }
-                        $entityPath .= $entityIdForTree . '/' . $_SESSION['m_admin']['entity']['entityId'];
-                    }
-                    
-                    $stmt = $db->query('INSERT INTO '.ENT_ENTITIES." (entity_id, entity_label, short_label, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type, entity_path, archival_agency, archival_agreement, entity_full_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",array($_SESSION['m_admin']['entity']['entityId'],$_SESSION['m_admin']['entity']['label'],$_SESSION['m_admin']['entity']['short_label'],$_SESSION['m_admin']['entity']['adrs1'],$_SESSION['m_admin']['entity']['adrs2'],$_SESSION['m_admin']['entity']['adrs3'],$_SESSION['m_admin']['entity']['zcode'],$_SESSION['m_admin']['entity']['city'],$_SESSION['m_admin']['entity']['country'],$_SESSION['m_admin']['entity']['email'],$_SESSION['m_admin']['entity']['business'],$_SESSION['m_admin']['entity']['parent'],$_SESSION['m_admin']['entity']['type'],$entityPath,$_SESSION['m_admin']['entity']['archival_agency'],$_SESSION['m_admin']['entity']['archival_agreement'],$_SESSION['m_admin']['entity']['entity_full_name']));                    
+                    $stmt = $db->query('INSERT INTO '.ENT_ENTITIES." (entity_id, entity_label, short_label, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type, archival_agency, archival_agreement, entity_full_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",array($_SESSION['m_admin']['entity']['entityId'],$_SESSION['m_admin']['entity']['label'],$_SESSION['m_admin']['entity']['short_label'],$_SESSION['m_admin']['entity']['adrs1'],$_SESSION['m_admin']['entity']['adrs2'],$_SESSION['m_admin']['entity']['adrs3'],$_SESSION['m_admin']['entity']['zcode'],$_SESSION['m_admin']['entity']['city'],$_SESSION['m_admin']['entity']['country'],$_SESSION['m_admin']['entity']['email'],$_SESSION['m_admin']['entity']['business'],$_SESSION['m_admin']['entity']['parent'],$_SESSION['m_admin']['entity']['type'],$_SESSION['m_admin']['entity']['archival_agency'],$_SESSION['m_admin']['entity']['archival_agreement'],$_SESSION['m_admin']['entity']['entity_full_name']));
                     $_SESSION['service_tag'] = 'entity_add_db';
                     $core->execute_modules_services($_SESSION['modules_services'], 'entity_add_db', "include");
                     $core->execute_app_services($_SESSION['app_services'], 'entity_add_db', 'include');
@@ -1128,36 +1099,7 @@ abstract class entity_Abstract extends functions
             }
             elseif($mode == 'up')
             {
-                if ($_SESSION['m_admin']['entity']['parent'] == '') {
-                    $entityPath = '/' . $_SESSION['m_admin']['entity']['entityId'];
-                } else {
-                    require_once 'modules/entities/class/EntityControler.php';
-                    $entityCtrl = new EntityControler();
-                    $entityTree = $entityCtrl->getEntityParentTreeOf($_SESSION['m_admin']['entity']['parent']);
-                    
-                    if (count($entityTree) > 0) {
-                        for ($cptTree = 0;$cptTree<count($entityTree);$cptTree++) {
-                            $stmt = $db->query("select entity_id from entities where entity_id = ?",array($entityTree[$cptTree]->__get('parent_entity_id')));
-                            $resShortLabel = $stmt->fetchObject();
-                            if ($resShortLabel->entity_id <> '') {
-                                $entityIdForTree = functions::show_string($resShortLabel->entity_id);
-                            } else {
-                                $entityIdForTree = $entityTree[$cptTree]->__get('parent_entity_id');
-                            }
-                            $entityPath .=  $entityIdForTree . '/';
-                        }
-                    }
-                    $stmt = $db->query("select entity_id from entities where entity_id = ?",array($_SESSION['m_admin']['entity']['parent']));
-                    $resShortLabel = $stmt->fetchObject();
-                    if ($resShortLabel->entity_id <> '') {
-                        $entityIdForTree = functions::show_string($resShortLabel->entity_id);
-                    } else {
-                        $entityIdForTree = $_SESSION['m_admin']['entity']['parent'];
-                    }
-                    $entityPath .= $entityIdForTree . '/' . $_SESSION['m_admin']['entity']['entityId'];
-                }
-                    
-                $stmt = $db->query('UPDATE '.ENT_ENTITIES." set entity_label = ? , short_label = ? , adrs_1 = ?, adrs_2 = ?, adrs_3 = ?, zipcode = ?, city = ?, country = ?, email = ?, business_id = ?, parent_entity_id = ?, entity_type = ?, entity_path = ?, archival_agency = ?, archival_agreement = ?, entity_full_name = ? where entity_id = ?",array($_SESSION['m_admin']['entity']['label'], $_SESSION['m_admin']['entity']['short_label'], $_SESSION['m_admin']['entity']['adrs1'], $_SESSION['m_admin']['entity']['adrs2'],$_SESSION['m_admin']['entity']['adrs3'], $_SESSION['m_admin']['entity']['zcode'], $_SESSION['m_admin']['entity']['city'], $_SESSION['m_admin']['entity']['country'], $_SESSION['m_admin']['entity']['email'], $_SESSION['m_admin']['entity']['business'], $_SESSION['m_admin']['entity']['parent'], $_SESSION['m_admin']['entity']['type'], $entityPath, $_SESSION['m_admin']['entity']['archival_agency'], $_SESSION['m_admin']['entity']['archival_agreement'], $_SESSION['m_admin']['entity']['entity_full_name'], $_SESSION['m_admin']['entity']['entityId']));                
+                $stmt = $db->query('UPDATE '.ENT_ENTITIES." set entity_label = ? , short_label = ? , adrs_1 = ?, adrs_2 = ?, adrs_3 = ?, zipcode = ?, city = ?, country = ?, email = ?, business_id = ?, parent_entity_id = ?, entity_type = ?, archival_agency = ?, archival_agreement = ?, entity_full_name = ? where entity_id = ?",array($_SESSION['m_admin']['entity']['label'], $_SESSION['m_admin']['entity']['short_label'], $_SESSION['m_admin']['entity']['adrs1'], $_SESSION['m_admin']['entity']['adrs2'],$_SESSION['m_admin']['entity']['adrs3'], $_SESSION['m_admin']['entity']['zcode'], $_SESSION['m_admin']['entity']['city'], $_SESSION['m_admin']['entity']['country'], $_SESSION['m_admin']['entity']['email'], $_SESSION['m_admin']['entity']['business'], $_SESSION['m_admin']['entity']['parent'], $_SESSION['m_admin']['entity']['type'], $_SESSION['m_admin']['entity']['archival_agency'], $_SESSION['m_admin']['entity']['archival_agreement'], $_SESSION['m_admin']['entity']['entity_full_name'], $_SESSION['m_admin']['entity']['entityId']));
                 $_SESSION['service_tag'] = 'entity_up_db';
                 $core->execute_modules_services($_SESSION['modules_services'], 'entity_up_db', "include");
                 $core->execute_app_services($_SESSION['app_services'], 'entity_up_db', 'include');
diff --git a/modules/templates/datasources/letterbox_attachment.php b/modules/templates/datasources/letterbox_attachment.php
index 28c6797f534..f670794d887 100755
--- a/modules/templates/datasources/letterbox_attachment.php
+++ b/modules/templates/datasources/letterbox_attachment.php
@@ -46,6 +46,7 @@ if (!empty($res_id)) {
         foreach ($initiator as $column => $value) {
             $doc['initiator_'.$column] = $value;
         }
+        $doc['initiator_entity_path'] = \Entity\models\EntityModel::getEntityPathByEntityId(['entityId' => $doc['initiator'], 'path' => '']);
     }
 
     $datasources['res_letterbox'][] = $doc;
diff --git a/rest/schema.json b/rest/schema.json
index 2b2d85041cf..ac40ff6e3dc 100755
--- a/rest/schema.json
+++ b/rest/schema.json
@@ -147,7 +147,6 @@
                                     "business_id" : "",
                                     "parent_entity_id" : "",
                                     "entity_type" : "Direction",
-                                    "entity_path" : "",
                                     "ldap_id" : "",
                                     "archival_agency" : "",
                                     "archival_agreement" : "",
@@ -248,10 +247,6 @@
                             "type" : "string",
                             "maxLength" : 64
                         },                       
-                        "entity_path" : {
-                            "type" : "string",
-                            "maxLength" : 2048
-                        },                       
                         "ldap_id" : {
                             "type" : "string",
                             "maxLength" : 255
diff --git a/sql/develop.sql b/sql/develop.sql
index 8de0a8a0c35..48b060d5d77 100755
--- a/sql/develop.sql
+++ b/sql/develop.sql
@@ -246,6 +246,7 @@ ALTER TABLE notes DROP COLUMN IF EXISTS coll_id;
 ALTER TABLE notes DROP COLUMN IF EXISTS type;
 ALTER TABLE notes ADD COLUMN type CHARACTER VARYING (32) DEFAULT 'resource' NOT NULL;
 ALTER TABLE users DROP COLUMN IF EXISTS thumbprint;
+ALTER TABLE entities DROP COLUMN IF EXISTS entity_path;
 
 DO $$ BEGIN
   IF (SELECT count(attname) FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'notes') AND attname = 'date_note') = 1 THEN
diff --git a/sql/structure.sql b/sql/structure.sql
index 3c7fc3e63c2..c59b7bcfdab 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -447,7 +447,6 @@ CREATE TABLE entities
   business_id character varying(32),
   parent_entity_id character varying(32),
   entity_type character varying(64),
-  entity_path character varying(2048),
   ldap_id character varying(255),
   archival_agency character varying(255),
   archival_agreement character varying(255),
diff --git a/src/app/entity/controllers/EntityController.php b/src/app/entity/controllers/EntityController.php
index b3a30f27c55..a464cc05cd4 100755
--- a/src/app/entity/controllers/EntityController.php
+++ b/src/app/entity/controllers/EntityController.php
@@ -253,7 +253,7 @@ class EntityController
         $neededData = [
             'entity_label', 'short_label', 'entity_type', 'adrs_1', 'adrs_2', 'adrs_3',
             'zipcode', 'city', 'country', 'email', 'business_id', 'parent_entity_id',
-            'entity_path', 'ldap_id', 'archival_agreement', 'archival_agency', 'entity_full_name'
+            'ldap_id', 'archival_agreement', 'archival_agency', 'entity_full_name'
         ];
         foreach ($data as $key => $value) {
             if (!in_array($key, $neededData)) {
diff --git a/src/app/entity/models/EntityModelAbstract.php b/src/app/entity/models/EntityModelAbstract.php
index 80051b3a6e3..2a6d4f68043 100755
--- a/src/app/entity/models/EntityModelAbstract.php
+++ b/src/app/entity/models/EntityModelAbstract.php
@@ -83,7 +83,7 @@ abstract class EntityModelAbstract
         ValidatorModel::stringType($aArgs, [
             'entity_id', 'entity_label', 'short_label', 'entity_type', 'adrs_1', 'adrs_2', 'adrs_3',
             'zipcode', 'city', 'country', 'email', 'business_id', 'parent_entity_id',
-            'entity_path', 'ldap_id', 'transferring_agency', 'archival_agreement', 'archival_agency', 'entity_full_name'
+            'ldap_id', 'transferring_agency', 'archival_agreement', 'archival_agency', 'entity_full_name'
         ]);
 
         DatabaseModel::insert([
@@ -102,7 +102,6 @@ abstract class EntityModelAbstract
                 'business_id'           => $aArgs['business_id'],
                 'parent_entity_id'      => $aArgs['parent_entity_id'],
                 'entity_type'           => $aArgs['entity_type'],
-                'entity_path'           => $aArgs['entity_path'],
                 'ldap_id'               => $aArgs['ldap_id'],
                 'archival_agreement'    => $aArgs['archival_agreement'],
                 'archival_agency'       => $aArgs['archival_agency'],
@@ -120,7 +119,7 @@ abstract class EntityModelAbstract
         ValidatorModel::stringType($aArgs['set'], [
             'entity_label', 'short_label', 'entity_type', 'adrs_1', 'adrs_2', 'adrs_3',
             'zipcode', 'city', 'country', 'email', 'business_id', 'parent_entity_id',
-            'entity_path', 'ldap_id', 'transferring_agency', 'archival_agreement', 'archival_agency', 'entity_full_name'
+            'ldap_id', 'transferring_agency', 'archival_agreement', 'archival_agency', 'entity_full_name'
         ]);
 
         DatabaseModel::update([
@@ -407,4 +406,26 @@ abstract class EntityModelAbstract
 
         return $roles;
     }
+
+    public static function getEntityPathByEntityId(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['entityId']);
+        ValidatorModel::stringType($args, ['entityId', 'path']);
+
+        $entity = EntityModel::getByEntityId([
+            'select'   => ['entity_id', 'parent_entity_id'],
+            'entityId' => $args['entityId']
+        ]);
+
+        if (!empty($args['path'])) {
+            $args['path'] = "/{$args['path']}";
+        }
+        $args['path'] = $entity['entity_id'] . $args['path'];
+
+        if (empty($entity['parent_entity_id'])) {
+            return $args['path'];
+        }
+
+        return EntityModel::getEntityPathByEntityId(['entityId' => $entity['parent_entity_id'], 'path' => $args['path']]);
+    }
 }
-- 
GitLab