1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-21 08:51:34 +02:00

Merge pull request #5362 from turbo124/v5-develop

v5.1.38
This commit is contained in:
David Bomba 2021-04-07 21:07:16 +10:00 committed by GitHub
commit b351edebe1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 262 additions and 114 deletions

View File

@ -1 +1 @@
5.1.37
5.1.38

View File

@ -12,13 +12,15 @@
namespace App\Jobs\Cron;
use App\Libraries\MultiDB;
use App\Models\Invoice;
use App\Utils\Traits\SubscriptionHooker;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Carbon;
class SubscriptionCron
{
use Dispatchable;
use SubscriptionHooker;
/**
* Create a new job instance.
*
@ -37,37 +39,55 @@ class SubscriptionCron
{
if (! config('ninja.db.multi_db_enabled')) {
$this->loopSubscriptions();
} else {
//multiDB environment, need to
foreach (MultiDB::$dbs as $db) {
MultiDB::setDB($db);
$this->loopSubscriptions();
}
}
}
private function loopSubscriptions()
{
//looop recurring invoices with subscription id
// $client_subs = ClientSubscription::whereNull('deleted_at')
// ->cursor()
// ->each(function ($cs){
// $this->processSubscription($cs);
// });
$invoices = Invoice::where('is_deleted', 0)
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL])
->where('balance', '>', 0)
->whereDate('due_date', '<=', now()->addDay()->startOfDay())
->whereNotNull('subscription_id')
->cursor();
$invoices->each(function ($invoice){
$subscription = $invoice->subscription;
$body = [
'context' => 'plan_expired',
'client' => $invoice->client->hashed_id,
'invoice' => $invoice->hashed_id,
'subscription' => $subscription->hashed_id,
];
$this->sendLoad($subscription, $body);
//This will send the notification daily.
//We'll need to handle this by performing some action on the invoice to either archive it or delete it?
});
}
/* Our daily cron should check
1. Is the subscription still in trial phase?
2. Check the recurring invoice and its remaining_cycles to see whether we need to cancel or perform any other function.
3. Any notifications that need to fire?
*/
private function processSubscription($client_subscription)
private function handleWebhook($invoice, $subscription)
{
}
}

View File

@ -51,6 +51,7 @@ class SchedulerCheck implements ShouldQueue
try {
Artisan::call('optimize');
} catch (\Exception $e) {
nlog($e->getMessage());
nlog("I wasn't able to optimize.");
}

View File

@ -243,15 +243,11 @@ class Account extends BaseModel
if ($trial_plan && $include_trial) {
$trial_started = $this->trial_started;
$trial_expires = $this->trial_started->addSeconds($this->trial_duration);
// $trial_expires->modify('+2 weeks');
if($trial_expires->greaterThan(now())){
$trial_active = true;
}
// if ($trial_expires >= date_create()) {
// $trial_active = true;
// }
}
$plan_active = false;

View File

@ -166,6 +166,11 @@ class Invoice extends BaseModel
return $this->belongsTo(User::class)->withTrashed();
}
public function recurring_invoice()
{
return $this->belongsTo(RecurringInvoice::class)->withTrashed();
}
public function assigned_user()
{
return $this->belongsTo(User::class, 'assigned_user_id', 'id')->withTrashed();
@ -181,6 +186,11 @@ class Invoice extends BaseModel
return $this->belongsTo(Client::class)->withTrashed();
}
public function subscription()
{
return $this->belongsTo(Subscription::class)->withTrashed();
}
public function documents()
{
return $this->morphMany(Document::class, 'documentable');

View File

@ -18,11 +18,14 @@ class MailServiceProvider extends MailProvider
protected function registerIlluminateMailer()
{
$this->app->singleton('mail.manager', function($app) {
// $this->app->singleton('mail.manager', function($app) {
// return new GmailTransportManager($app);
// });
$this->app->bind('mail.manager', function($app) {
return new GmailTransportManager($app);
});
$this->app->bind('mailer', function ($app) {
return $app->make('mail.manager')->mailer();
});

View File

@ -32,12 +32,14 @@ use App\Repositories\SubscriptionRepository;
use App\Utils\Ninja;
use App\Utils\Traits\CleanLineItems;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SubscriptionHooker;
use GuzzleHttp\RequestOptions;
class SubscriptionService
{
use MakesHash;
use CleanLineItems;
use SubscriptionHooker;
/** @var subscription */
private $subscription;
@ -82,7 +84,9 @@ class SubscriptionService
'subscription' => $this->subscription->hashed_id,
];
$this->triggerWebhook($context);
$response = $this->triggerWebhook($context);
nlog($response);
if(array_key_exists('post_purchase_url', $this->subscription->webhook_configuration) && strlen($this->subscription->webhook_configuration['post_purchase_url']) >=1)
return redirect($this->subscription->webhook_configuration['post_purchase_url']);
@ -124,6 +128,7 @@ class SubscriptionService
$response = $this->triggerWebhook($context);
return $response;
}
/* Starts the process to create a trial
@ -229,29 +234,15 @@ class SubscriptionService
'db' => $this->subscription->company->db,
]);
$headers = [
'Content-Type' => 'application/json',
'X-Requested-With' => 'XMLHttpRequest',
];
$client = new \GuzzleHttp\Client(
[
'headers' => $headers,
]);
try {
$response = $client->{$this->subscription->webhook_configuration['post_purchase_rest_method']}($this->subscription->webhook_configuration['post_purchase_url'],[
RequestOptions::JSON => ['body' => $body], RequestOptions::ALLOW_REDIRECTS => false
]);
}
catch(\Exception $e)
{
$body = array_merge($body, ['exception' => $e->getMessage()]);
}
$response = $this->sendLoad($this->subscription, $body);
/* Append the response to the system logger body */
if($response) {
if(is_array($response)){
$body = $response;
}
else {
$status = $response->getStatusCode();
$response_body = $response->getBody();

View File

@ -136,4 +136,37 @@ class Ninja
return $translations;
}
public function createLicense($request)
{
// $affiliate = Affiliate::where('affiliate_key', '=', SELF_HOST_AFFILIATE_KEY)->first();
// $email = trim(Input::get('email'));
// if (! $email || $email == TEST_USERNAME) {
// return RESULT_FAILURE;
// }
// $license = new License();
// $license->first_name = Input::get('first_name');
// $license->last_name = Input::get('last_name');
// $license->email = $email;
// $license->transaction_reference = Request::getClientIp();
// $license->license_key = self::generateLicense();
// $license->affiliate_id = $affiliate->id;
// $license->product_id = PRODUCT_SELF_HOST;
// $license->is_claimed = 1;
// $license->save();
// return RESULT_SUCCESS;
}
// public static function generateLicense()
// {
// $parts = [];
// for ($i = 0; $i < 5; $i++) {
// $parts[] = strtoupper(str_random(4));
// }
// return implode('-', $parts);
// }
}

View File

@ -18,6 +18,7 @@ use App\Utils\SystemHealth;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Artisan;
trait AppSetup
{
@ -36,6 +37,9 @@ trait AppSetup
{
$cached_tables = config('ninja.cached_tables');
if(request()->has('clear_cache'))
Artisan::call('optimize');
foreach ($cached_tables as $name => $class) {
if (request()->has('clear_cache') || !Cache::has($name) || $force) {

View File

@ -0,0 +1,53 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Utils\Traits;
use GuzzleHttp\RequestOptions;
/**
* Class SubscriptionHooker.
*/
trait SubscriptionHooker
{
public function sendLoad($subscription, $body)
{
$headers = [
'Content-Type' => 'application/json',
'X-Requested-With' => 'XMLHttpRequest',
];
if(count($subscription->webhook_configuration['post_purchase_headers']) >= 1)
$headers = array_merge($headers, $subscription->webhook_configuration['post_purchase_headers']);
$client = new \GuzzleHttp\Client(
[
'headers' => $headers,
]);
try {
$response = $client->{$subscription->webhook_configuration['post_purchase_rest_method']}($subscription->webhook_configuration['post_purchase_url'],[
RequestOptions::JSON => ['body' => $body], RequestOptions::ALLOW_REDIRECTS => false
]);
return $response;
}
catch(\Exception $e)
{
$body = array_merge($body, ['exception' => $e->getMessage()]);
return $body;
}
}
}

137
composer.lock generated
View File

@ -51,16 +51,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.176.8",
"version": "3.176.9",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "776b944988167fa3d563d2cbc5fcb6763424a9f0"
"reference": "17dc67514b148979994758fbfb54088a8a3393bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/776b944988167fa3d563d2cbc5fcb6763424a9f0",
"reference": "776b944988167fa3d563d2cbc5fcb6763424a9f0",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/17dc67514b148979994758fbfb54088a8a3393bf",
"reference": "17dc67514b148979994758fbfb54088a8a3393bf",
"shasum": ""
},
"require": {
@ -135,9 +135,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.176.8"
"source": "https://github.com/aws/aws-sdk-php/tree/3.176.9"
},
"time": "2021-04-05T18:16:29+00:00"
"time": "2021-04-06T18:13:47+00:00"
},
{
"name": "bacon/bacon-qr-code",
@ -1851,27 +1851,26 @@
},
{
"name": "fzaninotto/faker",
"version": "dev-master",
"version": "v1.9.2",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
"reference": "5ffe7db6c80f441f150fc88008d64e64af66634b"
"reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/5ffe7db6c80f441f150fc88008d64e64af66634b",
"reference": "5ffe7db6c80f441f150fc88008d64e64af66634b",
"url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
"reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0 || ^8.0"
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"ext-intl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7",
"squizlabs/php_codesniffer": "^2.9.2"
},
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@ -1900,10 +1899,10 @@
],
"support": {
"issues": "https://github.com/fzaninotto/Faker/issues",
"source": "https://github.com/fzaninotto/Faker/tree/master"
"source": "https://github.com/fzaninotto/Faker/tree/v1.9.2"
},
"abandoned": true,
"time": "2020-12-11T09:59:14+00:00"
"time": "2020-12-11T09:56:16+00:00"
},
{
"name": "google/apiclient",
@ -2750,16 +2749,16 @@
},
{
"name": "laravel/framework",
"version": "v8.35.1",
"version": "v8.36.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "d118c0df39e7524131176aaf76493eae63a8a602"
"reference": "91c454715b81b9a39f718651d4e2f8104d45e7c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d118c0df39e7524131176aaf76493eae63a8a602",
"reference": "d118c0df39e7524131176aaf76493eae63a8a602",
"url": "https://api.github.com/repos/laravel/framework/zipball/91c454715b81b9a39f718651d4e2f8104d45e7c2",
"reference": "91c454715b81b9a39f718651d4e2f8104d45e7c2",
"shasum": ""
},
"require": {
@ -2914,7 +2913,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2021-03-30T21:34:17+00:00"
"time": "2021-04-06T21:14:06+00:00"
},
{
"name": "laravel/slack-notification-channel",
@ -2979,16 +2978,16 @@
},
{
"name": "laravel/socialite",
"version": "v5.2.2",
"version": "v5.2.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
"reference": "8d25d574b4f2005411c0b9cb527ef5e745c1b07d"
"reference": "1960802068f81e44b2ae9793932181cf1cb91b5c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/socialite/zipball/8d25d574b4f2005411c0b9cb527ef5e745c1b07d",
"reference": "8d25d574b4f2005411c0b9cb527ef5e745c1b07d",
"url": "https://api.github.com/repos/laravel/socialite/zipball/1960802068f81e44b2ae9793932181cf1cb91b5c",
"reference": "1960802068f81e44b2ae9793932181cf1cb91b5c",
"shasum": ""
},
"require": {
@ -3044,7 +3043,7 @@
"issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite"
},
"time": "2021-03-02T16:50:47+00:00"
"time": "2021-04-06T14:38:16+00:00"
},
{
"name": "laravel/tinker",
@ -3755,28 +3754,27 @@
},
{
"name": "league/omnipay",
"version": "dev-master",
"version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/omnipay.git",
"reference": "e9439db0633ba988e6f6cdd029fad38aad73f9f6"
"reference": "1ba7c8a3312cf2342458b99c9e5b86eaae44aed2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/omnipay/zipball/e9439db0633ba988e6f6cdd029fad38aad73f9f6",
"reference": "e9439db0633ba988e6f6cdd029fad38aad73f9f6",
"url": "https://api.github.com/repos/thephpleague/omnipay/zipball/1ba7c8a3312cf2342458b99c9e5b86eaae44aed2",
"reference": "1ba7c8a3312cf2342458b99c9e5b86eaae44aed2",
"shasum": ""
},
"require": {
"omnipay/common": "^3",
"php": "^7.2|^8.0",
"php": "^7.2",
"php-http/discovery": "^1.12",
"php-http/guzzle7-adapter": "^0.1"
},
"require-dev": {
"omnipay/tests": "^3"
},
"default-branch": true,
"type": "metapackage",
"extra": {
"branch-alias": {
@ -3807,9 +3805,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/omnipay/issues",
"source": "https://github.com/thephpleague/omnipay/tree/master"
"source": "https://github.com/thephpleague/omnipay/tree/v3.1.0"
},
"time": "2021-03-12T09:17:59+00:00"
"time": "2020-09-22T14:02:17+00:00"
},
{
"name": "livewire/livewire",
@ -4560,21 +4558,21 @@
},
{
"name": "omnipay/common",
"version": "dev-master",
"version": "v3.0.5",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/omnipay-common.git",
"reference": "e1ebc22615f14219d31cefdf62d7036feb228b1c"
"reference": "0d1f4486c1c873537ac030d37c7ce2986c4de1d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/e1ebc22615f14219d31cefdf62d7036feb228b1c",
"reference": "e1ebc22615f14219d31cefdf62d7036feb228b1c",
"url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/0d1f4486c1c873537ac030d37c7ce2986c4de1d2",
"reference": "0d1f4486c1c873537ac030d37c7ce2986c4de1d2",
"shasum": ""
},
"require": {
"moneyphp/money": "^3.1",
"php": "^5.6|^7|^8",
"php": "^5.6|^7",
"php-http/client-implementation": "^1",
"php-http/discovery": "^1.2.1",
"php-http/message": "^1.5",
@ -4589,7 +4587,6 @@
"suggest": {
"league/omnipay": "The default Omnipay package provides a default HTTP Adapter."
},
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@ -4641,9 +4638,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/omnipay-common/issues",
"source": "https://github.com/thephpleague/omnipay-common/tree/master"
"source": "https://github.com/thephpleague/omnipay-common/tree/v3.0.5"
},
"time": "2020-12-13T12:53:48+00:00"
"time": "2020-08-20T18:22:12+00:00"
},
{
"name": "omnipay/paypal",
@ -5415,16 +5412,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.6",
"version": "3.0.7",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "906a5fafabe5e6ba51ef3dc65b2722a677908837"
"reference": "d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/906a5fafabe5e6ba51ef3dc65b2722a677908837",
"reference": "906a5fafabe5e6ba51ef3dc65b2722a677908837",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d",
"reference": "d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d",
"shasum": ""
},
"require": {
@ -5506,7 +5503,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.6"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.7"
},
"funding": [
{
@ -5522,7 +5519,7 @@
"type": "tidelift"
}
],
"time": "2021-03-10T13:58:31+00:00"
"time": "2021-04-06T14:00:11+00:00"
},
{
"name": "pragmarx/google2fa",
@ -6683,16 +6680,16 @@
},
{
"name": "sentry/sentry",
"version": "3.2.0",
"version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "899b0de58c1e01feb54829b3094af74252aff385"
"reference": "fb4f83e6e2d718d1e5fbfe3a20cced83f47f040f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/899b0de58c1e01feb54829b3094af74252aff385",
"reference": "899b0de58c1e01feb54829b3094af74252aff385",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/fb4f83e6e2d718d1e5fbfe3a20cced83f47f040f",
"reference": "fb4f83e6e2d718d1e5fbfe3a20cced83f47f040f",
"shasum": ""
},
"require": {
@ -6771,7 +6768,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
"source": "https://github.com/getsentry/sentry-php/tree/3.2.0"
"source": "https://github.com/getsentry/sentry-php/tree/3.2.1"
},
"funding": [
{
@ -6783,7 +6780,7 @@
"type": "custom"
}
],
"time": "2021-03-03T11:54:34+00:00"
"time": "2021-04-06T07:55:41+00:00"
},
{
"name": "sentry/sentry-laravel",
@ -9620,16 +9617,16 @@
},
{
"name": "turbo124/beacon",
"version": "1.0.7",
"version": "1.0.8",
"source": {
"type": "git",
"url": "https://github.com/turbo124/beacon.git",
"reference": "d48227fdfafc463cce055f36b149f9cb1d9b8f81"
"reference": "22bc2c134efefd0f3c6c44b0c618cd4fa87b46d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/turbo124/beacon/zipball/d48227fdfafc463cce055f36b149f9cb1d9b8f81",
"reference": "d48227fdfafc463cce055f36b149f9cb1d9b8f81",
"url": "https://api.github.com/repos/turbo124/beacon/zipball/22bc2c134efefd0f3c6c44b0c618cd4fa87b46d1",
"reference": "22bc2c134efefd0f3c6c44b0c618cd4fa87b46d1",
"shasum": ""
},
"require": {
@ -9677,9 +9674,9 @@
"turbo124"
],
"support": {
"source": "https://github.com/turbo124/beacon/tree/1.0.7"
"source": "https://github.com/turbo124/beacon/tree/1.0.8"
},
"time": "2021-03-23T09:54:29+00:00"
"time": "2021-04-07T08:16:59+00:00"
},
{
"name": "turbo124/laravel-gmail",
@ -10367,16 +10364,16 @@
},
{
"name": "barryvdh/laravel-debugbar",
"version": "v3.5.2",
"version": "v3.5.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
"reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b"
"reference": "b8af309dea71eab3f2c942652969f518130228ee"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/cae0a8d1cb89b0f0522f65e60465e16d738e069b",
"reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b",
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/b8af309dea71eab3f2c942652969f518130228ee",
"reference": "b8af309dea71eab3f2c942652969f518130228ee",
"shasum": ""
},
"require": {
@ -10436,7 +10433,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.2"
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.4"
},
"funding": [
{
@ -10444,7 +10441,7 @@
"type": "github"
}
],
"time": "2021-01-06T14:21:44+00:00"
"time": "2021-04-06T18:11:42+00:00"
},
{
"name": "brianium/paratest",
@ -11186,16 +11183,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v2.18.4",
"version": "v2.18.5",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
"reference": "06f764e3cb6d60822d8f5135205f9d32b5508a31"
"reference": "e0f6d05c8b157f50029ca6c65c19ed2694f475bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/06f764e3cb6d60822d8f5135205f9d32b5508a31",
"reference": "06f764e3cb6d60822d8f5135205f9d32b5508a31",
"url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/e0f6d05c8b157f50029ca6c65c19ed2694f475bf",
"reference": "e0f6d05c8b157f50029ca6c65c19ed2694f475bf",
"shasum": ""
},
"require": {
@ -11278,7 +11275,7 @@
"description": "A tool to automatically fix PHP code style",
"support": {
"issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
"source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.18.4"
"source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.18.5"
},
"funding": [
{
@ -11286,7 +11283,7 @@
"type": "github"
}
],
"time": "2021-03-20T14:52:33+00:00"
"time": "2021-04-06T18:37:33+00:00"
},
{
"name": "hamcrest/hamcrest-php",

View File

@ -14,7 +14,7 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', ''),
'app_version' => '5.1.37',
'app_version' => '5.1.38',
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', false),

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLicensesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('licenses', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
$table->string('first_name')->nullable();
$table->string('last_name')->nullable();
$table->string('email')->nullable();
$table->string('license_key')->unique()->nullable();
$table->boolean('is_claimed')->nullable();
$table->string('transaction_reference')->nullable();
$table->unsignedInteger('product_id')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('licenses');
}
}