Merge pull request #6954 from firefly-iii/fix-6947-2

Fix 6947 2
This commit is contained in:
James Cole 2023-02-01 06:06:35 +01:00 committed by GitHub
commit b98050e238
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 77 deletions

View File

@ -2,7 +2,7 @@
/* /*
* CreateGroupMemberships.php * CreateGroupMemberships.php
* Copyright (c) 2021 james@firefly-iii.org * Copyright (c) 2023 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
* *
@ -22,7 +22,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace FireflyIII\Console\Commands\Upgrade; namespace FireflyIII\Console\Commands\Integrity;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\GroupMembership; use FireflyIII\Models\GroupMembership;
@ -31,8 +31,6 @@ use FireflyIII\Models\UserRole;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Log; use Log;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
/** /**
* Class CreateGroupMemberships * Class CreateGroupMemberships
@ -51,7 +49,7 @@ class CreateGroupMemberships extends Command
* *
* @var string * @var string
*/ */
protected $signature = 'firefly-iii:create-group-memberships {--F|force : Force the execution of this command.}'; protected $signature = 'firefly-iii:create-group-memberships';
/** /**
* Execute the console command. * Execute the console command.
@ -62,36 +60,15 @@ class CreateGroupMemberships extends Command
public function handle(): int public function handle(): int
{ {
$start = microtime(true); $start = microtime(true);
if ($this->isExecuted() && true !== $this->option('force')) {
$this->warn('This command has already been executed.');
return 0;
}
$this->createGroupMemberships(); $this->createGroupMemberships();
$this->markAsExecuted();
$end = round(microtime(true) - $start, 2); $end = round(microtime(true) - $start, 2);
$this->info(sprintf('in %s seconds.', $end)); $this->info(sprintf('Validated group memberships in %s seconds.', $end));
return 0; return 0;
} }
/**
* @return bool
* @throws FireflyException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
private function isExecuted(): bool
{
$configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false);
if (null !== $configVar) {
return (bool)$configVar->data;
}
return false;
}
/** /**
* *
* @throws FireflyException * @throws FireflyException
@ -127,35 +104,37 @@ class CreateGroupMemberships extends Command
*/ */
private function createGroupMembership(User $user): void private function createGroupMembership(User $user): void
{ {
// check if membership exists
$userGroup = UserGroup::where('title', $user->email)->first();
if (null === $userGroup) {
$userGroup = UserGroup::create(['title' => $user->email]); $userGroup = UserGroup::create(['title' => $user->email]);
Log::debug(sprintf('Created new user group #%d ("%s")', $userGroup->id, $userGroup->title));
}
$userRole = UserRole::where('title', UserRole::OWNER)->first(); $userRole = UserRole::where('title', UserRole::OWNER)->first();
if (null === $userRole) { if (null === $userRole) {
throw new FireflyException('Firefly III could not find a user role. Please make sure all validations have run.'); throw new FireflyException('Firefly III could not find a user role. Please make sure all migrations have run.');
} }
$membership = GroupMembership::where('user_id', $user->id)
/** @var GroupMembership|null $membership */ ->where('user_group_id', $userGroup->id)
$membership = GroupMembership::create( ->where('user_role_id', $userRole->id)->first();
if (null === $membership) {
GroupMembership::create(
[ [
'user_id' => $user->id, 'user_id' => $user->id,
'user_role_id' => $userRole->id, 'user_role_id' => $userRole->id,
'user_group_id' => $userGroup->id, 'user_group_id' => $userGroup->id,
] ]
); );
if (null === $membership) { Log::debug('Created new membership.');
throw new FireflyException('Firefly III could not create user group management object. Please make sure all validations have run.');
} }
if (null === $user->user_group_id) {
$user->user_group_id = $userGroup->id; $user->user_group_id = $userGroup->id;
$user->save(); $user->save();
Log::debug('Put user in default group.');
}
Log::debug(sprintf('User #%d now has main group.', $user->id)); Log::debug(sprintf('User #%d now has main group.', $user->id));
} }
/**
*
*/
private function markAsExecuted(): void
{
app('fireflyconfig')->set(self::CONFIG_NAME, true);
}
} }

View File

@ -74,7 +74,6 @@ class UpgradeDatabase extends Command
'firefly-iii:migrate-tag-locations', 'firefly-iii:migrate-tag-locations',
'firefly-iii:migrate-recurrence-type', 'firefly-iii:migrate-recurrence-type',
'firefly-iii:upgrade-liabilities', 'firefly-iii:upgrade-liabilities',
'firefly-iii:create-group-memberships',
'firefly-iii:liabilities-600', 'firefly-iii:liabilities-600',
// there are 16 verify commands. // there are 16 verify commands.
@ -100,6 +99,7 @@ class UpgradeDatabase extends Command
'firefly-iii:fix-transaction-types', 'firefly-iii:fix-transaction-types',
'firefly-iii:fix-frontpage-accounts', 'firefly-iii:fix-frontpage-accounts',
'firefly-iii:fix-ibans', 'firefly-iii:fix-ibans',
'firefly-iii:create-group-memberships',
'firefly-iii:upgrade-group-information', 'firefly-iii:upgrade-group-information',
// two report commands // two report commands

View File

@ -85,7 +85,6 @@ class InstallController extends Controller
'firefly-iii:migrate-tag-locations' => [], 'firefly-iii:migrate-tag-locations' => [],
'firefly-iii:migrate-recurrence-type' => [], 'firefly-iii:migrate-recurrence-type' => [],
'firefly-iii:upgrade-liabilities' => [], 'firefly-iii:upgrade-liabilities' => [],
'firefly-iii:create-group-memberships' => [],
'firefly-iii:liabilities-600' => [], 'firefly-iii:liabilities-600' => [],
// verify commands // verify commands
@ -111,9 +110,10 @@ class InstallController extends Controller
'firefly-iii:fix-transaction-types' => [], 'firefly-iii:fix-transaction-types' => [],
'firefly-iii:fix-frontpage-accounts' => [], 'firefly-iii:fix-frontpage-accounts' => [],
'firefly-iii:fix-ibans' => [], 'firefly-iii:fix-ibans' => [],
'firefly-iii:create-group-memberships' => [],
'firefly-iii:upgrade-group-information' => [], 'firefly-iii:upgrade-group-information' => [],
// final command to set latest version in DB // final command to set the latest version in DB
'firefly-iii:set-latest-version' => ['--james-is-cool' => true], 'firefly-iii:set-latest-version' => ['--james-is-cool' => true],
'firefly-iii:verify-security-alerts' => [], 'firefly-iii:verify-security-alerts' => [],
]; ];

View File

@ -174,7 +174,6 @@
"@php artisan firefly-iii:migrate-tag-locations", "@php artisan firefly-iii:migrate-tag-locations",
"@php artisan firefly-iii:migrate-recurrence-type", "@php artisan firefly-iii:migrate-recurrence-type",
"@php artisan firefly-iii:upgrade-liabilities", "@php artisan firefly-iii:upgrade-liabilities",
"@php artisan firefly-iii:create-group-memberships",
"@php artisan firefly-iii:liabilities-600", "@php artisan firefly-iii:liabilities-600",
"@php artisan firefly-iii:fix-piggies", "@php artisan firefly-iii:fix-piggies",
"@php artisan firefly-iii:create-link-types", "@php artisan firefly-iii:create-link-types",
@ -198,6 +197,7 @@
"@php artisan firefly-iii:fix-transaction-types", "@php artisan firefly-iii:fix-transaction-types",
"@php artisan firefly-iii:fix-frontpage-accounts", "@php artisan firefly-iii:fix-frontpage-accounts",
"@php artisan firefly-iii:fix-ibans", "@php artisan firefly-iii:fix-ibans",
"@php artisan firefly-iii:create-group-memberships",
"@php artisan firefly-iii:report-empty-objects", "@php artisan firefly-iii:report-empty-objects",
"@php artisan firefly-iii:report-sum", "@php artisan firefly-iii:report-sum",
"@php artisan firefly-iii:restore-oauth-keys", "@php artisan firefly-iii:restore-oauth-keys",

45
composer.lock generated
View File

@ -1855,21 +1855,21 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v9.48.0", "version": "v9.49.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711" "reference": "e02d9453442ad0a6a2f5dc9df96ea0319d218026"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/c78ae7aeb0cbcb1a205050d3592247ba07f5b711", "url": "https://api.github.com/repos/laravel/framework/zipball/e02d9453442ad0a6a2f5dc9df96ea0319d218026",
"reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711", "reference": "e02d9453442ad0a6a2f5dc9df96ea0319d218026",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"brick/math": "^0.10.2", "brick/math": "^0.9.3|^0.10.2|^0.11",
"doctrine/inflector": "^2.0", "doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.3.2", "dragonmantank/cron-expression": "^3.3.2",
"egulias/email-validator": "^3.2.1|^4.0", "egulias/email-validator": "^3.2.1|^4.0",
"ext-mbstring": "*", "ext-mbstring": "*",
@ -1968,7 +1968,6 @@
"aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).",
"brianium/paratest": "Required to run tests in parallel (^6.0).", "brianium/paratest": "Required to run tests in parallel (^6.0).",
"doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
"ext-bcmath": "Required to use the multiple_of validation rule.",
"ext-ftp": "Required to use the Flysystem FTP driver.", "ext-ftp": "Required to use the Flysystem FTP driver.",
"ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().",
"ext-memcached": "Required to use the memcache cache driver.", "ext-memcached": "Required to use the memcache cache driver.",
@ -2040,20 +2039,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-01-17T15:06:19+00:00" "time": "2023-01-31T14:36:47+00:00"
}, },
{ {
"name": "laravel/passport", "name": "laravel/passport",
"version": "v11.5.1", "version": "v11.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/passport.git", "url": "https://github.com/laravel/passport.git",
"reference": "b20282266211a0a19b0294d3459b5fd268807a6c" "reference": "1d8204e40c63bb6cbb981907fdbeb5c69a4fbae9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/b20282266211a0a19b0294d3459b5fd268807a6c", "url": "https://api.github.com/repos/laravel/passport/zipball/1d8204e40c63bb6cbb981907fdbeb5c69a4fbae9",
"reference": "b20282266211a0a19b0294d3459b5fd268807a6c", "reference": "1d8204e40c63bb6cbb981907fdbeb5c69a4fbae9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2117,7 +2116,7 @@
"issues": "https://github.com/laravel/passport/issues", "issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport" "source": "https://github.com/laravel/passport"
}, },
"time": "2023-01-16T14:52:08+00:00" "time": "2023-01-31T13:41:55+00:00"
}, },
{ {
"name": "laravel/sanctum", "name": "laravel/sanctum",
@ -2186,16 +2185,16 @@
}, },
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
"version": "v1.2.2", "version": "v1.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/serializable-closure.git", "url": "https://github.com/laravel/serializable-closure.git",
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2242,7 +2241,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues", "issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure" "source": "https://github.com/laravel/serializable-closure"
}, },
"time": "2022-09-08T13:45:54+00:00" "time": "2023-01-30T18:31:20+00:00"
}, },
{ {
"name": "laravel/slack-notification-channel", "name": "laravel/slack-notification-channel",
@ -3482,16 +3481,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "2.65.0", "version": "2.66.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "09acf64155c16dc6f580f36569ae89344e9734a3" "reference": "496712849902241f04902033b0441b269effe001"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/09acf64155c16dc6f580f36569ae89344e9734a3", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001",
"reference": "09acf64155c16dc6f580f36569ae89344e9734a3", "reference": "496712849902241f04902033b0441b269effe001",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3580,7 +3579,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-01-06T15:55:01+00:00" "time": "2023-01-29T18:53:47+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",