diff --git a/.ci/phpstan.neon b/.ci/phpstan.neon index 199a9a91bf..12c4a66b9d 100644 --- a/.ci/phpstan.neon +++ b/.ci/phpstan.neon @@ -30,4 +30,4 @@ parameters: - ../bootstrap/app.php # The level 8 is the highest level. original was 5 - level: 2 + level: 3 diff --git a/.env.example b/.env.example index e9f1dd6cb9..b3556dd46f 100644 --- a/.env.example +++ b/.env.example @@ -175,6 +175,10 @@ MAP_DEFAULT_ZOOM=6 # For full instructions on these settings please visit: # https://docs.firefly-iii.org/advanced-installation/authentication # If you use Docker or similar, you can set this variable from a file by appending it with _FILE +# +# If you enable 'ldap' AND you run Docker, the Docker image will contact packagist.org +# This is necessary to download the required packages. +# LOGIN_PROVIDER=eloquent # It's also possible to change the way users are authenticated. You could use Authelia for example. diff --git a/app/Api/V1/Controllers/Data/Bulk/AccountController.php b/app/Api/V1/Controllers/Data/Bulk/AccountController.php index be559d1ead..c38b8ddf7e 100644 --- a/app/Api/V1/Controllers/Data/Bulk/AccountController.php +++ b/app/Api/V1/Controllers/Data/Bulk/AccountController.php @@ -1,24 +1,5 @@ . - */ namespace FireflyIII\Api\V1\Controllers\Data\Bulk; diff --git a/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php b/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php index 0f034d6467..1167326e7f 100644 --- a/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php +++ b/app/Api/V1/Requests/Data/Bulk/MoveTransactionsRequest.php @@ -1,24 +1,5 @@ . - */ namespace FireflyIII\Api\V1\Requests\Data\Bulk; diff --git a/app/Api/V1/Requests/Models/Budget/StoreRequest.php b/app/Api/V1/Requests/Models/Budget/StoreRequest.php index ecaa8f28b8..1594542073 100644 --- a/app/Api/V1/Requests/Models/Budget/StoreRequest.php +++ b/app/Api/V1/Requests/Models/Budget/StoreRequest.php @@ -76,8 +76,8 @@ class StoreRequest extends FormRequest 'currency_code' => 'exists:transaction_currencies,code', // auto budget info 'auto_budget_type' => 'in:reset,rollover,none', - 'auto_budget_amount' => 'min:0|max:1000000000', - 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', + 'auto_budget_amount' => 'numeric|min:0|max:1000000000|required_if:auto_budget_type,reset|required_if:auto_budget_type,rollover', + 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly|required_if:auto_budget_type,reset|required_if:auto_budget_type,rollover', ]; } diff --git a/app/Console/Commands/Correction/CorrectDatabase.php b/app/Console/Commands/Correction/CorrectDatabase.php index 29cc6f4e2b..ee61a0bb72 100644 --- a/app/Console/Commands/Correction/CorrectDatabase.php +++ b/app/Console/Commands/Correction/CorrectDatabase.php @@ -76,6 +76,7 @@ class CorrectDatabase extends Command 'firefly-iii:fix-recurring-transactions', 'firefly-iii:restore-oauth-keys', 'firefly-iii:fix-transaction-types', + 'firefly-iii:fix-frontpage-accounts' ]; foreach ($commands as $command) { $this->line(sprintf('Now executing %s', $command)); diff --git a/app/Console/Commands/Correction/DeleteEmptyJournals.php b/app/Console/Commands/Correction/DeleteEmptyJournals.php index 7fe3f66778..f73b293a5d 100644 --- a/app/Console/Commands/Correction/DeleteEmptyJournals.php +++ b/app/Console/Commands/Correction/DeleteEmptyJournals.php @@ -71,6 +71,7 @@ class DeleteEmptyJournals extends Command ->groupBy('transactions.transaction_journal_id') ->get([DB::raw('COUNT(transactions.transaction_journal_id) as the_count'), 'transaction_journal_id']); $total = 0; + /** @var Transaction $row */ foreach ($set as $row) { $count = (int)$row->the_count; if (1 === $count % 2) { diff --git a/app/Console/Commands/Correction/FixFrontpageAccounts.php b/app/Console/Commands/Correction/FixFrontpageAccounts.php new file mode 100644 index 0000000000..865b11a3da --- /dev/null +++ b/app/Console/Commands/Correction/FixFrontpageAccounts.php @@ -0,0 +1,106 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Console\Commands\Correction; + +use FireflyIII\Models\AccountType; +use FireflyIII\Models\Preference; +use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Support\Facades\Preferences; +use FireflyIII\User; +use Illuminate\Console\Command; + +/** + * Class FixFrontpageAccounts + */ +class FixFrontpageAccounts extends Command +{ + /** + * The console command description. + * + * @var string + */ + protected $description = 'Fixes a preference that may include deleted accounts or accounts of another type.'; + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'firefly-iii:fix-frontpage-accounts'; + + /** + * Execute the console command. + * + * @return int + */ + public function handle(): int + { + $start = microtime(true); + + $users = User::get(); + /** @var User $user */ + foreach ($users as $user) { + $preference = Preferences::getForUser($user, 'frontPageAccounts', null); + if (null !== $preference) { + $this->fixPreference($preference); + } + } + $end = round(microtime(true) - $start, 2); + $this->info(sprintf('Verifying account preferences took %s seconds', $end)); + + return 0; + } + + /** + * @param Preference $preference + */ + private function fixPreference(Preference $preference): void + { + $fixed = []; + /** @var AccountRepositoryInterface $repository */ + $repository = app(AccountRepositoryInterface::class); + if (null === $preference->user) { + return; + } + $repository->setUser($preference->user); + $data = $preference->data; + if (is_array($data)) { + /** @var string $accountId */ + foreach ($data as $accountId) { + $accountId = (int)$accountId; + $account = $repository->findNull($accountId); + if (null !== $account) { + if ( + in_array($account->accountType->type, [AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE], true) + && true === $account->active + ) { + $fixed[] = $account->id; + continue; + } + } + } + } + Preferences::setForUser($preference->user, 'frontPageAccounts', $fixed); + } +} diff --git a/app/Console/Commands/Correction/FixGroupAccounts.php b/app/Console/Commands/Correction/FixGroupAccounts.php index 9cc6ed924c..7b818ce46e 100644 --- a/app/Console/Commands/Correction/FixGroupAccounts.php +++ b/app/Console/Commands/Correction/FixGroupAccounts.php @@ -60,6 +60,7 @@ class FixGroupAccounts extends Command $res = TransactionJournal ::groupBy('transaction_group_id') ->get(['transaction_group_id', DB::raw('COUNT(transaction_group_id) as the_count')]); + /** @var TransactionJournal $journal */ foreach ($res as $journal) { if ((int)$journal->the_count > 1) { $groups[] = (int)$journal->transaction_group_id; diff --git a/app/Console/Commands/DecryptDatabase.php b/app/Console/Commands/DecryptDatabase.php index a9e8cfb548..60897032f4 100644 --- a/app/Console/Commands/DecryptDatabase.php +++ b/app/Console/Commands/DecryptDatabase.php @@ -177,7 +177,7 @@ class DecryptDatabase extends Command /** * Tries to decrypt data. Will only throw an exception when the MAC is invalid. * - * @param $value + * @param mixed $value * * @return string * @throws FireflyException diff --git a/app/Console/Commands/Export/ExportData.php b/app/Console/Commands/Export/ExportData.php index 5f70ddef59..5c39b6e861 100644 --- a/app/Console/Commands/Export/ExportData.php +++ b/app/Console/Commands/Export/ExportData.php @@ -28,6 +28,7 @@ use Carbon\Carbon; use Exception; use FireflyIII\Console\Commands\VerifiesAccessToken; use FireflyIII\Exceptions\FireflyException; +use FireflyIII\Models\Account; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; @@ -124,11 +125,11 @@ class ExportData extends Command $exporter->setExportBills($options['export']['bills']); $exporter->setExportPiggies($options['export']['piggies']); $data = $exporter->export(); - if (0===count($data)) { + if (0 === count($data)) { $this->error('You must export *something*. Use --export-transactions or another option. See docs.firefly-iii.org'); } $returnCode = 0; - if (0!== count($data)) { + if (0 !== count($data)) { try { $this->exportData($options, $data); app('telemetry')->feature('system.command.executed', $this->signature); @@ -199,24 +200,27 @@ class ExportData extends Command $error = false; if (null !== $this->option($field)) { try { - $date = Carbon::createFromFormat('Y-m-d', $this->option($field)); + $date = Carbon::createFromFormat('!Y-m-d', $this->option($field)); } catch (InvalidArgumentException $e) { Log::error($e->getMessage()); $this->error(sprintf('%s date "%s" must be formatted YYYY-MM-DD. Field will be ignored.', $field, $this->option('start'))); $error = true; } } - if (false === $error && 'start' === $field) { + + if (true === $error && 'start' === $field) { $journal = $this->journalRepository->firstNull(); $date = null === $journal ? Carbon::now()->subYear() : $journal->date; $date->startOfDay(); } - if (false === $error && 'end' === $field) { + if (true === $error && 'end' === $field) { $date = today(config('app.timezone')); $date->endOfDay(); } + if ('end' === $field) { + $date->endOfDay(); + } - // fallback return $date; } @@ -238,7 +242,7 @@ class ExportData extends Command $accounts = $this->accountRepository->getAccountsByType($types); } // filter accounts, - /** @var AccountType $account */ + /** @var Account $account */ foreach ($accounts as $account) { if (in_array($account->accountType->type, $types, true)) { $final->push($account); diff --git a/app/Console/Commands/Upgrade/BackToJournals.php b/app/Console/Commands/Upgrade/BackToJournals.php index 10522e030c..4de0bd1eed 100644 --- a/app/Console/Commands/Upgrade/BackToJournals.php +++ b/app/Console/Commands/Upgrade/BackToJournals.php @@ -144,8 +144,7 @@ class BackToJournals extends Command $chunks = array_chunk($transactions, 500); foreach ($chunks as $chunk) { - $set = DB::table('transactions')->whereIn('transactions.id', $chunk) - ->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); + $set = DB::table('transactions')->whereIn('transactions.id', $chunk)->get(['transaction_journal_id'])->pluck('transaction_journal_id')->toArray(); $array = array_merge($array, $set); } diff --git a/app/Console/Commands/Upgrade/MigrateToGroups.php b/app/Console/Commands/Upgrade/MigrateToGroups.php index 7511eac1ff..8b2e0f3993 100644 --- a/app/Console/Commands/Upgrade/MigrateToGroups.php +++ b/app/Console/Commands/Upgrade/MigrateToGroups.php @@ -414,7 +414,7 @@ class MigrateToGroups extends Command if ($total > 0) { Log::debug(sprintf('Going to convert %d transaction journals. Please hold..', $total)); $this->line(sprintf('Going to convert %d transaction journals. Please hold..', $total)); - /** @var array $journal */ + /** @var array $array */ foreach ($orphanedJournals as $array) { $this->giveGroup($array); } diff --git a/app/Console/Commands/Upgrade/UpgradeDatabase.php b/app/Console/Commands/Upgrade/UpgradeDatabase.php index 7dd43c5b48..8b8a813844 100644 --- a/app/Console/Commands/Upgrade/UpgradeDatabase.php +++ b/app/Console/Commands/Upgrade/UpgradeDatabase.php @@ -95,6 +95,7 @@ class UpgradeDatabase extends Command 'firefly-iii:fix-recurring-transactions', 'firefly-iii:unify-group-accounts', 'firefly-iii:fix-transaction-types', + 'firefly-iii:fix-frontpage-accounts', // two report commands 'firefly-iii:report-empty-objects', diff --git a/app/Exceptions/GracefulNotFoundHandler.php b/app/Exceptions/GracefulNotFoundHandler.php index c87c4a5327..7a95a5c978 100644 --- a/app/Exceptions/GracefulNotFoundHandler.php +++ b/app/Exceptions/GracefulNotFoundHandler.php @@ -48,38 +48,38 @@ class GracefulNotFoundHandler extends ExceptionHandler * Render an exception into an HTTP response. * * @param Request $request - * @param Exception $exception + * @param Throwable $e * * @return mixed - * @throws Exception + * @throws Throwable */ - public function render($request, Throwable $exception) + public function render($request, Throwable $e) { $route = $request->route(); if (null === $route) { - return parent::render($request, $exception); + return parent::render($request, $e); } $name = $route->getName(); if (!auth()->check()) { - return parent::render($request, $exception); + return parent::render($request, $e); } switch ($name) { default: Log::warning(sprintf('GracefulNotFoundHandler cannot handle route with name "%s"', $name)); - return parent::render($request, $exception); + return parent::render($request, $e); case 'accounts.show': case 'accounts.show.all': - return $this->handleAccount($request, $exception); + return $this->handleAccount($request, $e); case 'transactions.show': - return $this->handleGroup($request, $exception); + return $this->handleGroup($request, $e); case 'attachments.show': case 'attachments.edit': case 'attachments.download': case 'attachments.view': // redirect to original attachment holder. - return $this->handleAttachment($request, $exception); + return $this->handleAttachment($request, $e); break; case 'bills.show': $request->session()->reflash(); @@ -131,7 +131,7 @@ class GracefulNotFoundHandler extends ExceptionHandler return redirect(route('index')); } - return parent::render($request, $exception); + return parent::render($request, $e); } } @@ -141,7 +141,7 @@ class GracefulNotFoundHandler extends ExceptionHandler * @param Throwable $exception * * @return Redirector|Response - * @throws Exception + * @throws Throwable */ private function handleAccount(Request $request, Throwable $exception) { @@ -165,11 +165,11 @@ class GracefulNotFoundHandler extends ExceptionHandler } /** - * @param Throwable $request - * @param Exception $exception + * @param Request $request + * @param Throwable $exception * * @return RedirectResponse|\Illuminate\Http\Response|Redirector|Response - * @throws Exception + * @throws Throwable */ private function handleGroup(Request $request, Throwable $exception) { @@ -209,7 +209,7 @@ class GracefulNotFoundHandler extends ExceptionHandler * @param Throwable $exception * * @return RedirectResponse|Redirector|Response - * @throws Exception + * @throws Throwable */ private function handleAttachment(Request $request, Throwable $exception) { diff --git a/app/Factory/TransactionCurrencyFactory.php b/app/Factory/TransactionCurrencyFactory.php index ba769f5338..e8aa313844 100644 --- a/app/Factory/TransactionCurrencyFactory.php +++ b/app/Factory/TransactionCurrencyFactory.php @@ -46,7 +46,7 @@ class TransactionCurrencyFactory public function create(array $data): TransactionCurrency { try { - /** @var TransactionCurrency $currency */ + /** @var TransactionCurrency $result */ $result = TransactionCurrency::create( [ 'name' => $data['name'], diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php index d9fa71a405..4c1788eea4 100644 --- a/app/Factory/TransactionJournalFactory.php +++ b/app/Factory/TransactionJournalFactory.php @@ -543,7 +543,7 @@ class TransactionJournalFactory 'data' => (string)($data[$field] ?? ''), ]; - Log::debug(sprintf('Going to store meta-field "%s", with value "%s".', $set['name'], $set['data'])); + //Log::debug(sprintf('Going to store meta-field "%s", with value "%s".', $set['name'], $set['data'])); /** @var TransactionJournalMetaFactory $factory */ $factory = app(TransactionJournalMetaFactory::class); diff --git a/app/Factory/TransactionJournalMetaFactory.php b/app/Factory/TransactionJournalMetaFactory.php index e109b04ad4..0fb32095f6 100644 --- a/app/Factory/TransactionJournalMetaFactory.php +++ b/app/Factory/TransactionJournalMetaFactory.php @@ -61,7 +61,7 @@ class TransactionJournalMetaFactory $value = $data['data']->toW3cString(); } if ('' === (string)$value) { - //Log::debug('Is an empty string.'); + // Log::debug('Is an empty string.'); // don't store blank strings. if (null !== $entry) { Log::debug('Will not store empty strings, delete meta value'); diff --git a/app/Helpers/Collector/Extensions/MetaCollection.php b/app/Helpers/Collector/Extensions/MetaCollection.php index c726c945d3..50f97ff764 100644 --- a/app/Helpers/Collector/Extensions/MetaCollection.php +++ b/app/Helpers/Collector/Extensions/MetaCollection.php @@ -207,7 +207,7 @@ trait MetaCollection $this->query->leftJoin('journal_meta', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id'); } $this->query->where('journal_meta.name', '=', 'external_id'); - $this->query->where('journal_meta.data', 'LIKE', sprintf('%%%s%%', $externalId)); + $this->query->where('journal_meta.data', '=', sprintf('%s', $externalId)); return $this; } @@ -269,6 +269,19 @@ trait MetaCollection return $this; } + /** + * Limit results to transactions without a bill.. + * + * @return GroupCollectorInterface + */ + public function withBill(): GroupCollectorInterface + { + $this->withBillInformation(); + $this->query->whereNotNull('transaction_journals.bill_id'); + + return $this; + } + /** * Will include bill name + ID, if any. * diff --git a/app/Helpers/Collector/GroupCollector.php b/app/Helpers/Collector/GroupCollector.php index 7f8ed23b72..961781e091 100644 --- a/app/Helpers/Collector/GroupCollector.php +++ b/app/Helpers/Collector/GroupCollector.php @@ -699,7 +699,7 @@ class GroupCollector implements GroupCollectorInterface $result = $this->convertToInteger($result); $result['reconciled'] = 1 === (int)$result['reconciled']; - if (array_key_exists('tag_id', $result)) { // assume the other fields are present as well. + if (array_key_exists('tag_id', $result) && null !== $result['tag_id']) { // assume the other fields are present as well. $tagId = (int)$augumentedJournal['tag_id']; $tagDate = null; try { diff --git a/app/Helpers/Collector/GroupCollectorInterface.php b/app/Helpers/Collector/GroupCollectorInterface.php index 964ad19aa0..380a7598b7 100644 --- a/app/Helpers/Collector/GroupCollectorInterface.php +++ b/app/Helpers/Collector/GroupCollectorInterface.php @@ -520,6 +520,13 @@ interface GroupCollectorInterface */ public function withTagInformation(): GroupCollectorInterface; + /** + * Limit results to transactions without a bill.. + * + * @return GroupCollectorInterface + */ + public function withBill(): GroupCollectorInterface; + /** * Limit results to a transactions without a bill. * @@ -542,8 +549,6 @@ interface GroupCollectorInterface public function withoutCategory(): GroupCollectorInterface; /** - * @param string $value - * * @return GroupCollectorInterface */ public function withoutNotes(): GroupCollectorInterface; diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php index 5deebb3292..0c2c2b5e15 100644 --- a/app/Helpers/Report/ReportHelper.php +++ b/app/Helpers/Report/ReportHelper.php @@ -91,7 +91,7 @@ class ReportHelper implements ReportHelperInterface 'paid_moments' => [], ]; - /** @var Carbon $start */ + /** @var Carbon $expectedStart */ foreach ($expectedDates as $expectedStart) { $expectedEnd = app('navigation')->endOfX($expectedStart, $bill->repeat_freq, null); diff --git a/app/Http/Controllers/Admin/LinkController.php b/app/Http/Controllers/Admin/LinkController.php index 8b78623e9d..a1f65f8a10 100644 --- a/app/Http/Controllers/Admin/LinkController.php +++ b/app/Http/Controllers/Admin/LinkController.php @@ -39,9 +39,7 @@ use Log; */ class LinkController extends Controller { - - /** @var LinkTypeRepositoryInterface */ - private $repository; + private LinkTypeRepositoryInterface $repository; /** * LinkController constructor. diff --git a/app/Http/Controllers/Admin/UpdateController.php b/app/Http/Controllers/Admin/UpdateController.php index 65911fe54d..51020ffef3 100644 --- a/app/Http/Controllers/Admin/UpdateController.php +++ b/app/Http/Controllers/Admin/UpdateController.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Admin; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Update\UpdateTrait; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Http\Middleware\IsDemoUser; @@ -62,8 +63,7 @@ class UpdateController extends Controller * Show page with update options. * * @return Factory|View - * @throws ContainerExceptionInterface - * @throws NotFoundExceptionInterface + * @throws FireflyException */ public function index() { diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index 753e4aeb3a..453725b718 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -59,7 +59,7 @@ class TwoFactorController extends Controller { /** @var array $mfaHistory */ $mfaHistory = Preferences::get('mfa_history', [])->data; - $mfaCode = $request->get('one_time_password'); + $mfaCode = (string)$request->get('one_time_password'); // is in history? then refuse to use it. if ($this->inMFAHistory($mfaCode, $mfaHistory)) { diff --git a/app/Http/Controllers/Bill/IndexController.php b/app/Http/Controllers/Bill/IndexController.php index 6acec42889..1e6c59aca7 100644 --- a/app/Http/Controllers/Bill/IndexController.php +++ b/app/Http/Controllers/Bill/IndexController.php @@ -159,7 +159,6 @@ class IndexController extends Controller continue; } - /** @var TransactionCurrency $currency */ $currencyId = $bill['currency_id']; $sums[$groupOrder][$currencyId] = $sums[$groupOrder][$currencyId] ?? [ 'currency_id' => $currencyId, diff --git a/app/Http/Controllers/Budget/BudgetLimitController.php b/app/Http/Controllers/Budget/BudgetLimitController.php index c281774a4b..eaa1ec3c93 100644 --- a/app/Http/Controllers/Budget/BudgetLimitController.php +++ b/app/Http/Controllers/Budget/BudgetLimitController.php @@ -135,16 +135,21 @@ class BudgetLimitController extends Controller if (null === $currency || null === $budget) { throw new FireflyException('No valid currency or budget.'); } - $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); - $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); + $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + $amount = (string)$request->get('amount'); $start->startOfDay(); $end->startOfDay(); + if ('' === $amount) { + return response()->json([]); + } + Log::debug(sprintf('Start: %s, end: %s', $start->format('Y-m-d'), $end->format('Y-m-d'))); $limit = $this->blRepository->find($budget, $currency, $start, $end); if (null !== $limit) { - $limit->amount = $request->get('amount'); + $limit->amount = $amount; $limit->save(); } if (null === $limit) { @@ -154,7 +159,7 @@ class BudgetLimitController extends Controller 'currency_id' => (int)$request->get('transaction_currency_id'), 'start_date' => $start, 'end_date' => $end, - 'amount' => $request->get('amount'), + 'amount' => $amount, ] ); } @@ -176,7 +181,7 @@ class BudgetLimitController extends Controller return response()->json($array); } - return redirect(route('budgets.index', [$start->format('Y-m-d'), $end->format('Y-m-d')])); + return response()->json([]); } /** @@ -187,7 +192,10 @@ class BudgetLimitController extends Controller */ public function update(Request $request, BudgetLimit $budgetLimit): JsonResponse { - $amount = $request->get('amount'); + $amount = (string)$request->get('amount'); + if ('' === $amount) { + $amount = '0'; + } $limit = $this->blRepository->update($budgetLimit, ['amount' => $amount]); $array = $limit->toArray(); diff --git a/app/Http/Controllers/Budget/ShowController.php b/app/Http/Controllers/Budget/ShowController.php index b16e8142d5..f7f8583f28 100644 --- a/app/Http/Controllers/Budget/ShowController.php +++ b/app/Http/Controllers/Budget/ShowController.php @@ -144,7 +144,7 @@ class ShowController extends Controller */ public function show(Request $request, Budget $budget) { - /** @var Carbon $start */ + /** @var Carbon $allStart */ $allStart = session('first', Carbon::now()->startOfYear()); $allEnd = today(); $page = (int)$request->get('page'); diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index a0afd439dc..77ac926f9a 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -108,7 +108,7 @@ class BudgetController extends Controller $currencies = []; $defaultEntries = []; while ($end >= $loopStart) { - /** @var Carbon $currentEnd */ + /** @var Carbon $loopEnd */ $loopEnd = app('navigation')->endOfPeriod($loopStart, $step); $spent = $this->opsRepository->sumExpenses($loopStart, $loopEnd, null, $collection); $label = trim(app('navigation')->periodShow($loopStart, $step)); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index de6a3a5ab5..4653e88809 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -76,7 +76,7 @@ class CategoryController extends Controller $cache->addProperty('chart.category.all'); $cache->addProperty($category->id); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); } /** @var CategoryRepositoryInterface $repository */ $repository = app(CategoryRepositoryInterface::class); @@ -125,7 +125,7 @@ class CategoryController extends Controller $cache->addProperty($end); $cache->addProperty('chart.category.frontpage'); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); } $frontPageGenerator = new FrontpageChartGenerator($start, $end); @@ -270,7 +270,7 @@ class CategoryController extends Controller $cache->addProperty('chart.category.period.no-cat'); $cache->addProperty($accounts->pluck('id')->toArray()); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); } $data = $this->reportPeriodChart($accounts, $start, $end, null); @@ -283,8 +283,8 @@ class CategoryController extends Controller * Chart for a specific period. * TODO test method, for category refactor. * - * @param Category $category - * @param $date + * @param Category $category + * @param Carbon $date * * @return JsonResponse */ @@ -294,7 +294,7 @@ class CategoryController extends Controller $start = app('navigation')->startOfPeriod($date, $range); $end = session()->get('end'); if ($end < $start) { - [$end, $start] = [$start, $end]; + [$end, $start] = [$start, $end]; } $cache = new CacheProperties; @@ -303,7 +303,7 @@ class CategoryController extends Controller $cache->addProperty($category->id); $cache->addProperty('chart.category.period-chart'); if ($cache->has()) { - return response()->json($cache->get()); + return response()->json($cache->get()); } /** @var WholePeriodChartGenerator $chartGenerator */ diff --git a/app/Http/Controllers/Chart/CategoryReportController.php b/app/Http/Controllers/Chart/CategoryReportController.php index 92c61e323c..d6812134a0 100644 --- a/app/Http/Controllers/Chart/CategoryReportController.php +++ b/app/Http/Controllers/Chart/CategoryReportController.php @@ -140,10 +140,8 @@ class CategoryReportController extends Controller * @param Collection $categories * @param Carbon $start * @param Carbon $end - * @param string $others * * @return JsonResponse - * */ public function categoryIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end): JsonResponse { diff --git a/app/Http/Controllers/Chart/PiggyBankController.php b/app/Http/Controllers/Chart/PiggyBankController.php index c0c451ed0a..3bf3218e97 100644 --- a/app/Http/Controllers/Chart/PiggyBankController.php +++ b/app/Http/Controllers/Chart/PiggyBankController.php @@ -80,9 +80,9 @@ class PiggyBankController extends Controller $locale = app('steam')->getLocale(); // get first event or start date of piggy bank or today - $startDate = $piggyBank->start_date ?? today(config('app.timezone')); + $startDate = $piggyBank->startdate ?? today(config('app.timezone')); - /** @var PiggyBankEvent $first */ + /** @var PiggyBankEvent $firstEvent */ $firstEvent = $set->first(); $firstDate = null === $firstEvent ? new Carbon : $firstEvent->date; diff --git a/app/Http/Controllers/Chart/TransactionController.php b/app/Http/Controllers/Chart/TransactionController.php index 76b8cc1fb8..c57fcc2be7 100644 --- a/app/Http/Controllers/Chart/TransactionController.php +++ b/app/Http/Controllers/Chart/TransactionController.php @@ -52,12 +52,10 @@ class TransactionController extends Controller } /** - * @param string $objectType * @param Carbon $start * @param Carbon $end * * @return JsonResponse - * @throws FireflyException */ public function budgets(Carbon $start, Carbon $end) { diff --git a/app/Http/Controllers/HelpController.php b/app/Http/Controllers/HelpController.php index 1d3b6bdedb..f14958df16 100644 --- a/app/Http/Controllers/HelpController.php +++ b/app/Http/Controllers/HelpController.php @@ -32,7 +32,7 @@ class HelpController extends Controller /** * Show help for a route. * - * @param $route + * @param string $route * * @return JsonResponse */ diff --git a/app/Http/Controllers/Json/AutoCompleteController.php b/app/Http/Controllers/Json/AutoCompleteController.php index af2b1b5f52..98d6fa09a4 100644 --- a/app/Http/Controllers/Json/AutoCompleteController.php +++ b/app/Http/Controllers/Json/AutoCompleteController.php @@ -30,54 +30,9 @@ use Illuminate\Http\Request; /** * Class AutoCompleteController. - * - * TODO autocomplete for transaction types. - * */ class AutoCompleteController extends Controller { - /** - * Searches in the titles of all transaction journals. - * The result is limited to the top 15 unique results. - * - * If the query is numeric, it will append the journal with that particular ID. - * - * @param Request $request - * - * @return JsonResponse - */ - public function allJournalsWithID(Request $request): JsonResponse - { - $search = (string)$request->get('search'); - /** @var JournalRepositoryInterface $repository */ - $repository = app(JournalRepositoryInterface::class); - /** @var TransactionGroupRepositoryInterface $groupRepos */ - $groupRepos = app(TransactionGroupRepositoryInterface::class); - - $result = $repository->searchJournalDescriptions($search); - $array = []; - if (is_numeric($search)) { - // search for group, not journal. - $firstResult = $groupRepos->find((int)$search); - if (null !== $firstResult) { - // group may contain multiple journals, each a result: - foreach ($firstResult->transactionJournals as $journal) { - $array[] = $journal->toArray(); - } - } - } - // if not numeric, search ahead! - - // limit and unique - $limited = $result->slice(0, 15); - $array = array_merge($array, $limited->toArray()); - foreach ($array as $index => $item) { - // give another key for consistency - $array[$index]['name'] = sprintf('#%d: %s', $item['transaction_group_id'], $item['description']); - } - - return response()->json($array); - } } diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index e61be26c82..1e0b984b67 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -191,7 +191,7 @@ class PreferencesController extends Controller // same for locale: if (!auth()->user()->hasRole('demo')) { - /** @var Preference $currentLocale */ + /** @var Preference $locale */ $locale = $request->get('locale'); app('preferences')->set('locale', $locale); } diff --git a/app/Http/Controllers/Recurring/CreateController.php b/app/Http/Controllers/Recurring/CreateController.php index fcc81e3a7b..cbc21db8fe 100644 --- a/app/Http/Controllers/Recurring/CreateController.php +++ b/app/Http/Controllers/Recurring/CreateController.php @@ -148,13 +148,13 @@ class CreateController extends Controller RecurrenceRepetition::WEEKEND_TO_MONDAY => (string)trans('firefly.jump_to_monday'), ]; - /** @var Transaction $source */ - /** @var Transaction $dest */ // fill prefilled with journal info $type = strtolower($journal->transactionType->type); + /** @var Transaction $source */ $source = $journal->transactions()->where('amount', '<', 0)->first(); + /** @var Transaction $dest */ $dest = $journal->transactions()->where('amount', '>', 0)->first(); $category = $journal->categories()->first() ? $journal->categories()->first()->name : ''; $budget = $journal->budgets()->first() ? $journal->budgets()->first()->id : 0; diff --git a/app/Http/Controllers/Report/TagController.php b/app/Http/Controllers/Report/TagController.php index d5c980ad91..94bc705e7c 100644 --- a/app/Http/Controllers/Report/TagController.php +++ b/app/Http/Controllers/Report/TagController.php @@ -122,7 +122,7 @@ class TagController extends Controller foreach ($earned as $currency) { $currencyId = $currency['currency_id']; - /** @var array $category */ + /** @var array $tag */ foreach ($currency['tags'] as $tag) { foreach ($tag['transaction_journals'] as $journal) { $destinationId = $journal['destination_account_id']; diff --git a/app/Http/Controllers/Rule/IndexController.php b/app/Http/Controllers/Rule/IndexController.php index 7731fea3f6..2ce1d05fda 100644 --- a/app/Http/Controllers/Rule/IndexController.php +++ b/app/Http/Controllers/Rule/IndexController.php @@ -73,12 +73,10 @@ class IndexController extends Controller */ public function index() { - /** @var User $user */ - $user = auth()->user(); $this->createDefaultRuleGroup(); $this->createDefaultRule(); $this->ruleGroupRepos->resetOrder(); - $ruleGroups = $this->ruleGroupRepos->getRuleGroupsWithRules(null); + $ruleGroups = $this->ruleGroupRepos->getAllRuleGroupsWithRules(null); return prefixView('rules.index', compact('ruleGroups')); } diff --git a/app/Http/Controllers/System/InstallController.php b/app/Http/Controllers/System/InstallController.php index ad808437e3..f74120e1c0 100644 --- a/app/Http/Controllers/System/InstallController.php +++ b/app/Http/Controllers/System/InstallController.php @@ -105,6 +105,7 @@ class InstallController extends Controller 'firefly-iii:fix-recurring-transactions' => [], 'firefly-iii:unify-group-accounts' => [], 'firefly-iii:fix-transaction-types' => [], + 'firefly-iii:fix-frontpage-accounts' => [], // final command to set latest version in DB 'firefly-iii:set-latest-version' => ['--james-is-cool' => true], diff --git a/app/Http/Controllers/Transaction/CreateController.php b/app/Http/Controllers/Transaction/CreateController.php index 8a38cf7a57..dbae963b8d 100644 --- a/app/Http/Controllers/Transaction/CreateController.php +++ b/app/Http/Controllers/Transaction/CreateController.php @@ -100,7 +100,7 @@ class CreateController extends Controller $repository = app(AccountRepositoryInterface::class); $cash = $repository->getCashAccount(); $preFilled = session()->has('preFilled') ? session('preFilled') : []; - $subTitle = (string)trans('breadcrumbs.create_new_transaction'); + $subTitle = (string)trans(sprintf('breadcrumbs.create_%s', strtolower((string)$objectType))); $subTitleIcon = 'fa-plus'; $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; $allowedOpposingTypes = config('firefly.allowed_opposing_types'); diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 67336284f9..27c60f65b1 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -34,7 +34,7 @@ use Illuminate\Http\Request; class TrustProxies extends Middleware { /** @var int The headers to check. */ - protected $headers = Request::HEADER_X_FORWARDED_ALL; + //protected $headers = Request::HEADER_X_FORWARDED_ALL; /** * TrustProxies constructor. diff --git a/app/Http/Requests/BudgetFormStoreRequest.php b/app/Http/Requests/BudgetFormStoreRequest.php index 60555fa624..f4a18f21ed 100644 --- a/app/Http/Requests/BudgetFormStoreRequest.php +++ b/app/Http/Requests/BudgetFormStoreRequest.php @@ -65,7 +65,7 @@ class BudgetFormStoreRequest extends FormRequest 'active' => 'numeric|between:0,1', 'auto_budget_type' => 'numeric|between:0,2', 'auto_budget_currency_id' => 'exists:transaction_currencies,id', - 'auto_budget_amount' => 'min:0|max:1000000000', + 'auto_budget_amount' => 'min:0|max:1000000000|required_if:auto_budget_type,1|required_if:auto_budget_type,2', 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', ]; } diff --git a/app/Http/Requests/BudgetFormUpdateRequest.php b/app/Http/Requests/BudgetFormUpdateRequest.php index a907df9db4..0e4f63d7fe 100644 --- a/app/Http/Requests/BudgetFormUpdateRequest.php +++ b/app/Http/Requests/BudgetFormUpdateRequest.php @@ -75,7 +75,7 @@ class BudgetFormUpdateRequest extends FormRequest 'active' => 'numeric|between:0,1', 'auto_budget_type' => 'numeric|between:0,2', 'auto_budget_currency_id' => 'exists:transaction_currencies,id', - 'auto_budget_amount' => 'min:0|max:1000000000', + 'auto_budget_amount' => 'min:0|max:1000000000|required_if:auto_budget_type,1|required_if:auto_budget_type,2', 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly', ]; } diff --git a/app/Models/Account.php b/app/Models/Account.php index cb8494a026..fd7e650407 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -22,6 +22,7 @@ declare(strict_types=1); namespace FireflyIII\Models; +use Carbon\Carbon; use Eloquent; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; @@ -87,6 +88,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|Account withTrashed() * @method static Builder|Account withoutTrashed() * @mixin Eloquent + * @property Carbon $lastActivityDate */ class Account extends Model { diff --git a/app/Models/Budget.php b/app/Models/Budget.php index d5a48c2f5a..c0ed5391a6 100644 --- a/app/Models/Budget.php +++ b/app/Models/Budget.php @@ -74,6 +74,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @method static Builder|Budget withTrashed() * @method static Builder|Budget withoutTrashed() * @mixin Eloquent + * @property string $email */ class Budget extends Model { diff --git a/app/Models/Category.php b/app/Models/Category.php index 36d5dcb30d..68ab640827 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -44,6 +44,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property \Illuminate\Support\Carbon|null $deleted_at * @property int $user_id * @property string $name + * @property Carbon $lastActivity * @property bool $encrypted * @property-read Collection|\FireflyIII\Models\Attachment[] $attachments * @property-read int|null $attachments_count diff --git a/app/Models/LinkType.php b/app/Models/LinkType.php index be9510f90c..d4ca05aa2a 100644 --- a/app/Models/LinkType.php +++ b/app/Models/LinkType.php @@ -40,6 +40,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @property string $name * @property string $outward * @property string $inward + * @property int $journalCount * @property bool $editable * @property-read Collection|\FireflyIII\Models\TransactionJournalLink[] $transactionJournalLinks * @property-read int|null $transaction_journal_links_count diff --git a/app/Models/Preference.php b/app/Models/Preference.php index f473853d77..defa83e588 100644 --- a/app/Models/Preference.php +++ b/app/Models/Preference.php @@ -22,7 +22,6 @@ declare(strict_types=1); namespace FireflyIII\Models; -use Carbon\Carbon; use Eloquent; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; @@ -33,13 +32,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * FireflyIII\Models\Preference * - * @property int $id + * @property int $id * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at - * @property int $user_id - * @property string $name - * @property int|string|array|null $data - * @property-read User $user + * @property int $user_id + * @property string $name + * @property int|string|array|null $data + * @property-read User $user * @method static Builder|Preference newModelQuery() * @method static Builder|Preference newQuery() * @method static Builder|Preference query() @@ -73,19 +72,29 @@ class Preference extends Model * * @param string $value * - * @throws NotFoundHttpException * @return Preference + * @throws NotFoundHttpException */ public static function routeBinder(string $value): Preference { if (auth()->check()) { /** @var User $user */ $user = auth()->user(); - /** @var Preference $preference */ + /** @var Preference|null $preference */ $preference = $user->preferences()->where('name', $value)->first(); if (null !== $preference) { return $preference; } + $default = config('firefly.default_preferences'); + if (array_key_exists($value, $default)) { + $preference = new Preference; + $preference->name = $value; + $preference->data = $default[$value]; + $preference->user_id = $user->id; + $preference->save(); + + return $preference; + } } throw new NotFoundHttpException; } diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php index 418a673d00..b20f7b47d2 100644 --- a/app/Models/Transaction.php +++ b/app/Models/Transaction.php @@ -83,6 +83,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @method static \Illuminate\Database\Query\Builder|Transaction withTrashed() * @method static \Illuminate\Database\Query\Builder|Transaction withoutTrashed() * @mixin Eloquent + * @property int $the_count */ class Transaction extends Model { diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 0b63f2e1df..5c95f267c8 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -114,6 +114,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; * @mixin Eloquent * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Location[] $locations * @property-read int|null $locations_count + * @property int $the_count */ class TransactionJournal extends Model { diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index 79172efbf0..f2f8e6876a 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -46,6 +46,7 @@ interface AccountRepositoryInterface */ public function count(array $types): int; + /** * Moved here from account CRUD. * @@ -65,6 +66,14 @@ interface AccountRepositoryInterface */ public function expandWithDoubles(Collection $accounts): Collection; + /** + * @param string $number + * @param array $types + * + * @return Account|null + */ + public function findByAccountNumber(string $number, array $types): ?Account; + /** * @param string $iban * @param array $types diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 833b4cb041..b296995edd 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -98,10 +98,10 @@ class BudgetRepository implements BudgetRepositoryInterface $budgets = $this->getBudgets(); /** @var Budget $budget */ foreach ($budgets as $budget) { - DB::table('budget_transaction')->where('budget_id', $budget->id)->delete(); - DB::table('budget_transaction_journal')->where('budget_id', $budget->id)->delete(); - RecurrenceTransactionMeta::where('name', 'budget_id')->where('value', $budget->id)->delete(); - RuleAction::where('action_type', 'set_budget')->where('action_value', $budget->id)->delete(); + DB::table('budget_transaction')->where('budget_id', (int)$budget->id)->delete(); + DB::table('budget_transaction_journal')->where('budget_id', (int)$budget->id)->delete(); + RecurrenceTransactionMeta::where('name', 'budget_id')->where('value', (string)$budget->id)->delete(); + RuleAction::where('action_type', 'set_budget')->where('action_value', (string)$budget->id)->delete(); $budget->delete(); } } @@ -328,7 +328,7 @@ class BudgetRepository implements BudgetRepositoryInterface Log::error($e->getTraceAsString()); throw new FireflyException('400002: Could not store budget.', 0, $e); } - if (!array_key_exists('auto_budget_type', $data)) { + if (!array_key_exists('auto_budget_type', $data) || !array_key_exists('auto_budget_amount', $data) || !array_key_exists('auto_budget_period', $data)) { return $newBudget; } $type = $data['auto_budget_type']; diff --git a/app/Repositories/RuleGroup/RuleGroupRepository.php b/app/Repositories/RuleGroup/RuleGroupRepository.php index c6747145ca..f1fad15cef 100644 --- a/app/Repositories/RuleGroup/RuleGroupRepository.php +++ b/app/Repositories/RuleGroup/RuleGroupRepository.php @@ -258,6 +258,58 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface ); } + /** + * @param string|null $filter + * + * @return Collection + */ + public function getAllRuleGroupsWithRules(?string $filter): Collection + { + $groups = $this->user->ruleGroups() + ->orderBy('order', 'ASC') + ->with( + [ + 'rules' => static function (HasMany $query) { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleTriggers' => static function (HasMany $query) { + $query->orderBy('order', 'ASC'); + }, + 'rules.ruleActions' => static function (HasMany $query) { + $query->orderBy('order', 'ASC'); + }, + ] + )->get(); + if (null === $filter) { + return $groups; + } + Log::debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); + + return $groups->map( + function (RuleGroup $group) use ($filter) { + Log::debug(sprintf('Now filtering group #%d', $group->id)); + // filter the rules in the rule group: + $group->rules = $group->rules->filter( + function (Rule $rule) use ($filter) { + Log::debug(sprintf('Now filtering rule #%d', $rule->id)); + foreach ($rule->ruleTriggers as $trigger) { + if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) { + Log::debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); + + return true; + } + } + Log::debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); + + return false; + } + ); + + return $group; + } + ); + } + /** * @param RuleGroup $group * diff --git a/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php b/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php index 7d4f7a64de..b3f3b90985 100644 --- a/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php +++ b/app/Repositories/RuleGroup/RuleGroupRepositoryInterface.php @@ -114,6 +114,15 @@ interface RuleGroupRepositoryInterface */ public function getRuleGroupsWithRules(?string $filter): Collection; + /** + * Also inactive groups. + * + * @param string|null $filter + * + * @return Collection + */ + public function getAllRuleGroupsWithRules(?string $filter): Collection; + /** * @param RuleGroup $group * diff --git a/app/Services/Internal/Support/JournalServiceTrait.php b/app/Services/Internal/Support/JournalServiceTrait.php index 968eef3507..bdbdf9ab44 100644 --- a/app/Services/Internal/Support/JournalServiceTrait.php +++ b/app/Services/Internal/Support/JournalServiceTrait.php @@ -79,6 +79,7 @@ trait JournalServiceTrait $result = $this->findAccountById($data, $expectedTypes[$transactionType]); $result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]); $result = $this->findAccountByIban($result, $data, $expectedTypes[$transactionType]); + $result = $this->findAccountByNumber($result, $data, $expectedTypes[$transactionType]); $result = $this->createAccount($result, $data, $expectedTypes[$transactionType][0]); return $this->getCashAccount($result, $data, $expectedTypes[$transactionType]); @@ -160,6 +161,34 @@ trait JournalServiceTrait return $account; } + /** + * @param Account|null $account + * @param array $data + * @param array $types + * + * @return Account|null + */ + private function findAccountByNumber(?Account $account, array $data, array $types): ?Account + { + // third attempt, find by account number + if (null === $account && null !== $data['number']) { + Log::debug(sprintf('Searching for account number "%s".', $data['number'])); + // find by preferred type. + $source = $this->accountRepository->findByAccountNumber((string) $data['number'], [$types[0]]); + + // or any expected type. + $source = $source ?? $this->accountRepository->findByAccountNumber((string) $data['number'], $types); + + if (null !== $source) { + Log::debug(sprintf('Found account: #%d, %s', $source->id, $source->name)); + + $account = $source; + } + } + + return $account; + } + /** * @param Account|null $account * @param array $data diff --git a/app/Services/Internal/Update/JournalUpdateService.php b/app/Services/Internal/Update/JournalUpdateService.php index 3a285c2c21..0ff12ae493 100644 --- a/app/Services/Internal/Update/JournalUpdateService.php +++ b/app/Services/Internal/Update/JournalUpdateService.php @@ -292,7 +292,7 @@ class JournalUpdateService $validator->setTransactionType($expectedType); $validator->setUser($this->transactionJournal->user); $validator->source = $this->getValidSourceAccount(); - $result = $validator->validateDestination($destId, $destName, null); + $result = $validator->validateDestination($destId, $destName, null); Log::debug(sprintf('hasValidDestinationAccount(%d, "%s") will return %s', $destId, $destName, var_export($result, true))); // TODO typeOverrule: the account validator may have another opinion on the transaction type. @@ -527,6 +527,10 @@ class JournalUpdateService Log::debug('Will update budget.'); $this->storeBudget($this->transactionJournal, new NullArrayObject($this->data)); } + // is transfer? remove budget + if (TransactionType::TRANSFER === $this->transactionJournal->transactionType->type) { + $this->transactionJournal->budgets()->sync([]); + } } /** diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php index a5286b9b7a..d82ff2314c 100644 --- a/app/Support/ExpandedForm.php +++ b/app/Support/ExpandedForm.php @@ -221,16 +221,15 @@ class ExpandedForm /** @var Eloquent $entry */ foreach ($set as $entry) { $entryId = (int)$entry->id; // @phpstan-ignore-line + $current = $entry->toArray(); $title = null; - foreach ($fields as $field) { - if (property_exists($entry, $field) && null === $title) { - $title = $entry->$field; // @phpstan-ignore-line + if (array_key_exists($field, $current) && null === $title) { + $title = $current[$field]; // @phpstan-ignore-line } } $selectList[$entryId] = $title; } - return $selectList; } diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index f7d031f15a..23b37550b2 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -153,7 +153,7 @@ class Preferences */ public function getForUser(User $user, string $name, $default = null): ?Preference { - $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id', 'name', 'data', 'updated_at', 'created_at']); + $preference = Preference::where('user_id', $user->id)->where('name', $name)->first(['id','user_id', 'name', 'data', 'updated_at', 'created_at']); if (null !== $preference && null === $preference->data) { try { $preference->delete(); diff --git a/app/Support/Search/OperatorQuerySearch.php b/app/Support/Search/OperatorQuerySearch.php index b0792b2740..65ce6e8cad 100644 --- a/app/Support/Search/OperatorQuerySearch.php +++ b/app/Support/Search/OperatorQuerySearch.php @@ -476,6 +476,12 @@ class OperatorQuerySearch implements SearchInterface // // bill // + case 'has_no_bill': + $this->collector->withoutBill(); + break; + case 'has_any_bill': + $this->collector->withBill(); + break; case 'bill_is': $result = $this->billRepository->searchBill($value, 25); if ($result->count() > 0) { diff --git a/app/TransactionRules/Actions/SetDestinationAccount.php b/app/TransactionRules/Actions/SetDestinationAccount.php index c530568177..fe87c4b8a1 100644 --- a/app/TransactionRules/Actions/SetDestinationAccount.php +++ b/app/TransactionRules/Actions/SetDestinationAccount.php @@ -56,8 +56,8 @@ class SetDestinationAccount implements ActionInterface */ public function actOnArray(array $journal): bool { - $user = User::find($journal['user_id']); - $type = $journal['transaction_type_type']; + $user = User::find($journal['user_id']); + $type = $journal['transaction_type_type']; /** @var TransactionJournal|null $object */ $object = $user->transactionJournals()->find((int)$journal['transaction_journal_id']); $this->repository = app(AccountRepositoryInterface::class); @@ -108,8 +108,9 @@ class SetDestinationAccount implements ActionInterface } // if this is a withdrawal, the new destination account must be a expense account and may be created: + // or it is a liability, in which case it must be returned. if (TransactionType::WITHDRAWAL === $type) { - $newAccount = $this->findExpenseAccount(); + $newAccount = $this->findWithdrawalDestinationAccount(); } Log::debug(sprintf('New destination account is #%d ("%s").', $newAccount->id, $newAccount->name)); @@ -145,9 +146,10 @@ class SetDestinationAccount implements ActionInterface /** * @return Account */ - private function findExpenseAccount(): Account + private function findWithdrawalDestinationAccount(): Account { - $account = $this->repository->findByName($this->action->action_value, [AccountType::EXPENSE]); + $allowed = config('firefly.expected_source_types.destination.Withdrawal'); + $account = $this->repository->findByName($this->action->action_value, $allowed); if (null === $account) { $data = [ 'name' => $this->action->action_value, diff --git a/app/TransactionRules/Actions/SetSourceAccount.php b/app/TransactionRules/Actions/SetSourceAccount.php index 6c1f709c1d..6a7bf3e232 100644 --- a/app/TransactionRules/Actions/SetSourceAccount.php +++ b/app/TransactionRules/Actions/SetSourceAccount.php @@ -105,8 +105,9 @@ class SetSourceAccount implements ActionInterface } // if this is a deposit, the new source account must be a revenue account and may be created: + // or its a liability if (TransactionType::DEPOSIT === $type) { - $newAccount = $this->findRevenueAccount(); + $newAccount = $this->findDepositSourceAccount(); } Log::debug(sprintf('New source account is #%d ("%s").', $newAccount->id, $newAccount->name)); @@ -140,7 +141,7 @@ class SetSourceAccount implements ActionInterface /** * @return Account */ - private function findRevenueAccount(): Account + private function findDepositSourceAccount(): Account { $allowed = config('firefly.expected_source_types.source.Deposit'); $account = $this->repository->findByName($this->action->action_value, $allowed); diff --git a/app/TransactionRules/Engine/SearchRuleEngine.php b/app/TransactionRules/Engine/SearchRuleEngine.php index e9c8df73bd..56a4e6db21 100644 --- a/app/TransactionRules/Engine/SearchRuleEngine.php +++ b/app/TransactionRules/Engine/SearchRuleEngine.php @@ -174,6 +174,11 @@ class SearchRuleEngine implements RuleEngineInterface private function fireRule(Rule $rule): bool { Log::debug(sprintf('Now going to fire rule #%d', $rule->id)); + if (false === $rule->active) { + Log::debug(sprintf('Rule #%d is not active!', $rule->id)); + + return false; + } if (true === $rule->strict) { Log::debug(sprintf('Rule #%d is a strict rule.', $rule->id)); @@ -223,7 +228,7 @@ class SearchRuleEngine implements RuleEngineInterface Log::debug(sprintf('Now in findStrictRule(#%d)', $rule->id ?? 0)); $searchArray = []; /** @var RuleTrigger $ruleTrigger */ - foreach ($rule->ruleTriggers()->where('active',1)->get() as $ruleTrigger) { + foreach ($rule->ruleTriggers()->where('active', 1)->get() as $ruleTrigger) { // if needs no context, value is different: $needsContext = config(sprintf('firefly.search.operators.%s.needs_context', $ruleTrigger->trigger_type)) ?? true; if (false === $needsContext) { @@ -368,7 +373,7 @@ class SearchRuleEngine implements RuleEngineInterface { Log::debug(sprintf('SearchRuleEngine:: Will now execute actions on transaction journal #%d', $transaction['transaction_journal_id'])); /** @var RuleAction $ruleAction */ - foreach ($rule->ruleActions()->where('active',1)->get() as $ruleAction) { + foreach ($rule->ruleActions()->where('active', 1)->get() as $ruleAction) { $break = $this->processRuleAction($ruleAction, $transaction); if (true === $break) { break; @@ -444,7 +449,7 @@ class SearchRuleEngine implements RuleEngineInterface $total = new Collection; $count = 0; /** @var RuleTrigger $ruleTrigger */ - foreach ($rule->ruleTriggers()->where('active',1)->get() as $ruleTrigger) { + foreach ($rule->ruleTriggers()->where('active', 1)->get() as $ruleTrigger) { if ('user_action' === $ruleTrigger->trigger_type) { Log::debug('Skip trigger type.'); continue; diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index 49e5aa6623..23c9627a51 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -117,7 +117,7 @@ class AccountTransformer extends AbstractTransformer 'opening_balance_date' => $openingBalanceDate, 'liability_type' => $liabilityType, 'liability_direction' => $liabilityDirection, - 'interest' => (float)$interest, + 'interest' => $interest, 'interest_period' => $interestPeriod, 'include_net_worth' => $includeNetWorth, 'longitude' => $longitude, diff --git a/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php b/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php index 606bd9bacf..8ad87b7e61 100644 --- a/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php +++ b/app/Validation/AutoBudget/ValidatesAutoBudgetRequest.php @@ -48,16 +48,21 @@ trait ValidatesAutoBudgetRequest return; } // basic float check: + if (!is_numeric($amount)) { + $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); + return; + } + if ('' === $amount) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget')); } - if (null !== $amount && 1 !== bccomp((string)$amount, '0')) { + if (1 !== bccomp((string)$amount, '0')) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.auto_budget_amount_positive')); } if ('' === $period) { $validator->errors()->add('auto_budget_period', (string)trans('validation.auto_budget_period_mandatory')); } - if (null !== $amount && null !== $currencyId && null !== $currencyCode && '' === $currencyCode && 0 === $currencyId) { + if (null !== $currencyId && null !== $currencyCode && '' === $currencyCode && 0 === $currencyId) { $validator->errors()->add('auto_budget_amount', (string)trans('validation.require_currency_info')); } } diff --git a/changelog.md b/changelog.md index 00b74c1a92..87d8c1ab45 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,41 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 5.5.9 (API 1.5.2) 2021-04-24 + +This update fixes some of the more annoying issues in the new experimental v2 layout (see also [GitHub](https://github.com/firefly-iii/firefly-iii/issues/4618)), but some minor other issues as well. + +### Fixed +- Dashboard preferences would some times retain old or bad data. + +### API +- [Issue 4697](https://github.com/firefly-iii/firefly-iii/issues/4697) Submitting an existing account with an account number only would store it as a new account. +- [Issue 4706](https://github.com/firefly-iii/firefly-iii/issues/4706) Account interest was a float and not a string. +- Store Budget API call would not properly handle auto budgets. + +## 5.5.8 (API 1.5.2) 2021-04-17 + +This update fixes some of the more annoying issues in the new experimental v2 layout (see also [GitHub](https://github.com/firefly-iii/firefly-iii/issues/4618)), but some minor other issues as well. + +### Fixed +- [Issue 4656](https://github.com/firefly-iii/firefly-iii/issues/4656) [issue 4660](https://github.com/firefly-iii/firefly-iii/issues/4660) Various fixes in the v2 layout. +- [Issue 4663](https://github.com/firefly-iii/firefly-iii/issues/4663) It was possible to assign a budget to a transfer. +- [Issue 4664](https://github.com/firefly-iii/firefly-iii/issues/4664) Null pointer in bulk editor +- [Issue 4668](https://github.com/firefly-iii/firefly-iii/issues/4668) Inactive rule groups would not be listed. + +## 5.5.7 (API 1.5.2) 2021-04-11 + +### Added +- [Issue 4627](https://github.com/firefly-iii/firefly-iii/issues/4627) The search and rule engine can search for any transaction with any bill or with no bill at all. Thanks, @devfaz! + +### Fixed +- [Issue 4625](https://github.com/firefly-iii/firefly-iii/issues/4625) Old MySQL servers would choke on the migrations. +- [Issue 4625](https://github.com/firefly-iii/firefly-iii/issues/4625) Some arrays are null when Firefly III starts for the first time. +- [Issue 4628](https://github.com/firefly-iii/firefly-iii/issues/4628) Every transaction appeared to have attachments. +- [Issue 4635](https://github.com/firefly-iii/firefly-iii/issues/4635) Export command ignores your dates. Thanks for the suggested fix, @urquilla! +- [Issue 4646](https://github.com/firefly-iii/firefly-iii/issues/4646) Empty select list + + ## 5.5.6 (API 1.5.2) 2021-04-09 Firefly III features a new *experimental* layout that I'm currently building. You can enable it by setting environment variable `FIREFLY_III_LAYOUT=v2`. Check out [GitHub](https://github.com/firefly-iii/firefly-iii/issues/4618) for the announcement and status updates. This release features an update API version. Check out [the difference](https://github.com/firefly-iii/api-docs-generator/compare/1.5.1...1.5.2). diff --git a/composer.json b/composer.json index c324c9f230..a18d293aca 100644 --- a/composer.json +++ b/composer.json @@ -115,8 +115,7 @@ "phpstan/phpstan-deprecation-rules": "^0.12.5", "phpunit/phpunit": "^9.2", "roave/security-advisories": "dev-master", - "thecodingmachine/phpstan-strict-rules": "^0.12.0", - "vimeo/psalm": "^4.1" + "thecodingmachine/phpstan-strict-rules": "^0.12.0" }, "suggest": { "adldap2/adldap2-laravel": "If you want to login using LDAP.", @@ -192,6 +191,7 @@ "@php artisan firefly-iii:fix-recurring-transactions", "@php artisan firefly-iii:unify-group-accounts", "@php artisan firefly-iii:fix-transaction-types", + "@php artisan firefly-iii:fix-frontpage-accounts", "@php artisan firefly-iii:report-empty-objects", "@php artisan firefly-iii:report-sum", diff --git a/composer.lock b/composer.lock index f966a75292..1b55d3eb35 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": "897bc804b3a43ff012021d9a363d9e53", + "content-hash": "bd033cd41088c7c19fba9031a13c2286", "packages": [ { "name": "bacon/bacon-qr-code", @@ -237,26 +237,25 @@ }, { "name": "defuse/php-encryption", - "version": "v2.2.1", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/defuse/php-encryption.git", - "reference": "0f407c43b953d571421e0020ba92082ed5fb7620" + "reference": "77880488b9954b7884c25555c2a0ea9e7053f9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/defuse/php-encryption/zipball/0f407c43b953d571421e0020ba92082ed5fb7620", - "reference": "0f407c43b953d571421e0020ba92082ed5fb7620", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/77880488b9954b7884c25555c2a0ea9e7053f9d2", + "reference": "77880488b9954b7884c25555c2a0ea9e7053f9d2", "shasum": "" }, "require": { "ext-openssl": "*", "paragonie/random_compat": ">= 2", - "php": ">=5.4.0" + "php": ">=5.6.0" }, "require-dev": { - "nikic/php-parser": "^2.0|^3.0|^4.0", - "phpunit/phpunit": "^4|^5" + "phpunit/phpunit": "^4|^5|^6|^7|^8|^9" }, "bin": [ "bin/generate-defuse-key" @@ -298,22 +297,22 @@ ], "support": { "issues": "https://github.com/defuse/php-encryption/issues", - "source": "https://github.com/defuse/php-encryption/tree/master" + "source": "https://github.com/defuse/php-encryption/tree/v2.3.1" }, - "time": "2018-07-24T23:27:56+00:00" + "time": "2021-04-09T23:57:26+00:00" }, { "name": "diglactic/laravel-breadcrumbs", - "version": "v6.1.0", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/diglactic/laravel-breadcrumbs.git", - "reference": "027178500b57295290d9930f113f81df1a7188cb" + "reference": "8f73674f9c5403625154768f8e123a620fc2d7a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/027178500b57295290d9930f113f81df1a7188cb", - "reference": "027178500b57295290d9930f113f81df1a7188cb", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/8f73674f9c5403625154768f8e123a620fc2d7a5", + "reference": "8f73674f9c5403625154768f8e123a620fc2d7a5", "shasum": "" }, "require": { @@ -321,6 +320,9 @@ "laravel/framework": "^6.0 || ^7.0 || ^8.0", "php": "^7.2 || ^8.0" }, + "conflict": { + "davejamesmiller/laravel-breadcrumbs": "*" + }, "require-dev": { "orchestra/testbench": "^4.10 || ^5.9 || ^6.4", "php-coveralls/php-coveralls": "^2.4", @@ -369,46 +371,45 @@ ], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", - "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v6.1.0" + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v6.1.1" }, - "time": "2021-01-25T18:38:42+00:00" + "time": "2021-04-12T18:06:07+00:00" }, { "name": "doctrine/cache", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "13e3381b25847283a91948d04640543941309727" + "reference": "a9c1b59eba5a08ca2770a76eddb88922f504e8e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", - "reference": "13e3381b25847283a91948d04640543941309727", + "url": "https://api.github.com/repos/doctrine/cache/zipball/a9c1b59eba5a08ca2770a76eddb88922f504e8e0", + "reference": "a9c1b59eba5a08ca2770a76eddb88922f504e8e0", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4" + "doctrine/common": ">2.2,<2.4", + "psr/cache": ">=3" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^8.0", "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "predis/predis": "~1.0", + "psr/cache": "^1.0 || ^2.0", + "symfony/cache": "^4.4 || ^5.2" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" @@ -455,7 +456,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.10.x" + "source": "https://github.com/doctrine/cache/tree/1.11.0" }, "funding": [ { @@ -471,37 +472,39 @@ "type": "tidelift" } ], - "time": "2020-07-07T18:54:01+00:00" + "time": "2021-04-13T14:46:17+00:00" }, { "name": "doctrine/dbal", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "ee6d1260d5cc20ec506455a585945d7bdb98662c" + "reference": "5ba62e7e40df119424866064faf2cef66cb5232a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ee6d1260d5cc20ec506455a585945d7bdb98662c", - "reference": "ee6d1260d5cc20ec506455a585945d7bdb98662c", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/5ba62e7e40df119424866064faf2cef66cb5232a", + "reference": "5ba62e7e40df119424866064faf2cef66cb5232a", "shasum": "" }, "require": { "composer/package-versions-deprecated": "^1.11.99", "doctrine/cache": "^1.0", + "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", "php": "^7.3 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.12.40", + "doctrine/coding-standard": "8.2.0", + "jetbrains/phpstorm-stubs": "2020.2", + "phpstan/phpstan": "0.12.81", "phpstan/phpstan-strict-rules": "^0.12.2", - "phpunit/phpunit": "^9.4", - "psalm/plugin-phpunit": "^0.10.0", + "phpunit/phpunit": "9.5.0", + "psalm/plugin-phpunit": "0.13.0", + "squizlabs/php_codesniffer": "3.6.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.17.2" + "vimeo/psalm": "4.6.4" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -510,11 +513,6 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\DBAL\\": "src" @@ -566,7 +564,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.0.0" + "source": "https://github.com/doctrine/dbal/tree/3.1.0" }, "funding": [ { @@ -582,7 +580,50 @@ "type": "tidelift" } ], - "time": "2020-11-15T18:20:41+00:00" + "time": "2021-04-19T17:51:23+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v0.5.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0|^7.0|^8.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + }, + "time": "2021-03-21T12:59:47+00:00" }, { "name": "doctrine/event-manager", @@ -1412,16 +1453,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1" + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { @@ -1481,9 +1522,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.1" + "source": "https://github.com/guzzle/psr7/tree/1.8.2" }, - "time": "2021-03-21T16:25:00+00:00" + "time": "2021-04-26T09:17:50+00:00" }, { "name": "jc5/google2fa-laravel", @@ -1642,16 +1683,16 @@ }, { "name": "laravel/framework", - "version": "v8.36.2", + "version": "v8.38.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "0debd8ad6b5aa1f61ccc73910adf049af4ca0444" + "reference": "26a73532c54d2c090692bf2e3e64e449669053ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0debd8ad6b5aa1f61ccc73910adf049af4ca0444", - "reference": "0debd8ad6b5aa1f61ccc73910adf049af4ca0444", + "url": "https://api.github.com/repos/laravel/framework/zipball/26a73532c54d2c090692bf2e3e64e449669053ba", + "reference": "26a73532c54d2c090692bf2e3e64e449669053ba", "shasum": "" }, "require": { @@ -1806,7 +1847,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-04-07T12:37:22+00:00" + "time": "2021-04-20T13:50:21+00:00" }, { "name": "laravel/passport", @@ -2253,16 +2294,16 @@ }, { "name": "league/csv", - "version": "9.7.0", + "version": "9.7.1", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f" + "reference": "0ec57e8264ec92565974ead0d1724cf1026e10c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f", - "reference": "4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/0ec57e8264ec92565974ead0d1724cf1026e10c1", + "reference": "0ec57e8264ec92565974ead0d1724cf1026e10c1", "shasum": "" }, "require": { @@ -2333,7 +2374,7 @@ "type": "github" } ], - "time": "2021-03-26T22:08:10+00:00" + "time": "2021-04-17T16:32:08+00:00" }, { "name": "league/event", @@ -2963,16 +3004,16 @@ }, { "name": "opis/closure", - "version": "3.6.1", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5" + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", - "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", + "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", "shasum": "" }, "require": { @@ -3022,9 +3063,9 @@ ], "support": { "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.1" + "source": "https://github.com/opis/closure/tree/3.6.2" }, - "time": "2020-11-07T02:01:34+00:00" + "time": "2021-04-09T13:42:10+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -3268,16 +3309,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.7", + "version": "3.0.8", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d" + "reference": "d9615a6fb970d9933866ca8b4036ec3407b020b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d", - "reference": "d369510df0ebd5e1a5d0fe3d4d23c55fa87a403d", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d9615a6fb970d9933866ca8b4036ec3407b020b6", + "reference": "d9615a6fb970d9933866ca8b4036ec3407b020b6", "shasum": "" }, "require": { @@ -3359,7 +3400,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.7" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.8" }, "funding": [ { @@ -3375,7 +3416,7 @@ "type": "tidelift" } ], - "time": "2021-04-06T14:00:11+00:00" + "time": "2021-04-19T03:20:48+00:00" }, { "name": "pragmarx/google2fa", @@ -4571,16 +4612,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { @@ -4589,7 +4630,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4618,7 +4659,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, "funding": [ { @@ -4634,7 +4675,7 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/error-handler", @@ -4792,16 +4833,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", "shasum": "" }, "require": { @@ -4814,7 +4855,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4851,7 +4892,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" }, "funding": [ { @@ -4867,7 +4908,7 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/finder", @@ -4932,16 +4973,16 @@ }, { "name": "symfony/http-client-contracts", - "version": "v2.3.1", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33" + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", "shasum": "" }, "require": { @@ -4952,9 +4993,8 @@ }, "type": "library", "extra": { - "branch-version": "2.3", "branch-alias": { - "dev-main": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4991,7 +5031,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.3.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" }, "funding": [ { @@ -5007,7 +5047,7 @@ "type": "tidelift" } ], - "time": "2020-10-14T17:08:19+00:00" + "time": "2021-04-11T23:07:08+00:00" }, { "name": "symfony/http-foundation", @@ -6248,21 +6288,21 @@ }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "suggest": { "symfony/service-implementation": "" @@ -6270,7 +6310,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6307,7 +6347,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" }, "funding": [ { @@ -6323,7 +6363,7 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-04-01T10:43:52+00:00" }, { "name": "symfony/string", @@ -6503,16 +6543,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", "shasum": "" }, "require": { @@ -6524,7 +6564,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6561,7 +6601,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" }, "funding": [ { @@ -6577,7 +6617,7 @@ "type": "tidelift" } ], - "time": "2020-09-28T13:05:58+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/var-dumper", @@ -7013,172 +7053,6 @@ } ], "packages-dev": [ - { - "name": "amphp/amp", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", - "shasum": "" - }, - "require": { - "php": ">=7" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6.0.9 | ^7", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Amp\\": "lib" - }, - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "http://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2021-01-10T17:06:37+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Amp\\ByteStream\\": "lib" - }, - "files": [ - "lib/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2021-03-30T17:13:30+00:00" - }, { "name": "barryvdh/laravel-debugbar", "version": "v3.5.5", @@ -7262,16 +7136,16 @@ }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.9.3", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "2f61602e7a7f88ad29b0f71355b4bb71396e923b" + "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/2f61602e7a7f88ad29b0f71355b4bb71396e923b", - "reference": "2f61602e7a7f88ad29b0f71355b4bb71396e923b", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/73b1012b927633a1b4cd623c2e6b1678e6faef08", + "reference": "73b1012b927633a1b4cd623c2e6b1678e6faef08", "shasum": "" }, "require": { @@ -7340,7 +7214,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.9.3" + "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.10.0" }, "funding": [ { @@ -7348,7 +7222,7 @@ "type": "github" } ], - "time": "2021-04-02T14:32:13+00:00" + "time": "2021-04-09T06:17:55+00:00" }, { "name": "barryvdh/reflection-docblock", @@ -7799,43 +7673,6 @@ ], "time": "2021-03-25T17:01:18+00:00" }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, { "name": "doctrine/instantiator", "version": "1.4.0", @@ -8047,119 +7884,18 @@ }, "time": "2021-03-30T06:27:33+00:00" }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/06f0b06043c7438959dbdeed8bb3f699a19be22e", - "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.0" - }, - "time": "2021-01-10T17:48:47+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" - }, - "time": "2021-02-22T14:02:09+00:00" - }, { "name": "filp/whoops", - "version": "2.12.0", + "version": "2.12.1", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "d501fd2658d55491a2295ff600ae5978eaad7403" + "reference": "c13c0be93cff50f88bbd70827d993026821914dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/d501fd2658d55491a2295ff600ae5978eaad7403", - "reference": "d501fd2658d55491a2295ff600ae5978eaad7403", + "url": "https://api.github.com/repos/filp/whoops/zipball/c13c0be93cff50f88bbd70827d993026821914dd", + "reference": "c13c0be93cff50f88bbd70827d993026821914dd", "shasum": "" }, "require": { @@ -8209,7 +7945,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.12.0" + "source": "https://github.com/filp/whoops/tree/2.12.1" }, "funding": [ { @@ -8217,7 +7953,7 @@ "type": "github" } ], - "time": "2021-03-30T12:00:00+00:00" + "time": "2021-04-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -8535,57 +8271,6 @@ ], "time": "2020-11-13T09:40:50+00:00" }, - { - "name": "netresearch/jsonmapper", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/master" - }, - "time": "2020-04-16T18:48:43+00:00" - }, { "name": "nikic/php-parser", "version": "v4.10.4", @@ -8644,16 +8329,16 @@ }, { "name": "nunomaduro/larastan", - "version": "v0.7.2", + "version": "v0.7.4", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "cb7fa0b5af3738772e3568c0a0c7a080851e281d" + "reference": "0ceef2a39b45be9d7f7dd96192a1721ba5112278" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/cb7fa0b5af3738772e3568c0a0c7a080851e281d", - "reference": "cb7fa0b5af3738772e3568c0a0c7a080851e281d", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/0ceef2a39b45be9d7f7dd96192a1721ba5112278", + "reference": "0ceef2a39b45be9d7f7dd96192a1721ba5112278", "shasum": "" }, "require": { @@ -8717,7 +8402,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/v0.7.2" + "source": "https://github.com/nunomaduro/larastan/tree/v0.7.4" }, "funding": [ { @@ -8737,60 +8422,7 @@ "type": "patreon" } ], - "time": "2021-04-08T10:51:16+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" - }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2021-04-16T08:25:31+00:00" }, { "name": "phar-io/manifest", @@ -9130,16 +8762,16 @@ }, { "name": "phpstan/phpstan", - "version": "0.12.83", + "version": "0.12.84", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "4a967cec6efb46b500dd6d768657336a3ffe699f" + "reference": "9c43f15da8798c8f30a4b099e6a94530a558cfd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4a967cec6efb46b500dd6d768657336a3ffe699f", - "reference": "4a967cec6efb46b500dd6d768657336a3ffe699f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9c43f15da8798c8f30a4b099e6a94530a558cfd5", + "reference": "9c43f15da8798c8f30a4b099e6a94530a558cfd5", "shasum": "" }, "require": { @@ -9170,7 +8802,7 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.83" + "source": "https://github.com/phpstan/phpstan/tree/0.12.84" }, "funding": [ { @@ -9186,7 +8818,7 @@ "type": "tidelift" } ], - "time": "2021-04-03T15:35:45+00:00" + "time": "2021-04-19T17:10:54+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -9716,12 +9348,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "07d2f0c0e6553fd7433f2eb7d043260d3bfd351d" + "reference": "3c97c13698c448fdbbda20acb871884a2d8f45b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/07d2f0c0e6553fd7433f2eb7d043260d3bfd351d", - "reference": "07d2f0c0e6553fd7433f2eb7d043260d3bfd351d", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/3c97c13698c448fdbbda20acb871884a2d8f45b1", + "reference": "3c97c13698c448fdbbda20acb871884a2d8f45b1", "shasum": "" }, "conflict": { @@ -9800,7 +9432,7 @@ "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "fuel/core": "<1.8.1", - "getgrav/grav": "<1.7-beta.8", + "getgrav/grav": "<1.7.11", "getkirby/cms": ">=3,<3.4.5", "getkirby/panel": "<2.5.14", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", @@ -9838,6 +9470,9 @@ "monolog/monolog": ">=1.8,<1.12", "moodle/moodle": "<3.5.17|>=3.7,<3.7.9|>=3.8,<3.8.8|>=3.9,<3.9.5|>=3.10,<3.10.2", "namshi/jose": "<2.2", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", "nystudio107/craft-seomatic": "<3.3", @@ -9849,7 +9484,7 @@ "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.8|>=20,<20.0.4", + "openmage/magento-lts": "<=19.4.12|>=20,<=20.0.8", "orchid/platform": ">=9,<9.4.4", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", @@ -9858,7 +9493,7 @@ "paragonie/random_compat": "<2", "passbolt/passbolt_api": "<2.11", "paypal/merchant-sdk-php": "<3.12", - "pear/archive_tar": "<1.4.12", + "pear/archive_tar": "<1.4.13", "personnummer/personnummer": "<3.0.2", "phpfastcache/phpfastcache": ">=5,<5.0.13", "phpmailer/phpmailer": "<6.1.6", @@ -9884,6 +9519,7 @@ "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<0.7.19|>=1-rc.0,<=1-rc.6", "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6-beta", "rainlab/debugbar-plugin": "<3.1", "robrichards/xmlseclibs": "<3.0.4", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", @@ -9891,8 +9527,9 @@ "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.3.4", - "shopware/platform": "<=6.3.5.1", + "shopware/core": "<=6.3.5.2", + "shopware/platform": "<=6.3.5.2", + "shopware/production": "<=6.3.5.2", "shopware/shopware": "<5.6.9", "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", @@ -9969,15 +9606,17 @@ "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.25|>=10,<10.4.14|>=11,<11.1.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", "vrana/adminer": "<4.7.9", "wallabag/tcpdf": "<6.2.22", + "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", @@ -10047,7 +9686,7 @@ "type": "tidelift" } ], - "time": "2021-04-07T21:01:39+00:00" + "time": "2021-04-22T17:19:04+00:00" }, { "name": "sebastian/cli-parser", @@ -11359,161 +10998,6 @@ } ], "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "vimeo/psalm", - "version": "4.7.0", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "d4377c0baf3ffbf0b1ec6998e8d1be2a40971005" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d4377c0baf3ffbf0b1ec6998e8d1be2a40971005", - "reference": "d4377c0baf3ffbf0b1ec6998e8d1be2a40971005", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.10.1", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", - "webmozart/path-util": "^2.3" - }, - "provide": { - "psalm/psalm": "self.version" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.0", - "ext-curl": "*", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.13", - "slevomat/coding-standard": "^6.3.11", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3", - "weirdan/phpunit-appveyor-reporter": "^1.0.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" - }, - "suggest": { - "ext-igbinary": "^2.0.5" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev", - "dev-3.x": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - }, - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", - "keywords": [ - "code", - "inspection", - "php" - ], - "support": { - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.7.0" - }, - "time": "2021-03-29T03:54:38+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - }, - "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], diff --git a/config/firefly.php b/config/firefly.php index 0f388c4444..f57d61962f 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -100,7 +100,7 @@ return [ 'handle_debts' => true, ], - 'version' => '5.5.6', + 'version' => '5.5.9', 'api_version' => '1.5.2', 'db_version' => 16, 'maxUploadSize' => 1073741824, // 1 GB @@ -477,6 +477,8 @@ return [ 'has_any_category' => ['alias' => false, 'needs_context' => false,], 'has_no_budget' => ['alias' => false, 'needs_context' => false,], 'has_any_budget' => ['alias' => false, 'needs_context' => false,], + 'has_no_bill' => ['alias' => false, 'needs_context' => false,], + 'has_any_bill' => ['alias' => false, 'needs_context' => false,], 'has_no_tag' => ['alias' => false, 'needs_context' => false,], 'has_any_tag' => ['alias' => false, 'needs_context' => false,], 'notes_contain' => ['alias' => false, 'needs_context' => true,], @@ -628,14 +630,12 @@ return [ // expected source types for each transaction type, in order of preference. 'expected_source_types' => [ 'source' => [ - TransactionTypeModel::WITHDRAWAL => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], - TransactionTypeModel::DEPOSIT => [AccountType::REVENUE, AccountType::CASH, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE, - AccountType::INITIAL_BALANCE, AccountType::RECONCILIATION,], - TransactionTypeModel::TRANSFER => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], - TransactionTypeModel::OPENING_BALANCE => [AccountType::INITIAL_BALANCE, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, - AccountType::MORTGAGE,], - TransactionTypeModel::RECONCILIATION => [AccountType::RECONCILIATION, AccountType::ASSET], - TransactionTypeModel::LIABILITY_CREDIT => [AccountType::LIABILITY_CREDIT,], + TransactionTypeModel::WITHDRAWAL => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], + TransactionTypeModel::DEPOSIT => [AccountType::REVENUE, AccountType::CASH, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], + TransactionTypeModel::TRANSFER => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE], + TransactionTypeModel::OPENING_BALANCE => [AccountType::INITIAL_BALANCE, AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, + AccountType::MORTGAGE,], + TransactionTypeModel::RECONCILIATION => [AccountType::RECONCILIATION, AccountType::ASSET], // in case no transaction type is known yet, it could be anything. 'none' => [ AccountType::ASSET, @@ -866,4 +866,11 @@ return [ 'valid_asset_fields' => ['account_role', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], 'valid_cc_fields' => ['account_role', 'cc_monthly_payment_date', 'cc_type', 'account_number', 'currency_id', 'BIC', 'include_net_worth'], 'valid_account_fields' => ['account_number', 'currency_id', 'BIC', 'interest', 'interest_period', 'include_net_worth', 'liability_direction'], + 'default_preferences' => [ + 'frontPageAccounts' => [], + 'listPageSize' => 50, + 'currencyPreference' => 'EUR', + 'language' => 'en_US', + 'locale' => 'equal', + ], ]; diff --git a/frontend/build.sh b/frontend/build.sh index b5c117868f..1793ec382f 100755 --- a/frontend/build.sh +++ b/frontend/build.sh @@ -47,7 +47,7 @@ yarn prod # mv public/css ../public/v2 # also copy fonts -cp -r fonts ../public +#cp -r fonts ../public/v2/css # remove built stuff -rm -rf public +rm -rf public/ diff --git a/frontend/package.json b/frontend/package.json index 8160756921..f43b0c5e8c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,6 +11,7 @@ }, "devDependencies": { "axios": "^0.21", + "date-fns": "^2.21.1", "laravel-mix": "^6.0.6", "lodash": "^4.17.19", "lodash.clonedeep": "^4.5.0", @@ -29,7 +30,7 @@ "admin-lte": "^3.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.21.2", - "chart.js": "^3.0.2", + "chart.js": "^3.2.0", "icheck-bootstrap": "^3.0.1", "jquery-ui": "^1.12.1", "leaflet": "^1.7.1", diff --git a/frontend/src/components/accounts/Create.vue b/frontend/src/components/accounts/Create.vue index fa4b72a411..a5f984b6b0 100644 --- a/frontend/src/components/accounts/Create.vue +++ b/frontend/src/components/accounts/Create.vue @@ -22,7 +22,7 @@