mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-14 07:02:34 +01:00
0fbda85a59
- Removed unused uses - Type hinting for method parameters - Removed commented code - Introduced comments for classes and methods - Short array syntax
268 lines
8.8 KiB
PHP
268 lines
8.8 KiB
PHP
<?php namespace App\Http\Controllers;
|
|
|
|
use CreditCard;
|
|
use Session;
|
|
use Input;
|
|
use Utils;
|
|
use View;
|
|
use Validator;
|
|
use URL;
|
|
use Cache;
|
|
use Omnipay;
|
|
use App\Models\Country;
|
|
use App\Models\License;
|
|
use App\Models\Affiliate;
|
|
use App\Ninja\Repositories\AccountRepository;
|
|
use App\Ninja\Mailers\ContactMailer;
|
|
|
|
class NinjaController extends BaseController
|
|
{
|
|
/**
|
|
* @var AccountRepository
|
|
*/
|
|
protected $accountRepo;
|
|
|
|
/**
|
|
* @var ContactMailer
|
|
*/
|
|
protected $contactMailer;
|
|
|
|
/**
|
|
* NinjaController constructor.
|
|
*
|
|
* @param AccountRepository $accountRepo
|
|
* @param ContactMailer $contactMailer
|
|
*/
|
|
public function __construct(AccountRepository $accountRepo, ContactMailer $contactMailer)
|
|
{
|
|
$this->accountRepo = $accountRepo;
|
|
$this->contactMailer = $contactMailer;
|
|
}
|
|
|
|
/**
|
|
* @param array $input
|
|
* @param Affiliate $affiliate
|
|
*
|
|
* @return array
|
|
*/
|
|
private function getLicensePaymentDetails(array $input, Affiliate $affiliate)
|
|
{
|
|
$country = Country::find($input['country_id']);
|
|
|
|
$data = [
|
|
'firstName' => $input['first_name'],
|
|
'lastName' => $input['last_name'],
|
|
'email' => $input['email'],
|
|
'number' => $input['card_number'],
|
|
'expiryMonth' => $input['expiration_month'],
|
|
'expiryYear' => $input['expiration_year'],
|
|
'cvv' => $input['cvv'],
|
|
'billingAddress1' => $input['address1'],
|
|
'billingAddress2' => $input['address2'],
|
|
'billingCity' => $input['city'],
|
|
'billingState' => $input['state'],
|
|
'billingPostcode' => $input['postal_code'],
|
|
'billingCountry' => $country->iso_3166_2,
|
|
'shippingAddress1' => $input['address1'],
|
|
'shippingAddress2' => $input['address2'],
|
|
'shippingCity' => $input['city'],
|
|
'shippingState' => $input['state'],
|
|
'shippingPostcode' => $input['postal_code'],
|
|
'shippingCountry' => $country->iso_3166_2
|
|
];
|
|
|
|
$card = new CreditCard($data);
|
|
|
|
return [
|
|
'amount' => $affiliate->price,
|
|
'card' => $card,
|
|
'currency' => 'USD',
|
|
'returnUrl' => URL::to('license_complete'),
|
|
'cancelUrl' => URL::to('/')
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return $this|\Illuminate\Contracts\View\View
|
|
*/
|
|
public function show_license_payment()
|
|
{
|
|
if (Input::has('return_url')) {
|
|
Session::set('return_url', Input::get('return_url'));
|
|
}
|
|
|
|
if (Input::has('affiliate_key')) {
|
|
if ($affiliate = Affiliate::where('affiliate_key', '=', Input::get('affiliate_key'))->first()) {
|
|
Session::set('affiliate_id', $affiliate->id);
|
|
}
|
|
}
|
|
|
|
if (Input::has('product_id')) {
|
|
Session::set('product_id', Input::get('product_id'));
|
|
} else if (!Session::has('product_id')) {
|
|
Session::set('product_id', PRODUCT_ONE_CLICK_INSTALL);
|
|
}
|
|
|
|
if (!Session::get('affiliate_id')) {
|
|
return Utils::fatalError();
|
|
}
|
|
|
|
if (Utils::isNinjaDev() && Input::has('test_mode')) {
|
|
Session::set('test_mode', Input::get('test_mode'));
|
|
}
|
|
|
|
$account = $this->accountRepo->getNinjaAccount();
|
|
$account->load('account_gateways.gateway');
|
|
$accountGateway = $account->getGatewayByType(GATEWAY_TYPE_CREDIT_CARD);
|
|
$gateway = $accountGateway->gateway;
|
|
$acceptedCreditCardTypes = $accountGateway->getCreditcardTypes();
|
|
|
|
$affiliate = Affiliate::find(Session::get('affiliate_id'));
|
|
|
|
$data = [
|
|
'showBreadcrumbs' => false,
|
|
'hideHeader' => true,
|
|
'url' => 'license',
|
|
'amount' => $affiliate->price,
|
|
'client' => false,
|
|
'contact' => false,
|
|
'gateway' => $gateway,
|
|
'account' => $account,
|
|
'accountGateway' => $accountGateway,
|
|
'acceptedCreditCardTypes' => $acceptedCreditCardTypes,
|
|
'countries' => Cache::get('countries'),
|
|
'currencyId' => 1,
|
|
'currencyCode' => 'USD',
|
|
'paymentTitle' => $affiliate->payment_title,
|
|
'paymentSubtitle' => $affiliate->payment_subtitle,
|
|
'showAddress' => true,
|
|
];
|
|
|
|
return View::make('payments.stripe.credit_card', $data);
|
|
}
|
|
|
|
/**
|
|
* @return \Illuminate\Contracts\View\View
|
|
*/
|
|
public function do_license_payment()
|
|
{
|
|
$testMode = Session::get('test_mode') === 'true';
|
|
|
|
$rules = [
|
|
'first_name' => 'required',
|
|
'last_name' => 'required',
|
|
'email' => 'required',
|
|
'card_number' => 'required',
|
|
'expiration_month' => 'required',
|
|
'expiration_year' => 'required',
|
|
'cvv' => 'required',
|
|
'address1' => 'required',
|
|
'city' => 'required',
|
|
'state' => 'required',
|
|
'postal_code' => 'required',
|
|
'country_id' => 'required',
|
|
];
|
|
|
|
$validator = Validator::make(Input::all(), $rules);
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->to('license')
|
|
->withErrors($validator)
|
|
->withInput();
|
|
}
|
|
|
|
$account = $this->accountRepo->getNinjaAccount();
|
|
$account->load('account_gateways.gateway');
|
|
$accountGateway = $account->getGatewayByType(GATEWAY_TYPE_CREDIT_CARD);
|
|
|
|
try {
|
|
$affiliate = Affiliate::find(Session::get('affiliate_id'));
|
|
|
|
if ($testMode) {
|
|
$ref = 'TEST_MODE';
|
|
} else {
|
|
$details = self::getLicensePaymentDetails(Input::all(), $affiliate);
|
|
|
|
$gateway = Omnipay::create($accountGateway->gateway->provider);
|
|
$gateway->initialize((array) $accountGateway->getConfig());
|
|
$response = $gateway->purchase($details)->send();
|
|
|
|
$ref = $response->getTransactionReference();
|
|
|
|
if (!$response->isSuccessful() || !$ref) {
|
|
$this->error('License', $response->getMessage(), $accountGateway);
|
|
return redirect()->to('license')->withInput();
|
|
}
|
|
}
|
|
|
|
$licenseKey = Utils::generateLicense();
|
|
|
|
$license = new License();
|
|
$license->first_name = Input::get('first_name');
|
|
$license->last_name = Input::get('last_name');
|
|
$license->email = Input::get('email');
|
|
$license->transaction_reference = $ref;
|
|
$license->license_key = $licenseKey;
|
|
$license->affiliate_id = Session::get('affiliate_id');
|
|
$license->product_id = Session::get('product_id');
|
|
$license->save();
|
|
|
|
$data = [
|
|
'message' => $affiliate->payment_subtitle,
|
|
'license' => $licenseKey,
|
|
'hideHeader' => true,
|
|
'productId' => $license->product_id,
|
|
'price' => $affiliate->price,
|
|
];
|
|
|
|
$name = "{$license->first_name} {$license->last_name}";
|
|
$this->contactMailer->sendLicensePaymentConfirmation($name, $license->email, $affiliate->price, $license->license_key, $license->product_id);
|
|
|
|
if (Session::has('return_url')) {
|
|
$data['redirectTo'] = Session::get('return_url')."?license_key={$license->license_key}&product_id=".Session::get('product_id');
|
|
$data['message'] = 'Redirecting to ' . Session::get('return_url');
|
|
}
|
|
|
|
return View::make('public.license', $data);
|
|
} catch (\Exception $e) {
|
|
$this->error('License-Uncaught', false, $accountGateway, $e);
|
|
return redirect()->to('license')->withInput();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function claim_license()
|
|
{
|
|
$licenseKey = Input::get('license_key');
|
|
$productId = Input::get('product_id', PRODUCT_ONE_CLICK_INSTALL);
|
|
|
|
$license = License::where('license_key', '=', $licenseKey)
|
|
->where('is_claimed', '<', 10)
|
|
->where('product_id', '=', $productId)
|
|
->first();
|
|
|
|
if ($license) {
|
|
if ($license->transaction_reference != 'TEST_MODE') {
|
|
$license->is_claimed = $license->is_claimed + 1;
|
|
$license->save();
|
|
}
|
|
|
|
if ($productId == PRODUCT_INVOICE_DESIGNS) {
|
|
return file_get_contents(storage_path() . '/invoice_designs.txt');
|
|
} else {
|
|
// temporary fix to enable previous version to work
|
|
if (Input::get('get_date')) {
|
|
return $license->created_at->format('Y-m-d');
|
|
} else {
|
|
return 'valid';
|
|
}
|
|
}
|
|
} else {
|
|
return RESULT_FAILURE;
|
|
}
|
|
}
|
|
|
|
}
|