diff --git a/README.md b/README.md index 5a064ee35749..95f4d13fbf54 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ The self-host zip includes all third party libraries whereas downloading the cod * [StackOverflow](https://stackoverflow.com/tags/invoice-ninja/) ## Referral Program -* Earn 50% of Pro & Enterprise Plans up to 4 years - [Learn more](https://www.invoiceninja.com/referral-program/) ## Mobile App * [iPhone](https://itunes.apple.com/us/app/invoice-ninja/id1435514417?ls=1&mt=8) diff --git a/app/Constants.php b/app/Constants.php index d8bb1190a6e1..a7b23bc32d17 100644 --- a/app/Constants.php +++ b/app/Constants.php @@ -361,7 +361,7 @@ if (! defined('APP_NAME')) { define('NINJA_APP_URL', env('NINJA_APP_URL', 'https://app.invoiceninja.com')); define('NINJA_DOCS_URL', env('NINJA_DOCS_URL', 'https://invoice-ninja.readthedocs.io/en/latest')); define('NINJA_DATE', '2000-01-01'); - define('NINJA_VERSION', '4.5.46' . env('NINJA_VERSION_SUFFIX')); + define('NINJA_VERSION', '4.5.49' . env('NINJA_VERSION_SUFFIX')); define('NINJA_TERMS_VERSION', '1.0.1'); define('SOCIAL_LINK_FACEBOOK', env('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja')); diff --git a/app/Http/Controllers/ClientPortalController.php b/app/Http/Controllers/ClientPortalController.php index 0a768426d770..fe5f666c3e58 100644 --- a/app/Http/Controllers/ClientPortalController.php +++ b/app/Http/Controllers/ClientPortalController.php @@ -140,7 +140,7 @@ class ClientPortalController extends BaseController $paymentURL = ''; if (count($paymentTypes) == 1) { $paymentURL = $paymentTypes[0]['url']; - if (in_array($paymentTypes[0]['gatewayTypeId'], [GATEWAY_TYPE_CUSTOM1, GATEWAY_TYPE_CUSTOM2, GATEWAY_TYPE_CUSTOM3])) { + if (array_key_exists('gatewayTypeId', $paymentTypes[0]) && in_array($paymentTypes[0]['gatewayTypeId'], [GATEWAY_TYPE_CUSTOM1, GATEWAY_TYPE_CUSTOM2, GATEWAY_TYPE_CUSTOM3])) { // do nothing } elseif (! $account->isGatewayConfigured(GATEWAY_PAYPAL_EXPRESS)) { $paymentURL = URL::to($paymentURL); @@ -162,6 +162,11 @@ class ClientPortalController extends BaseController $showApprove = false; } + $gatewayTypeIdCast = false; + + if(count($paymentTypes) >= 1 && array_key_exists('gatewayTypeId', $paymentTypes[0])) + $gatewayTypeIdCast = $paymentTypes[0]['gatewayTypeId']; + $data += [ 'account' => $account, 'showApprove' => $showApprove, @@ -173,7 +178,7 @@ class ClientPortalController extends BaseController 'paymentTypes' => $paymentTypes, 'paymentURL' => $paymentURL, 'phantomjs' => Request::has('phantomjs'), - 'gatewayTypeId' => count($paymentTypes) == 1 ? $paymentTypes[0]['gatewayTypeId'] : false, + 'gatewayTypeId' => count($paymentTypes) == 1 ? $gatewayTypeIdCast : false, ]; if ($invoice->canBePaid()) { diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 242f6009ac41..d21ae1c13fed 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -25,9 +25,9 @@ use App\Services\RecurringInvoiceService; use Auth; use Cache; use DB; +use Illuminate\Support\Facades\Session; use Redirect; use Request; -use Session; use URL; use Utils; use View; @@ -427,7 +427,7 @@ class InvoiceController extends BaseController $response = $this->emailRecurringInvoice($invoice); } else { $userId = Auth::user()->id; - $this->dispatch(new SendInvoiceEmail($invoice, $userId, $reminder, $template)); + dispatch(new SendInvoiceEmail($invoice, $userId, $reminder, $template)); $response = true; } diff --git a/app/Http/Controllers/Migration/StepsController.php b/app/Http/Controllers/Migration/StepsController.php index ef4a89bc3121..dd168e3046bc 100644 --- a/app/Http/Controllers/Migration/StepsController.php +++ b/app/Http/Controllers/Migration/StepsController.php @@ -167,7 +167,7 @@ class StepsController extends BaseController $body = [ 'account_key' => $account->account_key, - 'email' => \Auth::user()->email, + 'email' => $account->getPrimaryUser()->email, 'plan' => $account->company->plan, 'plan_term' =>$account->company->plan_term, 'plan_started' =>$account->company->plan_started, diff --git a/app/Jobs/SendInvoiceEmail.php b/app/Jobs/SendInvoiceEmail.php index effa021b9be7..efa5336773be 100644 --- a/app/Jobs/SendInvoiceEmail.php +++ b/app/Jobs/SendInvoiceEmail.php @@ -21,7 +21,7 @@ class SendInvoiceEmail extends Job implements ShouldQueue /** * @var Invoice */ - protected $invoice; + public $invoice; /** * @var bool diff --git a/app/Jobs/SendNotificationEmail.php b/app/Jobs/SendNotificationEmail.php index cf475f77db4c..b6eec96adde1 100644 --- a/app/Jobs/SendNotificationEmail.php +++ b/app/Jobs/SendNotificationEmail.php @@ -2,51 +2,53 @@ namespace App\Jobs; +use App\Models\Invoice; use App\Models\Payment; +use App\Models\Traits\SerialisesDeletedModels; +use App\Models\User; use App\Ninja\Mailers\UserMailer; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -use App\Models\Traits\SerialisesDeletedModels; /** * Class SendInvoiceEmail. */ class SendNotificationEmail extends Job implements ShouldQueue { - use InteractsWithQueue, SerializesModels, SerialisesDeletedModels { - SerialisesDeletedModels::getRestoredPropertyValue insteadof SerializesModels; - } + use InteractsWithQueue; + + public $deleteWhenMissingModels = true; /** * @var User */ - protected $user; + public User $user; /** * @var Invoice */ - protected $invoice; + public Invoice $invoice; /** * @var string */ - protected $type; + public $type; /** * @var Payment */ - protected $payment; + public ?Payment $payment; /** * @var string */ - protected $notes; + public $notes; /** * @var string */ - protected $server; + public $server; /** * Create a new job instance. @@ -59,7 +61,7 @@ class SendNotificationEmail extends Job implements ShouldQueue * @param mixed $type * @param mixed $payment */ - public function __construct($user, $invoice, $type, $payment, $notes) + public function __construct(User $user, Invoice $invoice, $type, ?Payment $payment, $notes) { $this->user = $user; $this->invoice = $invoice; diff --git a/app/Listeners/NotificationListener.php b/app/Listeners/NotificationListener.php index a906436519ec..b5d2af556410 100644 --- a/app/Listeners/NotificationListener.php +++ b/app/Listeners/NotificationListener.php @@ -1,17 +1,20 @@ -account->users as $user) { diff --git a/app/Ninja/Mailers/UserMailer.php b/app/Ninja/Mailers/UserMailer.php index 881ab1b1a90b..e47560246675 100644 --- a/app/Ninja/Mailers/UserMailer.php +++ b/app/Ninja/Mailers/UserMailer.php @@ -73,7 +73,7 @@ class UserMailer extends Mailer User $user, Invoice $invoice, $notificationType, - Payment $payment = null, + ?Payment $payment, $notes = false ) { if (! $user->shouldNotify($invoice)) { diff --git a/app/Notifications/PaymentCreated.php b/app/Notifications/PaymentCreated.php index 08ac7c7ef4f2..a806973a4a31 100644 --- a/app/Notifications/PaymentCreated.php +++ b/app/Notifications/PaymentCreated.php @@ -33,7 +33,7 @@ class PaymentCreated extends Notification implements ShouldQueue */ public function via($notifiable) { - return ['slack']; + return []; } /** diff --git a/app/Traits/GenerateMigrationResources.php b/app/Traits/GenerateMigrationResources.php index 95cd3e71aa0e..669f2ea50313 100644 --- a/app/Traits/GenerateMigrationResources.php +++ b/app/Traits/GenerateMigrationResources.php @@ -206,7 +206,6 @@ trait GenerateMigrationResources 'client_number_pattern' => $this->account->client_number_pattern ?: '', 'payment_number_pattern' => '', 'payment_number_counter' => 0, - 'payment_terms' => $this->account->payment_terms ?: '', 'reset_counter_frequency_id' => $this->account->reset_counter_frequency_id ? (string) $this->transformFrequencyId ($this->account->reset_counter_frequency_id) : '0', 'payment_type_id' => $this->account->payment_type_id ? (string) $this->transformPaymentType($this->account->payment_type_id) : '1', @@ -800,8 +799,8 @@ trait GenerateMigrationResources 'due_date_days' => $this->transformDueDate($invoice), 'remaining_cycles' => $this->getRemainingCycles($invoice), 'invitations' => $this->getResourceInvitations($invoice->invitations, 'recurring_invoice_id'), - 'auto_bill_enabled' => $this->calcAutoBillEnabled($invoice), - 'auto_bill' => $this->calcAutoBill($invoice), + 'auto_bill_enabled' => $this->calcAutoBill($invoice), + 'auto_bill' => $this->calcAutoBillEnabled($invoice), ]; } diff --git a/docs/conf.py b/docs/conf.py index ea0a5ad6a1b6..5c9a5cc1a42f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -59,7 +59,7 @@ author = u'Invoice Ninja' # The short X.Y version. version = u'4.5' # The full version, including alpha/beta/rc tags. -release = u'4.5.46' +release = u'4.5.49' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/public/index.php b/public/index.php index 2568d6704c02..5ab6801c45c8 100644 --- a/public/index.php +++ b/public/index.php @@ -34,7 +34,7 @@ require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; -require_once __DIR__.'/../app/Constants.php'; +// require_once __DIR__.'/../app/Constants.php'; /* |-------------------------------------------------------------------------- | Run The Application diff --git a/resources/views/accounts/user_details.blade.php b/resources/views/accounts/user_details.blade.php index 3fbc98f6dde6..04ab2612af7d 100644 --- a/resources/views/accounts/user_details.blade.php +++ b/resources/views/accounts/user_details.blade.php @@ -79,11 +79,6 @@ $referralCounts['pro'] . ' ' . trans('texts.pro') . '' . Icon::create('question-sign') . ' ') ->value(NINJA_APP_URL . '/invoice_now?rc=' . $user->referral_code) !!} - @else - {!! Former::checkbox('referral_code') - ->help(trans('texts.referral_code_help')) - ->text(trans('texts.enable') . ' ' . Icon::create('question-sign') . '') - ->value(1) !!} @endif @endif diff --git a/routes/web.php b/routes/web.php index edb7ada86327..77fa114091b4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -412,4 +412,4 @@ if (Utils::isNinjaDev()) */ // Include static app constants -// require_once app_path() . '/Constants.php'; +require_once app_path() . '/Constants.php';