View file upload/src/addons/AddonFlare/PaidRegistrations/XF/Purchasable/UserUpgrade.php

File size: 3.23Kb
<?php

namespace AddonFlare\PaidRegistrations\XF\Purchasable;

use XF\Payment\CallbackState;
use XF\Entity\PurchaseRequest;

use AddonFlare\PaidRegistrations\Entity\AccountType;

class UserUpgrade extends XFCP_UserUpgrade
{
    public function getPurchaseFromRequest(\XF\Http\Request $request, \XF\Entity\User $purchaser, &$error = null)
    {
        $purchase = parent::getPurchaseFromRequest($request, $purchaser, $error);

        if ($purchase && !$purchaser->user_id && $request->filter('registration', 'bool'))
        {
            if (!in_array($purchase->paymentProfile->provider_id, AccountType::getSupportedPaymentProviderIds()))
            {
                $error = \XF::phrase('selected_payment_profile_is_not_valid_for_this_purchase');
                return false;
            }

            $email = $request->filter('email', 'str');

            $emailValidator = \XF::app()->validator('Email');

            $emailValidator->setOption('banned', \XF::app()->container('bannedEmails'));
            $emailValidator->setOption('check_typos', true);

            if (!$emailValidator->isValid($email, $errorKey))
            {
                if ($errorKey == 'banned')
                {
                    $error = \XF::phrase('email_address_you_entered_has_been_banned_by_administrator');

                    $emailBan = \XF::finder('XF:BanEmail')->where('banned_email', $email)->fetchOne();
                    if ($emailBan)
                    {
                        $emailBan->fastUpdate('last_triggered_date', time());
                    }
                }
                else if ($errorKey == 'typo')
                {
                    $error = \XF::phrase('email_address_you_entered_appears_have_typo');
                }
                else
                {
                    $error = \XF::phrase('please_enter_valid_email');
                }

                return false;
            }

            if ($existingUser = \XF::finder('XF:User')->where('email', $email)->fetchOne())
            {
                $error = \XF::phrase('email_addresses_must_be_unique');
                return false;
            }

            // direct modification causes error bc it's using magic methods
            $extraData = $purchase->extraData;
            $extraData['email'] = $email;
            $purchase->extraData = $extraData;
        }

        return $purchase;
    }

    public function getPurchaseObject(\XF\Entity\PaymentProfile $paymentProfile, $purchasable, \XF\Entity\User $purchaser)
    {
        $purchase = parent::getPurchaseObject($paymentProfile, $purchasable, $purchaser);

        $request = \XF::app()->request();

        if (!$purchaser->user_id)
        {
            // is guest purchase, remove username from title
            $purchase->title = \XF::phrase('account_upgrade') . ': ' . $purchasable->title;

            $router = \XF::app()->router('public');

            $purchase->returnUrl = $router->buildLink('canonical:register');
            $purchase->cancelUrl = $router->buildLink('canonical:register');
        }

        return $purchase;
    }

    protected function isGuestPurchase(PurchaseRequest $purchaseRequest)
    {
        return (!$purchaseRequest->user_id && !empty($purchaseRequest->extra_data['email']));
    }
}