From 45515789a4614c2d5526dd73a91e46c6583cc22c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Mon, 17 Jul 2017 11:32:55 +0200
Subject: [PATCH] feat: Automatically create a product on new membership
 creation

---
 ajax/memberships/getInstalledMembershipPackages.php |  3 +--
 src/QUI/Memberships/Events.php                      | 10 ++++++----
 src/QUI/Memberships/Handler.php                     |  8 ++++++--
 src/QUI/Memberships/Membership.php                  | 12 ++++++++++--
 4 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/ajax/memberships/getInstalledMembershipPackages.php b/ajax/memberships/getInstalledMembershipPackages.php
index 968885a..0e572f0 100644
--- a/ajax/memberships/getInstalledMembershipPackages.php
+++ b/ajax/memberships/getInstalledMembershipPackages.php
@@ -13,8 +13,7 @@
 QUI::$Ajax->registerFunction(
     'package_quiqqer_memberships_ajax_memberships_getInstalledMembershipPackages',
     function () {
-        $Memberships  = new MembershipsHandler();
-        return $Memberships->getInstalledMembershipPackages();
+        return MembershipsHandler::getInstalledMembershipPackages();
     },
     array(),
     'Permission::checkAdminUser'
diff --git a/src/QUI/Memberships/Events.php b/src/QUI/Memberships/Events.php
index feed537..3edbbe2 100644
--- a/src/QUI/Memberships/Events.php
+++ b/src/QUI/Memberships/Events.php
@@ -29,7 +29,7 @@ public static function onPackageSetup(Package $Package)
             return;
         }
 
-        $packages = MembershipsHandler::getInstance()->getInstalledMembershipPackages();
+        $packages = MembershipsHandler::getInstalledMembershipPackages();
 
         foreach ($packages as $package) {
             switch ($package) {
@@ -69,13 +69,15 @@ protected static function createProductField()
         }
 
         try {
-            ProductFields::createField(array(
+            $NewField = ProductFields::createField(array(
                 'id'            => MembershipField::FIELD_ID,
                 'type'          => MembershipField::TYPE,
                 'titles'        => $translations,
-                'workingtitles' => $translations,
-                'search_type'   => ProductSearchHandler::SEARCHTYPE_TEXT
+                'workingtitles' => $translations
             ));
+
+            $NewField->setAttribute('search_type', ProductSearchHandler::SEARCHTYPE_TEXT);
+            $NewField->save();
         } catch (\QUI\ERP\Products\Field\Exception $Exception) {
             // nothing, field exists
         } catch (\Exception $Exception) {
diff --git a/src/QUI/Memberships/Handler.php b/src/QUI/Memberships/Handler.php
index 2cb5e75..042beae 100644
--- a/src/QUI/Memberships/Handler.php
+++ b/src/QUI/Memberships/Handler.php
@@ -67,7 +67,11 @@ public function createChild($data = array())
         $data['groupIds'] = ',' . implode(',', $groupIds) . ',';
         $data['duration'] = '1-month';
 
-        return parent::createChild($data);
+        /** @var Membership $NewMembership */
+        $NewMembership = parent::createChild($data);
+        $NewMembership->createProduct();
+
+        return $NewMembership;
     }
 
     /**
@@ -188,7 +192,7 @@ public function search($searchParams, $countOnly = false)
      *
      * @return array
      */
-    public function getInstalledMembershipPackages()
+    public static function getInstalledMembershipPackages()
     {
         $packages         = array();
         $relevantPackages = array(
diff --git a/src/QUI/Memberships/Membership.php b/src/QUI/Memberships/Membership.php
index 95bf09f..608f7c3 100644
--- a/src/QUI/Memberships/Membership.php
+++ b/src/QUI/Memberships/Membership.php
@@ -431,12 +431,16 @@ public function calcEndDate($start = null)
      */
     public function getProducts()
     {
+        if (!in_array('quiqqer/products', Handler::getInstalledMembershipPackages())) {
+            return array();
+        }
+
         $Search = new BackendSearch();
 
         try {
             $result = $Search->search(array(
                 'fields' => array(
-                    MembershipField::FIELD_ID => $this->id
+                    MembershipField::FIELD_ID => "$this->id"
                 )
             ));
         } catch (QUI\Permissions\Exception $Exception) {
@@ -460,10 +464,14 @@ public function getProducts()
      * Hint: Every time this method is called, a new Product is created, regardless
      * of previous calls!
      *
-     * @return QUI\ERP\Products\Product\Product
+     * @return QUI\ERP\Products\Product\Product|false
      */
     public function createProduct()
     {
+        if (!in_array('quiqqer/products', Handler::getInstalledMembershipPackages())) {
+            return false;
+        }
+
         $categories = array();
         $fields     = array();
 
-- 
GitLab