From 5f300a100ea1d4b11eeaf7c088ce9bde29b89657 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Tue, 23 Aug 2022 16:21:34 +0200
Subject: [PATCH] feat: handle deleted users quiqqer/memberships#18

---
 events.xml                                   |  3 +++
 src/QUI/Memberships/Events.php               | 17 +++++++++++++++++
 src/QUI/Memberships/Membership.php           |  8 ++++----
 src/QUI/Memberships/Users/MembershipUser.php | 19 ++++++++++++-------
 4 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/events.xml b/events.xml
index f6214ab..e0fe927 100644
--- a/events.xml
+++ b/events.xml
@@ -1,7 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <events>
     <event on="onPackageSetup" fire="\QUI\Memberships\Events::onPackageSetup"/>
+
     <event on="onUserSave" fire="\QUI\Memberships\Events::onUserSave"/>
+    <event on="onUserDelete" fire="\QUI\Memberships\Events::onUserDelete"/>
+
     <event on="onQuiqqerOrderSuccessful" fire="\QUI\Memberships\Events::onQuiqqerOrderSuccessful" priority="5"/>
     <event on="onQuiqqerProductsFieldDeleteBefore" fire="\QUI\Memberships\Events::onQuiqqerProductsFieldDeleteBefore"/>
 
diff --git a/src/QUI/Memberships/Events.php b/src/QUI/Memberships/Events.php
index e0801ba..55ad3ee 100644
--- a/src/QUI/Memberships/Events.php
+++ b/src/QUI/Memberships/Events.php
@@ -123,6 +123,23 @@ public static function onUserSave(QUI\Users\User $User)
         }
     }
 
+    /**
+     * quiqqer/quiqqer: onUserDelete
+     *
+     * Delete user from alle memberships
+     *
+     * @param QUI\Users\User $User
+     * @return void
+     */
+    public static function onUserDelete(QUI\Users\User $User): void
+    {
+        $membershipUsers = QUI\Memberships\Users\Handler::getInstance()->getMembershipUsersByUserId($User->getId());
+
+        foreach ($membershipUsers as $MembershipUser) {
+            $MembershipUser->delete();
+        }
+    }
+
     /**
      * quiqqer/products
      *
diff --git a/src/QUI/Memberships/Membership.php b/src/QUI/Memberships/Membership.php
index 5d40e9a..6e540b6 100644
--- a/src/QUI/Memberships/Membership.php
+++ b/src/QUI/Memberships/Membership.php
@@ -375,9 +375,10 @@ public function searchUsers($searchParams, $archivedOnly = false, $countOnly = f
             $sql = "SELECT `musers`.id";
         }
 
-        $sql .= " FROM `".$tbl."` musers, `".$usersTbl."` users";
+        $sql .= " FROM `".$tbl."` musers LEFT JOIN `".$usersTbl."` users";
+        $sql .= ' ON `musers`.userId = `users`.id';
 
-        $where[] = '`musers`.userId = `users`.id';
+//        $where[] = '`musers`.userId = `users`.id';
         $where[] = '`musers`.membershipId = '.$this->id;
 
         if ($archivedOnly === false) {
@@ -420,8 +421,7 @@ public function searchUsers($searchParams, $archivedOnly = false, $countOnly = f
         }
 
         // ORDER
-        if (!empty($searchParams['sortOn'])
-        ) {
+        if (!empty($searchParams['sortOn'])) {
             $sortOn = Orthos::clear($searchParams['sortOn']);
 
             switch ($sortOn) {
diff --git a/src/QUI/Memberships/Users/MembershipUser.php b/src/QUI/Memberships/Users/MembershipUser.php
index 4a28fb0..675f569 100644
--- a/src/QUI/Memberships/Users/MembershipUser.php
+++ b/src/QUI/Memberships/Users/MembershipUser.php
@@ -762,9 +762,14 @@ public function getUserId()
      * @return QUI\Users\User
      * @throws \QUI\Exception
      */
-    public function getUser()
+    public function getUser(): ?QUI\Users\User
     {
-        return QUI::getUsers()->get($this->getUserId());
+        try {
+            return QUI::getUsers()->get($this->getUserId());
+        } catch (\Exception $Exception) {
+            QUI\System\Log::writeException($Exception);
+            return null;
+        }
     }
 
     /**
@@ -1073,13 +1078,13 @@ public function getBackendViewData()
 
         return [
             'id'              => $this->getId(),
-            'userId'          => $QuiqqerUser->getId(),
+            'userId'          => $this->getUserId(),
             'membershipId'    => $Membership->getId(),
             'membershipTitle' => $Membership->getTitle(),
-            'username'        => $QuiqqerUser->getUsername(),
-            'firstname'       => $QuiqqerUser->getAttribute('firstname'),
-            'lastname'        => $QuiqqerUser->getAttribute('lastname'),
-            'fullName'        => $QuiqqerUser->getName(),
+            'username'        => $QuiqqerUser ? $QuiqqerUser->getUsername() : '-',
+            'firstname'       => $QuiqqerUser ? $QuiqqerUser->getAttribute('firstname') : '-',
+            'lastname'        => $QuiqqerUser ? $QuiqqerUser->getAttribute('lastname') : '-',
+            'fullName'        => $QuiqqerUser ? $QuiqqerUser->getName() : '-',
             'addedDate'       => $this->getAttribute('addedDate'),
             'beginDate'       => $this->getAttribute('beginDate'),
             'endDate'         => $this->getAttribute('endDate'),
-- 
GitLab