diff --git a/app/Api/V1/Controllers/Autocomplete/TransactionController.php b/app/Api/V1/Controllers/Autocomplete/TransactionController.php
index 15a3215a87..79b0687100 100644
--- a/app/Api/V1/Controllers/Autocomplete/TransactionController.php
+++ b/app/Api/V1/Controllers/Autocomplete/TransactionController.php
@@ -54,7 +54,7 @@ class TransactionController extends Controller
function ($request, $next) {
/** @var User $user */
$user = auth()->user();
- $userGroup = $this->validateUserGroup($request);
+ $userGroup = $this->validateUserGroup($request);
$this->repository = app(JournalRepositoryInterface::class);
$this->groupRepository = app(TransactionGroupRepositoryInterface::class);
$this->repository->setUser($user);
diff --git a/app/Api/V1/Controllers/Models/Transaction/StoreController.php b/app/Api/V1/Controllers/Models/Transaction/StoreController.php
index 3858687025..933154037b 100644
--- a/app/Api/V1/Controllers/Models/Transaction/StoreController.php
+++ b/app/Api/V1/Controllers/Models/Transaction/StoreController.php
@@ -62,8 +62,8 @@ class StoreController extends Controller
$this->middleware(
function ($request, $next) {
/** @var User $admin */
- $admin = auth()->user();
- $userGroup = $this->validateUserGroup($request);
+ $admin = auth()->user();
+ $userGroup = $this->validateUserGroup($request);
$this->groupRepository = app(TransactionGroupRepositoryInterface::class);
$this->groupRepository->setUser($admin);
@@ -107,35 +107,36 @@ class StoreController extends Controller
throw new ValidationException($validator);
}
app('preferences')->mark();
- $applyRules = $data['apply_rules'] ?? true;
- $fireWebhooks = $data['fire_webhooks'] ?? true;
+ $applyRules = $data['apply_rules'] ?? true;
+ $fireWebhooks = $data['fire_webhooks'] ?? true;
event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks));
- $manager = $this->getManager();
+ $manager = $this->getManager();
/** @var User $admin */
- $admin = auth()->user();
+ $admin = auth()->user();
// use new group collector:
/** @var GroupCollectorInterface $collector */
- $collector = app(GroupCollectorInterface::class);
+ $collector = app(GroupCollectorInterface::class);
$collector
->setUser($admin)
->setUserGroup($this->userGroup)
// filter on transaction group.
->setTransactionGroup($transactionGroup)
// all info needed for the API:
- ->withAPIInformation();
+ ->withAPIInformation()
+ ;
- $selectedGroup = $collector->getGroups()->first();
+ $selectedGroup = $collector->getGroups()->first();
if (null === $selectedGroup) {
throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.');
}
/** @var TransactionGroupTransformer $transformer */
- $transformer = app(TransactionGroupTransformer::class);
+ $transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters);
- $resource = new Item($selectedGroup, $transformer, 'transactions');
+ $resource = new Item($selectedGroup, $transformer, 'transactions');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
diff --git a/app/Api/V2/Controllers/Autocomplete/AccountController.php b/app/Api/V2/Controllers/Autocomplete/AccountController.php
index 5752b2f69a..946828aafb 100644
--- a/app/Api/V2/Controllers/Autocomplete/AccountController.php
+++ b/app/Api/V2/Controllers/Autocomplete/AccountController.php
@@ -32,7 +32,6 @@ use FireflyIII\Models\AccountBalance;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
-use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
diff --git a/app/Factory/TagFactory.php b/app/Factory/TagFactory.php
index f1ec639ea5..3cdb46d2c3 100644
--- a/app/Factory/TagFactory.php
+++ b/app/Factory/TagFactory.php
@@ -103,7 +103,7 @@ class TagFactory
public function setUser(User $user): void
{
- $this->user = $user;
+ $this->user = $user;
$this->userGroup = $user->userGroup;
}
diff --git a/app/Factory/TransactionFactory.php b/app/Factory/TransactionFactory.php
index 4238aac71c..6fe9dbb539 100644
--- a/app/Factory/TransactionFactory.php
+++ b/app/Factory/TransactionFactory.php
@@ -29,10 +29,8 @@ use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
-use FireflyIII\Models\UserGroup;
use FireflyIII\Rules\UniqueIban;
use FireflyIII\Services\Internal\Update\AccountUpdateService;
-use FireflyIII\User;
use Illuminate\Database\QueryException;
/**
@@ -164,7 +162,7 @@ class TransactionFactory
}
app('log')->debug('Will update account with IBAN information.');
- $service = app(AccountUpdateService::class);
+ $service = app(AccountUpdateService::class);
$service->update($this->account, ['iban' => $this->accountInformation['iban']]);
}
diff --git a/app/Factory/TransactionGroupFactory.php b/app/Factory/TransactionGroupFactory.php
index 4d894a0aea..3ddf9d37f6 100644
--- a/app/Factory/TransactionGroupFactory.php
+++ b/app/Factory/TransactionGroupFactory.php
@@ -96,7 +96,8 @@ class TransactionGroupFactory
$this->user = $user;
}
- public function setUserGroup(UserGroup $userGroup): void {
+ public function setUserGroup(UserGroup $userGroup): void
+ {
$this->userGroup = $userGroup;
}
}
diff --git a/app/Factory/TransactionJournalFactory.php b/app/Factory/TransactionJournalFactory.php
index 0f8e95a8ec..f8d3cc363a 100644
--- a/app/Factory/TransactionJournalFactory.php
+++ b/app/Factory/TransactionJournalFactory.php
@@ -178,6 +178,7 @@ class TransactionJournalFactory
if (true === FireflyConfig::get('utc', false)->data) {
$carbon->setTimezone('UTC');
}
+
try {
// validate source and destination using a new Validator.
$this->validateAccounts($row);
@@ -402,7 +403,7 @@ class TransactionJournalFactory
*/
public function setUser(User $user): void
{
- $this->user = $user;
+ $this->user = $user;
$this->userGroup = $user->userGroup;
$this->currencyRepository->setUser($this->user);
$this->tagFactory->setUser($user);
@@ -413,7 +414,8 @@ class TransactionJournalFactory
$this->accountRepository->setUser($this->user);
}
- public function setUserGroup(UserGroup $userGroup): void {
+ public function setUserGroup(UserGroup $userGroup): void
+ {
$this->userGroup = $userGroup;
$this->currencyRepository->setUserGroup($userGroup);
$this->tagFactory->setUserGroup($userGroup);
diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php
index f5b492b4f1..57728ffe9b 100644
--- a/app/Repositories/Account/AccountRepository.php
+++ b/app/Repositories/Account/AccountRepository.php
@@ -54,7 +54,6 @@ class AccountRepository implements AccountRepositoryInterface
{
use UserGroupTrait;
-
/**
* Moved here from account CRUD.
*/
diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php
index 20e1fafb16..3878423227 100644
--- a/app/Repositories/Account/AccountRepositoryInterface.php
+++ b/app/Repositories/Account/AccountRepositoryInterface.php
@@ -149,6 +149,7 @@ interface AccountRepositoryInterface
public function searchAccountNr(string $query, array $types, int $limit): Collection;
public function setUser(null|Authenticatable|User $user): void;
+
public function setUserGroup(UserGroup $userGroup): void;
public function store(array $data): Account;
diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php
index 25471b2397..3d0299071d 100644
--- a/app/Repositories/Bill/BillRepository.php
+++ b/app/Repositories/Bill/BillRepository.php
@@ -39,8 +39,6 @@ use FireflyIII\Services\Internal\Update\BillUpdateService;
use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
-use FireflyIII\User;
-use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Query\JoinClause;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
diff --git a/app/Repositories/Bill/BillRepositoryInterface.php b/app/Repositories/Bill/BillRepositoryInterface.php
index 2e50edca39..25553941d0 100644
--- a/app/Repositories/Bill/BillRepositoryInterface.php
+++ b/app/Repositories/Bill/BillRepositoryInterface.php
@@ -40,6 +40,7 @@ interface BillRepositoryInterface
public function billEndsWith(string $query, int $limit): Collection;
public function billStartsWith(string $query, int $limit): Collection;
+
public function setUserGroup(UserGroup $userGroup): void;
/**
diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php
index 6b19e6eced..3e7426ec0a 100644
--- a/app/Repositories/Budget/BudgetRepository.php
+++ b/app/Repositories/Budget/BudgetRepository.php
@@ -42,8 +42,6 @@ use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Internal\Destroy\BudgetDestroyService;
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
-use FireflyIII\User;
-use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\QueryException;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php
index 918ba2273f..89e0c44ed3 100644
--- a/app/Repositories/Budget/BudgetRepositoryInterface.php
+++ b/app/Repositories/Budget/BudgetRepositoryInterface.php
@@ -40,6 +40,7 @@ interface BudgetRepositoryInterface
public function budgetEndsWith(string $query, int $limit): Collection;
public function budgetStartsWith(string $query, int $limit): Collection;
+
public function setUserGroup(UserGroup $userGroup): void;
/**
diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php
index f5e7a6b995..5f59f1ce5e 100644
--- a/app/Repositories/Category/CategoryRepositoryInterface.php
+++ b/app/Repositories/Category/CategoryRepositoryInterface.php
@@ -88,6 +88,7 @@ interface CategoryRepositoryInterface
public function searchCategory(string $query, int $limit): Collection;
public function setUser(null|Authenticatable|User $user): void;
+
public function setUserGroup(UserGroup $userGroup): void;
/**
diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php
index aaecbf30da..7f1b1239c0 100644
--- a/app/Repositories/PiggyBank/PiggyBankRepository.php
+++ b/app/Repositories/PiggyBank/PiggyBankRepository.php
@@ -51,7 +51,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
use UserGroupTrait;
-
public function destroyAll(): void
{
Log::channel('audit')->info('Delete all piggy banks through destroyAll');
diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php
index 12551ef4e7..ac8509d6e1 100644
--- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php
+++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php
@@ -137,6 +137,7 @@ interface PiggyBankRepositoryInterface
public function setOrder(PiggyBank $piggyBank, int $newOrder): bool;
public function setUser(null|Authenticatable|User $user): void;
+
public function setUserGroup(UserGroup $userGroup): void;
/**
diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepository.php b/app/Repositories/TransactionGroup/TransactionGroupRepository.php
index 3fad4bb248..b533d19296 100644
--- a/app/Repositories/TransactionGroup/TransactionGroupRepository.php
+++ b/app/Repositories/TransactionGroup/TransactionGroupRepository.php
@@ -44,8 +44,6 @@ use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
use FireflyIII\Services\Internal\Update\GroupUpdateService;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
-use FireflyIII\User;
-use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;
diff --git a/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php b/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php
index c0bc7c35f8..10da55ec14 100644
--- a/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php
+++ b/app/Repositories/TransactionGroup/TransactionGroupRepositoryInterface.php
@@ -99,6 +99,7 @@ interface TransactionGroupRepositoryInterface
public function getTags(int $journalId): array;
public function setUser(null|Authenticatable|User $user): void;
+
public function setUserGroup(UserGroup $userGroup): void;
/**
diff --git a/app/Support/Http/Api/ValidatesUserGroupTrait.php b/app/Support/Http/Api/ValidatesUserGroupTrait.php
index 244d77ae6b..88b1704af4 100644
--- a/app/Support/Http/Api/ValidatesUserGroupTrait.php
+++ b/app/Support/Http/Api/ValidatesUserGroupTrait.php
@@ -39,6 +39,7 @@ use Illuminate\Support\Facades\Log;
trait ValidatesUserGroupTrait
{
protected ?UserGroup $userGroup = null;
+
/**
* An "undocumented" filter
*
@@ -100,6 +101,7 @@ trait ValidatesUserGroupTrait
if ($user->hasRoleInGroupOrOwner($group, $role)) {
Log::debug(sprintf('validateUserGroup: User has role "%s" in group #%d, return the group.', $role->value, $groupId));
$this->userGroup = $group;
+
return $group;
}
Log::debug(sprintf('validateUserGroup: User does NOT have role "%s" in group #%d, continue searching.', $role->value, $groupId));
diff --git a/app/Support/Repositories/UserGroup/UserGroupTrait.php b/app/Support/Repositories/UserGroup/UserGroupTrait.php
index 58029d00d5..4027867e1c 100644
--- a/app/Support/Repositories/UserGroup/UserGroupTrait.php
+++ b/app/Support/Repositories/UserGroup/UserGroupTrait.php
@@ -48,11 +48,13 @@ trait UserGroupTrait
public function checkUserGroupAccess(UserRoleEnum $role): bool
{
$result = $this->user->hasRoleInGroupOrOwner($this->userGroup, $role);
- if($result) {
+ if ($result) {
Log::debug(sprintf('User #%d has role %s in group #%d or is owner/full.', $this->user->id, $role->value, $this->userGroup->id));
+
return true;
}
Log::warning(sprintf('User #%d DOES NOT have role %s in group #%d.', $this->user->id, $role->value, $this->userGroup->id));
+
return false;
}
@@ -62,7 +64,7 @@ trait UserGroupTrait
public function setUserGroup(UserGroup $userGroup): void
{
if (null === $this->user) {
- Log::warning(sprintf('User is not set in repository %s', get_class($this)));
+ Log::warning(sprintf('User is not set in repository %s', static::class));
}
$this->userGroup = $userGroup;
}
@@ -70,16 +72,18 @@ trait UserGroupTrait
/**
* @throws FireflyException
*/
- public function setUser(null | Authenticatable | User $user): void
+ public function setUser(null|Authenticatable|User $user): void
{
if ($user instanceof User) {
- $this->user = $user;
+ $this->user = $user;
if (null === $user->userGroup) {
throw new FireflyException(sprintf('User #%d has no user group.', $user->id));
}
$this->userGroup = $user->userGroup;
+
return;
}
+
throw new FireflyException(sprintf('Object is of class %s, not User.', get_class($user)));
}
@@ -89,14 +93,15 @@ trait UserGroupTrait
public function setUserGroupById(int $userGroupId): void
{
$memberships = GroupMembership::where('user_id', $this->user->id)
- ->where('user_group_id', $userGroupId)
- ->count();
+ ->where('user_group_id', $userGroupId)
+ ->count()
+ ;
if (0 === $memberships) {
throw new FireflyException(sprintf('User #%d has no access to administration #%d', $this->user->id, $userGroupId));
}
/** @var null|UserGroup $userGroup */
- $userGroup = UserGroup::find($userGroupId);
+ $userGroup = UserGroup::find($userGroupId);
if (null === $userGroup) {
throw new FireflyException(sprintf('Cannot find administration for user #%d', $this->user->id));
}
diff --git a/config/firefly.php b/config/firefly.php
index f703c74238..314e74bc47 100644
--- a/config/firefly.php
+++ b/config/firefly.php
@@ -81,7 +81,7 @@ return [
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag.
],
- 'version' => 'develop/2025-02-09',
+ 'version' => 'develop/2025-02-10',
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 25,
diff --git a/resources/assets/v1/src/locales/fr.json b/resources/assets/v1/src/locales/fr.json
index 773a1a8048..f6e1e2a03d 100644
--- a/resources/assets/v1/src/locales/fr.json
+++ b/resources/assets/v1/src/locales/fr.json
@@ -18,8 +18,8 @@
"is_reconciled": "Est rapproch\u00e9",
"split": "S\u00e9paration",
"single_split": "S\u00e9paration unique",
- "not_enough_currencies": "Not enough currencies",
- "not_enough_currencies_enabled": "If you have just one currency enabled, there is no need to add exchange rates.",
+ "not_enough_currencies": "Pas assez de devises",
+ "not_enough_currencies_enabled": "Si vous n'avez qu'une seule devise activ\u00e9e, il n'y a pas besoin d'ajouter des taux de change.",
"transaction_stored_link": "L'op\u00e9ration n\u00b0{ID} (\"{title}\")<\/a> a \u00e9t\u00e9 enregistr\u00e9e.",
"webhook_stored_link": "Le Webhook #{ID} (\"{title}\")<\/a> a \u00e9t\u00e9 enregistr\u00e9.",
"webhook_updated_link": "Le webhook #{ID}<\/a> (\"{title}\") a \u00e9t\u00e9 mis \u00e0 jour.",