From f7f21c25af934758d5a3ccd952f37a32bb0a195e Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 19 Dec 2017 11:35:58 +0100
Subject: [PATCH] FEAT #6363 Get contact when already exists + ozwillo
 configuration

---
 apps/maarch_entreprise/xml/ozwilloConfig.xml |  3 +++
 core/Controllers/ContactController.php       |  5 +++++
 core/Controllers/StoreController.php         | 12 ++++++------
 core/Models/ContactModelAbstract.php         |  7 ++++---
 core/Models/CoreConfigModel.php              | 19 ++++++++++++++-----
 5 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/apps/maarch_entreprise/xml/ozwilloConfig.xml b/apps/maarch_entreprise/xml/ozwilloConfig.xml
index 9d5c7fc76ea..ed761df3587 100644
--- a/apps/maarch_entreprise/xml/ozwilloConfig.xml
+++ b/apps/maarch_entreprise/xml/ozwilloConfig.xml
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <ROOT>
+    <INSTANCE_URI>http://95.142.165.103/</INSTANCE_URI>
+    <INSTANTIATION_SECRET>iBh0zxQHBKGu7TN5or4djBkwantd9VABzNKwXDlKTxBEg0IUWLHkikF6zyO3PS3</INSTANTIATION_SECRET>
+    <DESTRUCTION_SECRET></DESTRUCTION_SECRET>
     <URI>https://accounts.ozwillo-preprod.eu/</URI>
     <CLIENT_ID>db8aa58f-e578-4ad9-96c6-47d95faa5c65</CLIENT_ID>
     <CLIENT_SECRET>P4RO8tUhERQLWFIuqVvgtPPaoY16jtZ+4bUTI94AzzM</CLIENT_SECRET>
diff --git a/core/Controllers/ContactController.php b/core/Controllers/ContactController.php
index 91d4e6ebbeb..f0564653f97 100644
--- a/core/Controllers/ContactController.php
+++ b/core/Controllers/ContactController.php
@@ -56,6 +56,11 @@ class ContactController
             $data['isPrivate'] = 'Y';
         }
 
+        $contact = ContactModel::getByEmail(['email' => $data['email'], 'select' => ['contacts_v2.contact_id', 'contact_addresses.id']]);
+        if (!empty($contact['id'])) {
+            return $response->withJson(['contactId' => $contact['contact_id'], 'addressId' => $contact['id']]);
+        }
+
         $contactId = ContactModel::create($data);
 
         $data['contactId'] = $contactId;
diff --git a/core/Controllers/StoreController.php b/core/Controllers/StoreController.php
index bface426cb1..d477366702e 100644
--- a/core/Controllers/StoreController.php
+++ b/core/Controllers/StoreController.php
@@ -631,17 +631,17 @@ class StoreController
                 $aArgs['data'][$key]['value'] = ChronoModel::getChrono(['id' => $categoryId, 'entityId' => $document['destination'], 'typeId' => $document['type_id']]);
             } elseif ($value['column'] == 'exp_contact_id' && !empty($value['value']) && !is_numeric($value['value'])) {
                 $mail = explode('<', str_replace('>', '', $value['value']));
-                $contact = ContactModel::getByEmail(['email' => $mail[count($mail) - 1], 'select' => ['contact_id']]);
-                if (!empty($contact[0]['contact_id'])) {
-                    $aArgs['data'][$key]['value'] = $contact[0]['contact_id'];
+                $contact = ContactModel::getByEmail(['email' => $mail[count($mail) - 1], 'select' => ['contacts_v2.contact_id']]);
+                if (!empty($contact['contact_id'])) {
+                    $aArgs['data'][$key]['value'] = $contact['contact_id'];
                 } else {
                     $aArgs['data'][$key]['value'] = 0;
                 }
             } elseif ($value['column'] == 'address_id' && !empty($value['value']) && !is_numeric($value['value'])) {
                 $mail = explode('<', str_replace('>', '', $value['value']));
-                $contact = ContactModel::getByEmail(['email' => $mail[count($mail) - 1], 'select' => ['ca_id']]);
-                if (!empty($contact[0]['ca_id'])) {
-                    $aArgs['data'][$key]['value'] = $contact[0]['ca_id'];
+                $contact = ContactModel::getByEmail(['email' => $mail[count($mail) - 1], 'select' => ['contact_addresses.id']]);
+                if (!empty($contact['id'])) {
+                    $aArgs['data'][$key]['value'] = $contact['ca_id'];
                 } else {
                     $aArgs['data'][$key]['value'] = 0;
                 }
diff --git a/core/Models/ContactModelAbstract.php b/core/Models/ContactModelAbstract.php
index f0710798c94..1ca5ab410de 100644
--- a/core/Models/ContactModelAbstract.php
+++ b/core/Models/ContactModelAbstract.php
@@ -156,15 +156,16 @@ class ContactModelAbstract
         return $labelledContact;
     }
 
-    public static function getByEmail(array $aArgs = [])
+    public static function getByEmail(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['email']);
         ValidatorModel::stringType($aArgs, ['email']);
+        ValidatorModel::arrayType($aArgs, ['select']);
 
         $aContacts = DatabaseModel::select([
             'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
-            'table'     => ['view_contacts'],
-            'where'     => ['email = ? and enabled = ?'],
+            'table'     => ['contact_addresses, contacts_v2'],
+            'where'     => ['contact_addresses.email = ?', 'contacts_v2.enabled = ?', 'contact_addresses.contact_id = contacts_v2.contact_id'],
             'data'      => [$aArgs['email'], 'Y'],
             'order_by'  => ['creation_date'],
         ]);
diff --git a/core/Models/CoreConfigModel.php b/core/Models/CoreConfigModel.php
index f8bd13fa787..02443acfbce 100755
--- a/core/Models/CoreConfigModel.php
+++ b/core/Models/CoreConfigModel.php
@@ -127,9 +127,15 @@ class CoreConfigModel
         return $loggingMethod;
     }
 
-    public static function getOzwilloConfiguration()
+    public static function getOzwilloConfiguration(array $aArgs = [])
     {
-        $customId = CoreConfigModel::getCustomId();
+        ValidatorModel::stringType($aArgs, ['customId']);
+
+        if (empty($aArgs['customId'])) {
+            $customId = CoreConfigModel::getCustomId();
+        } else {
+            $customId = $aArgs['customId'];
+        }
 
         if (file_exists("custom/{$customId}/apps/maarch_entreprise/xml/ozwilloConfig.xml")) {
             $path = "custom/{$customId}/apps/maarch_entreprise/xml/ozwilloConfig.xml";
@@ -141,9 +147,12 @@ class CoreConfigModel
         if (file_exists($path)) {
             $loadedXml = simplexml_load_file($path);
             if ($loadedXml) {
-                $ozwilloConfig['uri']           = (string)$loadedXml->URI;
-                $ozwilloConfig['clientId']      = (string)$loadedXml->CLIENT_ID;
-                $ozwilloConfig['clientSecret']  = (string)$loadedXml->CLIENT_SECRET;
+                $ozwilloConfig['instanceUri']           = (string)$loadedXml->INSTANCE_URI;
+                $ozwilloConfig['instantiationSecret']   = (string)$loadedXml->INSTANTIATION_SECRET;
+                $ozwilloConfig['destructionSecret']     = (string)$loadedXml->DESTRUCTION_SECRET;
+                $ozwilloConfig['uri']                   = (string)$loadedXml->URI;
+                $ozwilloConfig['clientId']              = (string)$loadedXml->CLIENT_ID;
+                $ozwilloConfig['clientSecret']          = (string)$loadedXml->CLIENT_SECRET;
             }
         }
 
-- 
GitLab