Inheritance: extends Eloquen\Eloquent
 protected function getDatatableColumns($entityType, $hideClient)
 {
     return [['name', function ($model) {
         return link_to("gateways/{$model->public_id}/edit", $model->name)->toHtml();
     }], ['payment_type', function ($model) {
         return Gateway::getPrettyPaymentType($model->gateway_id);
     }]];
 }
 private function createGateways()
 {
     $gateways = [['name' => 'BeanStream', 'provider' => 'BeanStream', 'payment_library_id' => 2], ['name' => 'Psigate', 'provider' => 'Psigate', 'payment_library_id' => 2], ['name' => 'moolah', 'provider' => 'AuthorizeNet_AIM', 'sort_order' => 1, 'recommended' => 1, 'site_url' => 'https://invoiceninja.mymoolah.com/', 'payment_library_id' => 1], ['name' => 'Alipay', 'provider' => 'Alipay_Express', 'payment_library_id' => 1], ['name' => 'Buckaroo', 'provider' => 'Buckaroo_CreditCard', 'payment_library_id' => 1], ['name' => 'Coinbase', 'provider' => 'Coinbase', 'payment_library_id' => 1], ['name' => 'DataCash', 'provider' => 'DataCash', 'payment_library_id' => 1], ['name' => 'Neteller', 'provider' => 'Neteller', 'payment_library_id' => 1], ['name' => 'Pacnet', 'provider' => 'Pacnet', 'payment_library_id' => 1], ['name' => 'PaymentSense', 'provider' => 'PaymentSense', 'payment_library_id' => 1], ['name' => 'Realex', 'provider' => 'Realex_Remote', 'payment_library_id' => 1], ['name' => 'Sisow', 'provider' => 'Sisow', 'payment_library_id' => 1], ['name' => 'Skrill', 'provider' => 'Skrill', 'payment_library_id' => 1], ['name' => 'BitPay', 'provider' => 'BitPay', 'payment_library_id' => 1], ['name' => 'Dwolla', 'provider' => 'Dwolla', 'payment_library_id' => 1]];
     foreach ($gateways as $gateway) {
         if (!DB::table('gateways')->where('name', '=', $gateway['name'])->get()) {
             Gateway::create($gateway);
         }
     }
 }
 private function createGateways()
 {
     $gateways = [['name' => 'BeanStream', 'provider' => 'BeanStream', 'payment_library_id' => 2], ['name' => 'Psigate', 'provider' => 'Psigate', 'payment_library_id' => 2], ['name' => 'moolah', 'provider' => 'AuthorizeNet_AIM', 'sort_order' => 1, 'recommended' => 1, 'site_url' => 'https://invoiceninja.mymoolah.com/', 'payment_library_id' => 1], ['name' => 'Alipay', 'provider' => 'Alipay_Express', 'payment_library_id' => 1], ['name' => 'Buckaroo', 'provider' => 'Buckaroo_CreditCard', 'payment_library_id' => 1], ['name' => 'Coinbase', 'provider' => 'Coinbase', 'payment_library_id' => 1], ['name' => 'DataCash', 'provider' => 'DataCash', 'payment_library_id' => 1], ['name' => 'Neteller', 'provider' => 'Neteller', 'payment_library_id' => 2], ['name' => 'Pacnet', 'provider' => 'Pacnet', 'payment_library_id' => 1], ['name' => 'PaymentSense', 'provider' => 'PaymentSense', 'payment_library_id' => 1], ['name' => 'Realex', 'provider' => 'Realex_Remote', 'payment_library_id' => 1], ['name' => 'Sisow', 'provider' => 'Sisow', 'payment_library_id' => 1], ['name' => 'Skrill', 'provider' => 'Skrill', 'payment_library_id' => 1], ['name' => 'BitPay', 'provider' => 'BitPay', 'payment_library_id' => 1], ['name' => 'Dwolla', 'provider' => 'Dwolla', 'payment_library_id' => 1], ['name' => 'Eway Rapid', 'provider' => 'Eway_RapidShared', 'payment_library_id' => 1], ['name' => 'AGMS', 'provider' => 'Agms', 'payment_library_id' => 1], ['name' => 'Barclays', 'provider' => 'BarclaysEpdq\\Essential', 'payment_library_id' => 1], ['name' => 'Cardgate', 'provider' => 'Cardgate', 'payment_library_id' => 1], ['name' => 'Checkout.com', 'provider' => 'CheckoutCom', 'payment_library_id' => 1], ['name' => 'Creditcall', 'provider' => 'Creditcall', 'payment_library_id' => 1], ['name' => 'Cybersource', 'provider' => 'Cybersource', 'payment_library_id' => 1], ['name' => 'ecoPayz', 'provider' => 'Ecopayz', 'payment_library_id' => 1], ['name' => 'Fasapay', 'provider' => 'Fasapay', 'payment_library_id' => 1], ['name' => 'Komoju', 'provider' => 'Komoju', 'payment_library_id' => 1], ['name' => 'Multicards', 'provider' => 'Multicards', 'payment_library_id' => 1], ['name' => 'Pagar.Me', 'provider' => 'Pagarme', 'payment_library_id' => 1], ['name' => 'Paysafecard', 'provider' => 'Paysafecard', 'payment_library_id' => 1], ['name' => 'Paytrace', 'provider' => 'Paytrace_CreditCard', 'payment_library_id' => 1], ['name' => 'Secure Trading', 'provider' => 'SecureTrading', 'payment_library_id' => 1], ['name' => 'SecPay', 'provider' => 'SecPay', 'payment_library_id' => 1], ['name' => 'WeChat Express', 'provider' => 'WeChat_Express', 'payment_library_id' => 1], ['name' => 'WePay', 'provider' => 'WePay', 'payment_library_id' => 1]];
     foreach ($gateways as $gateway) {
         $record = Gateway::where('name', '=', $gateway['name'])->first();
         if ($record) {
             $record->provider = $gateway['provider'];
             $record->save();
         } else {
             Gateway::create($gateway);
         }
     }
 }
 public function run()
 {
     Eloquent::unguard();
     $gateways = [['name' => 'Authorize.Net AIM', 'provider' => 'AuthorizeNet_AIM', 'sort_order' => 4], ['name' => 'Authorize.Net SIM', 'provider' => 'AuthorizeNet_SIM', 'payment_library_id' => 2], ['name' => 'CardSave', 'provider' => 'CardSave'], ['name' => 'Eway Rapid', 'provider' => 'Eway_RapidShared', 'is_offsite' => true], ['name' => 'FirstData Connect', 'provider' => 'FirstData_Connect'], ['name' => 'GoCardless', 'provider' => 'GoCardless', 'is_offsite' => true], ['name' => 'Migs ThreeParty', 'provider' => 'Migs_ThreeParty'], ['name' => 'Migs TwoParty', 'provider' => 'Migs_TwoParty'], ['name' => 'Mollie', 'provider' => 'Mollie', 'is_offsite' => true, 'sort_order' => 7], ['name' => 'MultiSafepay', 'provider' => 'MultiSafepay'], ['name' => 'Netaxept', 'provider' => 'Netaxept'], ['name' => 'NetBanx', 'provider' => 'NetBanx'], ['name' => 'PayFast', 'provider' => 'PayFast', 'is_offsite' => true], ['name' => 'Payflow Pro', 'provider' => 'Payflow_Pro'], ['name' => 'PaymentExpress PxPay', 'provider' => 'PaymentExpress_PxPay'], ['name' => 'PaymentExpress PxPost', 'provider' => 'PaymentExpress_PxPost'], ['name' => 'PayPal Express', 'provider' => 'PayPal_Express', 'is_offsite' => true, 'sort_order' => 3], ['name' => 'PayPal Pro', 'provider' => 'PayPal_Pro'], ['name' => 'Pin', 'provider' => 'Pin'], ['name' => 'SagePay Direct', 'provider' => 'SagePay_Direct'], ['name' => 'SagePay Server', 'provider' => 'SagePay_Server'], ['name' => 'SecurePay DirectPost', 'provider' => 'SecurePay_DirectPost'], ['name' => 'Stripe', 'provider' => 'Stripe', 'sort_order' => 1], ['name' => 'TargetPay Direct eBanking', 'provider' => 'TargetPay_Directebanking'], ['name' => 'TargetPay Ideal', 'provider' => 'TargetPay_Ideal'], ['name' => 'TargetPay Mr Cash', 'provider' => 'TargetPay_Mrcash'], ['name' => 'TwoCheckout', 'provider' => 'TwoCheckout', 'is_offsite' => true], ['name' => 'WorldPay', 'provider' => 'WorldPay'], ['name' => 'BeanStream', 'provider' => 'BeanStream', 'payment_library_id' => 2], ['name' => 'Psigate', 'provider' => 'Psigate', 'payment_library_id' => 2], ['name' => 'moolah', 'provider' => 'AuthorizeNet_AIM'], ['name' => 'Alipay', 'provider' => 'Alipay_Express'], ['name' => 'Buckaroo', 'provider' => 'Buckaroo_CreditCard'], ['name' => 'Coinbase', 'provider' => 'Coinbase'], ['name' => 'DataCash', 'provider' => 'DataCash'], ['name' => 'Neteller', 'provider' => 'Neteller', 'payment_library_id' => 2], ['name' => 'Pacnet', 'provider' => 'Pacnet'], ['name' => 'PaymentSense', 'provider' => 'PaymentSense'], ['name' => 'Realex', 'provider' => 'Realex_Remote'], ['name' => 'Sisow', 'provider' => 'Sisow'], ['name' => 'Skrill', 'provider' => 'Skrill'], ['name' => 'BitPay', 'provider' => 'BitPay', 'is_offsite' => true, 'sort_order' => 6], ['name' => 'Dwolla', 'provider' => 'Dwolla', 'is_offsite' => true, 'sort_order' => 5], ['name' => 'AGMS', 'provider' => 'Agms'], ['name' => 'Barclays', 'provider' => 'BarclaysEpdq\\Essential'], ['name' => 'Cardgate', 'provider' => 'Cardgate'], ['name' => 'Checkout.com', 'provider' => 'CheckoutCom'], ['name' => 'Creditcall', 'provider' => 'Creditcall'], ['name' => 'Cybersource', 'provider' => 'Cybersource'], ['name' => 'ecoPayz', 'provider' => 'Ecopayz'], ['name' => 'Fasapay', 'provider' => 'Fasapay'], ['name' => 'Komoju', 'provider' => 'Komoju'], ['name' => 'Multicards', 'provider' => 'Multicards'], ['name' => 'Pagar.Me', 'provider' => 'Pagarme'], ['name' => 'Paysafecard', 'provider' => 'Paysafecard'], ['name' => 'Paytrace', 'provider' => 'Paytrace_CreditCard'], ['name' => 'Secure Trading', 'provider' => 'SecureTrading'], ['name' => 'SecPay', 'provider' => 'SecPay'], ['name' => 'WeChat Express', 'provider' => 'WeChat_Express'], ['name' => 'WePay', 'provider' => 'WePay', 'is_offsite' => false], ['name' => 'Braintree', 'provider' => 'Braintree', 'sort_order' => 2], ['name' => 'Custom', 'provider' => 'Custom', 'is_offsite' => true, 'sort_order' => 8]];
     foreach ($gateways as $gateway) {
         $record = Gateway::where('name', '=', $gateway['name'])->first();
         if ($record) {
             $record->fill($gateway);
             $record->save();
         } else {
             Gateway::create($gateway);
         }
     }
 }
 public function run()
 {
     Eloquent::unguard();
     $gateways = [['name' => 'BeanStream', 'provider' => 'BeanStream', 'payment_library_id' => 2], ['name' => 'Psigate', 'provider' => 'Psigate', 'payment_library_id' => 2], ['name' => 'moolah', 'provider' => 'AuthorizeNet_AIM', 'sort_order' => 1, 'recommended' => 1, 'site_url' => 'https://invoiceninja.mymoolah.com/', 'payment_library_id' => 1], ['name' => 'Alipay', 'provider' => 'Alipay_Express', 'payment_library_id' => 1], ['name' => 'Buckaroo', 'provider' => 'Buckaroo_CreditCard', 'payment_library_id' => 1], ['name' => 'Coinbase', 'provider' => 'Coinbase', 'payment_library_id' => 1], ['name' => 'DataCash', 'provider' => 'DataCash', 'payment_library_id' => 1], ['name' => 'Neteller', 'provider' => 'Neteller', 'payment_library_id' => 1], ['name' => 'Pacnet', 'provider' => 'Pacnet', 'payment_library_id' => 1], ['name' => 'PaymentSense', 'provider' => 'PaymentSense', 'payment_library_id' => 1], ['name' => 'Realex', 'provider' => 'Realex_Remote', 'payment_library_id' => 1], ['name' => 'Sisow', 'provider' => 'Sisow', 'payment_library_id' => 1], ['name' => 'Skrill', 'provider' => 'Skrill', 'payment_library_id' => 1], ['name' => 'BitPay', 'provider' => 'BitPay', 'payment_library_id' => 1]];
     foreach ($gateways as $gateway) {
         if (!DB::table('gateways')->where('name', '=', $gateway['name'])->get()) {
             Gateway::create($gateway);
         }
     }
     $paymentTerms = [['num_days' => -1, 'name' => 'Net 0']];
     foreach ($paymentTerms as $paymentTerm) {
         if (!DB::table('payment_terms')->where('name', '=', $paymentTerm['name'])->get()) {
             PaymentTerm::create($paymentTerm);
         }
     }
 }
 public function sendInvoice(Invoice $invoice)
 {
     $invoice->load('invitations', 'client.language', 'account');
     $entityType = $invoice->getEntityType();
     $client = $invoice->client;
     $account = $invoice->account;
     $account->loadLocalizationSettings($client);
     $view = 'invoice';
     $subject = trans("texts.{$entityType}_subject", ['invoice' => $invoice->invoice_number, 'account' => $invoice->account->getDisplayName()]);
     $accountName = $invoice->account->getDisplayName();
     $emailTemplate = $invoice->account->getEmailTemplate($entityType);
     $invoiceAmount = Utils::formatMoney($invoice->getRequestedAmount(), $client->getCurrencyId());
     $this->initClosure($invoice);
     foreach ($invoice->invitations as $invitation) {
         if (!$invitation->user || !$invitation->user->email || $invitation->user->trashed()) {
             return false;
         }
         if (!$invitation->contact || !$invitation->contact->email || $invitation->contact->trashed()) {
             return false;
         }
         $invitation->sent_date = \Carbon::now()->toDateTimeString();
         $invitation->save();
         $variables = ['$footer' => $invoice->account->getEmailFooter(), '$link' => $invitation->getLink(), '$client' => $client->getDisplayName(), '$account' => $accountName, '$contact' => $invitation->contact->getDisplayName(), '$amount' => $invoiceAmount, '$advancedRawInvoice->' => '$'];
         // Add variables for available payment types
         foreach (Gateway::getPaymentTypeLinks() as $type) {
             $variables["\${$type}_link"] = URL::to("/payment/{$invitation->invitation_key}/{$type}");
         }
         $data['body'] = str_replace(array_keys($variables), array_values($variables), $emailTemplate);
         $data['body'] = preg_replace_callback('/\\{\\{\\$?(.*)\\}\\}/', $this->advancedTemplateHandler, $data['body']);
         $data['link'] = $invitation->getLink();
         $data['entityType'] = $entityType;
         $data['invoice_id'] = $invoice->id;
         $fromEmail = $invitation->user->email;
         $response = $this->sendTo($invitation->contact->email, $fromEmail, $accountName, $subject, $view, $data);
         if ($response !== true) {
             return $response;
         }
         Activity::emailInvoice($invitation);
     }
     if (!$invoice->isSent()) {
         $invoice->invoice_status_id = INVOICE_STATUS_SENT;
         $invoice->save();
     }
     $account->loadLocalizationSettings();
     Event::fire(new InvoiceSent($invoice));
     return $response;
 }
 public function processVariables($template, $data)
 {
     $account = $data['account'];
     $client = $data['client'];
     $invitation = $data['invitation'];
     $invoice = $invitation->invoice;
     $passwordHTML = isset($data['password']) ? '<p>' . trans('texts.password') . ': ' . $data['password'] . '<p>' : false;
     $documentsHTML = '';
     if ($account->hasFeature(FEATURE_DOCUMENTS) && $invoice->hasDocuments()) {
         $documentsHTML .= trans('texts.email_documents_header') . '<ul>';
         foreach ($invoice->documents as $document) {
             $documentsHTML .= '<li><a href="' . HTML::entities($document->getClientUrl($invitation)) . '">' . HTML::entities($document->name) . '</a></li>';
         }
         foreach ($invoice->expenses as $expense) {
             foreach ($expense->documents as $document) {
                 $documentsHTML .= '<li><a href="' . HTML::entities($document->getClientUrl($invitation)) . '">' . HTML::entities($document->name) . '</a></li>';
             }
         }
         $documentsHTML .= '</ul>';
     }
     $variables = ['$footer' => $account->getEmailFooter(), '$client' => $client->getDisplayName(), '$account' => $account->getDisplayName(), '$dueDate' => $account->formatDate($invoice->due_date), '$invoiceDate' => $account->formatDate($invoice->invoice_date), '$contact' => $invitation->contact->getDisplayName(), '$firstName' => $invitation->contact->first_name, '$amount' => $account->formatMoney($data['amount'], $client), '$invoice' => $invoice->invoice_number, '$quote' => $invoice->invoice_number, '$link' => $invitation->getLink(), '$password' => $passwordHTML, '$viewLink' => $invitation->getLink() . '$password', '$viewButton' => Form::emailViewButton($invitation->getLink(), $invoice->getEntityType()) . '$password', '$paymentLink' => $invitation->getLink('payment') . '$password', '$paymentButton' => Form::emailPaymentButton($invitation->getLink('payment')) . '$password', '$customClient1' => $account->custom_client_label1, '$customClient2' => $account->custom_client_label2, '$customInvoice1' => $account->custom_invoice_text_label1, '$customInvoice2' => $account->custom_invoice_text_label2, '$documents' => $documentsHTML];
     // Add variables for available payment types
     foreach (Gateway::$paymentTypes as $type) {
         $camelType = Gateway::getPaymentTypeName($type);
         $type = Utils::toSnakeCase($camelType);
         $variables["\${$camelType}Link"] = $invitation->getLink('payment') . "/{$type}";
         $variables["\${$camelType}Button"] = Form::emailPaymentButton($invitation->getLink('payment') . "/{$type}");
     }
     $includesPasswordPlaceholder = strpos($template, '$password') !== false;
     $str = str_replace(array_keys($variables), array_values($variables), $template);
     if (!$includesPasswordPlaceholder && $passwordHTML) {
         $pos = strrpos($str, '$password');
         if ($pos !== false) {
             $str = substr_replace($str, $passwordHTML, $pos, 9);
         }
     }
     $str = str_replace('$password', '', $str);
     $str = autolink($str, 100);
     return $str;
 }
 /**
  * Stores new account
  *
  */
 public function save($accountGatewayPublicId = false)
 {
     $rules = array();
     $paymentType = Input::get('payment_type_id');
     $gatewayId = Input::get('gateway_id');
     if ($paymentType == PAYMENT_TYPE_PAYPAL) {
         $gatewayId = GATEWAY_PAYPAL_EXPRESS;
     } elseif ($paymentType == PAYMENT_TYPE_BITCOIN) {
         $gatewayId = GATEWAY_BITPAY;
     } elseif ($paymentType == PAYMENT_TYPE_DIRECT_DEBIT) {
         $gatewayId = GATEWAY_GOCARDLESS;
     } elseif ($paymentType == PAYMENT_TYPE_DWOLLA) {
         $gatewayId = GATEWAY_DWOLLA;
     }
     if (!$gatewayId) {
         Session::flash('error', trans('validation.required', ['attribute' => 'gateway']));
         return Redirect::to('gateways/create')->withInput();
     }
     $gateway = Gateway::findOrFail($gatewayId);
     $fields = $gateway->getFields();
     $optional = array_merge(Gateway::$hiddenFields, Gateway::$optionalFields);
     if ($gatewayId == GATEWAY_DWOLLA) {
         $optional = array_merge($optional, ['key', 'secret']);
     } elseif ($gatewayId == GATEWAY_STRIPE) {
         $rules['publishable_key'] = 'required';
     }
     foreach ($fields as $field => $details) {
         if (!in_array($field, $optional)) {
             if (strtolower($gateway->name) == 'beanstream') {
                 if (in_array($field, ['merchant_id', 'passCode'])) {
                     $rules[$gateway->id . '_' . $field] = 'required';
                 }
             } else {
                 $rules[$gateway->id . '_' . $field] = 'required';
             }
         }
     }
     $creditcards = Input::get('creditCardTypes');
     $validator = Validator::make(Input::all(), $rules);
     if ($validator->fails()) {
         return Redirect::to('gateways/create')->withErrors($validator)->withInput();
     } else {
         $account = Account::with('account_gateways')->findOrFail(Auth::user()->account_id);
         $oldConfig = null;
         if ($accountGatewayPublicId) {
             $accountGateway = AccountGateway::scope($accountGatewayPublicId)->firstOrFail();
             $oldConfig = $accountGateway->getConfig();
         } else {
             $accountGateway = AccountGateway::createNew();
             $accountGateway->gateway_id = $gatewayId;
         }
         $config = new stdClass();
         foreach ($fields as $field => $details) {
             $value = trim(Input::get($gateway->id . '_' . $field));
             // if the new value is masked use the original value
             if ($oldConfig && $value && $value === str_repeat('*', strlen($value))) {
                 $value = $oldConfig->{$field};
             }
             if (!$value && ($field == 'testMode' || $field == 'developerMode')) {
                 // do nothing
             } else {
                 $config->{$field} = $value;
             }
         }
         $publishableKey = Input::get('publishable_key');
         if ($publishableKey = str_replace('*', '', $publishableKey)) {
             $config->publishableKey = $publishableKey;
         } elseif ($oldConfig && property_exists($oldConfig, 'publishableKey')) {
             $config->publishableKey = $oldConfig->publishableKey;
         }
         $cardCount = 0;
         if ($creditcards) {
             foreach ($creditcards as $card => $value) {
                 $cardCount += intval($value);
             }
         }
         $accountGateway->accepted_credit_cards = $cardCount;
         $accountGateway->show_address = Input::get('show_address') ? true : false;
         $accountGateway->update_address = Input::get('update_address') ? true : false;
         $accountGateway->setConfig($config);
         if ($accountGatewayPublicId) {
             $accountGateway->save();
         } else {
             $account->account_gateways()->save($accountGateway);
         }
         if (Input::get('token_billing_type_id')) {
             $account->token_billing_type_id = Input::get('token_billing_type_id');
             $account->save();
         }
         if ($accountGatewayPublicId) {
             $message = trans('texts.updated_gateway');
         } else {
             $message = trans('texts.created_gateway');
         }
         Session::flash('message', $message);
         return Redirect::to("gateways/{$accountGateway->public_id}/edit");
     }
 }
Example #9
0
 private function processVariables($template, $data)
 {
     $variables = ['$footer' => $data['account']->getEmailFooter(), '$link' => $data['invitation']->getLink(), '$client' => $data['client']->getDisplayName(), '$account' => $data['account']->getDisplayName(), '$contact' => $data['invitation']->contact->getDisplayName(), '$firstName' => $data['invitation']->contact->first_name, '$amount' => Utils::formatMoney($data['amount'], $data['client']->getCurrencyId()), '$invoice' => $data['invitation']->invoice->invoice_number, '$quote' => $data['invitation']->invoice->invoice_number, '$advancedRawInvoice->' => '$'];
     // Add variables for available payment types
     foreach (Gateway::getPaymentTypeLinks() as $type) {
         $variables["\${$type}_link"] = URL::to("/payment/{$data['invitation']->invitation_key}/{$type}");
     }
     $str = str_replace(array_keys($variables), array_values($variables), $template);
     return $str;
 }
Example #10
0
 private function processVariables($template, $data)
 {
     $account = $data['account'];
     $client = $data['client'];
     $invitation = $data['invitation'];
     $invoice = $invitation->invoice;
     $variables = ['$footer' => $account->getEmailFooter(), '$client' => $client->getDisplayName(), '$account' => $account->getDisplayName(), '$contact' => $invitation->contact->getDisplayName(), '$firstName' => $invitation->contact->first_name, '$amount' => $account->formatMoney($data['amount'], $client), '$invoice' => $invoice->invoice_number, '$quote' => $invoice->invoice_number, '$link' => $invitation->getLink(), '$viewLink' => $invitation->getLink(), '$viewButton' => HTML::emailViewButton($invitation->getLink(), $invoice->getEntityType()), '$paymentLink' => $invitation->getLink('payment'), '$paymentButton' => HTML::emailPaymentButton($invitation->getLink('payment'))];
     // Add variables for available payment types
     foreach (Gateway::$paymentTypes as $type) {
         $camelType = Gateway::getPaymentTypeName($type);
         $type = Utils::toSnakeCase($camelType);
         $variables["\${$camelType}Link"] = $invitation->getLink() . "/{$type}";
         $variables["\${$camelType}Button"] = HTML::emailPaymentButton($invitation->getLink('payment') . "/{$type}");
     }
     $str = str_replace(array_keys($variables), array_values($variables), $template);
     return $str;
 }
Example #11
0
 public function getPaymentType()
 {
     return Gateway::getPaymentType($this->gateway_id);
 }
Example #12
0
 public static function getPrettyPaymentType($gatewayId)
 {
     return trans('texts.' . strtolower(Gateway::getPaymentType($gatewayId)));
 }
 private function processVariables($template, $data)
 {
     $account = $data['account'];
     $client = $data['client'];
     $invitation = $data['invitation'];
     $invoice = $invitation->invoice;
     $passwordHTML = isset($data['password']) ? '<p>' . trans('texts.password') . ': ' . $data['password'] . '<p>' : false;
     $variables = ['$footer' => $account->getEmailFooter(), '$client' => $client->getDisplayName(), '$account' => $account->getDisplayName(), '$dueDate' => $account->formatDate($invoice->due_date), '$invoiceDate' => $account->formatDate($invoice->invoice_date), '$contact' => $invitation->contact->getDisplayName(), '$firstName' => $invitation->contact->first_name, '$amount' => $account->formatMoney($data['amount'], $client), '$invoice' => $invoice->invoice_number, '$quote' => $invoice->invoice_number, '$link' => $invitation->getLink(), '$password' => $passwordHTML, '$viewLink' => $invitation->getLink() . '$password', '$viewButton' => Form::emailViewButton($invitation->getLink(), $invoice->getEntityType()) . '$password', '$paymentLink' => $invitation->getLink('payment') . '$password', '$paymentButton' => Form::emailPaymentButton($invitation->getLink('payment')) . '$password', '$customClient1' => $account->custom_client_label1, '$customClient2' => $account->custom_client_label2, '$customInvoice1' => $account->custom_invoice_text_label1, '$customInvoice2' => $account->custom_invoice_text_label2];
     // Add variables for available payment types
     foreach (Gateway::$paymentTypes as $type) {
         $camelType = Gateway::getPaymentTypeName($type);
         $type = Utils::toSnakeCase($camelType);
         $variables["\${$camelType}Link"] = $invitation->getLink('payment') . "/{$type}";
         $variables["\${$camelType}Button"] = Form::emailPaymentButton($invitation->getLink('payment') . "/{$type}");
     }
     $includesPasswordPlaceholder = strpos($template, '$password') !== false;
     $str = str_replace(array_keys($variables), array_values($variables), $template);
     if (!$includesPasswordPlaceholder && $passwordHTML) {
         $pos = strrpos($str, '$password');
         if ($pos !== false) {
             $str = substr_replace($str, $passwordHTML, $pos, 9);
         }
     }
     $str = str_replace('$password', '', $str);
     $str = autolink($str, 100);
     return $str;
 }
 public function run()
 {
     PaymentType::create(array('name' => 'Apply Credit'));
     PaymentType::create(array('name' => 'Bank Transfer'));
     PaymentType::create(array('name' => 'Cash'));
     PaymentType::create(array('name' => 'Debit'));
     PaymentType::create(array('name' => 'ACH'));
     PaymentType::create(array('name' => 'Visa Card'));
     PaymentType::create(array('name' => 'MasterCard'));
     PaymentType::create(array('name' => 'American Express'));
     PaymentType::create(array('name' => 'Discover Card'));
     PaymentType::create(array('name' => 'Diners Card'));
     PaymentType::create(array('name' => 'EuroCard'));
     PaymentType::create(array('name' => 'Nova'));
     PaymentType::create(array('name' => 'Credit Card Other'));
     PaymentType::create(array('name' => 'PayPal'));
     PaymentType::create(array('name' => 'Google Wallet'));
     PaymentType::create(array('name' => 'Check'));
     Theme::create(array('name' => 'amelia'));
     Theme::create(array('name' => 'cerulean'));
     Theme::create(array('name' => 'cosmo'));
     Theme::create(array('name' => 'cyborg'));
     Theme::create(array('name' => 'flatly'));
     Theme::create(array('name' => 'journal'));
     Theme::create(array('name' => 'readable'));
     Theme::create(array('name' => 'simplex'));
     Theme::create(array('name' => 'slate'));
     Theme::create(array('name' => 'spacelab'));
     Theme::create(array('name' => 'united'));
     Theme::create(array('name' => 'yeti'));
     InvoiceStatus::create(array('name' => 'Draft'));
     InvoiceStatus::create(array('name' => 'Sent'));
     InvoiceStatus::create(array('name' => 'Viewed'));
     InvoiceStatus::create(array('name' => 'Partial'));
     InvoiceStatus::create(array('name' => 'Paid'));
     Frequency::create(array('name' => 'Weekly'));
     Frequency::create(array('name' => 'Two weeks'));
     Frequency::create(array('name' => 'Four weeks'));
     Frequency::create(array('name' => 'Monthly'));
     Frequency::create(array('name' => 'Three months'));
     Frequency::create(array('name' => 'Six months'));
     Frequency::create(array('name' => 'Annually'));
     Industry::create(array('name' => 'Accounting & Legal'));
     Industry::create(array('name' => 'Advertising'));
     Industry::create(array('name' => 'Aerospace'));
     Industry::create(array('name' => 'Agriculture'));
     Industry::create(array('name' => 'Automotive'));
     Industry::create(array('name' => 'Banking & Finance'));
     Industry::create(array('name' => 'Biotechnology'));
     Industry::create(array('name' => 'Broadcasting'));
     Industry::create(array('name' => 'Business Services'));
     Industry::create(array('name' => 'Commodities & Chemicals'));
     Industry::create(array('name' => 'Communications'));
     Industry::create(array('name' => 'Computers & Hightech'));
     Industry::create(array('name' => 'Defense'));
     Industry::create(array('name' => 'Energy'));
     Industry::create(array('name' => 'Entertainment'));
     Industry::create(array('name' => 'Government'));
     Industry::create(array('name' => 'Healthcare & Life Sciences'));
     Industry::create(array('name' => 'Insurance'));
     Industry::create(array('name' => 'Manufacturing'));
     Industry::create(array('name' => 'Marketing'));
     Industry::create(array('name' => 'Media'));
     Industry::create(array('name' => 'Nonprofit & Higher Ed'));
     Industry::create(array('name' => 'Pharmaceuticals'));
     Industry::create(array('name' => 'Professional Services & Consulting'));
     Industry::create(array('name' => 'Real Estate'));
     Industry::create(array('name' => 'Retail & Wholesale'));
     Industry::create(array('name' => 'Sports'));
     Industry::create(array('name' => 'Transportation'));
     Industry::create(array('name' => 'Travel & Luxury'));
     Industry::create(array('name' => 'Other'));
     Industry::create(array('name' => 'Photography'));
     Size::create(array('name' => '1 - 3'));
     Size::create(array('name' => '4 - 10'));
     Size::create(array('name' => '11 - 50'));
     Size::create(array('name' => '51 - 100'));
     Size::create(array('name' => '101 - 500'));
     Size::create(array('name' => '500+'));
     PaymentTerm::create(array('num_days' => 7, 'name' => 'Net 7'));
     PaymentTerm::create(array('num_days' => 10, 'name' => 'Net 10'));
     PaymentTerm::create(array('num_days' => 14, 'name' => 'Net 14'));
     PaymentTerm::create(array('num_days' => 15, 'name' => 'Net 15'));
     PaymentTerm::create(array('num_days' => 30, 'name' => 'Net 30'));
     PaymentTerm::create(array('num_days' => 60, 'name' => 'Net 60'));
     PaymentTerm::create(array('num_days' => 90, 'name' => 'Net 90'));
     Currency::create(array('name' => 'US Dollar', 'code' => 'USD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Pound Sterling', 'code' => 'GBP', 'symbol' => '£', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Euro', 'code' => 'EUR', 'symbol' => '€', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Rand', 'code' => 'ZAR', 'symbol' => 'R', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Danish Krone', 'code' => 'DKK', 'symbol' => 'kr ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Israeli Shekel', 'code' => 'ILS', 'symbol' => 'NIS ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Swedish Krona', 'code' => 'SEK', 'symbol' => 'kr ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Kenyan Shilling', 'code' => 'KES', 'symbol' => 'KSh ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Canadian Dollar', 'code' => 'CAD', 'symbol' => 'C$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Philippine Peso', 'code' => 'PHP', 'symbol' => 'P ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Indian Rupee', 'code' => 'INR', 'symbol' => 'Rs. ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Australian Dollar', 'code' => 'AUD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Singapore Dollar', 'code' => 'SGD', 'symbol' => 'SGD ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Norske Kroner', 'code' => 'NOK', 'symbol' => 'kr ', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'New Zealand Dollar', 'code' => 'NZD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Vietnamese Dong', 'code' => 'VND', 'symbol' => 'VND ', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Swiss Franc', 'code' => 'CHF', 'symbol' => 'CHF ', 'precision' => '2', 'thousand_separator' => '\'', 'decimal_separator' => '.'));
     Currency::create(array('name' => 'Guatemalan Quetzal', 'code' => 'GTQ', 'symbol' => 'Q', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'));
     DatetimeFormat::create(array('format' => 'd/M/Y g:i a', 'label' => '10/Mar/2013'));
     DatetimeFormat::create(array('format' => 'd-M-Yk g:i a', 'label' => '10-Mar-2013'));
     DatetimeFormat::create(array('format' => 'd/F/Y g:i a', 'label' => '10/March/2013'));
     DatetimeFormat::create(array('format' => 'd-F-Y g:i a', 'label' => '10-March-2013'));
     DatetimeFormat::create(array('format' => 'M j, Y g:i a', 'label' => 'Mar 10, 2013 6:15 pm'));
     DatetimeFormat::create(array('format' => 'F j, Y g:i a', 'label' => 'March 10, 2013 6:15 pm'));
     DatetimeFormat::create(array('format' => 'D M jS, Y g:ia', 'label' => 'Mon March 10th, 2013 6:15 pm'));
     DateFormat::create(array('format' => 'd/M/Y', 'picker_format' => 'dd/M/yyyy', 'label' => '10/Mar/2013'));
     DateFormat::create(array('format' => 'd-M-Y', 'picker_format' => 'dd-M-yyyy', 'label' => '10-Mar-2013'));
     DateFormat::create(array('format' => 'd/F/Y', 'picker_format' => 'dd/MM/yyyy', 'label' => '10/March/2013'));
     DateFormat::create(array('format' => 'd-F-Y', 'picker_format' => 'dd-MM-yyyy', 'label' => '10-March-2013'));
     DateFormat::create(array('format' => 'M j, Y', 'picker_format' => 'M d, yyyy', 'label' => 'Mar 10, 2013'));
     DateFormat::create(array('format' => 'F j, Y', 'picker_format' => 'MM d, yyyy', 'label' => 'March 10, 2013'));
     DateFormat::create(array('format' => 'D M j, Y', 'picker_format' => 'D MM d, yyyy', 'label' => 'Mon March 10, 2013'));
     DateFormat::create(array('format' => 'Y-M-d', 'picker_format' => 'yyyy-M-dd', 'label' => '2013-03-10'));
     PaymentLibrary::create(['name' => 'Omnipay']);
     PaymentLibrary::create(['name' => 'PHP-Payments [Deprecated]']);
     /*	
     d, dd: Numeric date, no leading zero and leading zero, respectively. Eg, 5, 05.
     D, DD: Abbreviated and full weekday names, respectively. Eg, Mon, Monday.
     m, mm: Numeric month, no leading zero and leading zero, respectively. Eg, 7, 07.
     M, MM: Abbreviated and full month names, respectively. Eg, Jan, January
     yy, yyyy: 2- and 4-digit years, respectively. Eg, 12, 2012.)
     */
     $gateways = [array('name' => 'Authorize.Net AIM', 'provider' => 'AuthorizeNet_AIM'), array('name' => 'Authorize.Net SIM', 'provider' => 'AuthorizeNet_SIM'), array('name' => 'CardSave', 'provider' => 'CardSave'), array('name' => 'Eway Rapid', 'provider' => 'Eway_Rapid'), array('name' => 'FirstData Connect', 'provider' => 'FirstData_Connect'), array('name' => 'GoCardless', 'provider' => 'GoCardless'), array('name' => 'Migs ThreeParty', 'provider' => 'Migs_ThreeParty'), array('name' => 'Migs TwoParty', 'provider' => 'Migs_TwoParty'), array('name' => 'Mollie', 'provider' => 'Mollie'), array('name' => 'MultiSafepay', 'provider' => 'MultiSafepay'), array('name' => 'Netaxept', 'provider' => 'Netaxept'), array('name' => 'NetBanx', 'provider' => 'NetBanx'), array('name' => 'PayFast', 'provider' => 'PayFast'), array('name' => 'Payflow Pro', 'provider' => 'Payflow_Pro'), array('name' => 'PaymentExpress PxPay', 'provider' => 'PaymentExpress_PxPay'), array('name' => 'PaymentExpress PxPost', 'provider' => 'PaymentExpress_PxPost'), array('name' => 'PayPal Express', 'provider' => 'PayPal_Express'), array('name' => 'PayPal Pro', 'provider' => 'PayPal_Pro'), array('name' => 'Pin', 'provider' => 'Pin'), array('name' => 'SagePay Direct', 'provider' => 'SagePay_Direct'), array('name' => 'SagePay Server', 'provider' => 'SagePay_Server'), array('name' => 'SecurePay DirectPost', 'provider' => 'SecurePay_DirectPost'), array('name' => 'Stripe', 'provider' => 'Stripe'), array('name' => 'TargetPay Direct eBanking', 'provider' => 'TargetPay_Directebanking'), array('name' => 'TargetPay Ideal', 'provider' => 'TargetPay_Ideal'), array('name' => 'TargetPay Mr Cash', 'provider' => 'TargetPay_Mrcash'), array('name' => 'TwoCheckout', 'provider' => 'TwoCheckout'), array('name' => 'WorldPay', 'provider' => 'WorldPay')];
     foreach ($gateways as $gateway) {
         Gateway::create($gateway);
     }
     $timezones = array('Pacific/Midway' => "(GMT-11:00) Midway Island", 'US/Samoa' => "(GMT-11:00) Samoa", 'US/Hawaii' => "(GMT-10:00) Hawaii", 'US/Alaska' => "(GMT-09:00) Alaska", 'US/Pacific' => "(GMT-08:00) Pacific Time (US &amp; Canada)", 'America/Tijuana' => "(GMT-08:00) Tijuana", 'US/Arizona' => "(GMT-07:00) Arizona", 'US/Mountain' => "(GMT-07:00) Mountain Time (US &amp; Canada)", 'America/Chihuahua' => "(GMT-07:00) Chihuahua", 'America/Mazatlan' => "(GMT-07:00) Mazatlan", 'America/Mexico_City' => "(GMT-06:00) Mexico City", 'America/Monterrey' => "(GMT-06:00) Monterrey", 'Canada/Saskatchewan' => "(GMT-06:00) Saskatchewan", 'US/Central' => "(GMT-06:00) Central Time (US &amp; Canada)", 'US/Eastern' => "(GMT-05:00) Eastern Time (US &amp; Canada)", 'US/East-Indiana' => "(GMT-05:00) Indiana (East)", 'America/Bogota' => "(GMT-05:00) Bogota", 'America/Lima' => "(GMT-05:00) Lima", 'America/Caracas' => "(GMT-04:30) Caracas", 'Canada/Atlantic' => "(GMT-04:00) Atlantic Time (Canada)", 'America/La_Paz' => "(GMT-04:00) La Paz", 'America/Santiago' => "(GMT-04:00) Santiago", 'Canada/Newfoundland' => "(GMT-03:30) Newfoundland", 'America/Buenos_Aires' => "(GMT-03:00) Buenos Aires", 'Greenland' => "(GMT-03:00) Greenland", 'Atlantic/Stanley' => "(GMT-02:00) Stanley", 'Atlantic/Azores' => "(GMT-01:00) Azores", 'Atlantic/Cape_Verde' => "(GMT-01:00) Cape Verde Is.", 'Africa/Casablanca' => "(GMT) Casablanca", 'Europe/Dublin' => "(GMT) Dublin", 'Europe/Lisbon' => "(GMT) Lisbon", 'Europe/London' => "(GMT) London", 'Africa/Monrovia' => "(GMT) Monrovia", 'Europe/Amsterdam' => "(GMT+01:00) Amsterdam", 'Europe/Belgrade' => "(GMT+01:00) Belgrade", 'Europe/Berlin' => "(GMT+01:00) Berlin", 'Europe/Bratislava' => "(GMT+01:00) Bratislava", 'Europe/Brussels' => "(GMT+01:00) Brussels", 'Europe/Budapest' => "(GMT+01:00) Budapest", 'Europe/Copenhagen' => "(GMT+01:00) Copenhagen", 'Europe/Ljubljana' => "(GMT+01:00) Ljubljana", 'Europe/Madrid' => "(GMT+01:00) Madrid", 'Europe/Paris' => "(GMT+01:00) Paris", 'Europe/Prague' => "(GMT+01:00) Prague", 'Europe/Rome' => "(GMT+01:00) Rome", 'Europe/Sarajevo' => "(GMT+01:00) Sarajevo", 'Europe/Skopje' => "(GMT+01:00) Skopje", 'Europe/Stockholm' => "(GMT+01:00) Stockholm", 'Europe/Vienna' => "(GMT+01:00) Vienna", 'Europe/Warsaw' => "(GMT+01:00) Warsaw", 'Europe/Zagreb' => "(GMT+01:00) Zagreb", 'Europe/Athens' => "(GMT+02:00) Athens", 'Europe/Bucharest' => "(GMT+02:00) Bucharest", 'Africa/Cairo' => "(GMT+02:00) Cairo", 'Africa/Harare' => "(GMT+02:00) Harare", 'Europe/Helsinki' => "(GMT+02:00) Helsinki", 'Europe/Istanbul' => "(GMT+02:00) Istanbul", 'Asia/Jerusalem' => "(GMT+02:00) Jerusalem", 'Europe/Kiev' => "(GMT+02:00) Kyiv", 'Europe/Minsk' => "(GMT+02:00) Minsk", 'Europe/Riga' => "(GMT+02:00) Riga", 'Europe/Sofia' => "(GMT+02:00) Sofia", 'Europe/Tallinn' => "(GMT+02:00) Tallinn", 'Europe/Vilnius' => "(GMT+02:00) Vilnius", 'Asia/Baghdad' => "(GMT+03:00) Baghdad", 'Asia/Kuwait' => "(GMT+03:00) Kuwait", 'Africa/Nairobi' => "(GMT+03:00) Nairobi", 'Asia/Riyadh' => "(GMT+03:00) Riyadh", 'Asia/Tehran' => "(GMT+03:30) Tehran", 'Europe/Moscow' => "(GMT+04:00) Moscow", 'Asia/Baku' => "(GMT+04:00) Baku", 'Europe/Volgograd' => "(GMT+04:00) Volgograd", 'Asia/Muscat' => "(GMT+04:00) Muscat", 'Asia/Tbilisi' => "(GMT+04:00) Tbilisi", 'Asia/Yerevan' => "(GMT+04:00) Yerevan", 'Asia/Kabul' => "(GMT+04:30) Kabul", 'Asia/Karachi' => "(GMT+05:00) Karachi", 'Asia/Tashkent' => "(GMT+05:00) Tashkent", 'Asia/Kolkata' => "(GMT+05:30) Kolkata", 'Asia/Kathmandu' => "(GMT+05:45) Kathmandu", 'Asia/Yekaterinburg' => "(GMT+06:00) Ekaterinburg", 'Asia/Almaty' => "(GMT+06:00) Almaty", 'Asia/Dhaka' => "(GMT+06:00) Dhaka", 'Asia/Novosibirsk' => "(GMT+07:00) Novosibirsk", 'Asia/Bangkok' => "(GMT+07:00) Bangkok", 'Asia/Ho_Chi_Minh' => "(GMT+07.00) Ho Chi Minh", 'Asia/Jakarta' => "(GMT+07:00) Jakarta", 'Asia/Krasnoyarsk' => "(GMT+08:00) Krasnoyarsk", 'Asia/Chongqing' => "(GMT+08:00) Chongqing", 'Asia/Hong_Kong' => "(GMT+08:00) Hong Kong", 'Asia/Kuala_Lumpur' => "(GMT+08:00) Kuala Lumpur", 'Australia/Perth' => "(GMT+08:00) Perth", 'Asia/Singapore' => "(GMT+08:00) Singapore", 'Asia/Taipei' => "(GMT+08:00) Taipei", 'Asia/Ulaanbaatar' => "(GMT+08:00) Ulaan Bataar", 'Asia/Urumqi' => "(GMT+08:00) Urumqi", 'Asia/Irkutsk' => "(GMT+09:00) Irkutsk", 'Asia/Seoul' => "(GMT+09:00) Seoul", 'Asia/Tokyo' => "(GMT+09:00) Tokyo", 'Australia/Adelaide' => "(GMT+09:30) Adelaide", 'Australia/Darwin' => "(GMT+09:30) Darwin", 'Asia/Yakutsk' => "(GMT+10:00) Yakutsk", 'Australia/Brisbane' => "(GMT+10:00) Brisbane", 'Australia/Canberra' => "(GMT+10:00) Canberra", 'Pacific/Guam' => "(GMT+10:00) Guam", 'Australia/Hobart' => "(GMT+10:00) Hobart", 'Australia/Melbourne' => "(GMT+10:00) Melbourne", 'Pacific/Port_Moresby' => "(GMT+10:00) Port Moresby", 'Australia/Sydney' => "(GMT+10:00) Sydney", 'Asia/Vladivostok' => "(GMT+11:00) Vladivostok", 'Asia/Magadan' => "(GMT+12:00) Magadan", 'Pacific/Auckland' => "(GMT+12:00) Auckland", 'Pacific/Fiji' => "(GMT+12:00) Fiji");
     foreach ($timezones as $name => $location) {
         Timezone::create(array('name' => $name, 'location' => $location));
     }
 }
 /**
  * Stores new account
  *
  */
 public function save($accountGatewayPublicId = false)
 {
     $gatewayId = Input::get('primary_gateway_id') ?: Input::get('secondary_gateway_id');
     $gateway = Gateway::findOrFail($gatewayId);
     $rules = [];
     $fields = $gateway->getFields();
     $optional = array_merge(Gateway::$hiddenFields, Gateway::$optionalFields);
     if ($gatewayId == GATEWAY_DWOLLA) {
         $optional = array_merge($optional, ['key', 'secret']);
     } elseif ($gatewayId == GATEWAY_STRIPE) {
         if (Utils::isNinjaDev()) {
             // do nothing - we're unable to acceptance test with StripeJS
         } else {
             $rules['publishable_key'] = 'required';
             $rules['enable_ach'] = 'boolean';
         }
     }
     if ($gatewayId != GATEWAY_WEPAY) {
         foreach ($fields as $field => $details) {
             if (!in_array($field, $optional)) {
                 if (strtolower($gateway->name) == 'beanstream') {
                     if (in_array($field, ['merchant_id', 'passCode'])) {
                         $rules[$gateway->id . '_' . $field] = 'required';
                     }
                 } else {
                     $rules[$gateway->id . '_' . $field] = 'required';
                 }
             }
         }
     }
     $creditcards = Input::get('creditCardTypes');
     $validator = Validator::make(Input::all(), $rules);
     if ($validator->fails()) {
         return Redirect::to('gateways/create?other_providers=' . ($gatewayId == GATEWAY_WEPAY ? 'false' : 'true'))->withErrors($validator)->withInput();
     } else {
         $account = Account::with('account_gateways')->findOrFail(Auth::user()->account_id);
         $oldConfig = null;
         if ($accountGatewayPublicId) {
             $accountGateway = AccountGateway::scope($accountGatewayPublicId)->firstOrFail();
             $oldConfig = $accountGateway->getConfig();
         } else {
             // check they don't already have an active gateway for this provider
             // TODO complete this
             $accountGateway = AccountGateway::scope()->whereGatewayId($gatewayId)->first();
             if ($accountGateway) {
                 Session::flash('error', trans('texts.gateway_exists'));
                 return Redirect::to("gateways/{$accountGateway->public_id}/edit");
             }
             $accountGateway = AccountGateway::createNew();
             $accountGateway->gateway_id = $gatewayId;
             if ($gatewayId == GATEWAY_WEPAY) {
                 if (!$this->setupWePay($accountGateway, $wepayResponse)) {
                     return $wepayResponse;
                 }
                 $oldConfig = $accountGateway->getConfig();
             }
         }
         $config = new stdClass();
         if ($gatewayId != GATEWAY_WEPAY) {
             foreach ($fields as $field => $details) {
                 $value = trim(Input::get($gateway->id . '_' . $field));
                 // if the new value is masked use the original value
                 if ($oldConfig && $value && $value === str_repeat('*', strlen($value))) {
                     $value = $oldConfig->{$field};
                 }
                 if (!$value && ($field == 'testMode' || $field == 'developerMode')) {
                     // do nothing
                 } else {
                     $config->{$field} = $value;
                 }
             }
         } elseif ($oldConfig) {
             $config = clone $oldConfig;
         }
         $publishableKey = Input::get('publishable_key');
         if ($publishableKey = str_replace('*', '', $publishableKey)) {
             $config->publishableKey = $publishableKey;
         } elseif ($oldConfig && property_exists($oldConfig, 'publishableKey')) {
             $config->publishableKey = $oldConfig->publishableKey;
         }
         $plaidClientId = Input::get('plaid_client_id');
         if ($plaidClientId = str_replace('*', '', $plaidClientId)) {
             $config->plaidClientId = $plaidClientId;
         } elseif ($oldConfig && property_exists($oldConfig, 'plaidClientId')) {
             $config->plaidClientId = $oldConfig->plaidClientId;
         }
         $plaidSecret = Input::get('plaid_secret');
         if ($plaidSecret = str_replace('*', '', $plaidSecret)) {
             $config->plaidSecret = $plaidSecret;
         } elseif ($oldConfig && property_exists($oldConfig, 'plaidSecret')) {
             $config->plaidSecret = $oldConfig->plaidSecret;
         }
         $plaidPublicKey = Input::get('plaid_public_key');
         if ($plaidPublicKey = str_replace('*', '', $plaidPublicKey)) {
             $config->plaidPublicKey = $plaidPublicKey;
         } elseif ($oldConfig && property_exists($oldConfig, 'plaidPublicKey')) {
             $config->plaidPublicKey = $oldConfig->plaidPublicKey;
         }
         if ($gatewayId == GATEWAY_STRIPE || $gatewayId == GATEWAY_WEPAY) {
             $config->enableAch = boolval(Input::get('enable_ach'));
         }
         if ($gatewayId == GATEWAY_BRAINTREE) {
             $config->enablePayPal = boolval(Input::get('enable_paypal'));
         }
         $cardCount = 0;
         if ($creditcards) {
             foreach ($creditcards as $card => $value) {
                 $cardCount += intval($value);
             }
         }
         $accountGateway->accepted_credit_cards = $cardCount;
         $accountGateway->show_address = Input::get('show_address') ? true : false;
         $accountGateway->update_address = Input::get('update_address') ? true : false;
         $accountGateway->setConfig($config);
         if ($accountGatewayPublicId) {
             $accountGateway->save();
         } else {
             $account->account_gateways()->save($accountGateway);
         }
         if (isset($wepayResponse)) {
             return $wepayResponse;
         } else {
             if ($accountGatewayPublicId) {
                 $message = trans('texts.updated_gateway');
             } else {
                 $message = trans('texts.created_gateway');
             }
             Session::flash('message', $message);
             return Redirect::to("gateways/{$accountGateway->public_id}/edit");
         }
     }
 }
 /**
  * Stores new account
  *
  */
 public function save($accountGatewayPublicId = false)
 {
     $rules = array();
     $paymentType = Input::get('payment_type_id');
     $gatewayId = Input::get('gateway_id');
     if ($paymentType == PAYMENT_TYPE_PAYPAL) {
         $gatewayId = GATEWAY_PAYPAL_EXPRESS;
     } elseif ($paymentType == PAYMENT_TYPE_BITCOIN) {
         $gatewayId = GATEWAY_BITPAY;
     }
     if (!$gatewayId) {
         Session::flash('error', trans('validation.required', ['attribute' => 'gateway']));
         return Redirect::to('gateways/create')->withInput();
     }
     $gateway = Gateway::findOrFail($gatewayId);
     $fields = $gateway->getFields();
     foreach ($fields as $field => $details) {
         if (!in_array($field, ['testMode', 'developerMode', 'headerImageUrl', 'solutionType', 'landingPage', 'brandName', 'logoImageUrl', 'borderColor'])) {
             if (strtolower($gateway->name) == 'beanstream') {
                 if (in_array($field, ['merchant_id', 'passCode'])) {
                     $rules[$gateway->id . '_' . $field] = 'required';
                 }
             } else {
                 $rules[$gateway->id . '_' . $field] = 'required';
             }
         }
     }
     $creditcards = Input::get('creditCardTypes');
     $validator = Validator::make(Input::all(), $rules);
     if ($validator->fails()) {
         return Redirect::to('gateways/create')->withErrors($validator)->withInput();
     } else {
         $account = Account::with('account_gateways')->findOrFail(Auth::user()->account_id);
         $oldConfig = null;
         if ($accountGatewayPublicId) {
             $accountGateway = AccountGateway::scope($accountGatewayPublicId)->firstOrFail();
             $oldConfig = json_decode($accountGateway->config);
         } else {
             $accountGateway = AccountGateway::createNew();
             $accountGateway->gateway_id = $gatewayId;
         }
         $config = new stdClass();
         foreach ($fields as $field => $details) {
             $value = trim(Input::get($gateway->id . '_' . $field));
             // if the new value is masked use the original value
             if ($value && $value === str_repeat('*', strlen($value))) {
                 $value = $oldConfig->{$field};
             }
             if (!$value && ($field == 'testMode' || $field == 'developerMode')) {
                 // do nothing
             } else {
                 $config->{$field} = $value;
             }
         }
         $cardCount = 0;
         if ($creditcards) {
             foreach ($creditcards as $card => $value) {
                 $cardCount += intval($value);
             }
         }
         $accountGateway->accepted_credit_cards = $cardCount;
         $accountGateway->config = json_encode($config);
         if ($accountGatewayPublicId) {
             $accountGateway->save();
         } else {
             $account->account_gateways()->save($accountGateway);
         }
         if (Input::get('token_billing_type_id')) {
             $account->token_billing_type_id = Input::get('token_billing_type_id');
             $account->save();
         }
         if ($accountGatewayPublicId) {
             $message = trans('texts.updated_gateway');
         } else {
             $message = trans('texts.created_gateway');
         }
         Session::flash('message', $message);
         return Redirect::to('company/payments');
     }
 }