diff --git a/app/Abstracts/BulkAction.php b/app/Abstracts/BulkAction.php index c89c91264..2cdaeb72e 100644 --- a/app/Abstracts/BulkAction.php +++ b/app/Abstracts/BulkAction.php @@ -123,8 +123,6 @@ abstract class BulkAction foreach ($items as $item) { $item->delete(); } - - Artisan::call('cache:clear'); } public function disableContacts($request) diff --git a/app/Abstracts/DocumentModel.php b/app/Abstracts/DocumentModel.php index 3fe0a2d78..2bb94e137 100644 --- a/app/Abstracts/DocumentModel.php +++ b/app/Abstracts/DocumentModel.php @@ -65,10 +65,10 @@ abstract class DocumentModel extends Model { $percent = 0; - $discount = $this->totals()->where('code', 'discount')->value('amount'); + $discount = $this->totals->where('code', 'discount')->pluck('amount')->first(); if ($discount) { - $sub_total = $this->totals()->where('code', 'sub_total')->value('amount'); + $sub_total = $this->totals->where('code', 'sub_total')->pluck('amount')->first(); $percent = number_format((($discount * 100) / $sub_total), 0); } @@ -171,7 +171,7 @@ abstract class DocumentModel extends Model { $amount = $this->amount; - $this->totals()->where('code', 'tax')->each(function ($tax) use(&$amount) { + $this->totals->where('code', 'tax')->each(function ($tax) use(&$amount) { $amount -= $tax->amount; }); diff --git a/app/Abstracts/Export.php b/app/Abstracts/Export.php index 9b640281a..bbd434f7f 100644 --- a/app/Abstracts/Export.php +++ b/app/Abstracts/Export.php @@ -35,6 +35,8 @@ abstract class Export implements FromCollection, ShouldAutoSize, WithHeadings, W $date_fields = ['paid_at', 'invoiced_at', 'billed_at', 'due_at', 'issued_at', 'created_at']; + $evil_chars = ['=', '+', '-', '@']; + foreach ($this->fields() as $field) { $value = $model->$field; @@ -42,6 +44,11 @@ abstract class Export implements FromCollection, ShouldAutoSize, WithHeadings, W $value = Date::parse($value)->format('Y-m-d'); } + // Prevent CSV injection https://security.stackexchange.com/a/190848 + if (Str::startsWith($value, $evil_chars)) { + $value = "'" . $value; + } + $map[] = $value; } diff --git a/app/Abstracts/Model.php b/app/Abstracts/Model.php index 1f1779c5c..951a5963f 100644 --- a/app/Abstracts/Model.php +++ b/app/Abstracts/Model.php @@ -3,6 +3,7 @@ namespace App\Abstracts; use App\Scopes\Company; +use App\Traits\Tenants; use GeneaLabs\LaravelModelCaching\Traits\Cachable; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletes; @@ -11,7 +12,9 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; abstract class Model extends Eloquent { - use Cachable, SearchString, SoftDeletes, Sortable; + use Cachable, SearchString, SoftDeletes, Sortable, Tenants; + + protected $tenantable = true; protected $dates = ['deleted_at']; diff --git a/app/Abstracts/Report.php b/app/Abstracts/Report.php index 9b16044a3..b98450aef 100644 --- a/app/Abstracts/Report.php +++ b/app/Abstracts/Report.php @@ -47,11 +47,6 @@ abstract class Report public $loaded = false; - public $indents = [ - 'table_header' => '0px', - 'table_rows' => '24px', - ]; - public $chart = [ 'line' => [ 'width' => '0', @@ -329,7 +324,7 @@ abstract class Report event(new RowsShowing($this)); } - public function setTotals($items, $date_field, $check_type = false, $table = 'default') + public function setTotals($items, $date_field, $check_type = false, $table = 'default', $with_tax = true) { foreach ($items as $item) { // Make groups extensible @@ -347,7 +342,7 @@ abstract class Report continue; } - $amount = $item->getAmountConvertedToDefault(); + $amount = $item->getAmountConvertedToDefault(false, $with_tax); $type = (($item instanceof Invoice) || (($item instanceof Transaction) && ($item->type == 'income'))) ? 'income' : 'expense'; diff --git a/app/Console/Commands/FinishUpdate.php b/app/Console/Commands/FinishUpdate.php index 8d3b32f06..86e810157 100644 --- a/app/Console/Commands/FinishUpdate.php +++ b/app/Console/Commands/FinishUpdate.php @@ -43,6 +43,8 @@ class FinishUpdate extends Command // Check if file mirror was successful $version = ($alias == 'core') ? version('short') : module($alias)->get('version'); if ($version != $new) { + logger($alias . ' update failed:: file version > ' . $version . ' -vs- ' . 'request version > ' . $new); + throw new \Exception(trans('modules.errors.finish', ['module' => $alias])); } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 23f1ab7a0..6a4c03cbf 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -23,11 +23,11 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { // Not installed yet - if (!env('APP_INSTALLED')) { + if (!config('app.installed')) { return; } - $schedule_time = env('APP_SCHEDULE_TIME', '09:00'); + $schedule_time = config('app.schedule_time'); $schedule->command('reminder:invoice')->dailyAt($schedule_time); $schedule->command('reminder:bill')->dailyAt($schedule_time); diff --git a/app/Console/Stubs/Modules/composer.stub b/app/Console/Stubs/Modules/composer.stub index 4178306e0..f4fc9f271 100644 --- a/app/Console/Stubs/Modules/composer.stub +++ b/app/Console/Stubs/Modules/composer.stub @@ -1,25 +1,16 @@ { - "name": "$VENDOR$/$LOWER_NAME$", - "description": "", - "authors": [ - { - "name": "$AUTHOR_NAME$", - "email": "$AUTHOR_EMAIL$" - } - ], - "autoload": { - "psr-4": { - "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\": "" - } + "require": { + }, - "extra": { - "laravel": { - "providers": [ - "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Main" - ], - "aliases": { - - } - } + "replace": { + "guzzlehttp/guzzle": "*", + "guzzlehttp/psr7": "*", + "laravel/framework": "*", + "symfony/http-foundation": "*" + }, + "scripts": { + "test": [ + "composer install --prefer-dist --no-interaction --no-scripts --no-suggest --no-progress --no-ansi" + ] } } diff --git a/app/Console/Stubs/Modules/listeners/install.stub b/app/Console/Stubs/Modules/listeners/install.stub index a7276dd59..a762c4e8f 100644 --- a/app/Console/Stubs/Modules/listeners/install.stub +++ b/app/Console/Stubs/Modules/listeners/install.stub @@ -5,7 +5,7 @@ namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners; use App\Events\Module\Installed as Event; use App\Traits\Permissions; -class InstallModule +class FinishInstallation { use Permissions; diff --git a/app/Console/Stubs/Modules/providers/event.stub b/app/Console/Stubs/Modules/providers/event.stub index 351f46e75..90a59814f 100644 --- a/app/Console/Stubs/Modules/providers/event.stub +++ b/app/Console/Stubs/Modules/providers/event.stub @@ -3,7 +3,7 @@ namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider; -use $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners\InstallModule; +use $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners\FinishInstallation; class Event extends Provider { @@ -14,7 +14,7 @@ class Event extends Provider */ protected $listen = [ \App\Events\Module\Installed::class => [ - InstallModule::class, + FinishInstallation::class, ], ]; } diff --git a/app/Events/Common/GlobalSearched.php b/app/Events/Common/GlobalSearched.php new file mode 100644 index 000000000..11134ce81 --- /dev/null +++ b/app/Events/Common/GlobalSearched.php @@ -0,0 +1,22 @@ +search = $search; + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index e24768d9f..4092f98d8 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -54,7 +54,7 @@ class Handler extends ExceptionHandler */ public function render($request, Throwable $exception) { - if (env('APP_DEBUG') === false) { + if (config('app.debug') === false) { return $this->handleExceptions($request, $exception); } diff --git a/app/Exports/Banking/Transactions.php b/app/Exports/Banking/Transactions.php index 5a90bcaba..33eefcda2 100644 --- a/app/Exports/Banking/Transactions.php +++ b/app/Exports/Banking/Transactions.php @@ -9,7 +9,7 @@ class Transactions extends Export { public function collection() { - $model = Model::with(['account', 'bill', 'category', 'contact', 'invoice'])->usingSearchString(request('search')); + $model = Model::with('account', 'bill', 'category', 'contact', 'invoice')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Common/Items.php b/app/Exports/Common/Items.php index a42d103e4..24ed3a51c 100644 --- a/app/Exports/Common/Items.php +++ b/app/Exports/Common/Items.php @@ -9,7 +9,7 @@ class Items extends Export { public function collection() { - $model = Model::with(['category', 'tax'])->usingSearchString(request('search')); + $model = Model::with('category', 'tax')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Purchases/Payments.php b/app/Exports/Purchases/Payments.php index 4a903ad17..8f4384421 100644 --- a/app/Exports/Purchases/Payments.php +++ b/app/Exports/Purchases/Payments.php @@ -9,7 +9,7 @@ class Payments extends Export { public function collection() { - $model = Model::with(['account', 'bill', 'category', 'contact'])->type('expense')->usingSearchString(request('search')); + $model = Model::with('account', 'bill', 'category', 'contact')->expense()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillHistories.php b/app/Exports/Purchases/Sheets/BillHistories.php index ce8f3f849..6cf0e2a15 100644 --- a/app/Exports/Purchases/Sheets/BillHistories.php +++ b/app/Exports/Purchases/Sheets/BillHistories.php @@ -9,7 +9,7 @@ class BillHistories extends Export { public function collection() { - $model = Model::with(['bill'])->usingSearchString(request('search')); + $model = Model::with('bill')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('bill_id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillItemTaxes.php b/app/Exports/Purchases/Sheets/BillItemTaxes.php index 8c28a1606..33f1f483d 100644 --- a/app/Exports/Purchases/Sheets/BillItemTaxes.php +++ b/app/Exports/Purchases/Sheets/BillItemTaxes.php @@ -9,7 +9,7 @@ class BillItemTaxes extends Export { public function collection() { - $model = Model::with(['bill', 'item', 'tax'])->usingSearchString(request('search')); + $model = Model::with('bill', 'item', 'tax')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('bill_id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillItems.php b/app/Exports/Purchases/Sheets/BillItems.php index d03370d80..232a18c92 100644 --- a/app/Exports/Purchases/Sheets/BillItems.php +++ b/app/Exports/Purchases/Sheets/BillItems.php @@ -9,7 +9,7 @@ class BillItems extends Export { public function collection() { - $model = Model::with(['bill', 'item'])->usingSearchString(request('search')); + $model = Model::with('bill', 'item')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('bill_id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillTotals.php b/app/Exports/Purchases/Sheets/BillTotals.php index b172a7b73..0dbbba030 100644 --- a/app/Exports/Purchases/Sheets/BillTotals.php +++ b/app/Exports/Purchases/Sheets/BillTotals.php @@ -9,7 +9,7 @@ class BillTotals extends Export { public function collection() { - $model = Model::with(['bill'])->usingSearchString(request('search')); + $model = Model::with('bill')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('bill_id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillTransactions.php b/app/Exports/Purchases/Sheets/BillTransactions.php index be3eb613e..148bcec8c 100644 --- a/app/Exports/Purchases/Sheets/BillTransactions.php +++ b/app/Exports/Purchases/Sheets/BillTransactions.php @@ -9,7 +9,7 @@ class BillTransactions extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'bill'])->type('expense')->isDocument()->usingSearchString(request('search')); + $model = Model::with('account', 'category', 'contact', 'bill')->expense()->isDocument()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('document_id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/Bills.php b/app/Exports/Purchases/Sheets/Bills.php index 6d911fef3..670c9e2d3 100644 --- a/app/Exports/Purchases/Sheets/Bills.php +++ b/app/Exports/Purchases/Sheets/Bills.php @@ -9,7 +9,7 @@ class Bills extends Export { public function collection() { - $model = Model::with(['category'])->usingSearchString(request('search')); + $model = Model::with('category')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Sales/Revenues.php b/app/Exports/Sales/Revenues.php index 47f9f384f..f03d7c8f5 100644 --- a/app/Exports/Sales/Revenues.php +++ b/app/Exports/Sales/Revenues.php @@ -9,7 +9,7 @@ class Revenues extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'invoice'])->type('income')->usingSearchString(request('search')); + $model = Model::with('account', 'category', 'contact', 'invoice')->income()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceHistories.php b/app/Exports/Sales/Sheets/InvoiceHistories.php index 47c6186d5..97c3df9f8 100644 --- a/app/Exports/Sales/Sheets/InvoiceHistories.php +++ b/app/Exports/Sales/Sheets/InvoiceHistories.php @@ -9,7 +9,7 @@ class InvoiceHistories extends Export { public function collection() { - $model = Model::with(['invoice'])->usingSearchString(request('search')); + $model = Model::with('invoice')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('invoice_id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceItemTaxes.php b/app/Exports/Sales/Sheets/InvoiceItemTaxes.php index 99aac016d..04915afcb 100644 --- a/app/Exports/Sales/Sheets/InvoiceItemTaxes.php +++ b/app/Exports/Sales/Sheets/InvoiceItemTaxes.php @@ -9,7 +9,7 @@ class InvoiceItemTaxes extends Export { public function collection() { - $model = Model::with(['invoice', 'item', 'tax'])->usingSearchString(request('search')); + $model = Model::with('invoice', 'item', 'tax')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('invoice_id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceItems.php b/app/Exports/Sales/Sheets/InvoiceItems.php index 1379c704b..233272014 100644 --- a/app/Exports/Sales/Sheets/InvoiceItems.php +++ b/app/Exports/Sales/Sheets/InvoiceItems.php @@ -9,7 +9,7 @@ class InvoiceItems extends Export { public function collection() { - $model = Model::with(['invoice', 'item'])->usingSearchString(request('search')); + $model = Model::with('invoice', 'item')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('invoice_id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceTotals.php b/app/Exports/Sales/Sheets/InvoiceTotals.php index c640b144a..3ca816580 100644 --- a/app/Exports/Sales/Sheets/InvoiceTotals.php +++ b/app/Exports/Sales/Sheets/InvoiceTotals.php @@ -9,7 +9,7 @@ class InvoiceTotals extends Export { public function collection() { - $model = Model::with(['invoice'])->usingSearchString(request('search')); + $model = Model::with('invoice')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('invoice_id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceTransactions.php b/app/Exports/Sales/Sheets/InvoiceTransactions.php index cdb3ab71c..70116248f 100644 --- a/app/Exports/Sales/Sheets/InvoiceTransactions.php +++ b/app/Exports/Sales/Sheets/InvoiceTransactions.php @@ -9,7 +9,7 @@ class InvoiceTransactions extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'invoice'])->type('income')->isDocument()->usingSearchString(request('search')); + $model = Model::with('account', 'category', 'contact', 'invoice')->income()->isDocument()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('document_id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/Invoices.php b/app/Exports/Sales/Sheets/Invoices.php index 20ad0c4d3..4e006731e 100644 --- a/app/Exports/Sales/Sheets/Invoices.php +++ b/app/Exports/Sales/Sheets/Invoices.php @@ -9,7 +9,7 @@ class Invoices extends Export { public function collection() { - $model = Model::with(['category'])->usingSearchString(request('search')); + $model = Model::with('category')->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Http/Controllers/Api/Auth/Users.php b/app/Http/Controllers/Api/Auth/Users.php index e384fec8b..47b31b75f 100644 --- a/app/Http/Controllers/Api/Auth/Users.php +++ b/app/Http/Controllers/Api/Auth/Users.php @@ -19,7 +19,7 @@ class Users extends ApiController */ public function index() { - $users = User::with(['companies', 'roles', 'permissions'])->collect(); + $users = User::with('companies', 'permissions', 'roles')->collect(); return $this->response->paginator($users, new Transformer()); } @@ -34,9 +34,9 @@ class Users extends ApiController { // Check if we're querying by id or email if (is_numeric($id)) { - $user = User::with(['companies', 'roles', 'permissions'])->find($id); + $user = User::with('companies', 'permissions', 'roles')->find($id); } else { - $user = User::with(['companies', 'roles', 'permissions'])->where('email', $id)->first(); + $user = User::with('companies', 'permissions', 'roles')->where('email', $id)->first(); } return $this->response->item($user, new Transformer()); diff --git a/app/Http/Controllers/Api/Banking/Reconciliations.php b/app/Http/Controllers/Api/Banking/Reconciliations.php index 51a5fb517..56a5e91f2 100644 --- a/app/Http/Controllers/Api/Banking/Reconciliations.php +++ b/app/Http/Controllers/Api/Banking/Reconciliations.php @@ -19,7 +19,7 @@ class Reconciliations extends ApiController */ public function index() { - $items = Reconciliation::with(['account'])->collect(); + $items = Reconciliation::with('account')->collect(); return $this->response->paginator($items, new Transformer()); } diff --git a/app/Http/Controllers/Api/Banking/Transactions.php b/app/Http/Controllers/Api/Banking/Transactions.php index 6b4d0321e..61dcbbe54 100644 --- a/app/Http/Controllers/Api/Banking/Transactions.php +++ b/app/Http/Controllers/Api/Banking/Transactions.php @@ -19,7 +19,7 @@ class Transactions extends ApiController */ public function index() { - $transactions = Transaction::with(['account', 'category', 'contact'])->collect(['paid_at'=> 'desc']); + $transactions = Transaction::with('account', 'category', 'contact')->collect(['paid_at'=> 'desc']); return $this->response->paginator($transactions, new Transformer()); } diff --git a/app/Http/Controllers/Api/Banking/Transfers.php b/app/Http/Controllers/Api/Banking/Transfers.php index bed2f4bd3..959c94c93 100644 --- a/app/Http/Controllers/Api/Banking/Transfers.php +++ b/app/Http/Controllers/Api/Banking/Transfers.php @@ -19,9 +19,9 @@ class Transfers extends ApiController */ public function index() { - $transfers = Transfer::with([ + $transfers = Transfer::with( 'expense_transaction', 'expense_transaction.account', 'income_transaction', 'income_transaction.account' - ])->collect('expense_transaction.paid_at'); + )->collect('expense_transaction.paid_at'); $special_key = [ 'expense_transaction.name' => 'from_account', diff --git a/app/Http/Controllers/Api/Common/Items.php b/app/Http/Controllers/Api/Common/Items.php index f2fefeadd..60f4f89b1 100644 --- a/app/Http/Controllers/Api/Common/Items.php +++ b/app/Http/Controllers/Api/Common/Items.php @@ -22,7 +22,7 @@ class Items extends ApiController */ public function index() { - $items = Item::with(['category', 'tax'])->collect(); + $items = Item::with('category', 'tax')->collect(); return $this->response->paginator($items, new Transformer()); } @@ -35,7 +35,7 @@ class Items extends ApiController */ public function show($id) { - $item = Item::with(['category', 'tax'])->find($id); + $item = Item::with('category', 'tax')->find($id); return $this->response->item($item, new Transformer()); } diff --git a/app/Http/Controllers/Api/Purchases/Bills.php b/app/Http/Controllers/Api/Purchases/Bills.php index 1cdb98c9d..3eb4b5aa1 100644 --- a/app/Http/Controllers/Api/Purchases/Bills.php +++ b/app/Http/Controllers/Api/Purchases/Bills.php @@ -19,7 +19,7 @@ class Bills extends ApiController */ public function index() { - $bills = Bill::with(['contact', 'items', 'transactions', 'histories'])->collect(['billed_at'=> 'desc']); + $bills = Bill::with('contact', 'histories', 'items', 'transactions')->collect(['billed_at'=> 'desc']); return $this->response->paginator($bills, new Transformer()); } diff --git a/app/Http/Controllers/Api/Sales/Invoices.php b/app/Http/Controllers/Api/Sales/Invoices.php index 1c46d4b44..3da1d3329 100644 --- a/app/Http/Controllers/Api/Sales/Invoices.php +++ b/app/Http/Controllers/Api/Sales/Invoices.php @@ -19,7 +19,7 @@ class Invoices extends ApiController */ public function index() { - $invoices = Invoice::with(['contact', 'items', 'transactions', 'histories'])->collect(['invoiced_at'=> 'desc']); + $invoices = Invoice::with('contact', 'histories', 'items', 'transactions')->collect(['invoiced_at'=> 'desc']); return $this->response->paginator($invoices, new Transformer()); } diff --git a/app/Http/Controllers/Auth/Login.php b/app/Http/Controllers/Auth/Login.php index dde57b182..d9a188986 100644 --- a/app/Http/Controllers/Auth/Login.php +++ b/app/Http/Controllers/Auth/Login.php @@ -115,7 +115,7 @@ class Login extends Controller auth()->logout(); // Session destroy is required if stored in database - if (env('SESSION_DRIVER') == 'database') { + if (config('session.driver') == 'database') { $request = app('Illuminate\Http\Request'); $request->session()->getHandler()->destroy($request->session()->getId()); } diff --git a/app/Http/Controllers/Auth/Users.php b/app/Http/Controllers/Auth/Users.php index 0c16e6941..f68cb3603 100644 --- a/app/Http/Controllers/Auth/Users.php +++ b/app/Http/Controllers/Auth/Users.php @@ -23,7 +23,7 @@ class Users extends Controller */ public function index() { - $users = User::with('roles')->collect(); + $users = User::with('media', 'roles')->collect(); return view('auth.users.index', compact('users')); } diff --git a/app/Http/Controllers/Banking/Reconciliations.php b/app/Http/Controllers/Banking/Reconciliations.php index 1309127f0..81f0f8229 100644 --- a/app/Http/Controllers/Banking/Reconciliations.php +++ b/app/Http/Controllers/Banking/Reconciliations.php @@ -11,6 +11,7 @@ use App\Jobs\Banking\UpdateReconciliation; use App\Models\Banking\Account; use App\Models\Banking\Reconciliation; use App\Models\Banking\Transaction; +use Date; class Reconciliations extends Controller { @@ -48,8 +49,8 @@ class Reconciliations extends Controller $accounts = Account::enabled()->pluck('name', 'id'); $account_id = request('account_id', setting('default.account')); - $started_at = request('started_at', '0000-00-00'); - $ended_at = request('ended_at', '0000-00-00'); + $started_at = request('started_at', Date::now()->firstOfMonth()->toDateString()); + $ended_at = request('ended_at', Date::now()->endOfMonth()->toDateString()); $account = Account::find($account_id); diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php index fe23cae88..7cfeded9c 100644 --- a/app/Http/Controllers/Banking/Transactions.php +++ b/app/Http/Controllers/Banking/Transactions.php @@ -28,7 +28,7 @@ class Transactions extends Controller $request_type = !request()->has('type') ? ['income', 'expense'] : request('type'); $categories = Category::enabled()->type($request_type)->orderBy('name')->pluck('name', 'id'); - $transactions = Transaction::with(['account', 'category', 'contact'])->collect(['paid_at'=> 'desc']); + $transactions = Transaction::with('account', 'category', 'contact')->collect(['paid_at'=> 'desc']); return view('banking.transactions.index', compact('transactions', 'accounts', 'types', 'categories')); } diff --git a/app/Http/Controllers/Banking/Transfers.php b/app/Http/Controllers/Banking/Transfers.php index ed92b5201..58cc85b32 100644 --- a/app/Http/Controllers/Banking/Transfers.php +++ b/app/Http/Controllers/Banking/Transfers.php @@ -24,9 +24,9 @@ class Transfers extends Controller { $data = []; - $items = Transfer::with([ + $items = Transfer::with( 'expense_transaction', 'expense_transaction.account', 'income_transaction', 'income_transaction.account' - ])->collect(['expense_transaction.paid_at' => 'desc']); + )->collect(['expense_transaction.paid_at' => 'desc']); foreach ($items as $item) { $income_transaction = $item->income_transaction; diff --git a/app/Http/Controllers/Common/Dashboards.php b/app/Http/Controllers/Common/Dashboards.php index 9e35852ba..c3f245197 100644 --- a/app/Http/Controllers/Common/Dashboards.php +++ b/app/Http/Controllers/Common/Dashboards.php @@ -47,38 +47,33 @@ class Dashboards extends Controller * * @return Response */ - public function show(Dashboard $dashboard) + public function show($dashboard_id = null) { - $dashboard_id = session('dashboard_id', 0); + $dashboard_id = $dashboard_id ?? session('dashboard_id'); - if ($dashboard) { - $dashboard_id = $dashboard->id; + if (empty($dashboard_id)) { + $dashboard_id = user()->dashboards()->enabled()->pluck('id')->first(); } - // Change Dashboard - if (request()->get('dashboard_id', 0)) { - $dashboard_id = request()->get('dashboard_id'); - - session(['dashboard_id' => $dashboard_id]); + if (!empty($dashboard_id)) { + $dashboard = Dashboard::find($dashboard_id); } - $dashboards = user()->dashboards()->enabled()->get(); - - if (!$dashboard_id) { - $dashboard_id = $dashboards->pluck('id')->first(); + if (empty($dashboard)) { + $dashboard = $this->dispatch(new CreateDashboard([ + 'company_id' => session('company_id'), + 'name' => trans_choice('general.dashboards', 1), + 'with_widgets' => true, + ])); } - // Dashboard - $dashboard = Dashboard::find($dashboard_id); - - // Widgets $widgets = Widget::where('dashboard_id', $dashboard->id)->orderBy('sort', 'asc')->get()->filter(function ($widget) { return Widgets::canRead($widget->class); }); $financial_start = $this->getFinancialStart()->format('Y-m-d'); - return view('common.dashboards.show', compact('dashboards', 'dashboard', 'widgets', 'financial_start')); + return view('common.dashboards.show', compact('dashboard', 'widgets', 'financial_start')); } /** diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index 30f5312fd..36a47306a 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -28,7 +28,7 @@ class Items extends Controller */ public function index() { - $items = Item::with(['category', 'tax'])->collect(); + $items = Item::with('category', 'media')->collect(); return view('common.items.index', compact('items')); } @@ -50,7 +50,7 @@ class Items extends Controller */ public function create() { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); @@ -131,7 +131,7 @@ class Items extends Controller */ public function edit(Item $item) { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Http/Controllers/Common/Search.php b/app/Http/Controllers/Common/Search.php index 21fb486a5..4e514aa48 100644 --- a/app/Http/Controllers/Common/Search.php +++ b/app/Http/Controllers/Common/Search.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Common; use App\Abstracts\Http\Controller; +use App\Events\Common\GlobalSearched; use App\Models\Banking\Account; use App\Models\Banking\Transaction; use App\Models\Common\Contact; @@ -19,53 +20,53 @@ class Search extends Controller */ public function index() { - $results = array(); + $search = new \stdClass(); + $search->results = []; + $search->keyword = request('keyword'); - $keyword = request('keyword'); - - $accounts = Account::enabled()->usingSearchString($keyword)->get(); + $accounts = Account::enabled()->usingSearchString($search->keyword)->get(); if ($accounts->count()) { foreach ($accounts as $account) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $account->id, 'name' => $account->name, 'type' => trans_choice('general.accounts', 1), 'color' => '#55588b', - 'href' => url('banking/accounts/' . $account->id . '/edit'), + 'href' => route('accounts.edit', $account->id), ]; } } - $items = Item::enabled()->usingSearchString($keyword)->get(); + $items = Item::enabled()->usingSearchString($search->keyword)->get(); if ($items->count()) { foreach ($items as $item) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $item->id, 'name' => $item->name, 'type' => trans_choice('general.items', 1), 'color' => '#efad32', - 'href' => url('common/items/' . $item->id . '/edit'), + 'href' => route('items.edit', $item->id), ]; } } - $invoices = Invoice::usingSearchString($keyword)->get(); + $invoices = Invoice::usingSearchString($search->keyword)->get(); if ($invoices->count()) { foreach ($invoices as $invoice) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $invoice->id, 'name' => $invoice->invoice_number . ' - ' . $invoice->contact_name, 'type' => trans_choice('general.invoices', 1), 'color' => '#6da252', - 'href' => url('sales/invoices/' . $invoice->id), + 'href' => route('invoices.show', $invoice->id), ]; } }/* - $income_transactions = Transaction::type('income')->usingSearchString($keyword)->get(); + $income_transactions = Transaction::income()->usingSearchString($keyword)->get(); if ($income_transactions->count()) { foreach ($income_transactions as $transaction) { @@ -79,35 +80,35 @@ class Search extends Controller } }*/ - $customers = Contact::customer()->enabled()->usingSearchString($keyword)->get(); + $customers = Contact::customer()->enabled()->usingSearchString($search->keyword)->get(); if ($customers->count()) { foreach ($customers as $customer) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $customer->id, 'name' => $customer->name, 'type' => trans_choice('general.customers', 1), 'color' => '#328aef', - 'href' => url('sales/customers/' . $customer->id), + 'href' => route('customers.show', $customer->id), ]; } } - $bills = Bill::usingSearchString($keyword)->get(); + $bills = Bill::usingSearchString($search->keyword)->get(); if ($bills->count()) { foreach ($bills as $bill) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $bill->id, 'name' => $bill->bill_number . ' - ' . $bill->contact_name, 'type' => trans_choice('general.bills', 1), 'color' => '#ef3232', - 'href' => url('purchases/bills/' . $bill->id), + 'href' => route('bills.show', $bill->id), ]; } } /* - $payments = Transaction::type('expense')->usingSearchString($keyword)->get(); + $payments = Transaction::expense()->usingSearchString($keyword)->get(); if ($revenues->count()) { foreach ($revenues as $revenue) { @@ -121,20 +122,22 @@ class Search extends Controller } }*/ - $vendors = Contact::vendor()->enabled()->usingSearchString($keyword)->get(); + $vendors = Contact::vendor()->enabled()->usingSearchString($search->keyword)->get(); if ($vendors->count()) { foreach ($vendors as $vendor) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $vendor->id, 'name' => $vendor->name, 'type' => trans_choice('general.vendors', 1), 'color' => '#efef32', - 'href' => url('purchases/vendors/' . $vendor->id), + 'href' => route('vendors.show', $vendor->id), ]; } } - return response()->json((object) $results); + event(new GlobalSearched($search)); + + return response()->json((object) $search->results); } } diff --git a/app/Http/Controllers/Install/Database.php b/app/Http/Controllers/Install/Database.php index fb15816fa..aa5ecff3a 100644 --- a/app/Http/Controllers/Install/Database.php +++ b/app/Http/Controllers/Install/Database.php @@ -27,8 +27,10 @@ class Database extends Controller */ public function store(Request $request) { + $connection = config('database.default','mysql'); + $host = $request['hostname']; - $port = env('DB_PORT', '3306'); + $port = config("database.connections.$connection.port", '3306'); $database = $request['database']; $username = $request['username']; $password = $request['password']; diff --git a/app/Http/Controllers/Modals/Items.php b/app/Http/Controllers/Modals/Items.php index 8eb73ca7c..176d8a743 100644 --- a/app/Http/Controllers/Modals/Items.php +++ b/app/Http/Controllers/Modals/Items.php @@ -30,7 +30,7 @@ class Items extends Controller */ public function create(IRequest $request) { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Http/Controllers/Modules/Item.php b/app/Http/Controllers/Modules/Item.php index 4b842ad7e..38c9b6519 100644 --- a/app/Http/Controllers/Modules/Item.php +++ b/app/Http/Controllers/Modules/Item.php @@ -84,19 +84,19 @@ class Item extends Controller // Download $steps[] = [ 'text' => trans('modules.installation.download', ['module' => $name]), - 'url' => url('apps/download') + 'url' => route('apps.download') ]; // Unzip $steps[] = [ 'text' => trans('modules.installation.unzip', ['module' => $name]), - 'url' => url('apps/unzip') + 'url' => route('apps.unzip') ]; // Download $steps[] = [ 'text' => trans('modules.installation.install', ['module' => $name]), - 'url' => url('apps/install') + 'url' => route('apps.install') ]; return response()->json([ @@ -269,11 +269,9 @@ class Item extends Controller public function reviews($alias, Request $request) { - $page = $request['page']; - $data = [ 'query' => [ - 'page' => ($page) ? $page : 1, + 'page' => $request->get('page', 1), ] ]; @@ -284,7 +282,7 @@ class Item extends Controller return response()->json([ 'success' => true, 'error' => false, - 'data' => null, + 'data' => $reviews, 'message' => null, 'html' => $html, ]); diff --git a/app/Http/Controllers/Modules/Tiles.php b/app/Http/Controllers/Modules/Tiles.php index f7601605c..4cca6ac8a 100644 --- a/app/Http/Controllers/Modules/Tiles.php +++ b/app/Http/Controllers/Modules/Tiles.php @@ -146,7 +146,7 @@ class Tiles extends Controller ] ]; - $title = trans('modules.search'); + $title = trans('general.search'); $modules = $this->getSearchModules($data); $installed = Module::all()->pluck('enabled', 'alias')->toArray(); diff --git a/app/Http/Controllers/Portal/Invoices.php b/app/Http/Controllers/Portal/Invoices.php index 24cb48447..b3ea45aeb 100644 --- a/app/Http/Controllers/Portal/Invoices.php +++ b/app/Http/Controllers/Portal/Invoices.php @@ -23,11 +23,11 @@ class Invoices extends Controller */ public function index() { - $invoices = Invoice::with(['contact', 'items', 'payments', 'histories']) + $invoices = Invoice::with('contact', 'histories', 'items', 'payments') ->accrued()->where('contact_id', user()->contact->id) ->collect(['invoice_number'=> 'desc']); - $categories = collect(Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id')); + $categories = collect(Category::income()->enabled()->orderBy('name')->pluck('name', 'id')); $statuses = $this->getInvoiceStatuses(); diff --git a/app/Http/Controllers/Portal/Payments.php b/app/Http/Controllers/Portal/Payments.php index dc1525473..df42e1a55 100644 --- a/app/Http/Controllers/Portal/Payments.php +++ b/app/Http/Controllers/Portal/Payments.php @@ -16,7 +16,7 @@ class Payments extends Controller */ public function index() { - $payments = Transaction::type('income')->where('contact_id', '=', user()->contact->id)->paginate(); + $payments = Transaction::income()->where('contact_id', '=', user()->contact->id)->paginate(); $payment_methods = Modules::getPaymentMethods('all'); diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index 4660f5753..43d1bda0e 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -37,11 +37,11 @@ class Bills extends Controller */ public function index() { - $bills = Bill::with(['contact', 'items', 'histories', 'transactions'])->collect(['billed_at'=> 'desc']); + $bills = Bill::with('contact', 'transactions')->collect(['billed_at'=> 'desc']); $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $statuses = $this->getBillStatuses(); @@ -67,7 +67,7 @@ class Bills extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -106,7 +106,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $number = $this->getNextBillNumber(); @@ -202,7 +202,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); return view('purchases.bills.edit', compact('bill', 'vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Purchases/Payments.php b/app/Http/Controllers/Purchases/Payments.php index cbf50467e..e49d77f85 100644 --- a/app/Http/Controllers/Purchases/Payments.php +++ b/app/Http/Controllers/Purchases/Payments.php @@ -30,11 +30,11 @@ class Payments extends Controller */ public function index() { - $payments = Transaction::type('expense')->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); + $payments = Transaction::with('account', 'bill', 'category', 'contact')->expense()->isNotTransfer()->collect(['paid_at'=> 'desc']); $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); @@ -68,7 +68,7 @@ class Payments extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -156,7 +156,7 @@ class Payments extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Purchases/Vendors.php b/app/Http/Controllers/Purchases/Vendors.php index 17a0829db..39aaf9df4 100644 --- a/app/Http/Controllers/Purchases/Vendors.php +++ b/app/Http/Controllers/Purchases/Vendors.php @@ -28,7 +28,7 @@ class Vendors extends Controller */ public function index() { - $vendors = Contact::vendor()->collect(); + $vendors = Contact::with('bills.transactions')->vendor()->collect(); return view('purchases.vendors.index', compact('vendors')); } @@ -51,7 +51,7 @@ class Vendors extends Controller $counts = []; // Handle bills - $bills = Bill::where('contact_id', $vendor->id)->get(); + $bills = Bill::with('transactions')->where('contact_id', $vendor->id)->get(); $counts['bills'] = $bills->count(); @@ -78,7 +78,7 @@ class Vendors extends Controller } // Handle payments - $transactions = Transaction::where('contact_id', $vendor->id)->type('expense')->get(); + $transactions = Transaction::with('category')->where('contact_id', $vendor->id)->expense()->get(); $counts['transactions'] = $transactions->count(); diff --git a/app/Http/Controllers/Sales/Customers.php b/app/Http/Controllers/Sales/Customers.php index f52e241ae..af77ce983 100644 --- a/app/Http/Controllers/Sales/Customers.php +++ b/app/Http/Controllers/Sales/Customers.php @@ -26,7 +26,7 @@ class Customers extends Controller */ public function index() { - $customers = Contact::customer()->collect(); + $customers = Contact::with('invoices.transactions')->customer()->collect(); return view('sales.customers.index', compact('customers')); } @@ -49,7 +49,7 @@ class Customers extends Controller $counts = []; // Handle invoices - $invoices = Invoice::where('contact_id', $customer->id)->get(); + $invoices = Invoice::with('transactions')->where('contact_id', $customer->id)->get(); $counts['invoices'] = $invoices->count(); @@ -76,7 +76,7 @@ class Customers extends Controller } // Handle transactions - $transactions = Transaction::where('contact_id', $customer->id)->type('income')->get(); + $transactions = Transaction::with('category')->where('contact_id', $customer->id)->income()->get(); $counts['transactions'] = $transactions->count(); diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index aaf7834a0..bd2d6e131 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -38,11 +38,11 @@ class Invoices extends Controller */ public function index() { - $invoices = Invoice::with(['contact', 'items', 'histories', 'transactions'])->collect(['invoice_number'=> 'desc']); + $invoices = Invoice::with('contact', 'transactions')->collect(['invoice_number'=> 'desc']); $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $statuses = $this->getInvoiceStatuses(); @@ -68,7 +68,7 @@ class Invoices extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -109,7 +109,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $number = $this->getNextInvoiceNumber(); @@ -205,7 +205,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); return view('sales.invoices.edit', compact('invoice', 'customers', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Sales/Revenues.php b/app/Http/Controllers/Sales/Revenues.php index b0146538c..14212e8f2 100644 --- a/app/Http/Controllers/Sales/Revenues.php +++ b/app/Http/Controllers/Sales/Revenues.php @@ -30,11 +30,11 @@ class Revenues extends Controller */ public function index() { - $revenues = Transaction::type('income')->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); + $revenues = Transaction::with('account', 'category', 'contact', 'invoice')->income()->isNotTransfer()->collect(['paid_at'=> 'desc']); $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); @@ -68,7 +68,7 @@ class Revenues extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -156,7 +156,7 @@ class Revenues extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Settings/Email.php b/app/Http/Controllers/Settings/Email.php index 2ccc438d9..510ad6ade 100644 --- a/app/Http/Controllers/Settings/Email.php +++ b/app/Http/Controllers/Settings/Email.php @@ -4,8 +4,10 @@ namespace App\Http\Controllers\Settings; use App\Abstracts\Http\Controller; use App\Http\Requests\Setting\Setting as Request; +use App\Models\Common\Company; use App\Models\Common\EmailTemplate; use App\Models\Setting\Setting; +use App\Utilities\Installer; use Illuminate\Support\Str; class Email extends Controller @@ -58,6 +60,8 @@ class Email extends Controller $fields = $request->all(); $prefix = $request->get('_prefix', 'email'); + $total_companies = Company::count(); + foreach ($fields as $key => $value) { $real_key = $prefix . '.' . $key; @@ -72,6 +76,10 @@ class Email extends Controller continue; } + if ($total_companies == 1) { + $this->oneCompany($real_key, $value); + } + setting()->set($real_key, $value); } @@ -114,4 +122,32 @@ class Email extends Controller unset($fields[$subject_key]); unset($fields[$body_key]); } + + protected function oneCompany($real_key, $value) + { + if (empty($value)) { + return; + } + + switch ($real_key) { + case 'email.protocol': + Installer::updateEnv(['MAIL_MAILER' => '"' . $value . '"']); + break; + case 'email.smtp_host': + Installer::updateEnv(['MAIL_HOST' => '"' . $value . '"']); + break; + case 'email.smtp_port': + Installer::updateEnv(['MAIL_PORT' => '"' . $value . '"']); + break; + case 'email.smtp_username': + Installer::updateEnv(['MAIL_USERNAME' => '"' . $value . '"']); + break; + case 'email.smtp_password': + Installer::updateEnv(['MAIL_PASSWORD' => '"' . $value . '"']); + break; + case 'email.smtp_encryption': + Installer::updateEnv(['MAIL_ENCRYPTION' => '"' . $value . '"']); + break; + } + } } diff --git a/app/Http/Controllers/Settings/Modules.php b/app/Http/Controllers/Settings/Modules.php index b70c751a1..51d5caf70 100644 --- a/app/Http/Controllers/Settings/Modules.php +++ b/app/Http/Controllers/Settings/Modules.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Settings; use App\Abstracts\Http\Controller; use App\Models\Setting\Setting; +use App\Utilities\Modules as Utility; use App\Http\Requests\Setting\Module as Request; class Modules extends Controller @@ -54,9 +55,10 @@ class Modules extends Controller setting()->set($alias . '.' . $key, $value); } - // Save all settings setting()->save(); + Utility::clearPaymentMethodsCache(); + $message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]); $response = [ diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 697ceeae1..f06020069 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -102,6 +102,7 @@ class Kernel extends HttpKernel 'session.errors', 'csrf', 'signature', + 'signed.redirect', 'company.signed', 'bindings', 'header.x', @@ -139,6 +140,7 @@ class Kernel extends HttpKernel // Akaunting 'api.company' => \App\Http\Middleware\ApiCompany::class, + 'api.key' => \App\Http\Middleware\CanApiKey::class, 'auth.disabled' => \App\Http\Middleware\LogoutIfUserDisabled::class, 'auth.redirect' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'company.currencies' => \App\Http\Middleware\LoadCurrencies::class, @@ -151,8 +153,8 @@ class Kernel extends HttpKernel 'install.can' => \App\Http\Middleware\CanInstall::class, 'install.redirect' => \App\Http\Middleware\RedirectIfNotInstalled::class, 'money' => \App\Http\Middleware\Money::class, + 'signed.redirect' => \App\Http\Middleware\RedirectSignedIfAuthenticated::class, 'wizard.redirect' => \App\Http\Middleware\RedirectIfWizardNotCompleted::class, - 'api.key' => \App\Http\Middleware\CanApiKey::class, // Vendor 'ability' => \Laratrust\Middleware\LaratrustAbility::class, diff --git a/app/Http/Middleware/RedirectSignedIfAuthenticated.php b/app/Http/Middleware/RedirectSignedIfAuthenticated.php new file mode 100644 index 000000000..6586438ac --- /dev/null +++ b/app/Http/Middleware/RedirectSignedIfAuthenticated.php @@ -0,0 +1,37 @@ +contact ? 'portal.' : ''; + $page = 'dashboard'; + $params = []; + + if ($request->segment(2) == 'invoices') { + $page = 'invoices.show'; + + $invoice = Invoice::find($request->segment(3)); + + $params = [$invoice->id]; + } + + redirect()->route($prefix . $page, $params)->send(); + } +} diff --git a/app/Http/ViewComposers/Modules.php b/app/Http/ViewComposers/Modules.php index b141ea342..e2ab3df0c 100644 --- a/app/Http/ViewComposers/Modules.php +++ b/app/Http/ViewComposers/Modules.php @@ -22,11 +22,11 @@ class Modules if (setting('apps.api_key')) { $categories = Cache::remember('modules.categories.' . language()->getShortCode(), Date::now()->addHour(6), function () { return collect($this->getCategories())->pluck('name', 'slug') - ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ''); + ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '*'); }); } else { $categories = collect([ - '' => trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), + '*' => trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ]); } diff --git a/app/Http/ViewComposers/Notifications.php b/app/Http/ViewComposers/Notifications.php index da0d56f10..cb7b5ba80 100644 --- a/app/Http/ViewComposers/Notifications.php +++ b/app/Http/ViewComposers/Notifications.php @@ -19,7 +19,7 @@ class Notifications public function compose(View $view) { // No need to add suggestions in console - if (app()->runningInConsole() || !env('APP_INSTALLED') || !user()) { + if (app()->runningInConsole() || !config('app.installed') || !user()) { return; } diff --git a/app/Http/ViewComposers/Suggestions.php b/app/Http/ViewComposers/Suggestions.php index 25c568e34..011c3c843 100644 --- a/app/Http/ViewComposers/Suggestions.php +++ b/app/Http/ViewComposers/Suggestions.php @@ -20,7 +20,7 @@ class Suggestions public function compose(View $view) { // No need to add suggestions in console - if (app()->runningInConsole() || !env('APP_INSTALLED')) { + if (app()->runningInConsole() || !config('app.installed')) { return; } @@ -31,22 +31,18 @@ class Suggestions if ($path) { $suggestions = $this->getSuggestions($path); - + if ($suggestions) { $suggestion_modules = $suggestions->modules; - + foreach ($suggestion_modules as $key => $module) { $installed = Module::where('company_id', session('company_id'))->where('alias', $module->alias)->first(); if ($installed) { - unset($suggestion_modules[$key]); + continue; } - } - if ($suggestion_modules) { - shuffle($suggestion_modules); - - $modules[] = $suggestion_modules[0]; + $modules[] = $module; } } } diff --git a/app/Jobs/Auth/CreatePermission.php b/app/Jobs/Auth/CreatePermission.php index e3c166ab5..d25030879 100644 --- a/app/Jobs/Auth/CreatePermission.php +++ b/app/Jobs/Auth/CreatePermission.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Permission; -use Artisan; class CreatePermission extends Job { @@ -29,8 +28,6 @@ class CreatePermission extends Job { $permission = Permission::create($this->request->all()); - Artisan::call('cache:clear'); - return $permission; } } diff --git a/app/Jobs/Auth/CreateRole.php b/app/Jobs/Auth/CreateRole.php index 44004d674..6ec20d1b9 100644 --- a/app/Jobs/Auth/CreateRole.php +++ b/app/Jobs/Auth/CreateRole.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Role; -use Artisan; class CreateRole extends Job { @@ -33,8 +32,6 @@ class CreateRole extends Job $role->permissions()->attach($this->request->get('permissions')); } - Artisan::call('cache:clear'); - return $role; } } diff --git a/app/Jobs/Auth/CreateUser.php b/app/Jobs/Auth/CreateUser.php index 239d0a8f2..7d2edd902 100644 --- a/app/Jobs/Auth/CreateUser.php +++ b/app/Jobs/Auth/CreateUser.php @@ -44,21 +44,23 @@ class CreateUser extends Job $user->permissions()->attach($this->request->get('permissions')); } - $user->roles()->attach($this->request->get('roles')); - - $user->companies()->attach($this->request->get('companies')); - - Artisan::call('cache:clear'); - - // Add User Dashboard - foreach ($user->companies as $company) { - Artisan::call('user:seed', [ - 'user' => $user->id, - 'company' => $company->id, - ]); + if ($this->request->has('roles')) { + $user->roles()->attach($this->request->get('roles')); } - Artisan::call('cache:clear'); + if ($this->request->has('companies')) { + $user->companies()->attach($this->request->get('companies')); + } + + // Add User Dashboard + if (!empty($user->companies)) { + foreach ($user->companies as $company) { + Artisan::call('user:seed', [ + 'user' => $user->id, + 'company' => $company->id, + ]); + } + } return $user; } diff --git a/app/Jobs/Auth/DeletePermission.php b/app/Jobs/Auth/DeletePermission.php index b1eaff559..af007048f 100644 --- a/app/Jobs/Auth/DeletePermission.php +++ b/app/Jobs/Auth/DeletePermission.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeletePermission extends Job { @@ -28,8 +27,6 @@ class DeletePermission extends Job { $this->permission->delete(); - Artisan::call('cache:clear'); - return true; } } diff --git a/app/Jobs/Auth/DeleteRole.php b/app/Jobs/Auth/DeleteRole.php index 63bf496a4..25018e2e3 100644 --- a/app/Jobs/Auth/DeleteRole.php +++ b/app/Jobs/Auth/DeleteRole.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeleteRole extends Job { @@ -28,7 +27,7 @@ class DeleteRole extends Job { $this->role->delete(); - Artisan::call('cache:clear'); + $this->role->flushCache(); return true; } diff --git a/app/Jobs/Auth/DeleteUser.php b/app/Jobs/Auth/DeleteUser.php index 50db814fd..f34a0d707 100644 --- a/app/Jobs/Auth/DeleteUser.php +++ b/app/Jobs/Auth/DeleteUser.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeleteUser extends Job { @@ -30,7 +29,7 @@ class DeleteUser extends Job $this->user->delete(); - Artisan::call('cache:clear'); + $this->user->flushCache(); return true; } diff --git a/app/Jobs/Auth/UpdatePermission.php b/app/Jobs/Auth/UpdatePermission.php index f77219898..632631e1f 100644 --- a/app/Jobs/Auth/UpdatePermission.php +++ b/app/Jobs/Auth/UpdatePermission.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Permission; -use Artisan; class UpdatePermission extends Job { @@ -33,8 +32,6 @@ class UpdatePermission extends Job { $this->permission->update($this->request->all()); - Artisan::call('cache:clear'); - return $this->permission; } } diff --git a/app/Jobs/Auth/UpdateRole.php b/app/Jobs/Auth/UpdateRole.php index 5475a354c..665201253 100644 --- a/app/Jobs/Auth/UpdateRole.php +++ b/app/Jobs/Auth/UpdateRole.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Role; -use Artisan; class UpdateRole extends Job { @@ -37,8 +36,6 @@ class UpdateRole extends Job $this->role->permissions()->sync($this->request->get('permissions')); } - Artisan::call('cache:clear'); - return $this->role; } } diff --git a/app/Jobs/Auth/UpdateUser.php b/app/Jobs/Auth/UpdateUser.php index e76e4b75c..3a1cd66e3 100644 --- a/app/Jobs/Auth/UpdateUser.php +++ b/app/Jobs/Auth/UpdateUser.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\User; -use Artisan; class UpdateUser extends Job { @@ -58,8 +57,6 @@ class UpdateUser extends Job $this->user->companies()->sync($this->request->get('companies')); } - Artisan::call('cache:clear'); - return $this->user; } diff --git a/app/Jobs/Banking/CreateDocumentTransaction.php b/app/Jobs/Banking/CreateDocumentTransaction.php index 400f59d47..4942d18bd 100644 --- a/app/Jobs/Banking/CreateDocumentTransaction.php +++ b/app/Jobs/Banking/CreateDocumentTransaction.php @@ -79,8 +79,6 @@ class CreateDocumentTransaction extends Job { $currencies = Currency::enabled()->pluck('rate', 'code')->toArray(); - $total_amount = $this->model->amount; - $default_amount = (double) $this->request['amount']; if ($this->model->currency_code == $this->request['currency_code']) { @@ -103,7 +101,7 @@ class CreateDocumentTransaction extends Job $amount = (double) $convert_amount_model->getAmountConvertedFromDefault(); } - $total_amount -= $this->model->paid; + $total_amount = $this->model->amount - $this->model->paid; unset($this->model->reconciled); // For amount cover integer @@ -114,7 +112,7 @@ class CreateDocumentTransaction extends Job } $amount_check = (int) ($amount * $multiplier); - $total_amount_check = (int) (round($total_amount, $this->currency->precision) * $multiplier); + $total_amount_check = (int) ($total_amount * $multiplier); if ($amount_check > $total_amount_check) { $error_amount = $total_amount; diff --git a/app/Jobs/Common/CreateContact.php b/app/Jobs/Common/CreateContact.php index b136766b3..2cf3710bc 100644 --- a/app/Jobs/Common/CreateContact.php +++ b/app/Jobs/Common/CreateContact.php @@ -4,6 +4,7 @@ namespace App\Jobs\Common; use App\Abstracts\Job; use App\Models\Auth\User; +use App\Models\Auth\Role; use App\Models\Common\Contact; class CreateContact extends Job @@ -48,11 +49,14 @@ class CreateContact extends Job $data = $this->request->all(); $data['locale'] = setting('default.locale', 'en-GB'); - $user = User::create($data); - $user->roles()->attach(['3']); - $user->companies()->attach([session('company_id')]); + $customer_role = Role::all()->filter(function ($role) { + return $role->hasPermission('read-client-portal'); + })->first(); + + $user = User::create($data); + $user->roles()->attach($customer_role); + $user->companies()->attach(session('company_id')); - // St user id to request $this->request['user_id'] = $user->id; } } diff --git a/app/Jobs/Common/CreateDashboard.php b/app/Jobs/Common/CreateDashboard.php index dd6b9eb01..a610d508b 100644 --- a/app/Jobs/Common/CreateDashboard.php +++ b/app/Jobs/Common/CreateDashboard.php @@ -4,6 +4,8 @@ namespace App\Jobs\Common; use App\Abstracts\Job; use App\Models\Common\Dashboard; +use App\Models\Common\Widget; +use App\Utilities\Widgets; class CreateDashboard extends Job { @@ -28,10 +30,14 @@ class CreateDashboard extends Job { $this->request['enabled'] = $this->request['enabled'] ?? 1; - $this->dashboard = Dashboard::create($this->request->all()); + $this->dashboard = Dashboard::create($this->request->only(['company_id', 'name', 'enabled'])); $this->attachToUser(); + if ($this->request->has('with_widgets')) { + $this->createWidgets(); + } + return $this->dashboard; } @@ -49,4 +55,24 @@ class CreateDashboard extends Job $this->dashboard->users()->attach($user); } + + protected function createWidgets() + { + $widgets = Widgets::getClasses(false); + + $sort = 1; + + foreach ($widgets as $class => $name) { + Widget::create([ + 'company_id' => $this->dashboard->company_id, + 'dashboard_id' => $this->dashboard->id, + 'class' => $class, + 'name' => $name, + 'sort' => $sort, + 'settings' => (new $class())->getDefaultSettings(), + ]); + + $sort++; + } + } } diff --git a/app/Jobs/Common/DeleteContact.php b/app/Jobs/Common/DeleteContact.php index c12b8a2e6..6b7e96489 100644 --- a/app/Jobs/Common/DeleteContact.php +++ b/app/Jobs/Common/DeleteContact.php @@ -3,6 +3,7 @@ namespace App\Jobs\Common; use App\Abstracts\Job; +use App\Jobs\Auth\DeleteUser; use App\Traits\Contacts; class DeleteContact extends Job @@ -30,6 +31,10 @@ class DeleteContact extends Job { $this->authorize(); + if ($user = $this->contact->user) { + $this->dispatch(new DeleteUser($user)); + } + $this->contact->delete(); return true; @@ -55,7 +60,7 @@ class DeleteContact extends Job 'transactions' => 'transactions', ]; - if (in_array($this->contact->type, $this->getCustomerTypes())) { + if ($this->isCustomer()) { $rels['invoices'] = 'invoices'; } else { $rels['bills'] = 'bills'; diff --git a/app/Jobs/Common/DeleteDashboard.php b/app/Jobs/Common/DeleteDashboard.php index 9fda5cca0..debf4d0ff 100644 --- a/app/Jobs/Common/DeleteDashboard.php +++ b/app/Jobs/Common/DeleteDashboard.php @@ -4,7 +4,6 @@ namespace App\Jobs\Common; use App\Abstracts\Job; use App\Traits\Users; -use Artisan; class DeleteDashboard extends Job { @@ -35,8 +34,6 @@ class DeleteDashboard extends Job $this->dashboard->delete(); - Artisan::call('cache:clear'); - return true; } diff --git a/app/Listeners/Menu/AddAdminItems.php b/app/Listeners/Menu/AddAdminItems.php index 52436c76e..c17c4bb38 100644 --- a/app/Listeners/Menu/AddAdminItems.php +++ b/app/Listeners/Menu/AddAdminItems.php @@ -26,9 +26,11 @@ class AddAdminItems if ($dashboards->count() > 1) { $menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) { foreach ($dashboards as $key => $dashboard) { - $path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id; - - $sub->url($path, $dashboard->name, $key, $attr); + if (session('dashboard_id') != $dashboard->id) { + $sub->route('dashboards.switch', $dashboard->name, ['dashboard' => $dashboard->id], $key, $attr); + } else { + $sub->url('/', $dashboard->name, $key, $attr); + } } }, 1, [ 'url' => '/', diff --git a/app/Listeners/Update/V20/Version207.php b/app/Listeners/Update/V20/Version207.php index 178b008c3..c783ac319 100644 --- a/app/Listeners/Update/V20/Version207.php +++ b/app/Listeners/Update/V20/Version207.php @@ -26,7 +26,7 @@ class Version207 extends Listener // Update .env file Installer::updateEnv([ - 'MAIL_MAILER' => env('MAIL_DRIVER'), + 'MAIL_MAILER' => env('MAIL_DRIVER', config('mail.default')), ]); } } diff --git a/app/Models/Auth/Permission.php b/app/Models/Auth/Permission.php index b9e74e407..e70ad7fbd 100644 --- a/app/Models/Auth/Permission.php +++ b/app/Models/Auth/Permission.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use Laratrust\Models\LaratrustPermission; use Laratrust\Traits\LaratrustPermissionTrait; use Kyslik\ColumnSortable\Sortable; @@ -9,10 +10,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Permission extends LaratrustPermission { - use LaratrustPermissionTrait, SearchString, Sortable; + use LaratrustPermissionTrait, SearchString, Sortable, Tenants; protected $table = 'permissions'; + protected $tenantable = false; + /** * The accessors to append to the model's array form. * diff --git a/app/Models/Auth/Role.php b/app/Models/Auth/Role.php index 8623e41cc..f951568f6 100644 --- a/app/Models/Auth/Role.php +++ b/app/Models/Auth/Role.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use Laratrust\Models\LaratrustRole; use Laratrust\Traits\LaratrustRoleTrait; use Kyslik\ColumnSortable\Sortable; @@ -9,10 +10,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Role extends LaratrustRole { - use LaratrustRoleTrait, SearchString, Sortable; + use LaratrustRoleTrait, SearchString, Sortable, Tenants; protected $table = 'roles'; + protected $tenantable = false; + /** * The attributes that are mass assignable. * diff --git a/app/Models/Auth/User.php b/app/Models/Auth/User.php index 265a677b4..1051d5c7b 100644 --- a/app/Models/Auth/User.php +++ b/app/Models/Auth/User.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use App\Notifications\Auth\Reset; use App\Traits\Media; use Date; @@ -15,10 +16,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class User extends Authenticatable { - use LaratrustUserTrait, Notifiable, SearchString, SoftDeletes, Sortable, Media; + use LaratrustUserTrait, Notifiable, SearchString, SoftDeletes, Sortable, Media, Tenants; protected $table = 'users'; + protected $tenantable = false; + /** * The attributes that are mass assignable. * diff --git a/app/Models/Common/Company.php b/app/Models/Common/Company.php index 86de79dbe..62b3a28ed 100644 --- a/app/Models/Common/Company.php +++ b/app/Models/Common/Company.php @@ -3,6 +3,7 @@ namespace App\Models\Common; use App\Traits\Media; +use App\Traits\Tenants; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletes; use Kyslik\ColumnSortable\Sortable; @@ -10,10 +11,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Company extends Eloquent { - use Media, SearchString, SoftDeletes, Sortable; + use Media, SearchString, SoftDeletes, Sortable, Tenants; protected $table = 'companies'; + protected $tenantable = false; + protected $dates = ['deleted_at']; protected $fillable = ['domain', 'enabled']; diff --git a/app/Models/Common/Contact.php b/app/Models/Common/Contact.php index 7ee5c7237..bc8d95132 100644 --- a/app/Models/Common/Contact.php +++ b/app/Models/Common/Contact.php @@ -133,9 +133,9 @@ class Contact extends Model { $amount = 0; - $collection = in_array($this->type, $this->getCustomerTypes()) ? 'invoices' : 'bills'; + $collection = $this->isCustomer() ? 'invoices' : 'bills'; - $this->$collection()->accrued()->notPaid()->each(function ($item) use (&$amount) { + $this->$collection->whereNotIn('status', ['draft', 'cancelled', 'paid'])->each(function ($item) use (&$amount) { $unpaid = $item->amount - $item->paid; $amount += $this->convertToDefault($unpaid, $item->currency_code, $item->currency_rate); diff --git a/app/Models/Common/Media.php b/app/Models/Common/Media.php index abc998ecf..334430d37 100644 --- a/app/Models/Common/Media.php +++ b/app/Models/Common/Media.php @@ -9,5 +9,7 @@ class Media extends BaseMedia { use SoftDeletes; + protected $tenantable = false; + protected $dates = ['deleted_at']; } diff --git a/app/Models/Setting/Category.php b/app/Models/Setting/Category.php index b627a811a..3ad11959b 100644 --- a/app/Models/Setting/Category.php +++ b/app/Models/Setting/Category.php @@ -68,6 +68,50 @@ class Category extends Model return $query->whereIn($this->table . '.type', (array) $types); } + /** + * Scope to include only income. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIncome($query) + { + return $query->where($this->table . '.type', '=', 'income'); + } + + /** + * Scope to include only expense. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeExpense($query) + { + return $query->where($this->table . '.type', '=', 'expense'); + } + + /** + * Scope to include only item. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeItem($query) + { + return $query->where($this->table . '.type', '=', 'item'); + } + + /** + * Scope to include only other. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeOther($query) + { + return $query->where($this->table . '.type', '=', 'other'); + } + public function scopeName($query, $name) { return $query->where('name', '=', $name); @@ -81,6 +125,6 @@ class Category extends Model */ public function scopeTransfer($query) { - return $query->where('type', 'other')->pluck('id')->first(); + return $query->where($this->table . '.type', '=', 'other')->pluck('id')->first(); } } diff --git a/app/Models/Setting/Setting.php b/app/Models/Setting/Setting.php index 92d6fed1b..0ba333fe1 100644 --- a/app/Models/Setting/Setting.php +++ b/app/Models/Setting/Setting.php @@ -3,12 +3,17 @@ namespace App\Models\Setting; use App\Scopes\Company; +use App\Traits\Tenants; use Illuminate\Database\Eloquent\Model as Eloquent; class Setting extends Eloquent { + use Tenants; + protected $table = 'settings'; + protected $tenantable = true; + public $timestamps = false; /** diff --git a/app/Providers/App.php b/app/Providers/App.php index 990b6d9ae..e3a0d8f8e 100644 --- a/app/Providers/App.php +++ b/app/Providers/App.php @@ -31,11 +31,11 @@ class App extends Provider */ public function register() { - if (env('APP_INSTALLED') && env('APP_DEBUG')) { + if (config('app.installed') && config('app.debug')) { $this->app->register(\Barryvdh\Debugbar\ServiceProvider::class); } - if (env('APP_ENV') !== 'production') { + if (config('app.env') !== 'production') { $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class); } } diff --git a/app/Reports/ExpenseSummary.php b/app/Reports/ExpenseSummary.php index 9335c730a..593aafb60 100644 --- a/app/Reports/ExpenseSummary.php +++ b/app/Reports/ExpenseSummary.php @@ -30,7 +30,7 @@ class ExpenseSummary extends Report public function setData() { - $transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': @@ -41,7 +41,7 @@ class ExpenseSummary extends Report break; default: // Bills - $bills = $this->applyFilters(Bill::accrued(), ['date_field' => 'billed_at'])->get(); + $bills = $this->applyFilters(Bill::with('recurring', 'transactions')->accrued(), ['date_field' => 'billed_at'])->get(); Recurring::reflect($bills, 'billed_at'); $this->setTotals($bills, 'billed_at'); diff --git a/app/Reports/IncomeExpenseSummary.php b/app/Reports/IncomeExpenseSummary.php index 2e74f99c5..1cc9a0dd3 100644 --- a/app/Reports/IncomeExpenseSummary.php +++ b/app/Reports/IncomeExpenseSummary.php @@ -16,8 +16,8 @@ class IncomeExpenseSummary extends Report public function setData() { - $income_transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); - $expense_transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $income_transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); + $expense_transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': @@ -32,7 +32,7 @@ class IncomeExpenseSummary extends Report break; default: // Invoices - $invoices = $this->applyFilters(Invoice::accrued(), ['date_field' => 'invoiced_at'])->get(); + $invoices = $this->applyFilters(Invoice::with('recurring', 'transactions')->accrued(), ['date_field' => 'invoiced_at'])->get(); Recurring::reflect($invoices, 'invoiced_at'); $this->setTotals($invoices, 'invoiced_at', true); @@ -42,7 +42,7 @@ class IncomeExpenseSummary extends Report $this->setTotals($revenues, 'paid_at', true); // Bills - $bills = $this->applyFilters(Bill::accrued(), ['date_field' => 'billed_at'])->get(); + $bills = $this->applyFilters(Bill::with('recurring', 'transactions')->accrued(), ['date_field' => 'billed_at'])->get(); Recurring::reflect($bills, 'bill', 'billed_at'); $this->setTotals($bills, 'billed_at', true); diff --git a/app/Reports/IncomeSummary.php b/app/Reports/IncomeSummary.php index acc6608f7..b2cd467f4 100644 --- a/app/Reports/IncomeSummary.php +++ b/app/Reports/IncomeSummary.php @@ -30,7 +30,7 @@ class IncomeSummary extends Report public function setData() { - $transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); + $transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': @@ -41,7 +41,7 @@ class IncomeSummary extends Report break; default: // Invoices - $invoices = $this->applyFilters(Invoice::accrued(), ['date_field' => 'invoiced_at'])->get(); + $invoices = $this->applyFilters(Invoice::with('recurring', 'transactions')->accrued(), ['date_field' => 'invoiced_at'])->get(); Recurring::reflect($invoices, 'invoiced_at'); $this->setTotals($invoices, 'invoiced_at'); diff --git a/app/Reports/ProfitLoss.php b/app/Reports/ProfitLoss.php index af944e645..9d12c5a47 100644 --- a/app/Reports/ProfitLoss.php +++ b/app/Reports/ProfitLoss.php @@ -16,11 +16,6 @@ class ProfitLoss extends Report public $icon = 'fa fa-heart'; - public $indents = [ - 'table_header' => '0px', - 'table_rows' => '48px', - ]; - public function setViews() { parent::setViews(); @@ -40,40 +35,40 @@ class ProfitLoss extends Report public function setData() { - $income_transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); - $expense_transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $income_transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); + $expense_transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': // Revenues $revenues = $income_transactions->get(); - $this->setTotals($revenues, 'paid_at', true, $this->tables['income']); + $this->setTotals($revenues, 'paid_at', true, $this->tables['income'], false); // Payments $payments = $expense_transactions->get(); - $this->setTotals($payments, 'paid_at', true, $this->tables['expense']); + $this->setTotals($payments, 'paid_at', true, $this->tables['expense'], false); break; default: // Invoices - $invoices = $this->applyFilters(Invoice::accrued(), ['date_field' => 'invoiced_at'])->get(); + $invoices = $this->applyFilters(Invoice::with('recurring', 'totals', 'transactions')->accrued(), ['date_field' => 'invoiced_at'])->get(); Recurring::reflect($invoices, 'invoiced_at'); - $this->setTotals($invoices, 'invoiced_at', true, $this->tables['income']); + $this->setTotals($invoices, 'invoiced_at', true, $this->tables['income'], false); // Revenues $revenues = $income_transactions->isNotDocument()->get(); Recurring::reflect($revenues, 'paid_at'); - $this->setTotals($revenues, 'paid_at', true, $this->tables['income']); + $this->setTotals($revenues, 'paid_at', true, $this->tables['income'], false); // Bills - $bills = $this->applyFilters(Bill::accrued(), ['date_field' => 'billed_at'])->get(); + $bills = $this->applyFilters(Bill::with('recurring', 'totals', 'transactions')->accrued(), ['date_field' => 'billed_at'])->get(); Recurring::reflect($bills, 'bill', 'billed_at'); - $this->setTotals($bills, 'billed_at', true, $this->tables['expense']); + $this->setTotals($bills, 'billed_at', true, $this->tables['expense'], false); // Payments $payments = $expense_transactions->isNotDocument()->get(); Recurring::reflect($payments, 'paid_at'); - $this->setTotals($payments, 'paid_at', true, $this->tables['expense']); + $this->setTotals($payments, 'paid_at', true, $this->tables['expense'], false); break; } diff --git a/app/Reports/TaxSummary.php b/app/Reports/TaxSummary.php index f9abe6b38..7dc576e0e 100644 --- a/app/Reports/TaxSummary.php +++ b/app/Reports/TaxSummary.php @@ -21,11 +21,6 @@ class TaxSummary extends Report public $icon = 'fa fa-percent'; - public $indents = [ - 'table_header' => '0px', - 'table_rows' => '48px', - ]; - public function setViews() { parent::setViews(); @@ -47,22 +42,22 @@ class TaxSummary extends Report switch ($this->model->settings->basis) { case 'cash': // Invoice Payments - $invoices = $this->applyFilters(Transaction::with(['invoice', 'invoice.totals'])->type('income')->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); + $invoices = $this->applyFilters(Transaction::with('recurring', 'invoice', 'invoice.totals')->income()->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); $this->setTotals($invoices, 'paid_at'); // Bill Payments - $bills = $this->applyFilters(Transaction::with(['bill', 'bill.totals'])->type('expense')->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); + $bills = $this->applyFilters(Transaction::with('recurring', 'bill', 'bill.totals')->expense()->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); $this->setTotals($bills, 'paid_at'); break; default: // Invoices - $invoices = $this->applyFilters(Invoice::accrued(), ['date_field' => 'invoiced_at'])->get(); + $invoices = $this->applyFilters(Invoice::with('recurring', 'totals', 'transactions')->accrued(), ['date_field' => 'invoiced_at'])->get(); Recurring::reflect($invoices, 'invoiced_at'); $this->setTotals($invoices, 'invoiced_at'); // Bills - $bills = $this->applyFilters(Bill::accrued(), ['date_field' => 'billed_at'])->get(); + $bills = $this->applyFilters(Bill::with('recurring', 'totals', 'transactions')->accrued(), ['date_field' => 'billed_at'])->get(); Recurring::reflect($bills, 'billed_at'); $this->setTotals($bills, 'billed_at'); @@ -70,7 +65,7 @@ class TaxSummary extends Report } } - public function setTotals($items, $date_field, $check_type = false, $table = 'default') + public function setTotals($items, $date_field, $check_type = false, $table = 'default', $with_tax = true) { foreach ($items as $item) { // Make groups extensible diff --git a/app/Scopes/Company.php b/app/Scopes/Company.php index 4017b3143..025dd9df7 100644 --- a/app/Scopes/Company.php +++ b/app/Scopes/Company.php @@ -17,13 +17,16 @@ class Company implements Scope */ public function apply(Builder $builder, Model $model) { + if (method_exists($model, 'isNotTenantable') && $model->isNotTenantable()) { + return; + } + $table = $model->getTable(); // Skip for specific tables $skip_tables = [ - 'companies', 'jobs', 'firewall_ips', 'firewall_logs', 'media', 'mediables', 'migrations', 'notifications', - 'permissions', 'roles', 'role_companies', 'role_permissions', 'sessions', 'users', 'user_companies', - 'user_dashboards', 'user_permissions', 'user_roles', + 'jobs', 'firewall_ips', 'firewall_logs', 'media', 'mediables', 'migrations', 'notifications', 'role_companies', + 'role_permissions', 'sessions', 'user_companies', 'user_dashboards', 'user_permissions', 'user_roles', ]; if (in_array($table, $skip_tables)) { diff --git a/app/Traits/Contacts.php b/app/Traits/Contacts.php index b4c836ed6..f0f6368b5 100644 --- a/app/Traits/Contacts.php +++ b/app/Traits/Contacts.php @@ -4,31 +4,44 @@ namespace App\Traits; trait Contacts { + public function isCustomer() + { + return in_array($this->type, $this->getCustomerTypes()); + } + + public function isVendor() + { + return in_array($this->type, $this->getVendorTypes()); + } + public function getCustomerTypes($return = 'array') { - $types = (string) setting('contact.type.customer', 'customer'); - - return ($return == 'array') ? explode(',', $types) : $types; + return $this->getContactTypes('customer', $return); } public function getVendorTypes($return = 'array') { - $types = (string) setting('contact.type.vendor', 'vendor'); + return $this->getContactTypes('vendor', $return); + } + + public function getContactTypes($index, $return = 'array') + { + $types = (string) setting('contact.type.' . $index, $index); return ($return == 'array') ? explode(',', $types) : $types; } public function addCustomerType($new_type) { - $this->addType($new_type, 'customer'); + $this->addContactType($new_type, 'customer'); } public function addVendorType($new_type) { - $this->addType($new_type, 'vendor'); + $this->addContactType($new_type, 'vendor'); } - public function addType($new_type, $index) + public function addContactType($new_type, $index) { $types = explode(',', setting('contact.type.' . $index, $index)); diff --git a/app/Traits/DateTime.php b/app/Traits/DateTime.php index f3a81838d..5c4ec6ded 100644 --- a/app/Traits/DateTime.php +++ b/app/Traits/DateTime.php @@ -17,7 +17,7 @@ trait DateTime $default = 'd M Y'; // Make sure it's installed - if (!env('APP_INSTALLED') && (env('APP_ENV') !== 'testing')) { + if (!config('app.installed') && (config('app.env') !== 'testing')) { return $default; } diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index 195d9012b..001dfa177 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -2,12 +2,10 @@ namespace App\Traits; -use App\Models\Module\Module as Model; use App\Models\Module\Module; use App\Traits\SiteApi; use App\Utilities\Console; use App\Utilities\Info; -use Artisan; use Cache; use Date; use File; @@ -36,10 +34,11 @@ trait Modules } // Get All Modules - public function getModules() + public function getModules($data = []) { - // Get data from cache - $items = Cache::get('apps.items'); + $key = 'apps.items.page.' . $this->getPageNumber($data); + + $items = Cache::get($key); if (!empty($items)) { return $items; @@ -47,7 +46,7 @@ trait Modules $items = static::getResponseData('GET', 'apps/items'); - Cache::put('apps.items', $items, Date::now()->addHour()); + Cache::put($key, $items, Date::now()->addHour()); return $items; } @@ -62,8 +61,9 @@ trait Modules public function getDocumentation($alias) { - // Get data from cache - $documentation = Cache::get('apps.docs.' . $alias); + $key = 'apps.docs.' . $alias; + + $documentation = Cache::get($key); if (!empty($documentation)) { return $documentation; @@ -71,15 +71,16 @@ trait Modules $documentation = static::getResponseData('GET', 'apps/docs/' . $alias); - Cache::put('apps.docs.' . $alias, $documentation, Date::now()->addHour()); + Cache::put($key, $documentation, Date::now()->addHour()); return $documentation; } public function getModuleReviews($alias, $data = []) { - // Get data from cache - $reviews = Cache::get('apps.' . $alias . '.reviews'); + $key = 'apps.' . $alias . '.reviews.page.'. $this->getPageNumber($data); + + $reviews = Cache::get($key); if (!empty($reviews)) { return $reviews; @@ -87,15 +88,16 @@ trait Modules $reviews = static::getResponseData('GET', 'apps/' . $alias . '/reviews', $data); - Cache::put('apps.' . $alias . '.reviews', $reviews, Date::now()->addHour()); + Cache::put($key, $reviews, Date::now()->addHour()); return $reviews; } - public function getCategories() + public function getCategories($data = []) { - // Get data from cache - $categories = Cache::get('apps.categories'); + $key = 'apps.categories.page.' . $this->getPageNumber($data); + + $categories = Cache::get($key); if (!empty($categories)) { return $categories; @@ -103,15 +105,16 @@ trait Modules $categories = static::getResponseData('GET', 'apps/categories'); - Cache::put('apps.categories', $categories, Date::now()->addHour()); + Cache::put($key, $categories, Date::now()->addHour()); return $categories; } public function getModulesByCategory($alias, $data = []) { - // Get data from cache - $category = Cache::get('apps.categories.' . $alias); + $key = 'apps.categories.' . $alias . '.page.' . $this->getPageNumber($data); + + $category = Cache::get($key); if (!empty($category)) { return $category; @@ -119,15 +122,16 @@ trait Modules $category = static::getResponseData('GET', 'apps/categories/' . $alias, $data); - Cache::put('apps.categories.' . $alias, $category, Date::now()->addHour()); + Cache::put($key, $category, Date::now()->addHour()); return $category; } - public function getVendors() + public function getVendors($data = []) { - // Get data from cache - $vendors = Cache::get('apps.vendors'); + $key = 'apps.vendors.page.' . $this->getPageNumber($data); + + $vendors = Cache::get($key); if (!empty($vendors)) { return $vendors; @@ -135,15 +139,16 @@ trait Modules $vendors = static::getResponseData('GET', 'apps/vendors'); - Cache::put('apps.vendors', $vendors, Date::now()->addHour()); + Cache::put($key, $vendors, Date::now()->addHour()); return $vendors; } public function getModulesByVendor($alias, $data = []) { - // Get data from cache - $vendor = Cache::get('apps.vendors.' . $alias); + $key = 'apps.vendors.' . $alias . '.page.' . $this->getPageNumber($data); + + $vendor = Cache::get($key); if (!empty($vendor)) { return $vendor; @@ -151,7 +156,7 @@ trait Modules $vendor = static::getResponseData('GET', 'apps/vendors/' . $alias, $data); - Cache::put('apps.vendors.' . $alias, $vendor, Date::now()->addHour()); + Cache::put($key, $vendor, Date::now()->addHour()); return $vendor; } @@ -161,44 +166,38 @@ trait Modules return static::getResponseData('GET', 'apps/my', $data); } - public function getInstalledModules($data = []) + public function getInstalledModules() { - $company_id = session('company_id'); + $key = 'apps.installed.' . session('company_id'); - $cache = 'installed.' . $company_id . '.module'; - - $installed = Cache::get($cache); - - if ($installed) { + if ($installed = Cache::get($key)) { return $installed; } $installed = []; - $modules = Module::all(); - $installed_modules = Model::where('company_id', '=', session('company_id'))->pluck('enabled', 'alias')->toArray(); - - foreach ($modules as $module) { - if (!array_key_exists($module->alias, $installed_modules)) { - continue; + Module::all()->each(function($module) use (&$installed) { + if (!$this->moduleExists($module->alias)) { + return; } - $result = $this->getModule($module->alias); - - if ($result) { - $installed[] = $result; + if (!$result = $this->getModule($module->alias)) { + return; } - } - Cache::put($cache, $installed, Date::now()->addHour(6)); + $installed[] = $result; + }); + + Cache::put($key, $installed, Date::now()->addHour(6)); return $installed; } public function getPreSaleModules($data = []) { - // Get data from cache - $pre_sale = Cache::get('apps.pre_sale'); + $key = 'apps.pre_sale.page.' . $this->getPageNumber($data); + + $pre_sale = Cache::get($key); if (!empty($pre_sale)) { return $pre_sale; @@ -206,15 +205,16 @@ trait Modules $pre_sale = static::getResponseData('GET', 'apps/pre_sale', $data); - Cache::put('apps.pre_sale', $pre_sale, Date::now()->addHour()); + Cache::put($key, $pre_sale, Date::now()->addHour()); return $pre_sale; } public function getPaidModules($data = []) { - // Get data from cache - $paid = Cache::get('apps.paid'); + $key = 'apps.paid.page.' . $this->getPageNumber($data); + + $paid = Cache::get($key); if (!empty($paid)) { return $paid; @@ -222,15 +222,16 @@ trait Modules $paid = static::getResponseData('GET', 'apps/paid', $data); - Cache::put('apps.paid', $paid, Date::now()->addHour()); + Cache::put($key, $paid, Date::now()->addHour()); return $paid; } public function getNewModules($data = []) { - // Get data from cache - $new = Cache::get('apps.new'); + $key = 'apps.new.page.' . $this->getPageNumber($data); + + $new = Cache::get($key); if (!empty($new)) { return $new; @@ -238,15 +239,16 @@ trait Modules $new = static::getResponseData('GET', 'apps/new', $data); - Cache::put('apps.new', $new, Date::now()->addHour()); + Cache::put($key, $new, Date::now()->addHour()); return $new; } public function getFreeModules($data = []) { - // Get data from cache - $free = Cache::get('apps.free'); + $key = 'apps.free.page.' . $this->getPageNumber($data); + + $free = Cache::get($key); if (!empty($free)) { return $free; @@ -254,15 +256,16 @@ trait Modules $free = static::getResponseData('GET', 'apps/free', $data); - Cache::put('apps.free', $free, Date::now()->addHour()); + Cache::put($key, $free, Date::now()->addHour()); return $free; } public function getFeaturedModules($data = []) { - // Get data from cache - $featured = Cache::get('apps.featured'); + $key = 'apps.featured.page.' . $this->getPageNumber($data); + + $featured = Cache::get($key); if (!empty($featured)) { return $featured; @@ -270,7 +273,7 @@ trait Modules $featured = static::getResponseData('GET', 'apps/featured', $data); - Cache::put('apps.featured', $featured, Date::now()->addHour()); + Cache::put($key, $featured, Date::now()->addHour()); return $featured; } @@ -293,11 +296,20 @@ trait Modules public function downloadModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.download', ['module' => '']), + 'data' => null, + ]; + } + if (!$response = static::getResponse('GET', $path)) { return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.download', ['module' => '']), 'data' => null, ]; } @@ -321,7 +333,7 @@ trait Modules return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.download', ['module' => '']), 'data' => null, ]; } @@ -338,6 +350,15 @@ trait Modules public function unzipModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.unzip', ['module' => '']), + 'data' => null, + ]; + } + $temp_path = storage_path('app/temp') . '/' . $path; $file = $temp_path . '/upload.zip'; @@ -349,7 +370,7 @@ trait Modules return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.unzip', ['module' => '']), 'data' => null, ]; } @@ -373,9 +394,18 @@ trait Modules public function installModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.finish', ['module' => '']), + 'data' => null, + ]; + } + $temp_path = storage_path('app/temp') . '/' . $path; - $modules_path = base_path() . '/modules'; + $modules_path = config('module.paths.modules'); // Create modules directory if (!File::isDirectory($modules_path)) { @@ -404,13 +434,24 @@ trait Modules $company_id = session('company_id'); $locale = app()->getLocale(); - Cache::forget('installed.' . $company_id . '.module'); + $this->clearModulesCache(); - Console::run("module:install {$module->alias} {$company_id} {$locale}"); + $command = "module:install {$module->alias} {$company_id} {$locale}"; + + if (true !== $result = Console::run($command)) { + $message = !empty($result) ? $result : trans('modules.errors.finish', ['module' => $module->alias]); + + return [ + 'success' => false, + 'error' => true, + 'message' => $message, + 'data' => null, + ]; + } return [ 'success' => true, - 'redirect' => url('apps/' . $module->alias), + 'redirect' => route('apps.app.show', $module->alias), 'error' => false, 'message' => null, 'data' => $data, @@ -427,12 +468,9 @@ trait Modules 'version' => $module->get('version'), ]; - Artisan::call('cache:clear'); - $module->delete(); - // Cache Data clear - File::deleteDirectory(storage_path('framework/cache/data')); + $this->clearModulesCache(); return [ 'success' => true, @@ -454,7 +492,7 @@ trait Modules $module->enable(); - Artisan::call('cache:clear'); + $this->clearModulesCache(); return [ 'success' => true, @@ -476,7 +514,7 @@ trait Modules $module->disable(); - Artisan::call('cache:clear'); + $this->clearModulesCache($alias); return [ 'success' => true, @@ -488,19 +526,31 @@ trait Modules public function moduleExists($alias) { - $status = false; - - if (module($alias) instanceof \Akaunting\Module\Module) { - $status = true; + if (!module($alias) instanceof \Akaunting\Module\Module) { + return false; } - return $status; + return true; + } + + public function moduleEnabled($alias) + { + if (!$this->moduleExists($alias)) { + return false; + } + + if (!Module::alias($alias)->enabled()->first()) { + return false; + } + + return true; } public function loadSuggestions() { - // Get data from cache - $data = Cache::get('suggestions'); + $key = 'apps.suggestions'; + + $data = Cache::get($key); if (!empty($data)) { return $data; @@ -516,15 +566,16 @@ trait Modules $data[$suggestion->path] = $suggestion; } - Cache::put('suggestions', $data, Date::now()->addHour(6)); + Cache::put($key, $data, Date::now()->addHour(6)); return $data; } public function loadNotifications() { - // Get data from cache - $data = Cache::get('notifications'); + $key = 'apps.notifications'; + + $data = Cache::get($key); if (!empty($data)) { return $data; @@ -540,15 +591,16 @@ trait Modules $data[$notification->path][] = $notification; } - Cache::put('notifications', $data, Date::now()->addHour(6)); + Cache::put($key, $data, Date::now()->addHour(6)); return $data; } public function getSuggestions($path) { - // Get data from cache - $data = Cache::get('suggestions'); + $key = 'apps.suggestions'; + + $data = Cache::get($key); if (empty($data)) { $data = $this->loadSuggestions(); @@ -563,8 +615,9 @@ trait Modules public function getNotifications($path) { - // Get data from cache - $data = Cache::get('notifications'); + $key = 'apps.notifications'; + + $data = Cache::get($key); if (empty($data)) { $data = $this->loadNotifications(); @@ -576,4 +629,24 @@ trait Modules return false; } + + public function getPageNumber($data = []) + { + if (empty($data['query']) || empty($data['query']['page'])) { + return 1; + } + + return $data['query']['page']; + } + + public function clearModulesCache() + { + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } + + Cache::forget('apps.notifications'); + Cache::forget('apps.suggestions'); + Cache::forget('apps.installed.' . session('company_id')); + } } diff --git a/app/Traits/Omnipay.php b/app/Traits/Omnipay.php index c4feb1b9d..4c63a2ff1 100644 --- a/app/Traits/Omnipay.php +++ b/app/Traits/Omnipay.php @@ -62,7 +62,7 @@ trait Omnipay public function purchase($invoice, $request, $extra_options = []) { $default_options = [ - 'amount' => $invoice->amount, + 'amount' => $invoice->amount - $invoice->paid, 'currency' => $invoice->currency_code, 'transactionId' => $invoice->id, 'returnUrl' => $this->getReturnUrl($invoice), diff --git a/app/Traits/SiteApi.php b/app/Traits/SiteApi.php index 70e9fb766..5d73e0f04 100644 --- a/app/Traits/SiteApi.php +++ b/app/Traits/SiteApi.php @@ -2,6 +2,7 @@ namespace App\Traits; +use App\Utilities\Info; use Exception; use GuzzleHttp\Client; use GuzzleHttp\Exception\ConnectException; @@ -21,6 +22,7 @@ trait SiteApi 'Referer' => app()->runningInConsole() ? config('app.url') : url('/'), 'Akaunting' => version('short'), 'Language' => language()->getShortCode(), + 'Information' => json_encode(Info::all()), ]; $data = array_merge([ diff --git a/app/Traits/Tenants.php b/app/Traits/Tenants.php new file mode 100644 index 000000000..a2dcf0960 --- /dev/null +++ b/app/Traits/Tenants.php @@ -0,0 +1,16 @@ +tenantable) && ($this->tenantable === true)); + } + + public function isNotTenantable() + { + return !$this->isTenantable(); + } +} diff --git a/app/Utilities/Console.php b/app/Utilities/Console.php index 808739682..642489e48 100644 --- a/app/Utilities/Console.php +++ b/app/Utilities/Console.php @@ -2,6 +2,7 @@ namespace App\Utilities; +use Illuminate\Support\ProcessUtils; use Symfony\Component\Process\PhpExecutableFinder; use Symfony\Component\Process\Process; @@ -11,6 +12,8 @@ class Console { $command = static::formatCommandString($string); + logger('Console command:: ' . $command); + $process = Process::fromShellCommandline($command, base_path()); $process->setTimeout($timeout); @@ -22,19 +25,21 @@ class Console $output = $all_output ? $process->getOutput() : $process->getErrorOutput(); - logger($output); + logger('Console output:: ' . $output); return $output; } public static function getPhpBinary() { - return (new PhpExecutableFinder)->find(false) ?? 'php'; + $bin = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)); + + return !empty($bin) ? $bin : 'php'; } public static function getArtisanBinary() { - return defined('ARTISAN_BINARY') ? ARTISAN_BINARY : 'artisan'; + return defined('ARTISAN_BINARY') ? ProcessUtils::escapeArgument(ARTISAN_BINARY) : 'artisan'; } public static function formatCommandString($string) diff --git a/app/Utilities/Info.php b/app/Utilities/Info.php index 157605abe..7dfbfcd12 100644 --- a/app/Utilities/Info.php +++ b/app/Utilities/Info.php @@ -14,6 +14,7 @@ class Info 'api_key' => setting('apps.api_key'), 'companies' => Company::count(), 'users' => User::count(), + 'php_extensions' => static::phpExtensions(), ]); } @@ -31,10 +32,21 @@ class Info return phpversion(); } + public static function phpExtensions() + { + return get_loaded_extensions(); + } + public static function mysqlVersion() { - if (env('DB_CONNECTION') === 'mysql') { - return DB::selectOne('select version() as mversion')->mversion; + static $version; + + if (empty($version) && (config('database.default') === 'mysql')) { + $version = DB::selectOne('select version() as mversion')->mversion; + } + + if (isset($version)) { + return $version; } return 'N/A'; diff --git a/app/Utilities/Installer.php b/app/Utilities/Installer.php index e671b3b60..cd44b82c6 100644 --- a/app/Utilities/Installer.php +++ b/app/Utilities/Installer.php @@ -183,8 +183,8 @@ class Installer 'database' => $database, 'username' => $username, 'password' => $password, - 'driver' => env('DB_CONNECTION', 'mysql'), - 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'driver' => $connection = config('database.default', 'mysql'), + 'charset' => config("database.connections.$connection.charset", 'utf8mb4'), ]); try { @@ -213,7 +213,7 @@ class Installer 'DB_PREFIX' => $prefix, ]); - $con = env('DB_CONNECTION', 'mysql'); + $con = config('database.default', 'mysql'); // Change current connection $db = Config::get('database.connections.' . $con); diff --git a/app/Utilities/Modules.php b/app/Utilities/Modules.php index 9bfeb5f3a..a3208a11e 100644 --- a/app/Utilities/Modules.php +++ b/app/Utilities/Modules.php @@ -9,10 +9,8 @@ class Modules { public static function getPaymentMethods($type = null) { - $company_id = session('company_id'); - - $cache_admin = 'payment_methods.' . $company_id . '.admin'; - $cache_customer = 'payment_methods.' . $company_id . '.customer'; + $cache_admin = static::getPaymentMethodsCacheKey('admin'); + $cache_customer = static::getPaymentMethodsCacheKey('customer'); $payment_methods = Cache::get($cache_admin); @@ -65,6 +63,17 @@ class Modules return ($payment_methods) ? $payment_methods : []; } + public static function clearPaymentMethodsCache() + { + Cache::forget(static::getPaymentMethodsCacheKey('admin')); + Cache::forget(static::getPaymentMethodsCacheKey('customer')); + } + + public static function getPaymentMethodsCacheKey($type) + { + return 'payment_methods.' . session('company_id') . '.' . $type; + } + protected static function sortPaymentMethods(&$list) { $sort_order = []; diff --git a/app/Utilities/Updater.php b/app/Utilities/Updater.php index f889b640f..b7e20e756 100644 --- a/app/Utilities/Updater.php +++ b/app/Utilities/Updater.php @@ -8,7 +8,6 @@ use App\Events\Install\UpdateUnzipped; use App\Models\Module\Module; use App\Utilities\Console; use App\Traits\SiteApi; -use Artisan; use Cache; use Date; use File; @@ -21,7 +20,11 @@ class Updater public static function clear() { - Artisan::call('cache:clear'); + Cache::forget('updates'); + Cache::forget('versions'); + Cache::forget('apps.notifications'); + Cache::forget('apps.suggestions'); + Cache::forget('apps.installed.' . session('company_id')); return true; } @@ -161,7 +164,17 @@ class Updater $versions = Versions::all($modules); foreach ($versions as $alias => $latest_version) { - $installed_version = ($alias == 'core') ? version('short') : module($alias)->get('version'); + if ($alias == 'core') { + $installed_version = version('short'); + } else { + $module = module($alias); + + if (!$module instanceof \Akaunting\Module\Module) { + continue; + } + + $installed_version = $module->get('version'); + } if (version_compare($installed_version, $latest_version, '>=')) { continue; diff --git a/app/Utilities/Versions.php b/app/Utilities/Versions.php index 6406b7457..df7e42109 100644 --- a/app/Utilities/Versions.php +++ b/app/Utilities/Versions.php @@ -2,7 +2,6 @@ namespace App\Utilities; -use Akaunting\Module\Module; use App\Traits\SiteApi; use Cache; use Date; @@ -89,7 +88,7 @@ class Versions $module = module($module); } - if (!$module instanceof Module) { + if (!$module instanceof \Akaunting\Module\Module) { continue; } diff --git a/app/Widgets/AccountBalance.php b/app/Widgets/AccountBalance.php index 5318d18aa..54822ae64 100644 --- a/app/Widgets/AccountBalance.php +++ b/app/Widgets/AccountBalance.php @@ -11,7 +11,7 @@ class AccountBalance extends Widget public function show() { - $accounts = Account::enabled()->take(5)->get(); + $accounts = Account::with('income_transactions', 'expense_transactions')->enabled()->take(5)->get(); return $this->view('widgets.account_balance', [ 'accounts' => $accounts, diff --git a/app/Widgets/ExpensesByCategory.php b/app/Widgets/ExpensesByCategory.php index fcf068b05..2ec6ab13e 100644 --- a/app/Widgets/ExpensesByCategory.php +++ b/app/Widgets/ExpensesByCategory.php @@ -15,10 +15,10 @@ class ExpensesByCategory extends Widget public function show() { - Category::with('expense_transactions')->type('expense')->each(function ($category) { + Category::with('expense_transactions')->expense()->each(function ($category) { $amount = 0; - $this->applyFilters($category->expense_transactions())->each(function ($transaction) use (&$amount) { + $this->applyFilters($category->expense_transactions)->each(function ($transaction) use (&$amount) { $amount += $transaction->getAmountConvertedToDefault(); }); diff --git a/app/Widgets/IncomeByCategory.php b/app/Widgets/IncomeByCategory.php index ee532420a..482e933f0 100644 --- a/app/Widgets/IncomeByCategory.php +++ b/app/Widgets/IncomeByCategory.php @@ -15,10 +15,10 @@ class IncomeByCategory extends Widget public function show() { - Category::with('income_transactions')->type('income')->each(function ($category) { + Category::with('income_transactions')->income()->each(function ($category) { $amount = 0; - $this->applyFilters($category->income_transactions())->each(function ($transaction) use (&$amount) { + $this->applyFilters($category->income_transactions)->each(function ($transaction) use (&$amount) { $amount += $transaction->getAmountConvertedToDefault(); }); diff --git a/app/Widgets/LatestExpenses.php b/app/Widgets/LatestExpenses.php index ffdfb521e..9f5810136 100644 --- a/app/Widgets/LatestExpenses.php +++ b/app/Widgets/LatestExpenses.php @@ -11,7 +11,7 @@ class LatestExpenses extends Widget public function show() { - $transactions = $this->applyFilters(Transaction::with('category')->type('expense')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); + $transactions = $this->applyFilters(Transaction::with('category')->expense()->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return $this->view('widgets.latest_expenses', [ 'transactions' => $transactions, diff --git a/app/Widgets/LatestIncome.php b/app/Widgets/LatestIncome.php index 89334b9ee..d883fcdf5 100644 --- a/app/Widgets/LatestIncome.php +++ b/app/Widgets/LatestIncome.php @@ -11,7 +11,7 @@ class LatestIncome extends Widget public function show() { - $transactions = $this->applyFilters(Transaction::with('category')->type('income')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); + $transactions = $this->applyFilters(Transaction::with('category')->income()->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return $this->view('widgets.latest_income', [ 'transactions' => $transactions, diff --git a/app/Widgets/TotalExpenses.php b/app/Widgets/TotalExpenses.php index 82014f0d9..06617aa09 100644 --- a/app/Widgets/TotalExpenses.php +++ b/app/Widgets/TotalExpenses.php @@ -18,11 +18,11 @@ class TotalExpenses extends Widget { $current = $open = $overdue = 0; - $this->applyFilters(Transaction::type('expense')->isNotTransfer())->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::expense()->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); - $this->applyFilters(Bill::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open, &$overdue) { + $this->applyFilters(Bill::with('transactions')->accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open, &$overdue) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($bill); $open += $open_tmp; diff --git a/app/Widgets/TotalIncome.php b/app/Widgets/TotalIncome.php index e48bd42f8..e4b5c17b3 100644 --- a/app/Widgets/TotalIncome.php +++ b/app/Widgets/TotalIncome.php @@ -18,11 +18,11 @@ class TotalIncome extends Widget { $current = $open = $overdue = 0; - $this->applyFilters(Transaction::type('income')->isNotTransfer())->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::income()->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); - $this->applyFilters(Invoice::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open, &$overdue) { + $this->applyFilters(Invoice::with('transactions')->accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open, &$overdue) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($invoice); $open += $open_tmp; diff --git a/app/Widgets/TotalProfit.php b/app/Widgets/TotalProfit.php index 0e1c37a77..d25b30f0c 100644 --- a/app/Widgets/TotalProfit.php +++ b/app/Widgets/TotalProfit.php @@ -30,14 +30,14 @@ class TotalProfit extends Widget } }); - $this->applyFilters(Invoice::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open_invoice, &$overdue_invoice) { + $this->applyFilters(Invoice::with('transactions')->accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open_invoice, &$overdue_invoice) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($invoice); $open_invoice += $open_tmp; $overdue_invoice += $overdue_tmp; }); - $this->applyFilters(Bill::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open_bill, &$overdue_bill) { + $this->applyFilters(Bill::with('transactions')->accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open_bill, &$overdue_bill) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($bill); $open_bill += $open_tmp; diff --git a/composer.json b/composer.json index fb6a4890e..1969265f4 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "barryvdh/laravel-debugbar": "3.2.*", "barryvdh/laravel-dompdf": "0.*", "barryvdh/laravel-ide-helper": "2.6.*", - "bkwld/cloner": "3.6.*", + "bkwld/cloner": "3.7.*", "consoletvs/charts": "6.5.*", "dingo/api": "3.0.*", "doctrine/dbal": "2.9.*", @@ -40,6 +40,7 @@ "laravel/tinker": "^2.0", "laravel/ui": "^2.0", "laravelcollective/html": "6.1.*", + "league/omnipay": "3.0.*", "lorisleiva/laravel-search-string": "0.1.*", "maatwebsite/excel": "3.1.*", "misterphilip/maintenance-mode": "2.0.*", @@ -55,7 +56,7 @@ "beyondcode/laravel-dump-server": "^1.0", "facade/ignition": "^2.0", "fzaninotto/faker": "^1.9.1", - "mockery/mockery": "^1.3", + "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^4.1", "phpunit/phpunit": "^8.5" }, diff --git a/composer.lock b/composer.lock index 0bf1a75b3..84695e3a5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "91309f3a56105719c200deb6d0b2079e", + "content-hash": "11a567b30598b418b543e50ee1cc7e39", "packages": [ { "name": "akaunting/firewall", @@ -129,16 +129,16 @@ }, { "name": "akaunting/menu", - "version": "1.0.9", + "version": "1.0.10", "source": { "type": "git", "url": "https://github.com/akaunting/menu.git", - "reference": "3b8b703a149fee090af9468be531bb335e2d8f88" + "reference": "6895de00f0d320545b4d64f7d255fffdf690e145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/akaunting/menu/zipball/3b8b703a149fee090af9468be531bb335e2d8f88", - "reference": "3b8b703a149fee090af9468be531bb335e2d8f88", + "url": "https://api.github.com/repos/akaunting/menu/zipball/6895de00f0d320545b4d64f7d255fffdf690e145", + "reference": "6895de00f0d320545b4d64f7d255fffdf690e145", "shasum": "" }, "require": { @@ -193,7 +193,7 @@ "navigation", "sidebar" ], - "time": "2020-03-07T22:36:44+00:00" + "time": "2020-06-04T21:15:59+00:00" }, { "name": "akaunting/module", @@ -323,16 +323,16 @@ }, { "name": "akaunting/setting", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/akaunting/setting.git", - "reference": "231b673a19f96fba050e9c005d3cbc7e428c914b" + "reference": "194f8c60285f66835f70e0a8e87e1a66d989b111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/akaunting/setting/zipball/231b673a19f96fba050e9c005d3cbc7e428c914b", - "reference": "231b673a19f96fba050e9c005d3cbc7e428c914b", + "url": "https://api.github.com/repos/akaunting/setting/zipball/194f8c60285f66835f70e0a8e87e1a66d989b111", + "reference": "194f8c60285f66835f70e0a8e87e1a66d989b111", "shasum": "" }, "require": { @@ -382,7 +382,7 @@ "laravel", "persistent" ], - "time": "2019-12-31T21:50:36+00:00" + "time": "2020-04-29T07:18:49+00:00" }, { "name": "akaunting/version", @@ -781,16 +781,16 @@ }, { "name": "bkwld/cloner", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/BKWLD/cloner.git", - "reference": "d9c92a1e939805eb51119d63ce6da7aa5680449c" + "reference": "bfb2db6e4e42cf2710b5d507074d0e1c1af04da3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BKWLD/cloner/zipball/d9c92a1e939805eb51119d63ce6da7aa5680449c", - "reference": "d9c92a1e939805eb51119d63ce6da7aa5680449c", + "url": "https://api.github.com/repos/BKWLD/cloner/zipball/bfb2db6e4e42cf2710b5d507074d0e1c1af04da3", + "reference": "bfb2db6e4e42cf2710b5d507074d0e1c1af04da3", "shasum": "" }, "require": { @@ -832,7 +832,7 @@ } ], "description": "A trait for Laravel Eloquent models that lets you clone of a model and it's relationships, including files.", - "time": "2020-03-05T00:58:41+00:00" + "time": "2020-05-07T16:08:16+00:00" }, { "name": "brick/math", @@ -880,6 +880,58 @@ ], "time": "2020-04-15T15:59:35+00:00" }, + { + "name": "clue/stream-filter", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/clue/php-stream-filter.git", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\StreamFilter\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "time": "2019-04-09T12:31:48+00:00" + }, { "name": "composer/ca-bundle", "version": "1.2.7", @@ -934,20 +986,30 @@ "ssl", "tls" ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], "time": "2020-04-08T08:27:21+00:00" }, { "name": "composer/composer", - "version": "1.10.5", + "version": "1.10.7", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9" + "reference": "956608ea4f7de9e58c53dfb019d85ae62b193c39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/7a4d5b6aa30d2118af27c04f5e897b57156ccfa9", - "reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9", + "url": "https://api.github.com/repos/composer/composer/zipball/956608ea4f7de9e58c53dfb019d85ae62b193c39", + "reference": "956608ea4f7de9e58c53dfb019d85ae62b193c39", "shasum": "" }, "require": { @@ -955,7 +1017,7 @@ "composer/semver": "^1.0", "composer/spdx-licenses": "^1.2", "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "justinrainbow/json-schema": "^5.2.10", "php": "^5.3.2 || ^7.0", "psr/log": "^1.0", "seld/jsonlint": "^1.4", @@ -966,7 +1028,8 @@ "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "conflict": { - "symfony/console": "2.8.38" + "symfony/console": "2.8.38", + "symfony/phpunit-bridge": "3.4.40" }, "require-dev": { "phpspec/prophecy": "^1.10", @@ -1014,7 +1077,21 @@ "dependency", "package" ], - "time": "2020-04-10T09:44:22+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-06-03T08:03:56+00:00" }, { "name": "composer/semver", @@ -1139,16 +1216,16 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7" + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7", - "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", "shasum": "" }, "require": { @@ -1179,7 +1256,21 @@ "Xdebug", "performance" ], - "time": "2020-03-01T12:26:26+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-06-04T11:16:35+00:00" }, { "name": "consoletvs/charts", @@ -1400,22 +1491,22 @@ }, { "name": "doctrine/annotations", - "version": "1.10.1", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5eb79f3dbdffed6544e1fc287572c0f462bd29bb" + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5eb79f3dbdffed6544e1fc287572c0f462bd29bb", - "reference": "5eb79f3dbdffed6544e1fc287572c0f462bd29bb", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", "shasum": "" }, "require": { "doctrine/lexer": "1.*", "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -1465,24 +1556,24 @@ "docblock", "parser" ], - "time": "2020-04-02T12:33:25+00:00" + "time": "2020-05-25T17:24:27+00:00" }, { "name": "doctrine/cache", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", + "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", "shasum": "" }, "require": { - "php": "~7.1" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" @@ -1547,37 +1638,46 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-05-27T16:24:54+00:00" }, { "name": "doctrine/collections", - "version": "1.6.4", + "version": "1.6.5", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1.3 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", "phpstan/phpstan-shim": "^0.9.2", "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.2.2" + "vimeo/psalm": "^3.8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" @@ -1617,7 +1717,21 @@ "iterators", "php" ], - "time": "2019-11-13T13:07:11+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2020-05-25T19:24:35+00:00" }, { "name": "doctrine/dbal", @@ -1779,33 +1893,37 @@ }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -1834,32 +1952,52 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], - "time": "2019-10-30T19:59:35+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-29T15:13:26+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -1904,7 +2042,21 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "dompdf/dompdf", @@ -2140,16 +2292,16 @@ }, { "name": "fruitcake/laravel-cors", - "version": "v1.0.5", + "version": "v1.0.6", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0" + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/0e0500133dbb6325266133dd72f040617c9cdbd0", - "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6", + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6", "shasum": "" }, "require": { @@ -2204,20 +2356,26 @@ "crossdomain", "laravel" ], - "time": "2020-03-11T21:05:07+00:00" + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2020-04-28T08:47:37+00:00" }, { "name": "genealabs/laravel-model-caching", - "version": "0.8.3", + "version": "0.8.6", "source": { "type": "git", "url": "https://github.com/GeneaLabs/laravel-model-caching.git", - "reference": "a76e9f143905fca08690fdf2421b0132e8881af4" + "reference": "6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeneaLabs/laravel-model-caching/zipball/a76e9f143905fca08690fdf2421b0132e8881af4", - "reference": "a76e9f143905fca08690fdf2421b0132e8881af4", + "url": "https://api.github.com/repos/GeneaLabs/laravel-model-caching/zipball/6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2", + "reference": "6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2", "shasum": "" }, "require": { @@ -2233,8 +2391,9 @@ "predis/predis": "^1.1" }, "require-dev": { + "doctrine/dbal": "^2.10", "fzaninotto/faker": "^1.9", - "laravel/nova": "3.*", + "laravel/nova": "^3.0", "orchestra/testbench": "^5.0", "orchestra/testbench-browser-kit": "^5.0", "php-coveralls/php-coveralls": "^2.2", @@ -2268,7 +2427,13 @@ } ], "description": "Automatic caching for Eloquent models.", - "time": "2020-04-15T18:52:17+00:00" + "funding": [ + { + "url": "https://github.com/mikebronner", + "type": "github" + } + ], + "time": "2020-05-12T22:46:24+00:00" }, { "name": "genealabs/laravel-pivot-events", @@ -2390,16 +2555,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.5.3", + "version": "6.5.4", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e" + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aab4ebd862aa7d04f01a4b51849d657db56d882e", - "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d", + "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d", "shasum": "" }, "require": { @@ -2407,7 +2572,7 @@ "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.11" + "symfony/polyfill-intl-idn": "1.17.0" }, "require-dev": { "ext-curl": "*", @@ -2453,7 +2618,7 @@ "rest", "web service" ], - "time": "2020-04-18T10:38:46+00:00" + "time": "2020-05-25T19:35:05+00:00" }, { "name": "guzzlehttp/promises", @@ -2767,16 +2932,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.9", + "version": "5.2.10", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4" + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", "shasum": "" }, "require": { @@ -2829,7 +2994,7 @@ "json", "schema" ], - "time": "2019-09-25T14:49:45+00:00" + "time": "2020-05-27T16:41:55+00:00" }, { "name": "kkszymanowski/traitor", @@ -2989,27 +3154,27 @@ }, { "name": "laravel/framework", - "version": "v7.6.2", + "version": "v7.14.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "695be25d84b5cedd0026c428d4e9697fe8cd06f9" + "reference": "469b7719a8dca40841a74f59f2e9f30f01d3a106" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/695be25d84b5cedd0026c428d4e9697fe8cd06f9", - "reference": "695be25d84b5cedd0026c428d4e9697fe8cd06f9", + "url": "https://api.github.com/repos/laravel/framework/zipball/469b7719a8dca40841a74f59f2e9f30f01d3a106", + "reference": "469b7719a8dca40841a74f59f2e9f30f01d3a106", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", + "doctrine/inflector": "^1.4|^2.0", "dragonmantank/cron-expression": "^2.0", "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "league/commonmark": "^1.3", - "league/flysystem": "^1.0.8", + "league/flysystem": "^1.0.34", "monolog/monolog": "^2.0", "nesbot/carbon": "^2.17", "opis/closure": "^3.1", @@ -3024,6 +3189,7 @@ "symfony/http-foundation": "^5.0", "symfony/http-kernel": "^5.0", "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", "symfony/process": "^5.0", "symfony/routing": "^5.0", "symfony/var-dumper": "^5.0", @@ -3034,6 +3200,9 @@ "conflict": { "tightenco/collect": "<5.5.33" }, + "provide": { + "psr/container-implementation": "1.0" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -3102,6 +3271,7 @@ "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, @@ -3136,7 +3306,7 @@ "framework", "laravel" ], - "time": "2020-04-15T20:57:47+00:00" + "time": "2020-06-02T22:34:18+00:00" }, { "name": "laravel/tinker", @@ -3204,16 +3374,16 @@ }, { "name": "laravel/ui", - "version": "v2.0.1", + "version": "v2.0.3", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83" + "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", + "url": "https://api.github.com/repos/laravel/ui/zipball/15368c5328efb7ce94f35ca750acde9b496ab1b1", + "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1", "shasum": "" }, "require": { @@ -3255,20 +3425,20 @@ "laravel", "ui" ], - "time": "2020-03-03T20:16:46+00:00" + "time": "2020-04-29T15:06:45+00:00" }, { "name": "laravelcollective/html", - "version": "v6.1.0", + "version": "v6.1.2", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "64f2268bf41bf02b3a9dd3c30f102e934d721664" + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64f2268bf41bf02b3a9dd3c30f102e934d721664", - "reference": "64f2268bf41bf02b3a9dd3c30f102e934d721664", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", "shasum": "" }, "require": { @@ -3323,20 +3493,20 @@ ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2020-03-02T16:41:28+00:00" + "time": "2020-05-19T18:02:16+00:00" }, { "name": "league/commonmark", - "version": "1.4.0", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "517cbe1c6faf90afeb38a0e917c73acc6d3051ce" + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/517cbe1c6faf90afeb38a0e917c73acc6d3051ce", - "reference": "517cbe1c6faf90afeb38a0e917c73acc6d3051ce", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/412639f7cfbc0b31ad2455b2fe965095f66ae505", + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505", "shasum": "" }, "require": { @@ -3397,20 +3567,46 @@ "md", "parser" ], - "time": "2020-04-18T20:46:13+00:00" + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2020-05-04T22:15:21+00:00" }, { "name": "league/flysystem", - "version": "1.0.67", + "version": "1.0.69", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e" + "reference": "7106f78428a344bc4f643c233a94e48795f10967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5b1f36c75c4bdde981294c2a0ebdb437ee6f275e", - "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", + "reference": "7106f78428a344bc4f643c233a94e48795f10967", "shasum": "" }, "require": { @@ -3481,7 +3677,13 @@ "sftp", "storage" ], - "time": "2020-04-16T13:21:26+00:00" + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-05-18T15:13:39+00:00" }, { "name": "league/fractal", @@ -3547,6 +3749,58 @@ ], "time": "2020-01-24T23:17:29+00:00" }, + { + "name": "league/omnipay", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay.git", + "reference": "9e10d91cbf84744207e13d4483e79de39b133368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay/zipball/9e10d91cbf84744207e13d4483e79de39b133368", + "reference": "9e10d91cbf84744207e13d4483e79de39b133368", + "shasum": "" + }, + "require": { + "omnipay/common": "^3", + "php": "^5.6|^7", + "php-http/guzzle6-adapter": "^1.1|^2" + }, + "require-dev": { + "omnipay/tests": "^3" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Omnipay payment processing library", + "homepage": "https://omnipay.thephpleague.com/", + "keywords": [ + "checkout", + "creditcard", + "omnipay", + "payment" + ], + "time": "2019-03-20T14:28:28+00:00" + }, { "name": "lorisleiva/laravel-search-string", "version": "v0.1.6", @@ -3660,6 +3914,73 @@ ], "time": "2020-02-28T15:47:45+00:00" }, + { + "name": "maennchen/zipstream-php", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "shasum": "" + }, + "require": { + "myclabs/php-enum": "^1.5", + "php": ">= 7.1", + "psr/http-message": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "guzzlehttp/guzzle": ">= 6.3", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": ">= 7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "funding": [ + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2020-05-30T13:11:16+00:00" + }, { "name": "markbaker/complex", "version": "1.4.8", @@ -3826,16 +4147,16 @@ }, { "name": "maximebf/debugbar", - "version": "v1.16.1", + "version": "v1.16.3", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "58998b818c6567fac01e35b8a4b70c1a64530556" + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/58998b818c6567fac01e35b8a4b70c1a64530556", - "reference": "58998b818c6567fac01e35b8a4b70c1a64530556", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/1a1605b8e9bacb34cc0c6278206d699772e1d372", + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372", "shasum": "" }, "require": { @@ -3883,7 +4204,7 @@ "debug", "debugbar" ], - "time": "2019-11-24T09:46:11+00:00" + "time": "2020-05-06T07:06:27+00:00" }, { "name": "misterphilip/maintenance-mode", @@ -3993,21 +4314,103 @@ "time": "2019-09-18T18:44:20+00:00" }, { - "name": "monolog/monolog", - "version": "2.0.2", + "name": "moneyphp/money", + "version": "v3.3.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "url": "https://github.com/moneyphp/money.git", + "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/moneyphp/money/zipball/122664c2621a95180a13c1ac81fea1d2ef20781e", + "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e", "shasum": "" }, "require": { - "php": "^7.2", + "ext-json": "*", + "php": ">=5.6" + }, + "require-dev": { + "cache/taggable-cache": "^0.4.0", + "doctrine/instantiator": "^1.0.5", + "ext-bcmath": "*", + "ext-gmp": "*", + "ext-intl": "*", + "florianv/exchanger": "^1.0", + "florianv/swap": "^3.0", + "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3", + "moneyphp/iso-currencies": "^3.2.1", + "php-http/message": "^1.4", + "php-http/mock-client": "^1.0.0", + "phpspec/phpspec": "^3.4.3", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5", + "psr/cache": "^1.0", + "symfony/phpunit-bridge": "^4" + }, + "suggest": { + "ext-bcmath": "Calculate without integer limits", + "ext-gmp": "Calculate without integer limits", + "ext-intl": "Format Money objects with intl", + "florianv/exchanger": "Exchange rates library for PHP", + "florianv/swap": "Exchange rates library for PHP", + "psr/cache-implementation": "Used for Currency caching" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Verraes", + "email": "mathias@verraes.net", + "homepage": "http://verraes.net" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Frederik Bosch", + "email": "f.bosch@genkgo.nl" + } + ], + "description": "PHP implementation of Fowler's Money pattern", + "homepage": "http://moneyphp.org", + "keywords": [ + "Value Object", + "money", + "vo" + ], + "time": "2020-03-18T17:49:59+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", + "shasum": "" + }, + "require": { + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -4018,11 +4421,11 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^6.0", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", @@ -4071,7 +4474,17 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-05-22T08:12:19+00:00" }, { "name": "monooso/unobserve", @@ -4129,22 +4542,69 @@ "time": "2020-03-13T10:33:22+00:00" }, { - "name": "nesbot/carbon", - "version": "2.32.2", + "name": "myclabs/php-enum", + "version": "1.7.6", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc" + "url": "https://github.com/myclabs/php-enum.git", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2020-02-14T08:15:52+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.35.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4b9bd835261ef23d36397a46a76b496a458305e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4b9bd835261ef23d36397a46a76b496a458305e5", + "reference": "4b9bd835261ef23d36397a46a76b496a458305e5", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { @@ -4162,7 +4622,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" }, "laravel": { "providers": [ @@ -4197,20 +4658,30 @@ "datetime", "time" ], - "time": "2020-03-31T13:43:19+00:00" + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-05-24T18:27:52+00:00" }, { "name": "nikic/php-parser", - "version": "v4.4.0", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120" + "reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", - "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/53c2753d756f5adb586dca79c2ec0e2654dd9463", + "reference": "53c2753d756f5adb586dca79c2ec0e2654dd9463", "shasum": "" }, "require": { @@ -4249,20 +4720,102 @@ "parser", "php" ], - "time": "2020-04-10T16:34:50+00:00" + "time": "2020-06-03T07:24:19+00:00" }, { - "name": "opis/closure", - "version": "3.5.1", + "name": "omnipay/common", + "version": "v3.0.4", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969" + "url": "https://github.com/thephpleague/omnipay-common.git", + "reference": "d6a1bed63cae270da32b2171fe31f820d334d452" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/93ebc5712cdad8d5f489b500c59d122df2e53969", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969", + "url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/d6a1bed63cae270da32b2171fe31f820d334d452", + "reference": "d6a1bed63cae270da32b2171fe31f820d334d452", + "shasum": "" + }, + "require": { + "moneyphp/money": "^3.1", + "php": "^5.6|^7", + "php-http/client-implementation": "^1", + "php-http/discovery": "^1.2.1", + "php-http/message": "^1.5", + "symfony/http-foundation": "^2.1|^3|^4|^5" + }, + "require-dev": { + "omnipay/tests": "^3", + "php-http/mock-client": "^1", + "phpro/grumphp": "^0.14", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "league/omnipay": "The default Omnipay package provides a default HTTP Adapter." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\Common\\": "src/Common" + }, + "classmap": [ + "src/Omnipay.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + }, + { + "name": "Jason Judge", + "email": "jason.judge@consil.co.uk" + }, + { + "name": "Del" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-common/contributors" + } + ], + "description": "Common components for Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-common", + "keywords": [ + "gateway", + "merchant", + "omnipay", + "pay", + "payment", + "purchase" + ], + "time": "2020-06-02T05:57:19+00:00" + }, + { + "name": "opis/closure", + "version": "3.5.3", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/cac47092144043d5d676e2e7cf8d0d2f83fc89ca", + "reference": "cac47092144043d5d676e2e7cf8d0d2f83fc89ca", "shasum": "" }, "require": { @@ -4310,7 +4863,7 @@ "serialization", "serialize" ], - "time": "2019-11-29T22:36:02+00:00" + "time": "2020-05-25T09:32:45+00:00" }, { "name": "phenx/php-font-lib", @@ -4390,25 +4943,379 @@ "time": "2019-09-11T20:02:13+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "name": "php-http/discovery", + "version": "1.7.4", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "url": "https://github.com/php-http/discovery.git", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^4.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", + "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "time": "2020-01-03T11:25:47+00:00" + }, + { + "name": "php-http/guzzle6-adapter", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/client-integration-tests": "^2.0", + "phpunit/phpunit": "^7.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2018-12-16T14:44:03+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "shasum": "" + }, + "require": { + "php": "^7.0", + "php-http/promise": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^4.3.4|^5.0|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2019-12-27T10:07:11+00:00" + }, + { + "name": "php-http/message", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.4", + "php": "^7.1", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^1.0", + "coduo/phpspec-data-provider-extension": "^1.0", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4", + "slim/slim": "^3.0", + "zendframework/zend-diactoros": "^1.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation", + "zendframework/zend-diactoros": "Used with Diactoros Factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + }, + "files": [ + "src/filters.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "time": "2019-08-05T06:55:08+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "time": "2015-12-19T14:08:53+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "~6" - }, "type": "library", "extra": { "branch-alias": { @@ -4439,7 +5346,7 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-04-27T09:25:28+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -4542,16 +5449,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.11.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "c2a205e82f9cf1cc9fab86b79e808d86dd680470" + "reference": "21bfb5b3243b8ceb9eda499a4d699fc42c11a9d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c2a205e82f9cf1cc9fab86b79e808d86dd680470", - "reference": "c2a205e82f9cf1cc9fab86b79e808d86dd680470", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/21bfb5b3243b8ceb9eda499a4d699fc42c11a9d1", + "reference": "21bfb5b3243b8ceb9eda499a4d699fc42c11a9d1", "shasum": "" }, "require": { @@ -4568,18 +5475,19 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", + "maennchen/zipstream-php": "^2.0", "markbaker/complex": "^1.4", "markbaker/matrix": "^1.2", - "php": "^7.1", + "php": "^7.2", "psr/simple-cache": "^1.0" }, "require-dev": { - "dompdf/dompdf": "^0.8.3", + "dompdf/dompdf": "^0.8.5", "friendsofphp/php-cs-fixer": "^2.16", "jpgraph/jpgraph": "^4.0", "mpdf/mpdf": "^8.0", "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^7.5", + "phpunit/phpunit": "^8.5", "squizlabs/php_codesniffer": "^3.5", "tecnickcom/tcpdf": "^6.3" }, @@ -4631,7 +5539,7 @@ "xls", "xlsx" ], - "time": "2020-03-02T13:09:03+00:00" + "time": "2020-05-31T13:49:28+00:00" }, { "name": "phpoption/phpoption", @@ -4690,16 +5598,16 @@ }, { "name": "plank/laravel-mediable", - "version": "4.2.1", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/plank/laravel-mediable.git", - "reference": "9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5" + "reference": "7362587090d8152035d6e94d5586ac0689a84e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/plank/laravel-mediable/zipball/9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5", - "reference": "9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5", + "url": "https://api.github.com/repos/plank/laravel-mediable/zipball/7362587090d8152035d6e94d5586ac0689a84e94", + "reference": "7362587090d8152035d6e94d5586ac0689a84e94", "shasum": "" }, "require": { @@ -4755,7 +5663,7 @@ "media", "uploader" ], - "time": "2020-03-11T01:12:07+00:00" + "time": "2020-06-03T01:51:59+00:00" }, { "name": "predis/predis", @@ -4902,6 +5810,55 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/496a823ef742b632934724bf769560c2a5c7c44e", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2018-10-30T23:29:13+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -5049,16 +6006,16 @@ }, { "name": "psy/psysh", - "version": "v0.10.3", + "version": "v0.10.4", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02" + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2bde2fa03e05dff0aee834598b951d6fc7c6fe02", - "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", "shasum": "" }, "require": { @@ -5117,7 +6074,7 @@ "interactive", "shell" ], - "time": "2020-04-07T06:44:48+00:00" + "time": "2020-05-03T19:32:03+00:00" }, { "name": "ralouphie/getallheaders", @@ -5361,16 +6318,16 @@ }, { "name": "sabberworm/php-css-parser", - "version": "8.3.0", + "version": "8.3.1", "source": { "type": "git", "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f" + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f", - "reference": "91bcc3e3fdb7386c9a2e0e0aa09ca75cc43f121f", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/d217848e1396ef962fb1997cf3e2421acba7f796", + "reference": "d217848e1396ef962fb1997cf3e2421acba7f796", "shasum": "" }, "require": { @@ -5402,20 +6359,20 @@ "parser", "stylesheet" ], - "time": "2019-02-22T07:42:52+00:00" + "time": "2020-06-01T09:10:00+00:00" }, { "name": "santigarcor/laratrust", - "version": "5.2.8", + "version": "5.2.9", "source": { "type": "git", "url": "https://github.com/santigarcor/laratrust.git", - "reference": "c709f44509cf1371b777a01b6eca210bc34a06f8" + "reference": "454a338500ea5ab2807da5ee0a799c9c3d01cc05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/santigarcor/laratrust/zipball/c709f44509cf1371b777a01b6eca210bc34a06f8", - "reference": "c709f44509cf1371b777a01b6eca210bc34a06f8", + "url": "https://api.github.com/repos/santigarcor/laratrust/zipball/454a338500ea5ab2807da5ee0a799c9c3d01cc05", + "reference": "454a338500ea5ab2807da5ee0a799c9c3d01cc05", "shasum": "" }, "require": { @@ -5425,7 +6382,7 @@ }, "require-dev": { "mockery/mockery": ">=0.9.9", - "orchestra/testbench": "~3.6.0|~3.7.0|~3.8.0|~3.9.0", + "orchestra/testbench": "~3.6.0|~3.7.0|~3.8.0|~3.9.0|4.*|5.*", "phpunit/phpunit": ">=4.1" }, "type": "library", @@ -5467,24 +6424,24 @@ "rbac", "roles" ], - "time": "2020-03-09T08:19:36+00:00" + "time": "2020-04-29T23:28:02+00:00" }, { "name": "seld/jsonlint", - "version": "1.7.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19" + "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", + "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" @@ -5516,7 +6473,17 @@ "parser", "validator" ], - "time": "2019-10-24T14:27:39+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2020-04-30T19:05:18+00:00" }, { "name": "seld/phar-utils", @@ -5767,26 +6734,29 @@ }, { "name": "symfony/console", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935" + "reference": "00bed125812716d09b163f0727ef33bb49bf3448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", - "reference": "5fa1caadc8cdaa17bcfb25219f3b53fe294a9935", + "url": "https://api.github.com/repos/symfony/console/zipball/00bed125812716d09b163f0727ef33bb49bf3448", + "reference": "00bed125812716d09b163f0727ef33bb49bf3448", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "conflict": { "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", "symfony/process": "<4.4" @@ -5812,7 +6782,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5839,29 +6809,43 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e" + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/5f8d5271303dad260692ba73dfa21777d38e124e", - "reference": "5f8d5271303dad260692ba73dfa21777d38e124e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -5892,25 +6876,40 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/debug", - "version": "v4.4.7", + "version": "v4.4.9", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "346636d2cae417992ecfd761979b2ab98b339a45" + "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/346636d2cae417992ecfd761979b2ab98b339a45", - "reference": "346636d2cae417992ecfd761979b2ab98b339a45", + "url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6", + "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/http-kernel": "<3.4" @@ -5948,35 +6947,111 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:54:36+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-24T08:33:35+00:00" }, { - "name": "symfony/error-handler", - "version": "v5.0.7", + "name": "symfony/deprecation-contracts", + "version": "v2.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/949ffc17c3ac3a9f8e6232220e2da33913c04ea4", - "reference": "949ffc17c3ac3a9f8e6232220e2da33913c04ea4", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-27T08:34:37+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { + "symfony/deprecation-contracts": "^2.1", "symfony/http-kernel": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6003,25 +7078,41 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-03-30T14:14:32+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc" + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/24f40d95385774ed5c71dbf014edd047e2f2f3dc", - "reference": "24f40d95385774ed5c71dbf014edd047e2f2f3dc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/event-dispatcher-contracts": "^2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -6046,7 +7137,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6073,24 +7164,38 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -6099,7 +7204,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -6131,30 +7236,44 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/filesystem", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" + "reference": "6e4320f06d5f2cce0d96530162491f4465179157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6181,29 +7300,43 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/finder", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d" + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/600a52c29afc0d1caa74acbec8d3095ca7e9910d", - "reference": "600a52c29afc0d1caa74acbec8d3095ca7e9910d", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6230,35 +7363,55 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6" + "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", + "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/mime": "^4.4|^5.0", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "^4.4|^5.0" + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6285,35 +7438,52 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-03-30T14:14:32+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-24T12:18:07+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0" + "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad574c55d451127cab1c45b4ac51bf283e340cf0", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", + "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "~1.0", + "symfony/deprecation-contracts": "^2.1", "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/browser-kit": "<4.4", "symfony/cache": "<5.0", "symfony/config": "<5.0", + "symfony/console": "<4.4", "symfony/dependency-injection": "<4.4", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", @@ -6354,7 +7524,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6381,26 +7551,41 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-03-30T15:04:59+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-31T06:14:18+00:00" }, { "name": "symfony/mime", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" + "reference": "56261f89385f9d13cf843a5101ac72131190bc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", + "url": "https://api.github.com/repos/symfony/mime/zipball/56261f89385f9d13cf843a5101ac72131190bc91", + "reference": "56261f89385f9d13cf843a5101ac72131190bc91", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/mailer": "<4.4" @@ -6412,7 +7597,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6443,20 +7628,34 @@ "mime", "mime-type" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-25T12:33:44+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", "shasum": "" }, "require": { @@ -6468,7 +7667,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6501,20 +7700,34 @@ "polyfill", "portable" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", "shasum": "" }, "require": { @@ -6526,7 +7739,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6560,20 +7773,108 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", "shasum": "" }, "require": { @@ -6587,7 +7888,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6622,20 +7923,111 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", "shasum": "" }, "require": { @@ -6647,7 +8039,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6681,20 +8073,34 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "reference": "f048e612a3905f34931127360bdd2def19a5e582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", "shasum": "" }, "require": { @@ -6703,7 +8109,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6736,20 +8142,34 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", "shasum": "" }, "require": { @@ -6758,7 +8178,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6794,29 +8214,120 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/process", - "version": "v5.0.7", + "name": "symfony/polyfill-php80", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/5e30b2799bc1ad68f7feb62b60a73743589438dd", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/process", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" } }, "autoload": { @@ -6843,24 +8354,40 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/routing", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b" + "reference": "95cf30145b26c758d6d832aa2d0de3128978d556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d98a95d0a684caba47a47c1c50c602a669dc973b", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b", + "url": "https://api.github.com/repos/symfony/routing/zipball/95cf30145b26c758d6d832aa2d0de3128978d556", + "reference": "95cf30145b26c758d6d832aa2d0de3128978d556", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/config": "<5.0", @@ -6886,7 +8413,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6919,24 +8446,38 @@ "uri", "url" ], - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -6945,7 +8486,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -6977,25 +8518,125 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { - "name": "symfony/translation", - "version": "v5.0.7", + "name": "symfony/string", + "version": "v5.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "99b831770e10807dca0979518e2c89edffef5978" + "url": "https://github.com/symfony/string.git", + "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978", - "reference": "99b831770e10807dca0979518e2c89edffef5978", + "url": "https://api.github.com/repos/symfony/string/zipball/90c2a5103f07feb19069379f3abdcdbacc7753a9", + "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^2" }, "conflict": { @@ -7027,7 +8668,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -7054,24 +8695,38 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -7079,7 +8734,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -7111,25 +8766,40 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f74a126acd701392eef2492a17228d42552c86b5" + "reference": "46a942903059b0b05e601f00eb64179e05578c0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f74a126acd701392eef2492a17228d42552c86b5", - "reference": "f74a126acd701392eef2492a17228d42552c86b5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f", + "reference": "46a942903059b0b05e601f00eb64179e05578c0f", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -7152,7 +8822,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -7186,7 +8856,21 @@ "debug", "dump" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7239,20 +8923,20 @@ }, { "name": "vlucas/phpdotenv", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "feb6dad5ae24b1380827aee1629b730080fde500" + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/feb6dad5ae24b1380827aee1629b730080fde500", - "reference": "feb6dad5ae24b1380827aee1629b730080fde500", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0b32505d67c1abbfa829283c86bfc0642a661bf6", + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", + "php": "^5.5.9 || ^7.0 || ^8.0", "phpoption/phpoption": "^1.7.2", "symfony/polyfill-ctype": "^1.9" }, @@ -7299,20 +8983,30 @@ "env", "environment" ], - "time": "2020-04-12T15:20:09+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-05-23T09:43:32+00:00" }, { "name": "voku/portable-ascii", - "version": "1.4.10", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334" + "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/240e93829a5f985fab0984a6e55ae5e26b78a334", - "reference": "240e93829a5f985fab0984a6e55ae5e26b78a334", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/e7f9bd5deff09a57318f9b900ab33a05acfcf4d3", + "reference": "e7f9bd5deff09a57318f9b900ab33a05acfcf4d3", "shasum": "" }, "require": { @@ -7327,8 +9021,7 @@ "type": "library", "autoload": { "psr-4": { - "voku\\": "src/voku/", - "voku\\tests\\": "tests/" + "voku\\": "src/voku/" } }, "notification-url": "https://packagist.org/downloads/", @@ -7348,7 +9041,25 @@ "clean", "php" ], - "time": "2020-03-13T01:23:26+00:00" + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2020-05-26T06:40:44+00:00" }, { "name": "webmozart/assert", @@ -7463,20 +9174,20 @@ }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -7515,7 +9226,21 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" }, { "name": "facade/flare-client-php", @@ -7569,20 +9294,26 @@ "flare", "reporting" ], + "funding": [ + { + "url": "https://www.patreon.com/spatie", + "type": "patreon" + } + ], "time": "2020-03-02T15:52:04+00:00" }, { "name": "facade/ignition", - "version": "2.0.2", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc" + "reference": "5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/67f1677954ad33ca6b77f2c41cf43a58624f27fc", - "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc", + "url": "https://api.github.com/repos/facade/ignition/zipball/5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922", + "reference": "5261c488a1e8a7c3ebdf6a4037c34f5ddeb33922", "shasum": "" }, "require": { @@ -7591,7 +9322,7 @@ "facade/flare-client-php": "^1.0", "facade/ignition-contracts": "^1.0", "filp/whoops": "^2.4", - "illuminate/support": "^7.0", + "illuminate/support": "^7.0|^8.0", "monolog/monolog": "^2.0", "php": "^7.2.5", "scrivo/highlight.php": "^9.15", @@ -7640,7 +9371,7 @@ "laravel", "page" ], - "time": "2020-03-18T19:20:44+00:00" + "time": "2020-06-01T09:04:48+00:00" }, { "name": "facade/ignition-contracts", @@ -7688,16 +9419,16 @@ }, { "name": "filp/whoops", - "version": "2.7.1", + "version": "2.7.2", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130" + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", + "url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a", "shasum": "" }, "require": { @@ -7745,7 +9476,7 @@ "throwable", "whoops" ], - "time": "2020-01-15T10:00:00+00:00" + "time": "2020-05-05T12:28:07+00:00" }, { "name": "fzaninotto/faker", @@ -8026,6 +9757,20 @@ "php", "symfony" ], + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], "time": "2020-04-04T19:56:08+00:00" }, { @@ -8447,16 +10192,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.3", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "67750516bc02f300e2742fed2f50177f8f37bedf" + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf", - "reference": "67750516bc02f300e2742fed2f50177f8f37bedf", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", "shasum": "" }, "require": { @@ -8526,7 +10271,17 @@ "testing", "xunit" ], - "time": "2020-03-31T08:52:04+00:00" + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-22T13:51:52+00:00" }, { "name": "scrivo/highlight.php", @@ -8595,6 +10350,12 @@ "highlight.php", "syntax" ], + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], "time": "2020-03-02T05:59:21+00:00" }, { @@ -9262,5 +11023,6 @@ "php": "^7.2.5", "ext-bcmath": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/config/app.php b/config/app.php index 58edec322..d8831bcbb 100644 --- a/config/app.php +++ b/config/app.php @@ -14,6 +14,10 @@ return [ 'name' => env('APP_NAME', 'Akaunting'), + 'installed' => env('APP_INSTALLED', false), + + 'schedule_time' => env('APP_SCHEDULE_TIME', '9:00'), + /* |-------------------------------------------------------------------------- | Application Environment diff --git a/config/debugbar.php b/config/debugbar.php index 01116a0c5..a0d80cef2 100644 --- a/config/debugbar.php +++ b/config/debugbar.php @@ -122,7 +122,7 @@ return [ 'files' => false, // Show the included files 'config' => false, // Display config settings 'cache' => false, // Display cache events - 'models' => false, // Display models + 'models' => true, // Display models ], /* diff --git a/config/language.php b/config/language.php index 7b404b27a..1dc99e48f 100644 --- a/config/language.php +++ b/config/language.php @@ -122,7 +122,7 @@ return [ | This options indicates the allowed languages. | */ - 'allowed' => ['ar-SA', 'bg-BG', 'bn-BD', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-GB', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hi-IN', 'hr-HR', 'id-ID', 'is-IS', 'it-IT', 'ja-JP', 'ka-GE', 'ko-KR', 'lt-LT', 'lv-LV', 'mk-MK', 'ms-MY', 'nb-NO', 'nl-NL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK', 'sr-RS', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'ur-PK', 'uz-UZ', 'vi-VN', 'zh-CN', 'zh-TW'], + 'allowed' => ['ar-SA', 'bg-BG', 'bn-BD', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-GB', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hi-IN', 'hr-HR', 'id-ID', 'is-IS', 'it-IT', 'ja-JP', 'ka-GE', 'ko-KR', 'lt-LT', 'lv-LV', 'mk-MK', 'ms-MY', 'nb-NO', 'ne-NP', 'nl-NL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK', 'sr-RS', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'ur-PK', 'uz-UZ', 'vi-VN', 'zh-CN', 'zh-TW'], /* |-------------------------------------------------------------------------- diff --git a/config/module.php b/config/module.php index f822699ce..28ca352c9 100644 --- a/config/module.php +++ b/config/module.php @@ -22,9 +22,9 @@ return [ */ 'stubs' => [ 'enabled' => true, - 'path' => base_path() . '/app/Console/Stubs/Modules', + 'path' => base_path('app/Console/Stubs/Modules'), 'files' => [ - 'listeners/install' => 'Listeners/InstallModule.php', + 'listeners/install' => 'Listeners/FinishInstallation.php', 'providers/event' => 'Providers/Event.php', 'routes/admin' => 'Routes/admin.php', 'routes/portal' => 'Routes/portal.php', @@ -67,7 +67,7 @@ return [ | automatically to list of scanned folders. | */ - 'modules' => base_path('modules'), + 'modules' => base_path(env('MODULE_PATHS_MODULES', 'modules')), /* |-------------------------------------------------------------------------- @@ -77,7 +77,7 @@ return [ | Here you may update the modules assets path. | */ - 'assets' => public_path('modules'), + 'assets' => public_path(env('MODULE_PATHS_ASSETS', 'modules')), /* |-------------------------------------------------------------------------- @@ -88,7 +88,7 @@ return [ | the migration files? | */ - 'migration' => base_path('database/migrations'), + 'migration' => base_path(env('MODULE_PATHS_MIGRATION', 'database/migrations')), /* |-------------------------------------------------------------------------- diff --git a/config/version.php b/config/version.php index 586104334..0d32c7b9a 100644 --- a/config/version.php +++ b/config/version.php @@ -10,15 +10,15 @@ return [ 'minor' => '0', - 'patch' => '9', + 'patch' => '13', 'build' => '', 'status' => 'Stable', - 'date' => '20-April-2020', + 'date' => '23-May-2020', - 'time' => '13:00', + 'time' => '21:00', 'zone' => 'GMT +3', diff --git a/database/factories/Bill.php b/database/factories/Bill.php index c63624cfd..3392bdee7 100644 --- a/database/factories/Bill.php +++ b/database/factories/Bill.php @@ -41,7 +41,7 @@ $factory->define(Bill::class, function (Faker $faker) use ($company) { 'currency_code' => setting('default.currency'), 'currency_rate' => '1', 'notes' => $faker->text(5), - 'category_id' => $company->categories()->type('expense')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->expense()->get()->random(1)->pluck('id')->first(), 'contact_id' => $contact->id, 'contact_name' => $contact->name, 'contact_email' => $contact->email, diff --git a/database/factories/Invoice.php b/database/factories/Invoice.php index 59c06e806..78e09ad33 100644 --- a/database/factories/Invoice.php +++ b/database/factories/Invoice.php @@ -42,7 +42,7 @@ $factory->define(Invoice::class, function (Faker $faker) use ($company) { 'currency_code' => setting('default.currency'), 'currency_rate' => '1', 'notes' => $faker->text(5), - 'category_id' => $company->categories()->type('income')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->income()->get()->random(1)->pluck('id')->first(), 'contact_id' => $contact->id, 'contact_name' => $contact->name, 'contact_email' => $contact->email, diff --git a/database/factories/Item.php b/database/factories/Item.php index d61ccaf77..61664c320 100644 --- a/database/factories/Item.php +++ b/database/factories/Item.php @@ -16,7 +16,7 @@ $factory->define(Item::class, function (Faker $faker) use ($company) { 'description' => $faker->text(100), 'purchase_price' => $faker->randomFloat(2, 10, 20), 'sale_price' => $faker->randomFloat(2, 10, 20), - 'category_id' => $company->categories()->type('item')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->item()->get()->random(1)->pluck('id')->first(), 'tax_id' => null, 'enabled' => $faker->boolean ? 1 : 0, ]; diff --git a/database/factories/Transaction.php b/database/factories/Transaction.php index 3a5a85a58..2bdc0c6ff 100644 --- a/database/factories/Transaction.php +++ b/database/factories/Transaction.php @@ -31,13 +31,13 @@ $factory->define(Transaction::class, function (Faker $faker) use ($company) { $factory->state(Transaction::class, 'income', function (Faker $faker) use ($company) { return [ 'type' => 'income', - 'category_id' => $company->categories()->type('income')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->income()->get()->random(1)->pluck('id')->first(), ]; }); $factory->state(Transaction::class, 'expense', function (Faker $faker) use ($company) { return [ 'type' => 'expense', - 'category_id' => $company->categories()->type('expense')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->expense()->get()->random(1)->pluck('id')->first(), ]; }); diff --git a/database/seeds/Dashboards.php b/database/seeds/Dashboards.php index 9f14dbc62..4a238f607 100644 --- a/database/seeds/Dashboards.php +++ b/database/seeds/Dashboards.php @@ -3,14 +3,14 @@ namespace Database\Seeds; use App\Abstracts\Model; -use App\Models\Auth\User; -use App\Models\Common\Widget; -use App\Models\Common\Dashboard; -use App\Utilities\Widgets; +use App\Jobs\Common\CreateDashboard; +use App\Traits\Jobs; use Illuminate\Database\Seeder; class Dashboards extends Seeder { + use Jobs; + /** * Run the database seeds. * @@ -30,29 +30,11 @@ class Dashboards extends Seeder $user_id = $this->command->argument('user'); $company_id = $this->command->argument('company'); - $dashboard = Dashboard::create([ + $this->dispatch(new CreateDashboard([ 'company_id' => $company_id, 'name' => trans_choice('general.dashboards', 1), - 'enabled' => 1, - ]); - - $widgets = Widgets::getClasses(false); - - $sort = 1; - - foreach ($widgets as $class => $name) { - Widget::create([ - 'company_id' => $company_id, - 'dashboard_id' => $dashboard->id, - 'class' => $class, - 'name' => $name, - 'sort' => $sort, - 'settings' => (new $class())->getDefaultSettings(), - ]); - - $sort++; - } - - User::find($user_id)->dashboards()->attach($dashboard->id); + 'with_widgets' => true, + 'users' => $user_id, + ])); } } diff --git a/modules/OfflinePayments/Http/Controllers/Settings.php b/modules/OfflinePayments/Http/Controllers/Settings.php index 806c0f333..9113d78bd 100644 --- a/modules/OfflinePayments/Http/Controllers/Settings.php +++ b/modules/OfflinePayments/Http/Controllers/Settings.php @@ -3,7 +3,7 @@ namespace Modules\OfflinePayments\Http\Controllers; use App\Abstracts\Http\Controller; -use Artisan; +use App\Utilities\Modules; use Illuminate\Http\Response; use Modules\OfflinePayments\Http\Requests\Setting as Request; use Modules\OfflinePayments\Http\Requests\SettingGet as GRequest; @@ -68,7 +68,7 @@ class Settings extends Controller setting()->save(); - Artisan::call('cache:clear'); + Modules::clearPaymentMethodsCache(); $response = [ 'status' => null, @@ -152,7 +152,7 @@ class Settings extends Controller setting()->save(); - Artisan::call('cache:clear'); + Modules::clearPaymentMethodsCache(); $message = trans('messages.success.deleted', ['type' => $remove['name']]); diff --git a/modules/OfflinePayments/Listeners/InstallModule.php b/modules/OfflinePayments/Listeners/FinishInstallation.php similarity index 96% rename from modules/OfflinePayments/Listeners/InstallModule.php rename to modules/OfflinePayments/Listeners/FinishInstallation.php index 2308f0b4d..89a7804ef 100644 --- a/modules/OfflinePayments/Listeners/InstallModule.php +++ b/modules/OfflinePayments/Listeners/FinishInstallation.php @@ -5,7 +5,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\Installed as Event; use App\Traits\Permissions; -class InstallModule +class FinishInstallation { use Permissions; diff --git a/modules/OfflinePayments/Listeners/ShowPaymentMethod.php b/modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php similarity index 94% rename from modules/OfflinePayments/Listeners/ShowPaymentMethod.php rename to modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php index ea7e776a7..66fa8f26d 100644 --- a/modules/OfflinePayments/Listeners/ShowPaymentMethod.php +++ b/modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php @@ -4,7 +4,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\PaymentMethodShowing as Event; -class ShowPaymentMethod +class ShowAsPaymentMethod { /** * Handle the event. diff --git a/modules/OfflinePayments/Listeners/ShowSetting.php b/modules/OfflinePayments/Listeners/ShowInSettingsPage.php similarity index 95% rename from modules/OfflinePayments/Listeners/ShowSetting.php rename to modules/OfflinePayments/Listeners/ShowInSettingsPage.php index 7e8c06138..a69afc123 100644 --- a/modules/OfflinePayments/Listeners/ShowSetting.php +++ b/modules/OfflinePayments/Listeners/ShowInSettingsPage.php @@ -4,7 +4,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\SettingShowing as Event; -class ShowSetting +class ShowInSettingsPage { /** * Handle the event. diff --git a/modules/OfflinePayments/Providers/Event.php b/modules/OfflinePayments/Providers/Event.php index 81c49182b..a83f4d980 100644 --- a/modules/OfflinePayments/Providers/Event.php +++ b/modules/OfflinePayments/Providers/Event.php @@ -3,9 +3,9 @@ namespace Modules\OfflinePayments\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider; -use Modules\OfflinePayments\Listeners\InstallModule; -use Modules\OfflinePayments\Listeners\ShowPaymentMethod; -use Modules\OfflinePayments\Listeners\ShowSetting; +use Modules\OfflinePayments\Listeners\FinishInstallation; +use Modules\OfflinePayments\Listeners\ShowAsPaymentMethod; +use Modules\OfflinePayments\Listeners\ShowInSettingsPage; class Event extends Provider { @@ -16,13 +16,13 @@ class Event extends Provider */ protected $listen = [ \App\Events\Module\Installed::class => [ - InstallModule::class, + FinishInstallation::class, ], \App\Events\Module\PaymentMethodShowing::class => [ - ShowPaymentMethod::class, + ShowAsPaymentMethod::class, ], \App\Events\Module\SettingShowing::class => [ - ShowSetting::class, + ShowInSettingsPage::class, ], ]; } diff --git a/modules/PaypalStandard/Listeners/ShowPaymentMethod.php b/modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php similarity index 93% rename from modules/PaypalStandard/Listeners/ShowPaymentMethod.php rename to modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php index 9d11bb115..76fc7e445 100644 --- a/modules/PaypalStandard/Listeners/ShowPaymentMethod.php +++ b/modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php @@ -4,7 +4,7 @@ namespace Modules\PaypalStandard\Listeners; use App\Events\Module\PaymentMethodShowing as Event; -class ShowPaymentMethod +class ShowAsPaymentMethod { /** * Handle the event. diff --git a/modules/PaypalStandard/Providers/Event.php b/modules/PaypalStandard/Providers/Event.php new file mode 100644 index 000000000..ee4fa3008 --- /dev/null +++ b/modules/PaypalStandard/Providers/Event.php @@ -0,0 +1,20 @@ + [ + ShowAsPaymentMethod::class, + ], + ]; +} diff --git a/modules/PaypalStandard/Providers/Main.php b/modules/PaypalStandard/Providers/Main.php index e98704dab..e046d9eca 100644 --- a/modules/PaypalStandard/Providers/Main.php +++ b/modules/PaypalStandard/Providers/Main.php @@ -3,7 +3,6 @@ namespace Modules\PaypalStandard\Providers; use Illuminate\Support\ServiceProvider as Provider; -use Modules\PaypalStandard\Listeners\ShowPaymentMethod; class Main extends Provider { @@ -16,7 +15,6 @@ class Main extends Provider { $this->loadTranslations(); $this->loadViews(); - $this->loadEvents(); } /** @@ -49,16 +47,6 @@ class Main extends Provider $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'paypal-standard'); } - /** - * Load events. - * - * @return void - */ - public function loadEvents() - { - $this->app['events']->listen(\App\Events\Module\PaymentMethodShowing::class, ShowPaymentMethod::class); - } - /** * Load routes. * diff --git a/modules/PaypalStandard/module.json b/modules/PaypalStandard/module.json index fc7ed3410..a4a262a9e 100644 --- a/modules/PaypalStandard/module.json +++ b/modules/PaypalStandard/module.json @@ -5,6 +5,7 @@ "category": "payment-method", "active": 1, "providers": [ + "Modules\\PaypalStandard\\Providers\\Event", "Modules\\PaypalStandard\\Providers\\Main" ], "aliases": {}, diff --git a/overrides/akaunting/module/Commands/DeleteCommand.php b/overrides/akaunting/module/Commands/DeleteCommand.php index a7868b456..64b51c517 100644 --- a/overrides/akaunting/module/Commands/DeleteCommand.php +++ b/overrides/akaunting/module/Commands/DeleteCommand.php @@ -4,8 +4,8 @@ namespace Akaunting\Module\Commands; use App\Models\Module\Module; use App\Models\Module\ModuleHistory; -use Artisan; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; @@ -62,7 +62,9 @@ class DeleteCommand extends Command // Trigger event event(new \App\Events\Module\Deleted($alias, $company_id)); - Artisan::call('cache:clear'); + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } $this->info("Module [{$alias}] deleted."); } diff --git a/overrides/akaunting/module/Commands/InstallCommand.php b/overrides/akaunting/module/Commands/InstallCommand.php index ffcc216fb..870f3a5b5 100644 --- a/overrides/akaunting/module/Commands/InstallCommand.php +++ b/overrides/akaunting/module/Commands/InstallCommand.php @@ -6,6 +6,7 @@ use App\Models\Module\Module; use App\Models\Module\ModuleHistory; use App\Traits\Permissions; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; @@ -60,7 +61,9 @@ class InstallCommand extends Command 'description' => trans('modules.installed', ['module' => $alias]), ]); - $this->call('cache:clear'); + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } // Disable model cache during installation config(['laravel-model-caching.enabled' => false]); diff --git a/package-lock.json b/package-lock.json index 644c39382..2069014a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,19 +14,19 @@ } }, "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", + "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", + "@babel/generator": "^7.9.6", "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", + "@babel/helpers": "^7.9.6", + "@babel/parser": "^7.9.6", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -46,12 +46,12 @@ } }, "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", "dev": true, "requires": { - "@babel/types": "^7.9.5", + "@babel/types": "^7.9.6", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -85,16 +85,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz", - "integrity": "sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz", + "integrity": "sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==", "dev": true, "requires": { "@babel/helper-function-name": "^7.9.5", "@babel/helper-member-expression-to-functions": "^7.8.3", "@babel/helper-optimise-call-expression": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-replace-supers": "^7.9.6", "@babel/helper-split-export-declaration": "^7.8.3" } }, @@ -229,15 +229,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", - "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.8.3", "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/helper-simple-access": { @@ -278,14 +278,14 @@ } }, "@babel/helpers": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", - "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0" + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/highlight": { @@ -300,9 +300,9 @@ } }, "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -348,9 +348,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", - "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", + "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -571,38 +571,38 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", - "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", + "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", - "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", - "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", + "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.8.3", "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { @@ -663,9 +663,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz", + "integrity": "sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.8.3", @@ -783,9 +783,9 @@ } }, "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -800,9 +800,9 @@ } }, "@babel/runtime-corejs2": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.2.tgz", - "integrity": "sha512-ayjSOxuK2GaSDJFCtLgHnYjuMyIpViNujWrZo8GUpN60/n7juzJKK5yOo6RFVb0zdU9ACJFK+MsZrUnj3OmXMw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.6.tgz", + "integrity": "sha512-TcdM3xc7weMrwTawuG3BTjtVE3mQLXUPQ9CxTbSKOrhn3QAcqCJ2fz+IIv25wztzUnhNZat7hr655YJa61F3zg==", "dev": true, "requires": { "core-js": "^2.6.5", @@ -829,26 +829,26 @@ } }, "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", + "@babel/generator": "^7.9.6", "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.9.5", @@ -1042,9 +1042,9 @@ "dev": true }, "@types/node": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.0.tgz", - "integrity": "sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A==", + "version": "13.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", + "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", "dev": true }, "@types/normalize-package-data": { @@ -2167,9 +2167,9 @@ } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" @@ -2536,13 +2536,13 @@ } }, "browserslist": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz", - "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001038", - "electron-to-chromium": "^1.3.390", + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", "node-releases": "^1.1.53", "pkg-up": "^2.0.0" } @@ -2745,9 +2745,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001043", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001043.tgz", - "integrity": "sha512-MrBDRPJPDBYwACtSQvxg9+fkna5jPXhJlKmuxenl/ml9uf8LHKlDmLpElu+zTW/bEz7lC1m0wTDD7jiIB+hgFg==", + "version": "1.0.30001048", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", + "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", "dev": true }, "case-sensitive-paths-webpack-plugin": { @@ -3101,9 +3101,9 @@ "dev": true }, "collect.js": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.23.0.tgz", - "integrity": "sha512-EjdXlyRdvISTEXBWzpNEtygkfJGyUVkOuNYblBvcgjdbWnAs7xb4f5rE22HKHHBFKLkgeRwhvNPBbyldTut1VQ==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.25.0.tgz", + "integrity": "sha512-Wk+cWM9iQouzCe2RulakcE6BKweADOHYcz3pVcO2e6jRPfTuZWiLmAjJ2+lI3K9ldFyp77GZVheKjaGnoTAofw==", "dev": true }, "collection-visit": { @@ -3846,9 +3846,9 @@ "dev": true }, "d3": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.15.1.tgz", - "integrity": "sha512-Xu9gT6Lm0jH3wWJJSRomFwqnGGi3YAfWIfxNFl4++YVgYOjo3F8V2idAG3nJBgpZOkD0/RHPZX6F4k6tzgOvYw==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", + "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", "requires": { "d3-array": "1", "d3-axis": "1", @@ -3920,9 +3920,9 @@ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "d3-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz", - "integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" }, "d3-contour": { "version": "1.3.2", @@ -4667,9 +4667,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.413", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", - "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==", + "version": "1.3.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz", + "integrity": "sha512-/rG5G7Opcw68/Yrb4qYkz07h3bESVRJjUl4X/FrKLXzoUJleKm6D7K7rTTz8V5LUWnd+BbTOyxJX2XprRqHD8A==", "dev": true }, "element-ui": { @@ -6698,9 +6698,9 @@ "integrity": "sha512-pj4En0cWKG+lcBvC7qrzu5ItiMsYNTgjG2capsPzAbAM/O8ftugGpUUftTTwdGL8KlNvB4CEZ6IBWwpWYzUEpw==" }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "growly": { @@ -6816,13 +6816,33 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "hash-sum": { @@ -7729,13 +7749,6 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true, - "optional": true - }, "is-regex": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", @@ -8773,24 +8786,24 @@ } }, "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", "dev": true }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -8911,9 +8924,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.1.tgz", + "integrity": "sha512-nRKMf9wDS4Fkyd0C9LXh2FFXinD+iwbJ5p/lh3CHitW9kZbRbJ8hCruiadiIXZVbeAqKZzqcTvHnK3mRhFjb6w==" }, "move-concurrently": { "version": "1.0.1", @@ -8970,9 +8983,9 @@ } }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", "dev": true }, "nanomatch": { @@ -9132,9 +9145,9 @@ "dev": true }, "node-sass": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", - "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz", + "integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==", "dev": true, "requires": { "async-foreach": "^0.1.3", @@ -9964,9 +9977,9 @@ "dev": true }, "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", "dev": true, "requires": { "async": "^2.6.2", @@ -9992,9 +10005,9 @@ "dev": true }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", + "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -10614,9 +10627,9 @@ } }, "postcss-value-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", - "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, "prelude-ls": { @@ -11318,9 +11331,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } @@ -11487,14 +11500,11 @@ } }, "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "optional": true, - "requires": { - "is-promise": "^2.1.0" - } + "optional": true }, "run-queue": { "version": "1.0.3", @@ -11547,9 +11557,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", - "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.5.tgz", + "integrity": "sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" @@ -12278,9 +12288,9 @@ } }, "source-map-support": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.17.tgz", - "integrity": "sha512-bwdKOBZ5L0gFRh4KOxNap/J/MpvX9Yxsq9lFDx65s3o7F/NiHy7JRaGIS8MwW6tZPAq9UXE207Il0cfcb5yu/Q==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -12304,9 +12314,9 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { @@ -12846,9 +12856,9 @@ } }, "terser": { - "version": "4.6.11", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.11.tgz", - "integrity": "sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA==", + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -13565,9 +13575,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.1.tgz", - "integrity": "sha512-IaPU2KOPjs/QjMlxFs/TiTtQUSbftQ7lsAvoxe21rtcQohsMhx+1AltXCNhZIpIn46PtODiAgz+o8RbMpKtmJw==", + "version": "15.9.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.2.tgz", + "integrity": "sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -13649,16 +13659,16 @@ } }, "webpack": { - "version": "4.42.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", - "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", + "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/wasm-edit": "1.9.0", "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.2.1", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", @@ -13675,7 +13685,7 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", + "watchpack": "^1.6.1", "webpack-sources": "^1.4.1" }, "dependencies": { diff --git a/public/css/custom.css b/public/css/custom.css index c4b1dd2c2..91fb421dc 100644 --- a/public/css/custom.css +++ b/public/css/custom.css @@ -275,6 +275,13 @@ tbody .row { } /*--------Item Column Image Finish--------*/ +/*--------User Column Image--------*/ +.user-img { + width: 36px; + height: 36px; +} +/*--------User Column Image Finish--------*/ + /*--------Border--------*/ .border-1 { border: 1px solid #e5e5e5 !important; @@ -438,14 +445,6 @@ tbody .row { /*--------Shadow None Focus Finish--------*/ /*--------Settings Index Page Finish--------*/ -/*--------Pagination Alignment--------*/ -.page-item .page-link, -.page-item span { - align-items: unset; - padding-top: 7px; -} -/*--------Pagination Alignment Finish--------*/ - /*--------Avatar Size--------*/ .avatar-size { width: 128px; @@ -543,7 +542,6 @@ table .align-items-center td span.badge { /*--------App Comment--------*/ .media-comment-text { border-top-left-radius: 0.4375rem; - background-color: #ebebf0; padding: 1rem; } /*--------App Comment Finish--------*/ @@ -828,3 +826,7 @@ table .align-items-center td span.badge { .navbar-vertical .navbar-nav .nav-link:not(.active) { color: #fff !important; } + +.form-group.has-error .el-input__inner { + border-color: #ef3232 !important; +} diff --git a/resources/assets/js/components/AkauntingDate.vue b/resources/assets/js/components/AkauntingDate.vue index 924e404fc..ce0710a4d 100644 --- a/resources/assets/js/components/AkauntingDate.vue +++ b/resources/assets/js/components/AkauntingDate.vue @@ -6,7 +6,7 @@ {'disabled': disabled}, formClasses ]" - :error="formError" + :footer-error="formError" :prependIcon="icon" :readonly="readonly" :disabled="disabled" diff --git a/resources/assets/js/components/AkauntingModal.vue b/resources/assets/js/components/AkauntingModal.vue index 9caf432a6..362392c61 100644 --- a/resources/assets/js/components/AkauntingModal.vue +++ b/resources/assets/js/components/AkauntingModal.vue @@ -1,42 +1,45 @@ @@ -60,6 +63,11 @@ export default { props: { show: Boolean, + modalDialogClass: { + type: String, + default: '', + description: "Modal Body size Class" + }, title: { type: String, default: '', @@ -145,4 +153,8 @@ export default { .modal.show { background-color: rgba(0, 0, 0, 0.3); } + + .modal-md { + max-width: 650px; + } diff --git a/resources/assets/js/components/AkauntingModalAddNew.vue b/resources/assets/js/components/AkauntingModalAddNew.vue index 24cce235f..f8315de5c 100644 --- a/resources/assets/js/components/AkauntingModalAddNew.vue +++ b/resources/assets/js/components/AkauntingModalAddNew.vue @@ -1,46 +1,48 @@ @@ -262,4 +264,8 @@ export default { .modal.show { background-color: rgba(0, 0, 0, 0.3); } + + .modal-md { + max-width: 650px; + } diff --git a/resources/assets/js/components/AkauntingMoney.vue b/resources/assets/js/components/AkauntingMoney.vue index 692f09281..8514695d7 100644 --- a/resources/assets/js/components/AkauntingMoney.vue +++ b/resources/assets/js/components/AkauntingMoney.vue @@ -126,6 +126,8 @@ export default { }, mounted() { + //this.model = this.value; + this.$emit('interface', this.model); }, @@ -136,6 +138,7 @@ export default { this.$emit('input', this.model); }, + input(event) { this.model = event; @@ -161,9 +164,11 @@ export default { masked: this.masked }; }, + value: function (value) { this.model = value; }, + model: function (model) { this.$emit('change', this.model); this.$emit('interface', this.model); diff --git a/resources/assets/js/components/AkauntingSelect.vue b/resources/assets/js/components/AkauntingSelect.vue index 836ee4c53..34f43f88f 100644 --- a/resources/assets/js/components/AkauntingSelect.vue +++ b/resources/assets/js/components/AkauntingSelect.vue @@ -1127,6 +1127,10 @@ export default { this.$emit('new', response.data.data); this.change(); + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); } }) .catch(error => { @@ -1142,6 +1146,10 @@ export default { this.add_new.show = false; this.add_new.html = null; this.add_new_html = null; + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); }, addModal() { diff --git a/resources/assets/js/components/AkauntingSelectRemote.vue b/resources/assets/js/components/AkauntingSelectRemote.vue index c0a11c4fc..714299cb0 100644 --- a/resources/assets/js/components/AkauntingSelectRemote.vue +++ b/resources/assets/js/components/AkauntingSelectRemote.vue @@ -825,6 +825,10 @@ export default { this.$emit('new', response.data.data); this.change(); + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); } }) .catch(error => { @@ -840,6 +844,10 @@ export default { this.add_new.show = false; this.add_new.html = null; this.add_new_html = null; + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); }, addModal() { diff --git a/resources/assets/js/components/Inputs/BaseInput.vue b/resources/assets/js/components/Inputs/BaseInput.vue index 4d59ec559..a8fda25d2 100644 --- a/resources/assets/js/components/Inputs/BaseInput.vue +++ b/resources/assets/js/components/Inputs/BaseInput.vue @@ -52,6 +52,11 @@ + +
+
+
@stack('js') diff --git a/resources/views/partials/admin/navbar.blade.php b/resources/views/partials/admin/navbar.blade.php index 03f87a071..c0ca922ef 100644 --- a/resources/views/partials/admin/navbar.blade.php +++ b/resources/views/partials/admin/navbar.blade.php @@ -2,6 +2,8 @@