From 64ee1195c169041ea23d7d5d46951d398fb1d4ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Wed, 8 Jan 2025 08:37:55 +0100
Subject: [PATCH] feat: changes for quiqqer/verification v3

---
 composer.json                                 |   2 +-
 .../Users/AbortCancelVerification.php         | 108 ++++++------------
 ...tMembershipUserLinkVerificationHandler.php |  72 ++++++++++++
 .../Memberships/Users/CancelVerification.php  | 101 ++++++----------
 4 files changed, 144 insertions(+), 139 deletions(-)
 create mode 100644 src/QUI/Memberships/Users/AbstractMembershipUserLinkVerificationHandler.php

diff --git a/composer.json b/composer.json
index 53e10a8..87ead11 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
     },
     "require": {
         "quiqqer\/core": "^2",
-        "quiqqer\/verification": "^2"
+        "quiqqer\/verification": "^3"
     },
     "autoload": {
         "psr-4": {
diff --git a/src/QUI/Memberships/Users/AbortCancelVerification.php b/src/QUI/Memberships/Users/AbortCancelVerification.php
index 7ff2493..56c9421 100644
--- a/src/QUI/Memberships/Users/AbortCancelVerification.php
+++ b/src/QUI/Memberships/Users/AbortCancelVerification.php
@@ -3,26 +3,30 @@
 namespace QUI\Memberships\Users;
 
 use QUI;
-use QUI\Memberships\Users\Handler as MembershipUsersHandler;
-use QUI\Verification\Verifier;
+use QUI\Verification\Entity\AbstractVerification;
+use QUI\Verification\Entity\LinkVerification;
+use QUI\Verification\Enum\VerificationErrorReason;
+use quiqqer\memberships\src\QUI\Memberships\Users\AbstractMembershipUserLinkVerificationHandler;
 
 /**
  * Class CancelVerification
  *
  * Verification process for abortion of MembershipUser cancellation by frontend user
  */
-class AbortCancelVerification extends QUI\Verification\AbstractVerification
+class AbortCancelVerification extends AbstractMembershipUserLinkVerificationHandler
 {
     /**
      * Get the duration of a Verification (minutes)
      *
-     * @return int|false - duration in minutes;
+     * @param AbstractVerification $verification
+     * @return int|null - duration in minutes;
      * if this method returns false use the module setting default value
-     * @throws \QUI\Exception
+     * @throws QUI\Exception
      */
-    public function getValidDuration(): bool|int
+    public function getValidDuration(AbstractVerification $verification): ?int
     {
-        $MembershipUser = MembershipUsersHandler::getInstance()->getChild($this->getIdentifier());
+        /** @var LinkVerification $verification */
+        $MembershipUser = $this->getMembershipUser($verification);
         $endDate = $MembershipUser->getAttribute('endDate');
         $endDate = strtotime($endDate) / 60; // minutes
         $now = time() / 60; // minutes
@@ -33,37 +37,27 @@ public function getValidDuration(): bool|int
     /**
      * Execute this method on successful verification
      *
+     * @param LinkVerification $verification
      * @return void
-     * @throws \QUI\Exception
+     * @throws QUI\Exception
      */
-    public function onSuccess(): void
+    public function onSuccess(LinkVerification $verification): void
     {
-        /** @var MembershipUser $MembershipUser */
-        $MembershipUser = MembershipUsersHandler::getInstance()->getChild($this->getIdentifier());
+        $MembershipUser = $this->getMembershipUser($verification);
         $MembershipUser->setEditUser(QUI::getUsers()->getSystemUser());
         $MembershipUser->confirmAbortCancel();
     }
 
-    /**
-     * Execute this method on unsuccessful verification
-     *
-     * @return void
-     */
-    public function onError(): void
-    {
-        // nothing
-    }
-
     /**
      * This message is displayed to the user on successful verification
      *
+     * @param LinkVerification $verification
      * @return string
-     * @throws \QUI\Exception
+     * @throws QUI\Exception
      */
-    public function getSuccessMessage(): string
+    public function getSuccessMessage(LinkVerification $verification): string
     {
-        /** @var MembershipUser $MembershipUser */
-        $MembershipUser = MembershipUsersHandler::getInstance()->getChild($this->getIdentifier());
+        $MembershipUser = $this->getMembershipUser($verification);
         $Membership = $MembershipUser->getMembership();
         $data = $MembershipUser->getFrontendViewData();
 
@@ -93,55 +87,25 @@ public function getSuccessMessage(): string
     /**
      * This message is displayed to the user on unsuccessful verification
      *
-     * @param string $reason - The reason for the error (see \QUI\Verification\Verifier::REASON_)
+     * @param LinkVerification $verification
+     * @param VerificationErrorReason $reason
      * @return string
      */
-    public function getErrorMessage($reason): string
-    {
-        switch ($reason) {
-            case Verifier::ERROR_REASON_EXPIRED:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.abortcancel.error.expired'
-                );
-                break;
-
-            case Verifier::ERROR_REASON_ALREADY_VERIFIED:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.abortcancel.error.already_verified'
-                );
-                break;
-
-            default:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.abortcancel.error.general'
-                );
-        }
-
-        return $msg;
-    }
-
-    /**
-     * Automatically redirect the user to this URL on successful verification
-     *
-     * @return string|false - If this method returns false, no redirection takes place
-     */
-    public function getOnSuccessRedirectUrl(): bool|string
-    {
-        return false;
-    }
-
-    /**
-     * Automatically redirect the user to this URL on unsuccessful verification
-     *
-     * Hint: This requires that an active Verification with the given identifier exists!
-     *
-     * @return string|false - If this method returns false, no redirection takes place
-     */
-    public function getOnErrorRedirectUrl(): bool|string
+    public function getErrorMessage(LinkVerification $verification, VerificationErrorReason $reason): string
     {
-        return false;
+        return match ($reason) {
+            VerificationErrorReason::EXPIRED => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.abortcancel.error.expired'
+            ),
+            VerificationErrorReason::ALREADY_VERIFIED => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.abortcancel.error.already_verified'
+            ),
+            default => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.abortcancel.error.general'
+            ),
+        };
     }
 }
diff --git a/src/QUI/Memberships/Users/AbstractMembershipUserLinkVerificationHandler.php b/src/QUI/Memberships/Users/AbstractMembershipUserLinkVerificationHandler.php
new file mode 100644
index 0000000..31326d6
--- /dev/null
+++ b/src/QUI/Memberships/Users/AbstractMembershipUserLinkVerificationHandler.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace quiqqer\memberships\src\QUI\Memberships\Users;
+
+use QUI\Memberships\Users\Handler as MembershipUsersHandler;
+use QUI\Memberships\Users\MembershipUser;
+use QUI\Verification\AbstractLinkVerificationHandler;
+use QUI\Verification\Entity\LinkVerification;
+use QUI\Verification\Enum\VerificationErrorReason;
+
+abstract class AbstractMembershipUserLinkVerificationHandler extends AbstractLinkVerificationHandler
+{
+    public function __construct(protected ?MembershipUsersHandler $membershipUsersHandler = null)
+    {
+        if (is_null($this->membershipUsersHandler)) {
+            $this->membershipUsersHandler = MembershipUsersHandler::getInstance();
+        }
+    }
+
+    /**
+     * @param LinkVerification $verification
+     * @return MembershipUser
+     *
+     * @throws \QUI\Exception
+     */
+    protected function getMembershipUser(LinkVerification $verification): MembershipUser
+    {
+        /** @var MembershipUser $membershipUser */
+        $membershipUser = $this->membershipUsersHandler->getChild(
+            $verification->getCustomDataEntry('membershipUserId')
+        );
+
+        return $membershipUser;
+    }
+
+    /**
+     * Execute this method on unsuccessful verification
+     *
+     * @param LinkVerification $verification
+     * @param VerificationErrorReason $reason
+     * @return void
+     */
+    public function onError(LinkVerification $verification, VerificationErrorReason $reason): void
+    {
+        // nothing
+    }
+
+    /**
+     * Automatically redirect the user to this URL on successful verification
+     *
+     * @param LinkVerification $verification
+     * @return string|null - If this method returns false, no redirection takes place
+     */
+    public function getOnSuccessRedirectUrl(LinkVerification $verification): ?string
+    {
+        return null;
+    }
+
+    /**
+     * Automatically redirect the user to this URL on unsuccessful verification
+     *
+     * Hint: This requires that an active Verification with the given identifier exists!
+     *
+     * @param LinkVerification $verification
+     * @param VerificationErrorReason $reason
+     * @return string|null - If this method returns false, no redirection takes place
+     */
+    public function getOnErrorRedirectUrl(LinkVerification $verification, VerificationErrorReason $reason): ?string
+    {
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/src/QUI/Memberships/Users/CancelVerification.php b/src/QUI/Memberships/Users/CancelVerification.php
index 0e3fc87..6b0907d 100644
--- a/src/QUI/Memberships/Users/CancelVerification.php
+++ b/src/QUI/Memberships/Users/CancelVerification.php
@@ -2,24 +2,29 @@
 
 namespace QUI\Memberships\Users;
 
-use QUI\Memberships\Users\Handler as MembershipUsersHandler;
-use QUI\Verification\Verifier;
 use QUI;
+use QUI\Memberships\Users\Handler as MembershipUsersHandler;
+use QUI\Verification\Entity\AbstractVerification;
+use QUI\Verification\Entity\LinkVerification;
+use QUI\Verification\Enum\VerificationErrorReason;
+use quiqqer\memberships\src\QUI\Memberships\Users\AbstractMembershipUserLinkVerificationHandler;
 
 /**
  * Class CancelVerification
  *
  * Verification process for MembershipUser cancellation by frontend user
  */
-class CancelVerification extends QUI\Verification\AbstractVerification
+class CancelVerification extends AbstractMembershipUserLinkVerificationHandler
 {
     /**
      * Get the duration of a Verification (minutes)
      *
-     * @return int|false - duration in minutes;
+     * @param AbstractVerification $verification
+     * @return int|null - duration in minutes;
      * if this method returns false use the module setting default value
+     * @throws QUI\Exception
      */
-    public function getValidDuration(): bool|int
+    public function getValidDuration(AbstractVerification $verification): ?int
     {
         return (int)MembershipUsersHandler::getSetting('cancelDuration');
     }
@@ -27,32 +32,26 @@ public function getValidDuration(): bool|int
     /**
      * Execute this method on successful verification
      *
+     * @param LinkVerification $verification
      * @return void
+     *
+     * @throws QUI\Memberships\Exception
+     * @throws QUI\ExceptionStack|QUI\Exception
      */
-    public function onSuccess(): void
+    public function onSuccess(LinkVerification $verification): void
     {
-        /** @var MembershipUser $MembershipUser */
-        $MembershipUser = MembershipUsersHandler::getInstance()->getChild($this->getIdentifier());
+        $MembershipUser = $this->getMembershipUser($verification);
         $MembershipUser->setEditUser(QUI::getUsers()->getSystemUser());
         $MembershipUser->confirmManualCancel();
     }
 
-    /**
-     * Execute this method on unsuccessful verification
-     *
-     * @return void
-     */
-    public function onError(): void
-    {
-        // nothing
-    }
-
     /**
      * This message is displayed to the user on successful verification
      *
+     * @param LinkVerification $verification
      * @return string
      */
-    public function getSuccessMessage(): string
+    public function getSuccessMessage(LinkVerification $verification): string
     {
         return QUI::getLocale()->get(
             'quiqqer/memberships',
@@ -63,55 +62,25 @@ public function getSuccessMessage(): string
     /**
      * This message is displayed to the user on unsuccessful verification
      *
-     * @param string $reason - The reason for the error (see \QUI\Verification\Verifier::REASON_)
+     * @param LinkVerification $verification
+     * @param VerificationErrorReason $reason
      * @return string
      */
-    public function getErrorMessage($reason): string
-    {
-        switch ($reason) {
-            case Verifier::ERROR_REASON_EXPIRED:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.cancel.error.expired'
-                );
-                break;
-
-            case Verifier::ERROR_REASON_ALREADY_VERIFIED:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.cancel.error.already_cancelled'
-                );
-                break;
-
-            default:
-                $msg = QUI::getLocale()->get(
-                    'quiqqer/memberships',
-                    'verification.cancel.error.general'
-                );
-        }
-
-        return $msg;
-    }
-
-    /**
-     * Automatically redirect the user to this URL on successful verification
-     *
-     * @return string|false - If this method returns false, no redirection takes place
-     */
-    public function getOnSuccessRedirectUrl(): bool|string
-    {
-        return false;
-    }
-
-    /**
-     * Automatically redirect the user to this URL on unsuccessful verification
-     *
-     * Hint: This requires that an active Verification with the given identifier exists!
-     *
-     * @return string|false - If this method returns false, no redirection takes place
-     */
-    public function getOnErrorRedirectUrl(): bool|string
+    public function getErrorMessage(LinkVerification $verification, VerificationErrorReason $reason): string
     {
-        return false;
+        return match ($reason) {
+            VerificationErrorReason::EXPIRED => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.cancel.error.expired'
+            ),
+            VerificationErrorReason::ALREADY_VERIFIED => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.cancel.error.already_cancelled'
+            ),
+            default => QUI::getLocale()->get(
+                'quiqqer/memberships',
+                'verification.cancel.error.general'
+            ),
+        };
     }
 }
-- 
GitLab