Skip to content
Code-Schnipsel Gruppen Projekte
Events.php 6,08 KiB
Newer Older
Patrick Müller's avatar
Patrick Müller committed
<?php

namespace QUI\Memberships;

use QUI;
use QUI\Package\Package;
use QUI\Memberships\Handler as MembershipsHandler;
use QUI\Memberships\Users\Handler as MembershipUsersHandler;
Patrick Müller's avatar
Patrick Müller committed
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;
Patrick Müller's avatar
Patrick Müller committed

/**
 * Class Events
 *
 * Basic events for quiqqer/memberships
 */
class Events
{
    /**
     * quiqqer/quiqqer: onPackageSetup
     *
     * @param Package $Package
     * @return void
     */
    public static function onPackageSetup(Package $Package)
    {
        if ($Package->getName() !== 'quiqqer/memberships') {
            return;
        }

        $packages = Utils::getInstalledMembershipPackages();
Patrick Müller's avatar
Patrick Müller committed

        foreach ($packages as $package) {
            switch ($package) {
                case 'quiqqer/products':
                    self::createProductField();
                    self::createProductCategory();
Patrick Müller's avatar
Patrick Müller committed
                    break;

                case 'quiqqer/contracts':
                    // @todo setup routine for quiqqer/contracts
                    break;
            }
        }
    }

    /**
     * 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()
            );
        }
    }

Patrick Müller's avatar
Patrick Müller committed
    /**
     * quiqqer/products
     *
     * Create a Membership field with a fixed id
     *
     * @return void
     */
    protected static function createProductField()
    {
        $L            = new QUI\Locale();
        $translations = array(
            'de' => '',
            'en' => ''
        );

        foreach ($translations as $l => $t) {
            $L->setCurrent($l);
            $translations[$l] = $L->get(
                'quiqqer/memberships',
                'products.field.membership'
            );
        }

        try {
            $NewField = ProductFields::createField(array(
Patrick Müller's avatar
Patrick Müller committed
                'id'            => MembershipField::FIELD_ID,
                'type'          => MembershipField::TYPE,
                'titles'        => $translations,
                'workingtitles' => $translations
Patrick Müller's avatar
Patrick Müller committed
            ));

            $NewField->setAttribute('search_type', ProductSearchHandler::SEARCHTYPE_TEXT);
            $NewField->save();
Patrick Müller's avatar
Patrick Müller committed
        } catch (\QUI\ERP\Products\Field\Exception $Exception) {
            // nothing, field exists
        } catch (\Exception $Exception) {
            QUI\System\Log::addError(self::class . ' :: createProductField');
            QUI\System\Log::writeException($Exception);
        }
    }

    /**
     * Create a product category for memberships
     *
     * @return void
     */
    protected static function createProductCategory()
    {
        $Category = MembershipsHandler::getProductCategory();

        // do not create a product category if a default category has already been set
        if ($Category !== false) {
            return;
        }

        try {
            $Category = ProductCategories::createCategory();
        } catch (\Exception $Exception) {
            QUI\System\Log::addError(self::class . ' :: createProductCategory()');
            QUI\System\Log::writeException($Exception);

            return;
        }

        $catId  = $Category->getId();
        $titles = array(
            'de' => '',
            'en' => ''
        );

        $descriptions = array(
            'de' => '',
            'en' => ''
        );

        $L = new QUI\Locale();

        foreach ($titles as $l => $t) {
            $L->setCurrent($l);
            $t = $L->get('quiqqer/memberships', 'products.category.title');
            $d = $L->get('quiqqer/memberships', 'products.category.description');

            $titles[$l]                 = $t;
            $titles[$l . '_edit']       = $t;
            $descriptions[$l]           = $d;
            $descriptions[$l . '_edit'] = $d;
        }

        // change title and description
        QUI\Translator::edit(
            'quiqqer/products',
            'products.category.' . $catId . '.title',
            'quiqqer/products',
            array_merge(
                $titles,
                array(
                    'datatype' => 'php,js',
                    'html'     => 0
                )
            )
        );

        QUI\Translator::edit(
            'quiqqer/products',
            'products.category.' . $catId . '.description',
            'quiqqer/products',
            array_merge(
                $descriptions,
                array(
                    'datatype' => 'php,js',
                    'html'     => 0
                )
            )
        );

        // assign Membership Field to category
        $Category->addField(MembershipsHandler::getProductField());
        $Category->save();

        // set new category as default product category for memberships
        $Conf = QUI::getPackage('quiqqer/memberships')->getConfig();
        $Conf->set('products', 'categoryId', $catId);
        $Conf->save();