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']));
}
}