View file upload/src/addons/AddonFlare/PaidRegistrations/XF/Payment/PayPal.php

File size: 1.84Kb
<?php

namespace AddonFlare\PaidRegistrations\XF\Payment;

use XF\Entity\PaymentProfile;
use XF\Entity\PurchaseRequest;
use XF\Mvc\Controller;
use XF\Purchasable\Purchase;

use XF\Payment\CallbackState;

class PayPal extends XFCP_PayPal
{
    protected function getPaymentParams(PurchaseRequest $purchaseRequest, Purchase $purchase)
    {
        $params = parent::getPaymentParams($purchaseRequest, $purchase);

        if (!$purchaseRequest->user_id && \XF::app()->request()->filter('registration', 'bool'))
        {
            $params['rm'] = 2;
        }

        return $params;
    }

    public function validatePurchaser(CallbackState $state)
    {
        $purchaseRequest = $state->getPurchaseRequest();

        $extraData = $purchaseRequest->extra_data;

        // only happens when user has paid but hasn't yet registered
        if (!$state->legacy && !$purchaseRequest->user_id && !empty($extraData['email']))
        {
            // don't log guest ipn errors because they're allowed
            $state->logType = '';
            $state->httpCode = 503;

            // email user
            if (empty($extraData['emailSent']) && in_array($state->transactionType, ['web_accept', 'subscr_payment', 'subscr_signup']))
            {
                $params = [
                    'purchaseRequest' => $purchaseRequest,
                ];

                \XF::app()->mailer()->newMail()
                    ->setTo($extraData['email'])
                    ->setTemplate('af_paidregistrations_receipt', $params)
                    ->send();

                // prevent future emails
                $extraData['emailSent'] = 1;
                $purchaseRequest->fastUpdate('extra_data', $extraData);
            }

            return false;
        }

        // this parent method checks for a valid purchaser
        return parent::validatePurchaser($state);
    }
}