From 1e42ef8f9487539a81035a08b12b9e518074c023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de> Date: Mon, 17 Jul 2017 12:54:28 +0200 Subject: [PATCH] feat: Save product ID in MembershipUser --- database.xml | 3 ++ src/QUI/Memberships/Events.php | 39 ++++++++++++++++++++ src/QUI/Memberships/Membership.php | 10 ++++- src/QUI/Memberships/Users/Handler.php | 3 +- src/QUI/Memberships/Users/MembershipUser.php | 4 ++ 5 files changed, 57 insertions(+), 2 deletions(-) diff --git a/database.xml b/database.xml index f667b60..54ad5a6 100644 --- a/database.xml +++ b/database.xml @@ -36,6 +36,9 @@ <field type="VARCHAR(255) NULL">archiveReason</field> <field type="MEDIUMTEXT NULL">history</field> <field type="MEDIUMTEXT NULL">extraData</field> + + <!-- quiqqer/products fields --> + <field type="BIGINT(20) NULL">productId</field> </table> </global> diff --git a/src/QUI/Memberships/Events.php b/src/QUI/Memberships/Events.php index 3edbbe2..cab4ee2 100644 --- a/src/QUI/Memberships/Events.php +++ b/src/QUI/Memberships/Events.php @@ -5,10 +5,12 @@ use QUI; use QUI\Package\Package; use QUI\Memberships\Handler as MembershipsHandler; +use QUI\Memberships\Users\Handler as MembershipUsersHandler; use QUI\Memberships\Products\MembershipField; use QUI\ERP\Products\Handler\Fields as ProductFields; use QUI\ERP\Products\Handler\Categories as ProductCategories; use QUI\ERP\Products\Handler\Search as ProductSearchHandler; +use QUI\ERP\Products\Product\Product; /** * Class Events @@ -45,6 +47,43 @@ public static function onPackageSetup(Package $Package) } } + /** + * quiqqer/products: onQuiqqerProductsProductDelete + * + * @param Product $Product + * @return void + */ + public static function onQuiqqerProductsProductDelete(Product $Product) + { + // check if Product is assigned to a Membership + $membershipId = $Product->getFieldValue(MembershipField::FIELD_ID); + + if (empty($membershipId)) { + return; + } + + // delete Product ID from MembershipUsers + try { + $Membership = MembershipsHandler::getInstance()->getChild($membershipId); + $MembershipUsers = MembershipUsersHandler::getInstance(); + + $membershipUserIds = $Membership->searchUsers(array( + 'productId' => $Product->getId() + )); + + foreach ($membershipUserIds as $membershipUserId) { + $MembershipUser = $MembershipUsers->getChild($membershipUserId); + $MembershipUser->setAttribute('productId', null); + $MembershipUser->update(); + } + } catch (\Exception $Exception) { + QUI\System\Log::addError( + self::class . ' :: onQuiqqerProductsProductDelete -> ' + . $Exception->getMessage() + ); + } + } + /** * quiqqer/products * diff --git a/src/QUI/Memberships/Membership.php b/src/QUI/Memberships/Membership.php index 608f7c3..12a1287 100644 --- a/src/QUI/Memberships/Membership.php +++ b/src/QUI/Memberships/Membership.php @@ -314,6 +314,14 @@ public function searchUsers($searchParams, $archivedOnly = false, $countOnly = f $where[] = '(' . implode(' OR ', $whereOR) . ')'; } + if (!empty($searchParams['productId'])) { + $where[] = '`musers`.productId = :productId'; + $binds['productId'] = array( + 'value' => (int)$searchParams['productId'], + 'type' => \PDO::PARAM_INT + ); + } + // build WHERE query string if (!empty($where)) { $sql .= " WHERE " . implode(" AND ", $where); @@ -440,7 +448,7 @@ public function getProducts() try { $result = $Search->search(array( 'fields' => array( - MembershipField::FIELD_ID => "$this->id" + MembershipField::FIELD_ID => "$this->id" // has to be string ) )); } catch (QUI\Permissions\Exception $Exception) { diff --git a/src/QUI/Memberships/Users/Handler.php b/src/QUI/Memberships/Users/Handler.php index 787d7e7..af7fe5b 100644 --- a/src/QUI/Memberships/Users/Handler.php +++ b/src/QUI/Memberships/Users/Handler.php @@ -226,7 +226,8 @@ public function getChildAttributes() 'cancelled', 'archiveReason', 'archiveDate', - 'extraData' + 'extraData', + 'productId' ); } diff --git a/src/QUI/Memberships/Users/MembershipUser.php b/src/QUI/Memberships/Users/MembershipUser.php index cd8f3ac..2fc95bb 100644 --- a/src/QUI/Memberships/Users/MembershipUser.php +++ b/src/QUI/Memberships/Users/MembershipUser.php @@ -448,6 +448,10 @@ public function addHistoryEntry($type, $msg = "") $msg = ""; } + if (is_array($msg)) { + $msg = json_encode($msg); + } + $User = QUI::getUserBySession(); $history[] = array( -- GitLab