Merge pull request #7185 from firefly-iii/develop

Develop
This commit is contained in:
James Cole 2023-03-10 19:15:44 +01:00 committed by GitHub
commit 2a0acdbb27
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
147 changed files with 2124 additions and 1633 deletions

View File

@ -16,7 +16,7 @@ body:
options:
- label: ... [the documentation](https://docs.firefly-iii.org/) does not mention anything about my problem
- label: ... there are no open or closed issues that are related to my problem
- label: ... it's [definitely me, not you](https://github.com/firefly-iii/firefly-iii/blob/main/.github/its_you_not_me.md)
- label: ... it's [definitely a Firefly III issue, not me](https://github.com/firefly-iii/firefly-iii/blob/main/.github/its_you_not_me.md)
- type: textarea
attributes:
@ -27,18 +27,18 @@ body:
- type: textarea
attributes:
label: Expected behaviour
description: Please describe precisely what you'd expect to happen.
label: Debug information
description: Please provide the table from the /debug page. Do not add backticks or quotes.
placeholder: The output from the /debug page
validations:
required: true
- type: textarea
attributes:
label: Debug information
description: Please provide the table from the /debug page
placeholder: The output from the /debug page
label: Expected behaviour
description: Please describe precisely what you'd expect to happen. Be specific.
validations:
required: true
required: false
- type: textarea
attributes:

View File

@ -8,9 +8,9 @@ body:
options:
- label: I've read the [support guidelines](https://github.com/firefly-iii/firefly-iii/blob/main/.github/support.md)
required: true
- label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/firefly-iii/about-firefly-iii/what-its-not/)
- label: My request is not listed as [a very good idea, but unfortunately...](https://docs.firefly-iii.org/firefly-iii/more-information/what-its-not/)
required: true
- label: I've used [the search](https://github.com/firefly-iii/firefly-iii/issues?q=is%3Aissue) and this has not been discussed before.
- label: I've used [the search](https://github.com/firefly-iii/firefly-iii/issues?q=is%3Aissue) and this has not been requested before.
required: true
- type: textarea
@ -18,9 +18,9 @@ body:
label: Description
description: Please describe your feature request
placeholder: |
- I would like Firefly III to do ABC.
- What if you would add feature XYZ?
- Firefly III doesn't do DEF.
- I would like Firefly III to do (thing).
- What if you would add feature (feature here)?
- Firefly III doesn't do (thing).
validations:
required: true

View File

@ -94,19 +94,39 @@ class DestroyController extends Controller
case 'object_groups':
$this->destroyObjectGroups();
break;
case 'not_assets_liabilities':
$this->destroyAccounts(
[
AccountType::BENEFICIARY,
AccountType::CASH,
AccountType::CREDITCARD,
AccountType::DEFAULT,
AccountType::EXPENSE,
AccountType::IMPORT,
AccountType::INITIAL_BALANCE,
AccountType::LIABILITY_CREDIT,
AccountType::RECONCILIATION,
AccountType::REVENUE,
]
);
break;
case 'accounts':
$this->destroyAccounts(
[
AccountType::ASSET,
AccountType::DEFAULT,
AccountType::BENEFICIARY,
AccountType::EXPENSE,
AccountType::REVENUE,
AccountType::INITIAL_BALANCE,
AccountType::CASH,
AccountType::CREDITCARD,
AccountType::DEBT,
AccountType::DEFAULT,
AccountType::EXPENSE,
AccountType::IMPORT,
AccountType::INITIAL_BALANCE,
AccountType::LIABILITY_CREDIT,
AccountType::LOAN,
AccountType::MORTGAGE,
AccountType::CREDITCARD,
AccountType::RECONCILIATION,
AccountType::REVENUE,
]
);
break;

View File

@ -53,7 +53,8 @@ class DestroyRequest extends FormRequest
public function rules(): array
{
$valid = 'budgets,bills,piggy_banks,rules,recurring,categories,tags,object_groups'.
',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers';
',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers'.
',not_assets_liabilities';
return [
'objects' => sprintf('required|min:1|string|in:%s', $valid),

View File

@ -37,6 +37,7 @@ use FireflyIII\Helpers\Collector\Extensions\TimeCollection;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Query\JoinClause;
@ -436,6 +437,10 @@ class GroupCollector implements GroupCollectorInterface
public function exists(): GroupCollectorInterface
{
$this->query->whereNull('transaction_groups.deleted_at');
$this->query->whereNotIn(
'transaction_types.type',
[TransactionType::LIABILITY_CREDIT, TransactionType::OPENING_BALANCE, TransactionType::RECONCILIATION]
);
return $this;
}

View File

@ -28,10 +28,12 @@ use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Middleware\IsDemoUser;
use FireflyIII\Http\Requests\InviteUserFormRequest;
use FireflyIII\Http\Requests\UserFormRequest;
use FireflyIII\Models\InvitedUser;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\Redirector;
use Illuminate\View\View;
@ -87,6 +89,24 @@ class UserController extends Controller
return view('admin.users.delete', compact('user', 'subTitle'));
}
/**
* @param InvitedUser $invitedUser
* @return RedirectResponse
*/
public function deleteInvite(InvitedUser $invitedUser): JsonResponse
{
Log::debug('Will now delete invitation');
if ($invitedUser->redeemed) {
Log::debug('Is already redeemed.');
session()->flash('error', trans('firefly.invite_is_already_redeemed', ['address' => $invitedUser->email]));
return response()->json(['success' => false]);
}
Log::debug('Delete!');
session()->flash('success', trans('firefly.invite_is_deleted', ['address' => $invitedUser->email]));
$this->repository->deleteInvite($invitedUser);
return response()->json(['success' => true]);
}
/**
* Destroy a user.
*

View File

@ -187,7 +187,7 @@ class DebugController extends Controller
foreach ($handlers as $handler) {
if ($handler instanceof RotatingFileHandler) {
$logFile = $handler->getUrl();
if (null !== $logFile) {
if (null !== $logFile && file_exists($logFile)) {
$logContent = file_get_contents($logFile);
}
}

View File

@ -56,11 +56,11 @@ class AcceptHeaders
}
// if bad 'Content-Type' header, refuse service.
if (('POST' === $method || 'PUT' === $method) && !$request->hasHeader('Content-Type')) {
$error = new BadHttpHeaderException('Content-Type header cannot be empty');
$error = new BadHttpHeaderException('Content-Type header cannot be empty.');
$error->statusCode = 415;
throw $error;
}
if (('POST' === $method || 'PUT' === $method) && !in_array($submitted, $contentTypes, true)) {
if (('POST' === $method || 'PUT' === $method) && !$this->acceptsHeader($submitted, $contentTypes)) {
$error = new BadHttpHeaderException(sprintf('Content-Type cannot be "%s"', $submitted));
$error->statusCode = 415;
throw $error;
@ -74,4 +74,17 @@ class AcceptHeaders
return $next($request);
}
/**
* @param string $content
* @param array $accepted
* @return bool
*/
private function acceptsHeader(string $content, array $accepted): bool
{
if (str_contains($content, ';')) {
$content = trim(explode(';', $content)[0]);
}
return in_array($content, $accepted, true);
}
}

View File

@ -30,6 +30,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
@ -102,7 +103,12 @@ class DownloadExchangeRates implements ShouldQueue
$base = sprintf('%s/%s/%s', (string)config('cer.url'), $this->date->year, $this->date->isoWeek);
$client = new Client();
$url = sprintf('%s/%s.json', $base, $currency->code);
$res = $client->get($url);
try {
$res = $client->get($url);
} catch(RequestException $e) {
app('log')->warning(sprintf('Trying to grab "%s" resulted in error "%d".', $url, $e->getMessage()));
return;
}
$statusCode = $res->getStatusCode();
if (200 !== $statusCode) {
app('log')->warning(sprintf('Trying to grab "%s" resulted in status code %d.', $url, $statusCode));

View File

@ -91,6 +91,15 @@ class MailError extends Job implements ShouldQueue
}
);
} catch (Exception $e) { // intentional generic exception
$message = $e->getMessage();
if (str_contains($message, 'Bcc')) {
Log::warning('[Bcc] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
return;
}
if (str_contains($message, 'RFC 2822')) {
Log::warning('[RFC] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
return;
}
throw new FireflyException($e->getMessage(), 0, $e);
}
}

View File

@ -90,7 +90,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static EloquentBuilder|Account whereVirtualBalance($value)
* @method static Builder|Account withTrashed()
* @method static Builder|Account withoutTrashed()
* @mixin Eloquent
* @property Carbon $lastActivityDate
* @property string $startBalance
* @property string $endBalance
@ -103,6 +102,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property string $current_debt
* @property int|null $user_group_id
* @method static EloquentBuilder|Account whereUserGroupId($value)
* @mixin Eloquent
*/
class Account extends Model
{

View File

@ -78,9 +78,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserId($value)
* @method static Builder|Attachment withTrashed()
* @method static Builder|Attachment withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Attachment whereUserGroupId($value)
* @mixin Eloquent
*/
class Attachment extends Model
{

View File

@ -42,7 +42,6 @@ use Illuminate\Support\Carbon;
* @method static Builder|AuditLogEntry query()
* @method static \Illuminate\Database\Query\Builder|AuditLogEntry withTrashed()
* @method static \Illuminate\Database\Query\Builder|AuditLogEntry withoutTrashed()
* @mixin Eloquent
* @property int $id
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
@ -65,6 +64,7 @@ use Illuminate\Support\Carbon;
* @method static Builder|AuditLogEntry whereDeletedAt($value)
* @method static Builder|AuditLogEntry whereId($value)
* @method static Builder|AuditLogEntry whereUpdatedAt($value)
* @mixin Eloquent
*/
class AuditLogEntry extends Model
{

View File

@ -62,9 +62,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserId($value)
* @method static Builder|AvailableBudget withTrashed()
* @method static Builder|AvailableBudget withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|AvailableBudget whereUserGroupId($value)
* @mixin Eloquent
*/
class AvailableBudget extends Model
{

View File

@ -95,9 +95,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserId($value)
* @method static Builder|Bill withTrashed()
* @method static Builder|Bill withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Bill whereUserGroupId($value)
* @mixin Eloquent
*/
class Bill extends Model
{

View File

@ -74,12 +74,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserId($value)
* @method static Builder|Budget withTrashed()
* @method static Builder|Budget withoutTrashed()
* @mixin Eloquent
* @property string $email
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Budget whereUserGroupId($value)
* @property-read Collection|Note[] $notes
* @property-read int|null $notes_count
* @mixin Eloquent
*/
class Budget extends Model
{

View File

@ -68,9 +68,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Category whereUserId($value)
* @method static Builder|Category withTrashed()
* @method static Builder|Category withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Category whereUserGroupId($value)
* @mixin Eloquent
*/
class Category extends Model
{

View File

@ -60,9 +60,9 @@ use Illuminate\Support\Carbon;
* @method static Builder|CurrencyExchangeRate whereUpdatedAt($value)
* @method static Builder|CurrencyExchangeRate whereUserId($value)
* @method static Builder|CurrencyExchangeRate whereUserRate($value)
* @mixin Eloquent
* @property int|null $user_group_id
* @method static Builder|CurrencyExchangeRate whereUserGroupId($value)
* @mixin Eloquent
*/
class CurrencyExchangeRate extends Model
{

View File

@ -30,6 +30,7 @@ use FireflyIII\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Class InvitedUser
@ -38,7 +39,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @method static Builder|InvitedUser newModelQuery()
* @method static Builder|InvitedUser newQuery()
* @method static Builder|InvitedUser query()
* @mixin Eloquent
* @property int $id
* @property Carbon|null $created_at
* @property Carbon|null $updated_at
@ -55,6 +55,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @method static Builder|InvitedUser whereRedeemed($value)
* @method static Builder|InvitedUser whereUpdatedAt($value)
* @method static Builder|InvitedUser whereUserId($value)
* @mixin Eloquent
*/
class InvitedUser extends Model
{
@ -72,4 +73,25 @@ class InvitedUser extends Model
{
return $this->belongsTo(User::class);
}
/**
* Route binder. Converts the key in the URL to the specified object (or throw 404).
*
* @param string $value
*
* @return WebhookAttempt
* @throws NotFoundHttpException
*/
public static function routeBinder(string $value): InvitedUser
{
if (auth()->check()) {
$attemptId = (int)$value;
/** @var InvitedUser $attempt */
$attempt = self::find($attemptId);
if (null !== $attempt) {
return $attempt;
}
}
throw new NotFoundHttpException();
}
}

View File

@ -85,9 +85,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserId($value)
* @method static Builder|Recurrence withTrashed()
* @method static Builder|Recurrence withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Recurrence whereUserGroupId($value)
* @mixin Eloquent
*/
class Recurrence extends Model
{

View File

@ -73,10 +73,10 @@ use Illuminate\Support\Carbon;
* @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereUpdatedAt($value)
* @method static Builder|RecurrenceTransaction withTrashed()
* @method static Builder|RecurrenceTransaction withoutTrashed()
* @mixin Eloquent
* @property int|null $transaction_type_id
* @method static \Illuminate\Database\Eloquent\Builder|RecurrenceTransaction whereTransactionTypeId($value)
* @property-read TransactionType|null $transactionType
* @mixin Eloquent
*/
class RecurrenceTransaction extends Model
{

View File

@ -74,9 +74,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserId($value)
* @method static Builder|Rule withTrashed()
* @method static Builder|Rule withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Rule whereUserGroupId($value)
* @mixin Eloquent
*/
class Rule extends Model
{

View File

@ -66,9 +66,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserId($value)
* @method static Builder|RuleGroup withTrashed()
* @method static Builder|RuleGroup withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|RuleGroup whereUserGroupId($value)
* @mixin Eloquent
*/
class RuleGroup extends Model
{

View File

@ -75,9 +75,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereZoomLevel($value)
* @method static Builder|Tag withTrashed()
* @method static Builder|Tag withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|Tag whereUserGroupId($value)
* @mixin Eloquent
*/
class Tag extends Model
{

View File

@ -84,8 +84,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static Builder|Transaction whereUpdatedAt($value)
* @method static \Illuminate\Database\Query\Builder|Transaction withTrashed()
* @method static \Illuminate\Database\Query\Builder|Transaction withoutTrashed()
* @mixin Eloquent
* @property int $the_count
* @mixin Eloquent
*/
class Transaction extends Model
{

View File

@ -59,9 +59,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserId($value)
* @method static Builder|TransactionGroup withTrashed()
* @method static Builder|TransactionGroup withoutTrashed()
* @mixin Eloquent
* @property int|null $user_group_id
* @method static \Illuminate\Database\Eloquent\Builder|TransactionGroup whereUserGroupId($value)
* @mixin Eloquent
*/
class TransactionGroup extends Model
{

View File

@ -112,12 +112,12 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static EloquentBuilder|TransactionJournal whereUserId($value)
* @method static \Illuminate\Database\Query\Builder|TransactionJournal withTrashed()
* @method static \Illuminate\Database\Query\Builder|TransactionJournal withoutTrashed()
* @mixin Eloquent
* @property-read Collection|Location[] $locations
* @property-read int|null $locations_count
* @property int $the_count
* @property int|null $user_group_id
* @method static EloquentBuilder|TransactionJournal whereUserGroupId($value)
* @mixin Eloquent
*/
class TransactionJournal extends Model
{

View File

@ -69,13 +69,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static Builder|Webhook whereUserId($value)
* @method static \Illuminate\Database\Query\Builder|Webhook withTrashed()
* @method static \Illuminate\Database\Query\Builder|Webhook withoutTrashed()
* @mixin Eloquent
* @property string $title
* @property string $secret
* @method static Builder|Webhook whereSecret($value)
* @method static Builder|Webhook whereTitle($value)
* @property int|null $user_group_id
* @method static Builder|Webhook whereUserGroupId($value)
* @mixin Eloquent
*/
class Webhook extends Model
{

View File

@ -55,10 +55,10 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereStatusCode($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebhookAttempt whereWebhookMessageId($value)
* @mixin Eloquent
* @method static Builder|WebhookAttempt onlyTrashed()
* @method static Builder|WebhookAttempt withTrashed()
* @method static Builder|WebhookAttempt withoutTrashed()
* @mixin Eloquent
*/
class WebhookAttempt extends Model
{

View File

@ -63,9 +63,9 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static Builder|WebhookMessage whereUpdatedAt($value)
* @method static Builder|WebhookMessage whereUuid($value)
* @method static Builder|WebhookMessage whereWebhookId($value)
* @mixin Eloquent
* @property-read Collection|WebhookAttempt[] $webhookAttempts
* @property-read int|null $webhook_attempts_count
* @mixin Eloquent
*/
class WebhookMessage extends Model
{

View File

@ -119,6 +119,15 @@ class UserRepository implements UserRepositoryInterface
return Role::create(['name' => $name, 'display_name' => $displayName, 'description' => $description]);
}
/**
* @inheritDoc
*/
public function deleteInvite(InvitedUser $invite): void
{
Log::debug(sprintf('Deleting invite #%d', $invite->id));
$invite->delete();
}
/**
* @param User $user
*
@ -286,24 +295,24 @@ class UserRepository implements UserRepositoryInterface
*
* @return bool
*/
public function hasRole(User|Authenticatable|null $user, string $role): bool
{
if (null === $user) {
return false;
}
/** @var Role $userRole */
foreach ($user->roles as $userRole) {
if ($userRole->name === $role) {
return true;
}
}
public function hasRole(User|Authenticatable|null $user, string $role): bool
{
if (null === $user) {
return false;
}
/** @var Role $userRole */
foreach ($user->roles as $userRole) {
if ($userRole->name === $role) {
return true;
}
}
return false;
}
/**
* @inheritDoc
*/
* @inheritDoc
*/
public function inviteUser(User|Authenticatable|null $user, string $email): InvitedUser
{
$now = today(config('app.timezone'));

View File

@ -102,6 +102,12 @@ interface UserRepositoryInterface
*/
public function deleteEmptyGroups(): void;
/**
* @param InvitedUser $invite
* @return void
*/
public function deleteInvite(InvitedUser $invite): void;
/**
* @param User $user
*

View File

@ -147,6 +147,12 @@ class UpdateRequest implements UpdateRequestInterface
];
$current = config('firefly.version');
$latest = $information['version'];
// strip the 'v' from the version if it's there.
if (str_starts_with($latest, 'v')) {
$latest = substr($latest, 1);
}
$compare = version_compare($latest, $current);
Log::debug(sprintf('Current version is "%s", latest is "%s", result is: %d', $current, $latest, $compare));

View File

@ -204,6 +204,21 @@ class Navigation
return $date;
}
$result = match ($repeatFreq) {
'last7' => $date->subDays(7)->startOfDay(),
'last30' => $date->subDays(30)->startOfDay(),
'last90' => $date->subDays(90)->startOfDay(),
'last365' => $date->subDays(365)->startOfDay(),
'MTD' => $date->startOfMonth()->startOfDay(),
'QTD' => $date->firstOfQuarter()->startOfDay(),
'YTD' => $date->startOfYear()->startOfDay(),
default => null,
};
if (null !== $result) {
return $result;
}
if ('custom' === $repeatFreq) {
return $date; // the date is already at the start.
}

View File

@ -141,7 +141,7 @@ trait ConvertsDataTypes
$string = str_replace($secondSearch, '', $string);
// clear zalgo text (TODO also in API v2)
$string = preg_replace('/\pM/u', '', $string);
$string = preg_replace('/(\pM{2})\pM+/u', '\1', $string);
if (null === $string) {
return null;
}

View File

@ -423,7 +423,7 @@ class Steam
];
// clear zalgo text
$string = preg_replace('/\pM/u', '', $string);
$string = preg_replace('/(\pM{2})\pM+/u', '\1', $string);
return str_replace($search, '', $string);
}

View File

@ -122,7 +122,6 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @method static Builder|User whereRememberToken($value)
* @method static Builder|User whereReset($value)
* @method static Builder|User whereUpdatedAt($value)
* @mixin Eloquent
* @property string|null $objectguid
* @property-read int|null $accounts_count
* @property-read int|null $attachments_count
@ -165,6 +164,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property-read int|null $group_memberships_count
* @property-read UserGroup|null $userGroup
* @method static Builder|User whereUserGroupId($value)
* @mixin Eloquent
*/
class User extends Authenticatable
{

View File

@ -108,6 +108,7 @@ trait WithdrawalValidation
if (null !== $found) {
$type = $found->accountType->type;
if (in_array($type, $validTypes, true)) {
$this->destination = $found;
return true;
}
$this->destError = (string)trans('validation.withdrawal_dest_bad_data', ['id' => $accountId, 'name' => $accountName]);

View File

@ -43,6 +43,9 @@ trait CurrencyValidation
*/
protected function validateForeignCurrencyInformation(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateForeignCurrencyInformation()');
$transactions = $this->getTransactionsArray($validator);

View File

@ -90,6 +90,9 @@ trait GroupValidation
*/
protected function validateDescriptions(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in GroupValidation::validateDescriptions()');
$transactions = $this->getTransactionsArray($validator);
$validDescriptions = 0;
@ -113,6 +116,9 @@ trait GroupValidation
*/
protected function validateGroupDescription(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateGroupDescription()');
$data = $validator->getData();
$transactions = $this->getTransactionsArray($validator);

View File

@ -43,6 +43,9 @@ trait TransactionValidation
*/
public function validateAccountInformation(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateAccountInformation (TransactionValidation) ()');
$transactions = $this->getTransactionsArray($validator);
$data = $validator->getData();
@ -137,9 +140,49 @@ trait TransactionValidation
$validator->errors()->add(sprintf('transactions.%d.destination_id', $index), $accountValidator->destError);
$validator->errors()->add(sprintf('transactions.%d.destination_name', $index), $accountValidator->destError);
}
// sanity check for reconciliation accounts. They can't both be null.
$this->sanityCheckReconciliation($validator, $transactionType, $index, $source, $destination);
// deposit and the source is a liability or an asset account with a different
// currency than submitted? then the foreign currency info must be present as well (and filled in).
if (0 === $validator->errors()->count() && null !== $accountValidator->source && TransactionType::DEPOSIT === ucfirst($transactionType)) {
$accountType = $accountValidator?->source?->accountType?->type;
if (in_array($accountType, config('firefly.valid_currency_account_types'), true) && !$this->hasForeignCurrencyInfo($transaction)) {
$validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency'));
}
}
// withdrawal or transfer and the destination is a liability or an asset account with a different
// currency than submitted? then the foreign currency info must be present as well (and filled in).
if (0 === $validator->errors()->count() && null !== $accountValidator->destination &&
(TransactionType::WITHDRAWAL === ucfirst($transactionType) || (TransactionType::TRANSFER === ucfirst($transactionType)))) {
$accountType = $accountValidator?->destination?->accountType?->type;
if (in_array($accountType, config('firefly.valid_currency_account_types'), true) && !$this->hasForeignCurrencyInfo($transaction)) {
$validator->errors()->add(sprintf('transactions.%d.foreign_amount', $index), (string)trans('validation.require_foreign_currency'));
}
}
// account validator has a valid source and a valid destination
}
/**
* @param array $transaction
* @return bool
*/
private function hasForeignCurrencyInfo(array $transaction): bool
{
if (!array_key_exists('foreign_currency_code', $transaction) && !array_key_exists('foreign_currency_id', $transaction)) {
return false;
}
if (!array_key_exists('foreign_amount', $transaction)) {
return false;
}
if ('' === $transaction['foreign_amount']) {
return false;
}
if (bccomp('0', $transaction['foreign_amount']) === 0) {
return false;
}
return true;
}
/**
@ -324,6 +367,9 @@ trait TransactionValidation
*/
public function validateOneTransaction(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateOneTransaction()');
$transactions = $this->getTransactionsArray($validator);
// need at least one transaction
@ -341,6 +387,9 @@ trait TransactionValidation
*/
public function validateTransactionArray(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
$transactions = $this->getTransactionsArray($validator);
foreach ($transactions as $key => $value) {
if (!is_int($key)) {
@ -359,6 +408,9 @@ trait TransactionValidation
*/
public function validateTransactionTypes(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateTransactionTypes()');
$transactions = $this->getTransactionsArray($validator);
@ -427,6 +479,9 @@ trait TransactionValidation
*/
private function validateEqualAccounts(Validator $validator): void
{
if ($validator->errors()->count() > 0) {
return;
}
Log::debug('Now in validateEqualAccounts()');
$transactions = $this->getTransactionsArray($validator);

View File

@ -2,6 +2,34 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## 6.0.1 - 2023-03-11
### Changed
- [Issue 7129](https://github.com/firefly-iii/firefly-iii/issues/7129) Catch common email errors as log errors.
### Fixed
- [Issue 7109](https://github.com/firefly-iii/firefly-iii/issues/7109) Fix CSS in subdirectories, thanks @GaneshKandu
- [Issue 7112](https://github.com/firefly-iii/firefly-iii/issues/7112) Version number parsing
- [Issue 6985](https://github.com/firefly-iii/firefly-iii/issues/6985) Mandrill mail support
- [Issue 7131](https://github.com/firefly-iii/firefly-iii/issues/7131) Fix account sorting, thanks @lflare
- [Issue 7130](https://github.com/firefly-iii/firefly-iii/issues/7130) Fix missing date range parsers
- [Issue 7156](https://github.com/firefly-iii/firefly-iii/issues/7156) Default values for email settings break tokens
- [Issue 7140](https://github.com/firefly-iii/firefly-iii/issues/7140) Header with charset would break API validation
- [Issue 7144](https://github.com/firefly-iii/firefly-iii/issues/7144) Debug page could not handle missing log files
- [Issue 7159](https://github.com/firefly-iii/firefly-iii/issues/7159) Bad parsing in success messages
- [Issue 7104](https://github.com/firefly-iii/firefly-iii/issues/7104) Missing colors in dark mode
- [Issue 7120](https://github.com/firefly-iii/firefly-iii/issues/7120) Missing borders in dark mode
- [Issue 7156](https://github.com/firefly-iii/firefly-iii/issues/7156) Bad HTML parsing in transaction form
- [Issue 7166](https://github.com/firefly-iii/firefly-iii/issues/7166) Rule trigger would trigger on the wrong transaction set
- [Issue 7112](https://github.com/firefly-iii/firefly-iii/issues/7112) Content filter would strip emojis
- [Issue 7175](https://github.com/firefly-iii/firefly-iii/issues/7175) Could not delete user invite
- [Issue 7177](https://github.com/firefly-iii/firefly-iii/issues/7177) Missing currency info would break cron job
### API
- [Issue 7127](https://github.com/firefly-iii/firefly-iii/issues/7127) Expand API with new option for "destroy" button.
- [Issue 7124](https://github.com/firefly-iii/firefly-iii/issues/7124) API would not break on missing foreign currency information
## 6.0.0 - 2023-03-03
This is release **6.0.0** of Firefly III.

View File

@ -97,7 +97,7 @@
"league/commonmark": "2.*",
"league/csv": "^9.7",
"league/fractal": "0.*",
"nunomaduro/collision": "^7.0",
"nunomaduro/collision": "^7.1",
"pragmarx/google2fa": "^8.0",
"predis/predis": "^2.1",
"psr/log": "<4",
@ -105,7 +105,8 @@
"rcrowe/twigbridge": "^0.14",
"spatie/laravel-ignition": "^2",
"symfony/http-client": "^6.0",
"symfony/mailgun-mailer": "^6.0"
"symfony/mailgun-mailer": "^6.0",
"therobfonz/laravel-mandrill-driver": "^5.0"
},
"require-dev": {
"barryvdh/laravel-ide-helper": "2.*",
@ -113,7 +114,7 @@
"fakerphp/faker": "1.*",
"filp/whoops": "2.*",
"mockery/mockery": "1.*",
"nunomaduro/larastan": "^2.0",
"nunomaduro/larastan": "^2.5",
"phpstan/phpstan": "^1.10",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-strict-rules": "^1.4",

284
composer.lock generated
View File

@ -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": "7de460f25e29fa2bf56806de51c5ab1a",
"content-hash": "d039ac062900b9cf70e12f1e7a6cacd9",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -1068,16 +1068,16 @@
},
{
"name": "filp/whoops",
"version": "2.14.6",
"version": "2.15.1",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "f7948baaa0330277c729714910336383286305da"
"reference": "e864ac957acd66e1565f25efda61e37791a5db0b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da",
"reference": "f7948baaa0330277c729714910336383286305da",
"url": "https://api.github.com/repos/filp/whoops/zipball/e864ac957acd66e1565f25efda61e37791a5db0b",
"reference": "e864ac957acd66e1565f25efda61e37791a5db0b",
"shasum": ""
},
"require": {
@ -1127,7 +1127,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.14.6"
"source": "https://github.com/filp/whoops/tree/2.15.1"
},
"funding": [
{
@ -1135,7 +1135,7 @@
"type": "github"
}
],
"time": "2022-11-02T16:23:29+00:00"
"time": "2023-03-06T18:09:13+00:00"
},
{
"name": "firebase/php-jwt",
@ -1586,16 +1586,16 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.3",
"version": "2.4.4",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "67c26b443f348a51926030c83481b85718457d3d"
"reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
"reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf",
"shasum": ""
},
"require": {
@ -1685,7 +1685,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
"source": "https://github.com/guzzle/psr7/tree/2.4.4"
},
"funding": [
{
@ -1701,7 +1701,7 @@
"type": "tidelift"
}
],
"time": "2022-10-26T14:07:24+00:00"
"time": "2023-03-09T13:19:02+00:00"
},
{
"name": "guzzlehttp/uri-template",
@ -1944,16 +1944,16 @@
},
{
"name": "laravel/framework",
"version": "v10.2.0",
"version": "v10.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "3799f7f3118d57dc5d3dfaabde69a912fff65a7e"
"reference": "90f24d9e2860ecf6b5492e966956270ceb98c03d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/3799f7f3118d57dc5d3dfaabde69a912fff65a7e",
"reference": "3799f7f3118d57dc5d3dfaabde69a912fff65a7e",
"url": "https://api.github.com/repos/laravel/framework/zipball/90f24d9e2860ecf6b5492e966956270ceb98c03d",
"reference": "90f24d9e2860ecf6b5492e966956270ceb98c03d",
"shasum": ""
},
"require": {
@ -2140,7 +2140,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2023-03-02T14:55:50+00:00"
"time": "2023-03-09T14:00:53+00:00"
},
{
"name": "laravel/passport",
@ -3480,6 +3480,60 @@
],
"time": "2021-06-28T04:27:21+00:00"
},
{
"name": "mailchimp/transactional",
"version": "1.0.50",
"source": {
"type": "git",
"url": "https://github.com/mailchimp/mailchimp-transactional-php.git",
"reference": "701b00f538f36a2a5b138f880ab5eebbfeff4b7d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mailchimp/mailchimp-transactional-php/zipball/701b00f538f36a2a5b138f880ab5eebbfeff4b7d",
"reference": "701b00f538f36a2a5b138f880ab5eebbfeff4b7d",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"guzzlehttp/guzzle": "^6.4 || ^7.2",
"php": ">=7.2"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2.12",
"phpunit/phpunit": "^7",
"squizlabs/php_codesniffer": "~2.6"
},
"type": "library",
"autoload": {
"psr-4": {
"MailchimpTransactional\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"proprietary"
],
"authors": [
{
"name": "Mailchimp",
"homepage": "https://github.com/mailchimp/mailchimp-transactional-php"
}
],
"homepage": "http://swagger.io",
"keywords": [
"api",
"php",
"sdk",
"swagger"
],
"support": {
"source": "https://github.com/mailchimp/mailchimp-transactional-php/tree/v1.0.50"
},
"time": "2022-11-07T20:12:03+00:00"
},
{
"name": "monolog/monolog",
"version": "3.3.1",
@ -3834,34 +3888,35 @@
},
{
"name": "nunomaduro/collision",
"version": "v7.0.5",
"version": "v7.1.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
"reference": "5c654ee5fa187cf2f4cb226d773582ec6d402a55"
"reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/5c654ee5fa187cf2f4cb226d773582ec6d402a55",
"reference": "5c654ee5fa187cf2f4cb226d773582ec6d402a55",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/2b97fed4950cf0ff148c18b853975ec8ea135e90",
"reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90",
"shasum": ""
},
"require": {
"filp/whoops": "^2.14.6",
"nunomaduro/termwind": "^1.15.1",
"php": "^8.1.0",
"symfony/console": "^6.2.5"
"symfony/console": "^6.2.7"
},
"require-dev": {
"laravel/framework": "^10.0.3",
"laravel/pint": "^1.5.0",
"laravel/sail": "^1.20.2",
"brianium/paratest": "^7.1.0",
"laravel/framework": "^10.2.0",
"laravel/pint": "^1.6.0",
"laravel/sail": "^1.21.1",
"laravel/sanctum": "^3.2.1",
"laravel/tinker": "^2.8.0",
"laravel/tinker": "^2.8.1",
"nunomaduro/larastan": "^2.4.1",
"orchestra/testbench-core": "^8.0.1",
"orchestra/testbench-core": "^8.0.3",
"pestphp/pest": "^2.0.0",
"phpunit/phpunit": "^10.0.9",
"phpunit/phpunit": "^10.0.14",
"sebastian/environment": "^6.0.0",
"spatie/laravel-ignition": "^2.0.0"
},
@ -3922,7 +3977,7 @@
"type": "patreon"
}
],
"time": "2023-02-19T16:25:13+00:00"
"time": "2023-03-03T10:00:22+00:00"
},
{
"name": "nunomaduro/termwind",
@ -4335,16 +4390,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.18",
"version": "3.0.19",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "f28693d38ba21bb0d9f0c411ee5dae2b178201da"
"reference": "cc181005cf548bfd8a4896383bb825d859259f95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f28693d38ba21bb0d9f0c411ee5dae2b178201da",
"reference": "f28693d38ba21bb0d9f0c411ee5dae2b178201da",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cc181005cf548bfd8a4896383bb825d859259f95",
"reference": "cc181005cf548bfd8a4896383bb825d859259f95",
"shasum": ""
},
"require": {
@ -4425,7 +4480,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.18"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.19"
},
"funding": [
{
@ -4441,7 +4496,7 @@
"type": "tidelift"
}
],
"time": "2022-12-17T18:26:50+00:00"
"time": "2023-03-05T17:13:09+00:00"
},
{
"name": "pragmarx/google2fa",
@ -5446,16 +5501,16 @@
},
{
"name": "spatie/backtrace",
"version": "1.2.2",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/backtrace.git",
"reference": "7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1"
"reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/backtrace/zipball/7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1",
"reference": "7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1",
"url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c",
"reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c",
"shasum": ""
},
"require": {
@ -5464,6 +5519,7 @@
"require-dev": {
"ext-json": "*",
"phpunit/phpunit": "^9.3",
"spatie/phpunit-snapshot-assertions": "^4.2",
"symfony/var-dumper": "^5.1"
},
"type": "library",
@ -5491,7 +5547,7 @@
"spatie"
],
"support": {
"source": "https://github.com/spatie/backtrace/tree/1.2.2"
"source": "https://github.com/spatie/backtrace/tree/1.4.0"
},
"funding": [
{
@ -5503,7 +5559,7 @@
"type": "other"
}
],
"time": "2023-02-21T08:29:12+00:00"
"time": "2023-03-04T08:57:24+00:00"
},
{
"name": "spatie/flare-client-php",
@ -8251,6 +8307,68 @@
],
"time": "2023-02-24T10:42:00+00:00"
},
{
"name": "therobfonz/laravel-mandrill-driver",
"version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/luisdalmolin/laravel-mandrill-driver.git",
"reference": "a492a580e984c9bae5d59bbc2660f75af4ea2c0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/luisdalmolin/laravel-mandrill-driver/zipball/a492a580e984c9bae5d59bbc2660f75af4ea2c0d",
"reference": "a492a580e984c9bae5d59bbc2660f75af4ea2c0d",
"shasum": ""
},
"require": {
"illuminate/support": "^10.0",
"mailchimp/transactional": "^1.0",
"php": "^8.1",
"symfony/mailer": "^6.0"
},
"require-dev": {
"mockery/mockery": "^1.4.4",
"phpunit/phpunit": "^9.5.10"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"LaravelMandrill\\MandrillServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"LaravelMandrill\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Rob Fonseca",
"email": "robfonseca@gmail.com"
},
{
"name": "Brandon Ferens",
"email": "brandon@kirschbaumdevelopment.com"
}
],
"description": "Mandrill Driver for Laravel 9+",
"keywords": [
"laravel",
"mandrill"
],
"support": {
"issues": "https://github.com/luisdalmolin/laravel-mandrill-driver/issues",
"source": "https://github.com/luisdalmolin/laravel-mandrill-driver/tree/5.0.0"
},
"time": "2023-01-31T13:48:27+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "2.2.6",
@ -9159,16 +9277,16 @@
},
{
"name": "myclabs/deep-copy",
"version": "1.11.0",
"version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
"reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"shasum": ""
},
"require": {
@ -9206,7 +9324,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
},
"funding": [
{
@ -9214,20 +9332,20 @@
"type": "tidelift"
}
],
"time": "2022-03-03T13:19:32+00:00"
"time": "2023-03-08T13:26:56+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.15.3",
"version": "v4.15.4",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039"
"reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039",
"reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290",
"reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290",
"shasum": ""
},
"require": {
@ -9268,22 +9386,22 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3"
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4"
},
"time": "2023-01-16T22:05:37+00:00"
"time": "2023-03-05T19:49:14+00:00"
},
{
"name": "nunomaduro/larastan",
"version": "2.4.1",
"version": "2.5.1",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/larastan.git",
"reference": "238fdbfba3aae133cdec73e99826c9b0232141f7"
"reference": "072e2c9566ae000bf66c92384fc933b81885244b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/larastan/zipball/238fdbfba3aae133cdec73e99826c9b0232141f7",
"reference": "238fdbfba3aae133cdec73e99826c9b0232141f7",
"url": "https://api.github.com/repos/nunomaduro/larastan/zipball/072e2c9566ae000bf66c92384fc933b81885244b",
"reference": "072e2c9566ae000bf66c92384fc933b81885244b",
"shasum": ""
},
"require": {
@ -9297,11 +9415,11 @@
"illuminate/support": "^9.47.0 || ^10.0.0",
"php": "^8.0.2",
"phpmyadmin/sql-parser": "^5.6.0",
"phpstan/phpstan": "^1.9.8"
"phpstan/phpstan": "~1.10.3"
},
"require-dev": {
"nikic/php-parser": "^4.15.2",
"orchestra/testbench": "^7.19.0|^8.0.0",
"orchestra/testbench": "^7.19.0 || ^8.0.0",
"phpunit/phpunit": "^9.5.27"
},
"suggest": {
@ -9346,7 +9464,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/larastan/issues",
"source": "https://github.com/nunomaduro/larastan/tree/2.4.1"
"source": "https://github.com/nunomaduro/larastan/tree/2.5.1"
},
"funding": [
{
@ -9366,7 +9484,7 @@
"type": "patreon"
}
],
"time": "2023-02-05T12:19:17+00:00"
"time": "2023-03-04T23:46:40+00:00"
},
{
"name": "phar-io/manifest",
@ -9676,16 +9794,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.10.3",
"version": "1.10.6",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64"
"reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/5419375b5891add97dc74be71e6c1c34baaddf64",
"reference": "5419375b5891add97dc74be71e6c1c34baaddf64",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/50d089a3e0904b0fe7e2cf2d4fd37d427d64235a",
"reference": "50d089a3e0904b0fe7e2cf2d4fd37d427d64235a",
"shasum": ""
},
"require": {
@ -9715,7 +9833,7 @@
],
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.10.3"
"source": "https://github.com/phpstan/phpstan/tree/1.10.6"
},
"funding": [
{
@ -9731,7 +9849,7 @@
"type": "tidelift"
}
],
"time": "2023-02-25T14:47:13+00:00"
"time": "2023-03-09T16:55:12+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
@ -9832,16 +9950,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "10.0.1",
"version": "10.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "b9c21a93dd8c8eed79879374884ee733259475cc"
"reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b9c21a93dd8c8eed79879374884ee733259475cc",
"reference": "b9c21a93dd8c8eed79879374884ee733259475cc",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/20800e84296ea4732f9a125e08ce86b4004ae3e4",
"reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4",
"shasum": ""
},
"require": {
@ -9863,8 +9981,8 @@
"phpunit/phpunit": "^10.0"
},
"suggest": {
"ext-pcov": "*",
"ext-xdebug": "*"
"ext-pcov": "PHP extension that provides line coverage",
"ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
},
"type": "library",
"extra": {
@ -9897,7 +10015,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.1"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.2"
},
"funding": [
{
@ -9905,7 +10023,7 @@
"type": "github"
}
],
"time": "2023-02-25T05:35:03+00:00"
"time": "2023-03-06T13:00:19+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -10150,16 +10268,16 @@
},
{
"name": "phpunit/phpunit",
"version": "10.0.14",
"version": "10.0.15",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "7065dbebcb0f66cf16a45fc9cfc28c2351e06169"
"reference": "9b0c2245ef173a3d9546f6a4393a85d60eabe071"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7065dbebcb0f66cf16a45fc9cfc28c2351e06169",
"reference": "7065dbebcb0f66cf16a45fc9cfc28c2351e06169",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9b0c2245ef173a3d9546f6a4393a85d60eabe071",
"reference": "9b0c2245ef173a3d9546f6a4393a85d60eabe071",
"shasum": ""
},
"require": {
@ -10191,7 +10309,7 @@
"sebastian/version": "^4.0"
},
"suggest": {
"ext-soap": "*"
"ext-soap": "To be able to generate mocks based on WSDL files"
},
"bin": [
"phpunit"
@ -10230,7 +10348,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.14"
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.15"
},
"funding": [
{
@ -10246,7 +10364,7 @@
"type": "tidelift"
}
],
"time": "2023-03-01T05:37:49+00:00"
"time": "2023-03-09T06:43:13+00:00"
},
{
"name": "sebastian/cli-parser",

View File

@ -31,6 +31,7 @@ use FireflyIII\Models\Bill;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\Category;
use FireflyIII\Models\InvitedUser;
use FireflyIII\Models\LinkType;
use FireflyIII\Models\ObjectGroup;
use FireflyIII\Models\PiggyBank;
@ -106,8 +107,8 @@ return [
'webhooks' => true,
'handle_debts' => true,
],
'version' => '6.0.0',
'api_version' => '2.0.0',
'version' => '6.0.1',
'api_version' => '2.0.1',
'db_version' => 19,
// generic settings
@ -445,6 +446,7 @@ return [
'webhook' => Webhook::class,
'webhookMessage' => WebhookMessage::class,
'webhookAttempt' => WebhookAttempt::class,
'invitedUser' => InvitedUser::class,
// strings
'currency_code' => CurrencyCode::class,
@ -470,6 +472,7 @@ return [
'dynamicConfigKey' => DynamicConfigKey::class,
'eitherConfigKey' => EitherConfigKey::class,
],
'rule-actions' => [
'set_category' => SetCategory::class,

View File

@ -33,7 +33,7 @@ return [
| and used as needed; however, this mailer will be used by default.
|
*/
'default' => env('MAIL_MAILER', 'smtp'),
'default' => envNonEmpty('MAIL_MAILER', 'log'),
'mailers' => [
'smtp' => [
@ -55,6 +55,10 @@ return [
'transport' => 'mailgun',
],
'mandrill' => [
'transport' => 'mandrill',
],
'postmark' => [
'transport' => 'postmark',
],

View File

@ -101,18 +101,18 @@ module.exports = configure(function (ctx) {
type: 'https'
},
port: 8080,
host: 'firefly-dev.sd.home',
host: 'firefly-dev.sd.local',
open: false, // opens browser window automatically
proxy: [
{
context: ['/sanctum', '/api'],
target: 'https://firefly.sd.home', // Laravel Homestead end-point
target: 'https://firefly.sd.local', // Laravel Homestead end-point
// avoid problems with session and XSRF cookies
// When using capacitor, use the IP of the dev server streaming the app
// For SPA and PWA use localhost, given that the app is streamed on that host
// xxx address is your machine current IP address
cookieDomainRewrite:
ctx.modeName === 'capacitor' ? '10.0.0.1' : '.sd.home',
ctx.modeName === 'capacitor' ? '10.0.0.1' : '.sd.local',
changeOrigin: true,
}
]

View File

@ -221,8 +221,8 @@ export default {
"pref_last90": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 90 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
"pref_last30": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 30 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
"pref_last7": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 7 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2",
"pref_YTD": "\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03bf\u03c5 \u03ad\u03c4\u03bf\u03c5\u03c2 \u03c9\u03c2 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1",
"pref_QTD": "\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b9\u03bc\u03ae\u03bd\u03bf\u03c5 \u03c9\u03c2 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1",
"pref_MTD": "\u0391\u03c0\u03cc \u03c4\u03b7\u03bd\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03bf\u03c5 \u03bc\u03ae\u03bd\u03b1 \u03c9\u03c2 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1"
"pref_YTD": "\u0388\u03c4\u03bf\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1",
"pref_QTD": "\u03a4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1",
"pref_MTD": "\u039c\u03ae\u03bd\u03b1\u03c2 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c3\u03ae\u03bc\u03b5\u03c1\u03b1"
}
}

View File

@ -38,7 +38,7 @@ export default {
},
"list": {
"name": "\u540d\u7a31",
"account_number": "Account number",
"account_number": "\u5e33\u6236\u865f\u78bc",
"currentBalance": "\u76ee\u524d\u9918\u984d",
"lastActivity": "\u4e0a\u6b21\u6d3b\u52d5",
"active": "\u662f\u5426\u555f\u7528\uff1f"
@ -46,15 +46,15 @@ export default {
"breadcrumbs": {
"placeholder": "[Placeholder]",
"budgets": "\u9810\u7b97",
"subscriptions": "Subscriptions",
"transactions": "Transactions",
"title_expenses": "Expenses",
"subscriptions": "\u8a02\u95b1",
"transactions": "\u4ea4\u6613",
"title_expenses": "\u652f\u51fa",
"title_withdrawal": "Expenses",
"title_revenue": "Revenue \/ income",
"title_deposit": "Revenue \/ income",
"title_transfer": "Transfers",
"title_transfers": "Transfers",
"asset_accounts": "Asset accounts",
"title_transfer": "\u8f49\u5e33",
"title_transfers": "\u8f49\u5e33",
"asset_accounts": "\u8cc7\u7522\u5e33\u6236",
"expense_accounts": "Expense accounts",
"revenue_accounts": "Revenue accounts",
"liabilities_accounts": "Liabilities"
@ -204,8 +204,8 @@ export default {
"currencies": "\u8ca8\u5e63",
"administration": "\u7ba1\u7406",
"profile": "\u500b\u4eba\u6a94\u6848",
"source_account": "Source account",
"destination_account": "Destination account",
"source_account": "\u4f86\u6e90\u5e33\u6236",
"destination_account": "\u76ee\u6a19\u5e33\u6236",
"amount": "\u91d1\u984d",
"date": "\u65e5\u671f",
"time": "Time",

View File

@ -338,7 +338,7 @@ page container: q-ma-xs (margin all, xs) AND q-mb-md to give the page content so
<q-footer class="bg-grey-8 text-white" bordered>
<q-toolbar>
<div>
<small>Firefly III v v6.0.0 &copy; James Cole, AGPL-3.0-or-later.</small>
<small>Firefly III v v6.0.1 &copy; James Cole, AGPL-3.0-or-later.</small>
</div>
</q-toolbar>
</q-footer>

2
public/v1/js/app.js vendored

File diff suppressed because one or more lines are too long

View File

@ -5,18 +5,18 @@
*/
/*!
* Sizzle CSS Selector Engine v2.3.9
* Sizzle CSS Selector Engine v2.3.10
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2022-12-19
* Date: 2023-02-14
*/
/*!
* jQuery JavaScript Library v3.6.3
* jQuery JavaScript Library v3.6.4
* https://jquery.com/
*
* Includes Sizzle.js
@ -26,5 +26,5 @@
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2022-12-20T21:28Z
* Date: 2023-03-08T15:28Z
*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -88,7 +88,7 @@ function stopSorting() {
//$.post('api/v1/accounts/' + id, {order: newOrder, _token: token});
$.ajax({
url: 'api/v1/accounts/' + id,
data: {order: newOrder},
data: JSON.stringify({order: newOrder}),
type: 'PUT',
});
});

33
public/v1/js/ff/admin/users.js vendored Normal file
View File

@ -0,0 +1,33 @@
/*
* users.js
* Copyright (c) 2023 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$(function () {
"use strict";
$('.delete-invite').on('click', deleteInvite);
});
function deleteInvite(e) {
let link = $(e.currentTarget);
$.post(link.attr('href'), {_token: token}).then(function () {
location.reload();
});
return false;
}

View File

@ -224,7 +224,6 @@ function deleteBudgetLimit(e) {
var url = deleteBudgetLimitUrl.replace('REPLACEME', budgetLimitId.toString());
$.post(url, {_token: token}).then(function () {
$('.bl_entry[data-budget-limit-id="' + budgetLimitId + '"]').remove();
});
return false;
}

View File

@ -20,9 +20,18 @@
/** global: moment, token, dateRangeMeta,dateRangeConfig, accountingConfig, accounting, currencySymbol, mon_decimal_point, frac_digits, showFullList, showOnlyTop, mon_thousands_sep */
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'),
'Content-Type': 'application/json'
}
});
$(function () {
"use strict";
configAccounting(currencySymbol);
// on submit of logout button:
@ -37,11 +46,7 @@ $(function () {
$('button[type="submit"]').prop('disabled', true);
});
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
// when you click on a currency, this happens:
$('.currency-option').on('click', currencySelect);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -192,6 +192,13 @@
border-color: #15181a;
cursor: not-allowed;
}
.skin-firefly-iii .text-warning {
color: #f39c12 !important;
}
.skin-firefly-iii a.text-warning:hover,
.skin-firefly-iii a.text-warning:focus {
color: #d39e00 !important;
}
.skin-firefly-iii h4 {
color: #44DEF1;
}
@ -450,7 +457,7 @@
.skin-firefly-iii .input-group textarea {
background-color: #353c42;
color: #bec5cb;
border: 1px solid #353c42;
border: 1px solid #73818f;
}
.skin-firefly-iii .list-group {
color: #bec5cb;

File diff suppressed because one or more lines are too long

View File

@ -24,8 +24,8 @@
font-style: normal;
font-weight: 300;
src: local(''),
url('/v3-local/fonts/source-sans-pro-v21-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/v3-local/fonts/source-sans-pro-v21-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* source-sans-pro-regular - latin */
@ -34,8 +34,8 @@
font-style: normal;
font-weight: 400;
src: local(''),
url('/v3-local/fonts/source-sans-pro-v21-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/v3-local/fonts/source-sans-pro-v21-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('v3-local/fonts/source-sans-pro-v21-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* source-sans-pro-italic - latin */
@ -44,8 +44,8 @@
font-style: italic;
font-weight: 400;
src: local(''),
url('/v3-local/fonts/source-sans-pro-v21-latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/v3-local/fonts/source-sans-pro-v21-latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* source-sans-pro-700 - latin */
@ -54,6 +54,6 @@
font-style: normal;
font-weight: 700;
src: local(''),
url('/v3-local/fonts/source-sans-pro-v21-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('/v3-local/fonts/source-sans-pro-v21-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('../../v3-local/fonts/source-sans-pro-v21-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

View File

@ -1 +1 @@
<!DOCTYPE html><html><head><base href=/v3/ ><title>Firefly III</title><meta charset=utf-8><meta content="Personal finances manager" name=description><meta content="telephone=no" name=format-detection><meta content=no name=msapplication-tap-highlight><meta content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width" name=viewport><link href=favicon-32x32.png rel=icon sizes=32x32 type=image/png><link href=favicon-16x16.png rel=icon sizes=16x16 type=image/png><link href=maskable76.png rel=apple-touch-icon sizes=76x76><link href=maskable120.png rel=apple-touch-icon sizes=120x120><link href=maskable152.png rel=apple-touch-icon sizes=152x152><link href=apple-touch-icon.png rel=apple-touch-icon sizes=180x180><link color=#3c8dbc href=safari-pinned-tab.svg rel=mask-icon><link href=maskable192.png rel=icon sizes=192x192><link href=maskable128.png rel=icon sizes=128x128><link href=manifest.webmanifest rel=manifest><meta content=#1e6581 name=msapplication-TileColor><meta content=maskable512.png name=msapplication-TileImage><meta content=no name=msapplication-tap-highlight><meta content="Firefly III" name=application-name><meta content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir" name=robots><meta content=yes name=apple-mobile-web-app-capable><meta content="Firefly III" name=apple-mobile-web-app-title><meta content="Firefly III" name=application-name><meta content=#3c8dbc name=msapplication-TileColor><meta content="mstile-144x144.png?v=3e8AboOwbd" name=msapplication-TileImage><meta content=#3c8dbc name=theme-color><script defer src=/v3/js/vendor.43fbf1b0.js></script><script defer src=/v3/js/app.8ad7cfe1.js></script><link href=/v3/css/vendor.b7419aa9.css rel=stylesheet><link href=/v3/css/app.50c7ba73.css rel=stylesheet></head><body><div id=q-app></div></body></html>
<!DOCTYPE html><html><head><base href=/v3/ ><title>Firefly III</title><meta charset=utf-8><meta content="Personal finances manager" name=description><meta content="telephone=no" name=format-detection><meta content=no name=msapplication-tap-highlight><meta content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width" name=viewport><link href=favicon-32x32.png rel=icon sizes=32x32 type=image/png><link href=favicon-16x16.png rel=icon sizes=16x16 type=image/png><link href=maskable76.png rel=apple-touch-icon sizes=76x76><link href=maskable120.png rel=apple-touch-icon sizes=120x120><link href=maskable152.png rel=apple-touch-icon sizes=152x152><link href=apple-touch-icon.png rel=apple-touch-icon sizes=180x180><link color=#3c8dbc href=safari-pinned-tab.svg rel=mask-icon><link href=maskable192.png rel=icon sizes=192x192><link href=maskable128.png rel=icon sizes=128x128><link href=manifest.webmanifest rel=manifest><meta content=#1e6581 name=msapplication-TileColor><meta content=maskable512.png name=msapplication-TileImage><meta content=no name=msapplication-tap-highlight><meta content="Firefly III" name=application-name><meta content="noindex, nofollow, noarchive, noodp, NoImageIndex, noydir" name=robots><meta content=yes name=apple-mobile-web-app-capable><meta content="Firefly III" name=apple-mobile-web-app-title><meta content="Firefly III" name=application-name><meta content=#3c8dbc name=msapplication-TileColor><meta content="mstile-144x144.png?v=3e8AboOwbd" name=msapplication-TileImage><meta content=#3c8dbc name=theme-color><script defer src=/v3/js/vendor.43fbf1b0.js></script><script defer src=/v3/js/app.16587ec0.js></script><link href=/v3/css/vendor.b7419aa9.css rel=stylesheet><link href=/v3/css/app.50c7ba73.css rel=stylesheet></head><body><div id=q-app></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -40,7 +40,7 @@
:value="cBill.id">{{ cBill.name }}
</option>
</select>
<p v-if="this.bills.length === 1" class="help-block" v-text="$t('firefly.no_bill_pointer')"></p>
<p v-if="this.bills.length === 1" class="help-block" v-html="$t('firefly.no_bill_pointer')"></p>
<ul v-for="error in this.error" class="list-unstyled">
<li class="text-danger">{{ error }}</li>
</ul>

View File

@ -40,7 +40,7 @@
:value="cBudget.id">{{ cBudget.name }}
</option>
</select>
<p v-if="this.budgets.length === 1" class="help-block" v-text="$t('firefly.no_budget_pointer')"></p>
<p v-if="this.budgets.length === 1" class="help-block" v-html="$t('firefly.no_budget_pointer')"></p>
<ul v-for="error in this.error" class="list-unstyled">
<li class="text-danger">{{ error }}</li>
</ul>

View File

@ -529,7 +529,7 @@ export default {
// if count is 0, send user onwards.
if (this.createAnother) {
// do message:
this.success_message = this.$t('firefly.transaction_stored_link', {ID: groupId, title: $(title).text()});
this.success_message = this.$t('firefly.transaction_stored_link', {ID: groupId, title: this.escapeHTML(title)});
this.error_message = '';
if (this.resetFormAfter) {
// also clear form.

View File

@ -140,7 +140,7 @@
"internal_reference": "Referencia interna",
"webhook_response": "Respuesta",
"webhook_trigger": "Disparador",
"webhook_delivery": "Delivery"
"webhook_delivery": "Entrega"
},
"list": {
"active": "\u00bfEst\u00e1 Activo?",

View File

@ -19,9 +19,9 @@
"fire_webhooks_checkbox": "Fire webhooks",
"no_budget_pointer": "You seem to have no budgets yet. You should create some on the <a href=\"budgets\">budgets<\/a>-page. Budgets can help you keep track of expenses.",
"no_bill_pointer": "You seem to have no bills yet. You should create some on the <a href=\"bills\">bills<\/a>-page. Bills can help you keep track of expenses.",
"source_account": "Source account",
"source_account": "\u4f86\u6e90\u5e33\u6236",
"hidden_fields_preferences": "You can enable more transaction options in your <a href=\"preferences\">preferences<\/a>.",
"destination_account": "Destination account",
"destination_account": "\u76ee\u6a19\u5e33\u6236",
"add_another_split": "\u589e\u52a0\u62c6\u5206",
"submission": "Submission",
"create_another": "After storing, return here to create another one.",
@ -144,8 +144,8 @@
},
"list": {
"active": "\u662f\u5426\u555f\u7528\uff1f",
"trigger": "Trigger",
"response": "Response",
"trigger": "\u89f8\u767c\u5668",
"response": "\u56de\u61c9",
"delivery": "Delivery",
"url": "URL",
"secret": "Secret"

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version заявка за потвърждение',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Съдържанието на това поле е невалидно без информация за валута.',
'not_transfer_account' => 'Този акаунт не е акаунт, който може да се използва за прехвърляния.',
'require_currency_amount' => 'Съдържанието на това поле е невалидно без стойност в другата валута.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Описанието на транзакцията не трябва да е равно на общото описание.',
'file_invalid_mime' => 'Файлът ":name" е от тип ":mime", който не се приема за качване.',
'file_too_large' => 'Файлът ":name" е твърде голям.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visitar l\'URL del webhook',
'reset_webhook_secret' => 'Reiniciar el secret del webhook',
'webhook_stored_link' => 'S\'ha desat <a href="webhooks/show/{ID}">el Webook #{ID} ("{title}")</a> correctament.',
'webhook_updated_link' => 'S\'ha actualitzat el <a href="webhooks/show/{ID}">Webook #{ID}</a> ("{title}").',
'webhook_updated_link' => 'S\'ha actualitzat el <a href="webhooks/show/{ID}">Webook #{ID}</a> ("{title}").',
// API access
'authorization_request' => 'Firefly III v:version Sol·licitud d\'Autorització',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invitar nou usuari',
'invite_new_user_text' => 'Com a administrador, pots convidar usuaris a l\'administració de Firefly III. Amb aquest enllaç podran crear un compte. L\'usuari convidat, i el seu compte d\'invitació apareixeran a la taula inferior. Pots compartir l\'enllaç.',
'invited_user_mail' => 'Correu electrònic',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'El contingut d\'aquest camp no és vàlid sense informació de la moneda.',
'not_transfer_account' => 'Aquest compte no és un compte que puguis fer servir per transferències.',
'require_currency_amount' => 'El contingut d\'aquest camp no és vàlid sense informació de la quantitat estrangera.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'La descripció de la transacció no hauria de ser igual a la descripció global.',
'file_invalid_mime' => 'El fitxer ":name" és de tipus ":mime", el qual no s\'accepta com a pujada.',
'file_too_large' => 'El fitxer ":name" és massa gran.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Požadavek na ověření Firefly III verze :version',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Obsah tohoto pole je neplatný bez informace o měně.',
'not_transfer_account' => 'Tento účet není účet, který lze použít pro převody.',
'require_currency_amount' => 'Obsah tohoto pole je neplatný bez informace o měně.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Popis transakce nesmí být stejný jako globální popis.',
'file_invalid_mime' => 'Soubor ":name" je typu ":mime", který není schválen pro nahrání.',
'file_too_large' => 'Soubor ":name" je příliš velký.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Besøg webhook-URL',
'reset_webhook_secret' => 'Nulstil webhook-hemmelighed',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version Anmodning om Autorisation',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Indholdet af dette felt er ugyldigt uden møntfodsinformation.',
'not_transfer_account' => 'Denne konto kan ikke benyttes til overførsler.',
'require_currency_amount' => 'Indholdet af dette felt er ugyldigt uden information om det udenlandske beløb.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Overførselsbeskrivelse bør ikke være den samme som den generelle beskrivelse.',
'file_invalid_mime' => 'Filen ":name" er af typen ":mime", som ikke er gyldig som en ny upload.',
'file_too_large' => 'Filen ":name" er for stor.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Webhook-URL besuchen',
'reset_webhook_secret' => 'Webhook Secret zurücksetzen',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> wurde gespeichert.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") wurde aktualisiert.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") wurde aktualisiert.',
// API access
'authorization_request' => 'Firefly III v:version Autorisierungsanfrage',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Neuen Nutzer einladen',
'invite_new_user_text' => 'Als Administrator können Sie Benutzer einladen, sich auf Ihrer Firefly III Administration zu registrieren. Über den direkten Link, den Sie mit ihnen teilen können, können diese ein Konto registrieren. Der eingeladene Benutzer und sein Einladungslink erscheinen in der unten stehenden Tabelle. Sie können den Einladungslink mit ihm teilen.',
'invited_user_mail' => 'E-Mail Adresse',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Der Inhalt dieses Feldes ist ohne Währungsinformationen ungültig.',
'not_transfer_account' => 'Dieses Konto ist kein Konto, welches für Buchungen genutzt werden kann.',
'require_currency_amount' => 'Der Inhalt dieses Feldes ist ohne Eingabe eines Betrags in Fremdwährung ungültig.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Die Transaktionsbeschreibung darf nicht der globalen Beschreibung entsprechen.',
'file_invalid_mime' => 'Die Datei „:name” ist vom Typ „:mime”, welcher nicht zum Hochladen zugelassen ist.',
'file_too_large' => 'Die Datei „:name” ist zu groß.',

View File

@ -47,9 +47,9 @@ return [
'last_seven_days' => 'Τελευταίες επτά ημέρες',
'last_thirty_days' => 'Τελευταίες τριάντα ημέρες',
'last_180_days' => 'Τελευταίες 180 ημέρες',
'month_to_date' => 'Από την αρχή του μήνα ως σήμερα',
'year_to_date' => 'Από την αρχή του έτους ως σήμερα',
'YTD' => 'Από την αρχή του έτους ως σήμερα',
'month_to_date' => 'Μήνας μέχρι σήμερα',
'year_to_date' => 'Έτος μέχρι σήμερα',
'YTD' => 'ΤΡΕΧΟΝ ΕΤΟΣ',
'welcome_back' => 'Τι παίζει;',
'everything' => 'Όλα',
'today' => 'σήμερα',
@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Επισκεφθείτε το URL του webhook',
'reset_webhook_secret' => 'Επαναφορά μυστικού webhook',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> έχει αποθηκευτεί.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Το Webhook #{ID}</a> ("{title}") έχει ενημερωθεί.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Το Webhook #{ID}</a> ("{title}") έχει ενημερωθεί.',
// API access
'authorization_request' => 'Αίτημα Εξουσιοδότησης Firefly III v:version',
@ -1317,9 +1317,9 @@ return [
'pref_last90' => 'Τελευταίες 90 ημέρες',
'pref_last30' => 'Τελευταίες 30 ημέρες',
'pref_last7' => 'Τελευταίες 7 ημέρες',
'pref_YTD' => 'Από την αρχή του έτους ως σήμερα',
'pref_QTD' => 'Από την αρχή του τριμήνου ως σήμερα',
'pref_MTD' => 'Από τηνν αρχή του μήνα ως σήμερα',
'pref_YTD' => 'Έτος μέχρι σήμερα',
'pref_QTD' => 'Τρίμηνο μέχρι σήμερα',
'pref_MTD' => 'Μήνας μέχρι σήμερα',
'pref_languages' => 'Γλώσσες',
'pref_locale' => 'Ρυθμίσεις τοποθεσίας',
'pref_languages_help' => 'Το Firefly III υποστηρίζει διάφορες γλώσσες. Ποιά προτιμάτε;',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',
@ -2409,12 +2411,12 @@ return [
'admin_maintanance_title' => 'Συντήρηση',
'admin_maintanance_expl' => 'Μερικά ωραία κουμπιά για συντήρηση στο Firefly III',
'admin_maintenance_clear_cache' => 'Εκκαθάριση cache',
'admin_notifications' => 'Admin notifications',
'admin_notifications' => 'Ειδοποιήσεις διαχειριστή',
'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.',
'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message',
'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification',
'admin_notification_check_new_version' => 'A new version is available',
'admin_notification_check_invite_created' => 'A user is invited to Firefly III',
'admin_notification_check_new_version' => 'Μια νέα έκδοση είναι διαθέσιμη',
'admin_notification_check_invite_created' => 'Ένας χρήστης θα λάβει πρόσκληση για το Firefly III',
'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed',
'all_invited_users' => 'All invited users',
'save_notification_settings' => 'Save settings',
@ -2697,8 +2699,8 @@ return [
'ale_action_update_transaction_type' => 'Changed transaction type',
'ale_action_update_notes' => 'Changed notes',
'ale_action_update_description' => 'Changed description',
'ale_action_add_to_piggy' => 'Piggy bank',
'ale_action_remove_from_piggy' => 'Piggy bank',
'ale_action_add_to_piggy' => 'Κουμπαράς',
'ale_action_remove_from_piggy' => 'Κουμπαράς',
'ale_action_add_tag' => 'Added tag',
];

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρη χωρίς νομισματικές πληροφορίες.',
'not_transfer_account' => 'Αυτός ο λογαριασμός δεν είναι λογαριασμός που μπορεί να χρησιμοποιηθεί για συναλλαγές.',
'require_currency_amount' => 'Το περιεχόμενο αυτού του πεδίου δεν είναι έγκυρο χωρίς πληροφορίες ετερόχθονος ποσού.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Η περιγραφή της συναλλαγής δεν πρέπει να ισούται με καθολική περιγραφή.',
'file_invalid_mime' => 'Το αρχείο ":name" είναι τύπου ":mime" που δεν είναι αποδεκτός ως νέας μεταφόρτωσης.',
'file_too_large' => 'Το αρχείο ":name" είναι πολύ μεγάλο.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version Authorisation Request',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'The content of this field is invalid without currency information.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'require_currency_amount' => 'The content of this field is invalid without foreign amount information.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Transaction description should not equal global description.',
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.',
'file_too_large' => 'File ":name" is too large.',

View File

@ -270,7 +270,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version Authorization Request',
@ -2274,6 +2274,8 @@ return [
// Ignore this comment
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -56,6 +56,7 @@ return [
'require_currency_info' => 'The content of this field is invalid without currency information.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'require_currency_amount' => 'The content of this field is invalid without foreign amount information.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Transaction description should not equal global description.',
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.',
'file_too_large' => 'File ":name" is too large.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visita la URL del webhook',
'reset_webhook_secret' => 'Restablecer secreto del webhook',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">El webhook #{ID} ("{title}")</a> ha sido almacenado.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">El webhook #{ID} ("{title}")</a> ha sido actualizado.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">El webhook #{ID} ("{title}")</a> ha sido actualizado.',
// API access
'authorization_request' => 'Firefly III v:version Solicitud de autorización',
@ -495,159 +495,159 @@ return [
'search_modifier_account_starts' => 'Cualquier cuenta comienza con ":value"',
'search_modifier_not_account_starts' => 'Ninguna cuenta comienza con ":value"',
'search_modifier_account_nr_is' => 'Número / IBAN de cualquier cuenta es ":value"',
'search_modifier_not_account_nr_is' => 'Neither account number / IBAN is ":value"',
'search_modifier_not_account_nr_is' => 'Ninguno de los números de cuenta / IBAN es ":value"',
'search_modifier_account_nr_contains' => 'Número de cuenta / IBAN de cualquier cuenta contiene ":value"',
'search_modifier_not_account_nr_contains' => 'Neither account number / IBAN contains ":value"',
'search_modifier_not_account_nr_contains' => 'Ninguno de los números de cuenta / IBAN contiene ":value"',
'search_modifier_account_nr_ends' => 'Número de cuenta / IBAN de cualquier cuenta termina con ":value"',
'search_modifier_not_account_nr_ends' => 'Neither account number / IBAN ends with ":value"',
'search_modifier_not_account_nr_ends' => 'Ninguno de los números de cuenta / IBAN termina con ":value"',
'search_modifier_account_nr_starts' => 'Número de cuenta / IBAN de cualquier cuenta empieza con ":value"',
'search_modifier_not_account_nr_starts' => 'Neither account number / IBAN starts with ":value"',
'search_modifier_not_account_nr_starts' => 'Ninguno de los números de cuenta / IBAN comienza con ":value"',
'search_modifier_category_contains' => 'La categoría contiene ":value"',
'search_modifier_not_category_contains' => 'Category does not contain ":value"',
'search_modifier_category_ends' => 'Category ends on ":value"',
'search_modifier_not_category_ends' => 'Category does not end on ":value"',
'search_modifier_not_category_contains' => 'La categoría no contiene ":value"',
'search_modifier_category_ends' => 'La categoría termina en ":value"',
'search_modifier_not_category_ends' => 'La categoría no termina en ":value"',
'search_modifier_category_starts' => 'La categoría comienza con ":value"',
'search_modifier_not_category_starts' => 'Category does not start with ":value"',
'search_modifier_not_category_starts' => 'La categoría no empieza con ":value"',
'search_modifier_budget_contains' => 'El presupuesto contiene ":value"',
'search_modifier_not_budget_contains' => 'Budget does not contain ":value"',
'search_modifier_not_budget_contains' => 'El presupuesto no contiene ":value"',
'search_modifier_budget_ends' => 'El presupuesto termina con ":value"',
'search_modifier_not_budget_ends' => 'Budget does not end on ":value"',
'search_modifier_not_budget_ends' => 'El presupuesto no termina en ":value"',
'search_modifier_budget_starts' => 'El presupuesto comienza con ":value"',
'search_modifier_not_budget_starts' => 'Budget does not start with ":value"',
'search_modifier_not_budget_starts' => 'El presupuesto no empieza con ":value"',
'search_modifier_bill_contains' => 'La factura contiene ":value"',
'search_modifier_not_bill_contains' => 'Bill does not contain ":value"',
'search_modifier_not_bill_contains' => 'La factura no contiene ":value"',
'search_modifier_bill_ends' => 'La factura termina con ":value"',
'search_modifier_not_bill_ends' => 'Bill does not end on ":value"',
'search_modifier_not_bill_ends' => 'La factura no termina en ":value"',
'search_modifier_bill_starts' => 'La factura comienza con ":value"',
'search_modifier_not_bill_starts' => 'Bill does not start with ":value"',
'search_modifier_not_bill_starts' => 'La factura no empieza con ":value"',
'search_modifier_external_id_contains' => 'La ID externa contiene ":value"',
'search_modifier_not_external_id_contains' => 'External ID does not contain ":value"',
'search_modifier_not_external_id_contains' => 'El ID externo no contiene ":value"',
'search_modifier_external_id_ends' => 'La ID externa termina con ":value"',
'search_modifier_not_external_id_ends' => 'External ID does not end with ":value"',
'search_modifier_not_external_id_ends' => 'El ID externo no termina en ":value"',
'search_modifier_external_id_starts' => 'La ID externa comienza con ":value"',
'search_modifier_not_external_id_starts' => 'External ID does not start with ":value"',
'search_modifier_not_external_id_starts' => 'El ID externo no empieza con ":value"',
'search_modifier_internal_reference_contains' => 'La referencia interna contiene ":value"',
'search_modifier_not_internal_reference_contains' => 'Internal reference does not contain ":value"',
'search_modifier_not_internal_reference_contains' => 'La referencia interna no contiene ":value"',
'search_modifier_internal_reference_ends' => 'La referencia interna termina con ":value"',
'search_modifier_internal_reference_starts' => 'La referencia interna comienza con ":value"',
'search_modifier_not_internal_reference_ends' => 'Internal reference does not end with ":value"',
'search_modifier_not_internal_reference_starts' => 'Internal reference does not start with ":value"',
'search_modifier_not_internal_reference_ends' => 'La referencia interna no termina en ":value"',
'search_modifier_not_internal_reference_starts' => 'La referencia interna no empieza con ":value"',
'search_modifier_external_url_is' => 'La URL externa es ":value"',
'search_modifier_not_external_url_is' => 'External URL is not ":value"',
'search_modifier_not_external_url_is' => 'La URL externa no es ":value"',
'search_modifier_external_url_contains' => 'La URL externa contiene ":value"',
'search_modifier_not_external_url_contains' => 'External URL does not contain ":value"',
'search_modifier_not_external_url_contains' => 'La URL externa no contiene ":value"',
'search_modifier_external_url_ends' => 'La URL externa termina con ":value"',
'search_modifier_not_external_url_ends' => 'External URL does not end with ":value"',
'search_modifier_not_external_url_ends' => 'La URL externa no termina en ":value"',
'search_modifier_external_url_starts' => 'La URL externa comienza con ":value"',
'search_modifier_not_external_url_starts' => 'External URL does not start with ":value"',
'search_modifier_not_external_url_starts' => 'La URL externa no empieza con ":value"',
'search_modifier_has_no_attachments' => 'La transacción no tiene archivos adjuntos',
'search_modifier_not_has_no_attachments' => 'Transaction has attachments',
'search_modifier_not_has_attachments' => 'Transaction has no attachments',
'search_modifier_account_is_cash' => 'Either account is the "(cash)" account.',
'search_modifier_not_account_is_cash' => 'Neither account is the "(cash)" account.',
'search_modifier_not_has_no_attachments' => 'La transacción tiene archivos adjuntos',
'search_modifier_not_has_attachments' => 'La transacción no tiene archivos adjuntos',
'search_modifier_account_is_cash' => 'Cualquier cuenta es la cuenta de efectivo.',
'search_modifier_not_account_is_cash' => 'Ninguna cuenta es la cuenta de efectivo.',
'search_modifier_journal_id' => 'La ID del registro es ":value"',
'search_modifier_not_journal_id' => 'The journal ID is not ":value"',
'search_modifier_not_journal_id' => 'La ID del registro no es ":value"',
'search_modifier_recurrence_id' => 'El ID de transacción recurrente es ":value"',
'search_modifier_not_recurrence_id' => 'The recurring transaction ID is not ":value"',
'search_modifier_not_recurrence_id' => 'El ID de transacción recurrente no es ":value"',
'search_modifier_foreign_amount_is' => 'La cantidad en divisa extranjera es ":value"',
'search_modifier_not_foreign_amount_is' => 'The foreign amount is not ":value"',
'search_modifier_not_foreign_amount_is' => 'La cantidad en divisa extranjera no es ":value"',
'search_modifier_foreign_amount_less' => 'La cantidad en divisa extranjera es menor que ":value"',
'search_modifier_not_foreign_amount_more' => 'The foreign amount is less than ":value"',
'search_modifier_not_foreign_amount_less' => 'The foreign amount is more than ":value"',
'search_modifier_not_foreign_amount_more' => 'La cantidad en divisa extranjera es menor que ":value"',
'search_modifier_not_foreign_amount_less' => 'La cantidad en divisa extranjera es superior a ":value"',
'search_modifier_foreign_amount_more' => 'La cantidad en divisa extranjera es superior a ":value"',
'search_modifier_exists' => 'Transaction exists (any transaction)',
'search_modifier_not_exists' => 'Transaction does not exist (no transaction)',
'search_modifier_exists' => 'La transacción existe (cualquier transacción)',
'search_modifier_not_exists' => 'La transacción no existe (ninguna transacción)',
// date fields
'search_modifier_interest_date_on' => 'La fecha de interés de la transacción es ":value"',
'search_modifier_not_interest_date_on' => 'Transaction interest date is not ":value"',
'search_modifier_not_interest_date_on' => 'La fecha de interés de la transacción no es ":value"',
'search_modifier_interest_date_on_year' => 'La fecha de interés de la transacción es en el año ":value"',
'search_modifier_not_interest_date_on_year' => 'Transaction interest date is not in year ":value"',
'search_modifier_not_interest_date_on_year' => 'La fecha de interés de la transacción no es en el año ":value"',
'search_modifier_interest_date_on_month' => 'La fecha de interés de la transacción es en el mes ":value"',
'search_modifier_not_interest_date_on_month' => 'Transaction interest date is not in month ":value"',
'search_modifier_not_interest_date_on_month' => 'La fecha de interés de la transacción no es en el mes ":value"',
'search_modifier_interest_date_on_day' => 'La fecha de interés de la transacción es en el día ":value"',
'search_modifier_not_interest_date_on_day' => 'Transaction interest date is not on day of month ":value"',
'search_modifier_not_interest_date_on_day' => 'La fecha de interés de la transacción no es en el día del mes ":value"',
'search_modifier_interest_date_before_year' => 'El año de interés de la transacción es anterior o igual a ":value"',
'search_modifier_interest_date_before_month' => 'Transaction interest date is before or in month ":value"',
'search_modifier_interest_date_before_day' => 'Transaction interest date is before or on day of month ":value"',
'search_modifier_interest_date_after_year' => 'Transaction interest date is after or in year ":value"',
'search_modifier_interest_date_after_month' => 'Transaction interest date is after or in month ":value"',
'search_modifier_interest_date_after_day' => 'Transaction interest date is after or on day of month ":value"',
'search_modifier_book_date_on_year' => 'Transaction book date is in year ":value"',
'search_modifier_book_date_on_month' => 'Transaction book date is in month ":value"',
'search_modifier_book_date_on_day' => 'Transaction book date is on day of month ":value"',
'search_modifier_not_book_date_on_year' => 'Transaction book date is not in year ":value"',
'search_modifier_not_book_date_on_month' => 'Transaction book date is not in month ":value"',
'search_modifier_not_book_date_on_day' => 'Transaction book date is not on day of month ":value"',
'search_modifier_book_date_before_year' => 'Transaction book date is before or in year ":value"',
'search_modifier_book_date_before_month' => 'Transaction book date is before or in month ":value"',
'search_modifier_book_date_before_day' => 'Transaction book date is before or on day of month ":value"',
'search_modifier_book_date_after_year' => 'Transaction book date is after or in year ":value"',
'search_modifier_book_date_after_month' => 'Transaction book date is after or in month ":value"',
'search_modifier_book_date_after_day' => 'Transaction book date is after or on day of month ":value"',
'search_modifier_process_date_on_year' => 'Transaction process date is in year ":value"',
'search_modifier_process_date_on_month' => 'Transaction process date is in month ":value"',
'search_modifier_process_date_on_day' => 'Transaction process date is on day of month ":value"',
'search_modifier_not_process_date_on_year' => 'Transaction process date is not in year ":value"',
'search_modifier_not_process_date_on_month' => 'Transaction process date is not in month ":value"',
'search_modifier_not_process_date_on_day' => 'Transaction process date is not on day of month ":value"',
'search_modifier_process_date_before_year' => 'Transaction process date is before or in year ":value"',
'search_modifier_process_date_before_month' => 'Transaction process date is before or in month ":value"',
'search_modifier_process_date_before_day' => 'Transaction process date is before or on day of month ":value"',
'search_modifier_process_date_after_year' => 'Transaction process date is after or in year ":value"',
'search_modifier_process_date_after_month' => 'Transaction process date is after or in month ":value"',
'search_modifier_process_date_after_day' => 'Transaction process date is after or on day of month ":value"',
'search_modifier_due_date_on_year' => 'Transaction due date is in year ":value"',
'search_modifier_due_date_on_month' => 'Transaction due date is in month ":value"',
'search_modifier_due_date_on_day' => 'Transaction due date is on day of month ":value"',
'search_modifier_not_due_date_on_year' => 'Transaction due date is not in year ":value"',
'search_modifier_not_due_date_on_month' => 'Transaction due date is not in month ":value"',
'search_modifier_not_due_date_on_day' => 'Transaction due date is not on day of month ":value"',
'search_modifier_due_date_before_year' => 'Transaction due date is before or in year ":value"',
'search_modifier_due_date_before_month' => 'Transaction due date is before or in month ":value"',
'search_modifier_due_date_before_day' => 'Transaction due date is before or on day of month ":value"',
'search_modifier_due_date_after_year' => 'Transaction due date is after or in year ":value"',
'search_modifier_due_date_after_month' => 'Transaction due date is after or in month ":value"',
'search_modifier_due_date_after_day' => 'Transaction due date is after or on day of month ":value"',
'search_modifier_payment_date_on_year' => 'Transaction payment date is in year ":value"',
'search_modifier_payment_date_on_month' => 'Transaction payment date is in month ":value"',
'search_modifier_payment_date_on_day' => 'Transaction payment date is on day of month ":value"',
'search_modifier_not_payment_date_on_year' => 'Transaction payment date is not in year ":value"',
'search_modifier_not_payment_date_on_month' => 'Transaction payment date is not in month ":value"',
'search_modifier_not_payment_date_on_day' => 'Transaction payment date is not on day of month ":value"',
'search_modifier_payment_date_before_year' => 'Transaction payment date is before or in year ":value"',
'search_modifier_payment_date_before_month' => 'Transaction payment date is before or in month ":value"',
'search_modifier_payment_date_before_day' => 'Transaction payment date is before or on day of month ":value"',
'search_modifier_payment_date_after_year' => 'Transaction payment date is after or in year ":value"',
'search_modifier_payment_date_after_month' => 'Transaction payment date is after or in month ":value"',
'search_modifier_payment_date_after_day' => 'Transaction payment date is after or on day of month ":value"',
'search_modifier_invoice_date_on_year' => 'Transaction invoice date is in year ":value"',
'search_modifier_invoice_date_on_month' => 'Transaction invoice date is in month ":value"',
'search_modifier_invoice_date_on_day' => 'Transaction invoice date is on day of month ":value"',
'search_modifier_not_invoice_date_on_year' => 'Transaction invoice date is not in year ":value"',
'search_modifier_not_invoice_date_on_month' => 'Transaction invoice date is not in month ":value"',
'search_modifier_not_invoice_date_on_day' => 'Transaction invoice date is not on day of month ":value"',
'search_modifier_invoice_date_before_year' => 'Transaction invoice date is before or in year ":value"',
'search_modifier_invoice_date_before_month' => 'Transaction invoice date is before or in month ":value"',
'search_modifier_invoice_date_before_day' => 'Transaction invoice date is before or on day of month ":value"',
'search_modifier_invoice_date_after_year' => 'Transaction invoice date is after or in year ":value"',
'search_modifier_invoice_date_after_month' => 'Transaction invoice date is after or in month ":value"',
'search_modifier_invoice_date_after_day' => 'Transaction invoice date is after or on day of month ":value"',
'search_modifier_interest_date_before_month' => 'La fecha de interés de la transacción es anterior o en el mes ":value"',
'search_modifier_interest_date_before_day' => 'La fecha de interés de la transacción es anterior o en el día del mes ":value"',
'search_modifier_interest_date_after_year' => 'La fecha de interés de la transacción es posterior o en el año ":value"',
'search_modifier_interest_date_after_month' => 'La fecha de interés de la transacción es posterior o en el mes ":value"',
'search_modifier_interest_date_after_day' => 'La fecha de interés de la transacción es posterior o el día del mes ":value"',
'search_modifier_book_date_on_year' => 'La fecha del registro de la transacción es en el año ":value"',
'search_modifier_book_date_on_month' => 'La fecha del registro de la transacción es en el mes ":value"',
'search_modifier_book_date_on_day' => 'La fecha del registro de la transacción es en el día del mes ":value"',
'search_modifier_not_book_date_on_year' => 'La fecha del registro de la transacción no es en el año ":value"',
'search_modifier_not_book_date_on_month' => 'La fecha del registro de la transacción no es en el mes ":value"',
'search_modifier_not_book_date_on_day' => 'La fecha del registro de la transacción no es en el día del mes ":value"',
'search_modifier_book_date_before_year' => 'La fecha del registro de la transacción es antes o en el año ":value"',
'search_modifier_book_date_before_month' => 'La fecha del registro de la transacción es antes o en el mes ":value"',
'search_modifier_book_date_before_day' => 'La fecha de registro de la transacción es anterior o en el día del mes ":value"',
'search_modifier_book_date_after_year' => 'La fecha del registro de la transacción es después o en el año ":value"',
'search_modifier_book_date_after_month' => 'La fecha del registro de la transacción es después o en el mes ":value"',
'search_modifier_book_date_after_day' => 'La fecha de registro de la transacción es después o en el día del mes ":value"',
'search_modifier_process_date_on_year' => 'La fecha del proceso de transacción es el año ":value"',
'search_modifier_process_date_on_month' => 'La fecha del proceso de transacción es en el mes ":value"',
'search_modifier_process_date_on_day' => 'La fecha del proceso de transacción es el día del mes ":value"',
'search_modifier_not_process_date_on_year' => 'La fecha del proceso de transacción no es el año ":value"',
'search_modifier_not_process_date_on_month' => 'La fecha del proceso de transacción no es en el mes ":value"',
'search_modifier_not_process_date_on_day' => 'La fecha del proceso de transacción no es el día del mes ":value"',
'search_modifier_process_date_before_year' => 'La fecha del proceso de la transacción es antes o en el año ":value"',
'search_modifier_process_date_before_month' => 'La fecha del proceso de la transacción es antes o en el mes ":value"',
'search_modifier_process_date_before_day' => 'La fecha de proceso de la transacción es anterior o en el día del mes ":value"',
'search_modifier_process_date_after_year' => 'La fecha del proceso de la transacción es después o en el año ":value"',
'search_modifier_process_date_after_month' => 'La fecha del proceso de la transacción es después o en el mes ":value"',
'search_modifier_process_date_after_day' => 'La fecha de proceso de la transacción es después o en el día del mes ":value"',
'search_modifier_due_date_on_year' => 'La fecha de vencimiento de la transacción es en el año ":value"',
'search_modifier_due_date_on_month' => 'La fecha del vencimiento de la transacción es en el mes ":value"',
'search_modifier_due_date_on_day' => 'La fecha del vencimiento de la transacción es en el día del mes ":value"',
'search_modifier_not_due_date_on_year' => 'La fecha del vencimiento de la transacción no es en el año ":value"',
'search_modifier_not_due_date_on_month' => 'La fecha del vencimiento de la transacción no es en el mes ":value"',
'search_modifier_not_due_date_on_day' => 'La fecha del vencimiento de la transacción no es en el día del mes ":value"',
'search_modifier_due_date_before_year' => 'La fecha de vencimiento de la transacción es antes o en el año ":value"',
'search_modifier_due_date_before_month' => 'La fecha de vencimiento de la transacción es antes o en el mes ":value"',
'search_modifier_due_date_before_day' => 'La fecha de vencimiento de la transacción es anterior o en el día del mes ":value"',
'search_modifier_due_date_after_year' => 'La fecha del vencimiento de la transacción es después o en el año ":value"',
'search_modifier_due_date_after_month' => 'La fecha del vencimiento de la transacción es después o en el mes ":value"',
'search_modifier_due_date_after_day' => 'La fecha de vencimiento de la transacción es después o en el día del mes ":value"',
'search_modifier_payment_date_on_year' => 'La fecha de pago de la transacción es en el año ":value"',
'search_modifier_payment_date_on_month' => 'La fecha de pago de la transacción es en el mes ":value"',
'search_modifier_payment_date_on_day' => 'La fecha de pago de la transacción es el día del mes ":value"',
'search_modifier_not_payment_date_on_year' => 'La fecha de pago de la transacción no es en el año ":value"',
'search_modifier_not_payment_date_on_month' => 'La fecha de pago de la transacción no es en el mes ":value"',
'search_modifier_not_payment_date_on_day' => 'La fecha de pago de la transacción no es el día del mes ":value"',
'search_modifier_payment_date_before_year' => 'La fecha de pago de la transacción es antes o en el año ":value"',
'search_modifier_payment_date_before_month' => 'La fecha de pago de la transacción es antes o en el mes ":value"',
'search_modifier_payment_date_before_day' => 'La fecha de pago de la transacción es anterior o en el día del mes ":value"',
'search_modifier_payment_date_after_year' => 'La fecha de pago de la transacción es después o en el año ":value"',
'search_modifier_payment_date_after_month' => 'La fecha de pago de la transacción es después o en el mes ":value"',
'search_modifier_payment_date_after_day' => 'La fecha de pago de la transacción es después o en el día del mes ":value"',
'search_modifier_invoice_date_on_year' => 'La fecha de facturación de la transacción es en el año ":value"',
'search_modifier_invoice_date_on_month' => 'La fecha de facturación de la transacción es en el mes ":value"',
'search_modifier_invoice_date_on_day' => 'La fecha de facturación de la transacción es en el día ":value"',
'search_modifier_not_invoice_date_on_year' => 'La fecha de facturación de la transacción no es en el año ":value"',
'search_modifier_not_invoice_date_on_month' => 'La fecha de facturación de la transacción es en el mes ":value"',
'search_modifier_not_invoice_date_on_day' => 'La fecha de facturación de la transacción no es en el día del mes ":value"',
'search_modifier_invoice_date_before_year' => 'La fecha de facturación de la transacción es antes o en el año ":value"',
'search_modifier_invoice_date_before_month' => 'La fecha de facturación de la transacción es antes o en el mes ":value"',
'search_modifier_invoice_date_before_day' => 'La fecha de facturación de la transacción es anterior o en el día del mes ":value"',
'search_modifier_invoice_date_after_year' => 'La fecha de facturación de la transacción es después o en el año ":value"',
'search_modifier_invoice_date_after_month' => 'La fecha de facturación de la transacción es después o en el mes ":value"',
'search_modifier_invoice_date_after_day' => 'La fecha de facturación de la transacción es después o en el día del mes ":value"',
// other dates
'search_modifier_updated_at_on_year' => 'Transaction was last updated in year ":value"',
'search_modifier_updated_at_on_month' => 'Transaction was last updated in month ":value"',
'search_modifier_updated_at_on_day' => 'Transaction was last updated on day of month ":value"',
'search_modifier_not_updated_at_on_year' => 'Transaction was not last updated in year ":value"',
'search_modifier_not_updated_at_on_month' => 'Transaction was not last updated in month ":value"',
'search_modifier_not_updated_at_on_day' => 'Transaction was not last updated on day of month ":value"',
'search_modifier_updated_at_before_year' => 'Transaction was last updated in or before year ":value"',
'search_modifier_updated_at_before_month' => 'Transaction was last updated in or before month ":value"',
'search_modifier_updated_at_before_day' => 'Transaction was last updated on or before day of month ":value"',
'search_modifier_updated_at_after_year' => 'Transaction was last updated in or after year ":value"',
'search_modifier_updated_at_after_month' => 'Transaction was last updated in or after month ":value"',
'search_modifier_updated_at_after_day' => 'Transaction was last updated on or after day of month ":value"',
'search_modifier_created_at_on_year' => 'Transaction was created in year ":value"',
'search_modifier_created_at_on_month' => 'Transaction was created in month ":value"',
'search_modifier_updated_at_on_year' => 'La transacción fue actualizada por última vez en el año":value"',
'search_modifier_updated_at_on_month' => 'La transacción fue actualizada por última vez en el mes ":value"',
'search_modifier_updated_at_on_day' => 'La transacción fue actualizada por última vez en el día del mes: ":value"',
'search_modifier_not_updated_at_on_year' => 'La transacción no fue actualizada por última vez en el año":value"',
'search_modifier_not_updated_at_on_month' => 'La transacción no fue actualizada por última vez en el mes ":value"',
'search_modifier_not_updated_at_on_day' => 'La transacción no fue actualizada por última vez en el día del mes ":value"',
'search_modifier_updated_at_before_year' => 'La transacción fue actualizada por última vez en o antes del año":value"',
'search_modifier_updated_at_before_month' => 'La transacción se actualizó por última vez en o antes del mes ":value"',
'search_modifier_updated_at_before_day' => 'La transacción se actualizó por última vez en o antes del día del mes ":value"',
'search_modifier_updated_at_after_year' => 'La transacción se actualizó por última vez en o después del año ":value"',
'search_modifier_updated_at_after_month' => 'La transacción se actualizó por última vez en o después del mes ":value"',
'search_modifier_updated_at_after_day' => 'La transacción se actualizó por última vez en o después día del mes ":value"',
'search_modifier_created_at_on_year' => 'La transacción fue creada en el año":value"',
'search_modifier_created_at_on_month' => 'La transacción fue creada en el mes ":value"',
'search_modifier_created_at_on_day' => 'Transaction was created on day of month ":value"',
'search_modifier_not_created_at_on_year' => 'Transaction was not created in year ":value"',
'search_modifier_not_created_at_on_month' => 'Transaction was not created in month ":value"',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',
@ -2413,12 +2415,12 @@ return [
'admin_notifications_expl' => 'The following notifications can be enabled or disabled by the administrator. If you want to get these messages over Slack as well, set the "incoming webhook" URL.',
'admin_notification_check_user_new_reg' => 'User gets post-registration welcome message',
'admin_notification_check_admin_new_reg' => 'Administrator(s) get new user registration notification',
'admin_notification_check_new_version' => 'A new version is available',
'admin_notification_check_invite_created' => 'A user is invited to Firefly III',
'admin_notification_check_invite_redeemed' => 'A user invitation is redeemed',
'all_invited_users' => 'All invited users',
'save_notification_settings' => 'Save settings',
'notification_settings_saved' => 'The notification settings have been saved',
'admin_notification_check_new_version' => 'Una nueva versión está disponible',
'admin_notification_check_invite_created' => 'Un usuario ha sido invitado a Firefly III',
'admin_notification_check_invite_redeemed' => 'Una invitación de usuario ha sido canjeada',
'all_invited_users' => 'Todos los usuarios invitados',
'save_notification_settings' => 'Guardar ajustes',
'notification_settings_saved' => 'Se han guardado los ajustes de notificación',
'split_transaction_title' => 'Descripción de la transacción dividida',
@ -2565,8 +2567,8 @@ return [
'no_bills_create_default' => 'Crear una factura',
// recurring transactions
'create_right_now' => 'Create right now',
'no_new_transaction_in_recurrence' => 'No new transaction was created. Perhaps it was already fired for this date?',
'create_right_now' => 'Crear ahora mismo',
'no_new_transaction_in_recurrence' => 'No se ha creado ninguna nueva transacción. ¿Tal vez ya ha sido lanzada para esta fecha?',
'recurrences' => 'Transacciones Recurrentes',
'repeat_until_in_past' => 'Esta transacción recurrente dejó de repetirse el :date.',
'recurring_calendar_view' => 'Calendario',
@ -2681,25 +2683,25 @@ return [
'placeholder' => '[Placeholder]',
// audit log entries
'audit_log_entries' => 'Audit log entries',
'ale_action_log_add' => 'Added :amount to piggy bank ":name"',
'ale_action_log_remove' => 'Removed :amount from piggy bank ":name"',
'ale_action_clear_budget' => 'Removed from budget',
'ale_action_clear_category' => 'Removed from category',
'ale_action_clear_notes' => 'Removed notes',
'ale_action_clear_tag' => 'Cleared tag',
'ale_action_clear_all_tags' => 'Cleared all tags',
'ale_action_set_bill' => 'Linked to bill',
'ale_action_set_budget' => 'Set budget',
'ale_action_set_category' => 'Set category',
'ale_action_set_source' => 'Set source account',
'ale_action_set_destination' => 'Set destination account',
'ale_action_update_transaction_type' => 'Changed transaction type',
'ale_action_update_notes' => 'Changed notes',
'ale_action_update_description' => 'Changed description',
'ale_action_add_to_piggy' => 'Piggy bank',
'ale_action_remove_from_piggy' => 'Piggy bank',
'ale_action_add_tag' => 'Added tag',
'audit_log_entries' => 'Auditoría de entradas de registro',
'ale_action_log_add' => 'Añadido :amount a la hucha ":name"',
'ale_action_log_remove' => 'Eliminado :amount de la hucha ":name"',
'ale_action_clear_budget' => 'Eliminado del presupuesto',
'ale_action_clear_category' => 'Eliminado de la categoría',
'ale_action_clear_notes' => 'Notas eliminadas',
'ale_action_clear_tag' => 'Etiqueta limpiada',
'ale_action_clear_all_tags' => 'Limpiar todas las etiquetas',
'ale_action_set_bill' => 'Vinculado a la factura',
'ale_action_set_budget' => 'Establecer presupuesto',
'ale_action_set_category' => 'Establecer categoría',
'ale_action_set_source' => 'Establecer cuenta de origen',
'ale_action_set_destination' => 'Establecer cuenta de destino',
'ale_action_update_transaction_type' => 'Tipo de transacción cambiado',
'ale_action_update_notes' => 'Notas cambiadas',
'ale_action_update_description' => 'Descripción cambiada',
'ale_action_add_to_piggy' => 'Hucha',
'ale_action_remove_from_piggy' => 'Hucha',
'ale_action_add_tag' => 'Etiqueta añadida',
];

View File

@ -150,7 +150,7 @@ return [
'start' => 'Inicio del rango',
'end' => 'Final del rango',
'delete_account' => 'Borrar cuenta ":name"',
'delete_webhook' => 'Delete webhook ":title"',
'delete_webhook' => 'Eliminar webhook ":title"',
'delete_bill' => 'Eliminar factura ":name"',
'delete_budget' => 'Eliminar presupuesto ":name"',
'delete_category' => 'Eliminar categoría ":name"',
@ -171,7 +171,7 @@ return [
'object_group_areYouSure' => '¿Seguro que quieres eliminar el grupo titulado ":title"?',
'ruleGroup_areYouSure' => '¿Seguro que quieres eliminar el grupo de reglas titulado ":title"?',
'budget_areYouSure' => '¿Seguro que quieres eliminar el presupuesto llamado ":name"?',
'webhook_areYouSure' => 'Are you sure you want to delete the webhook named ":title"?',
'webhook_areYouSure' => '¿Seguro que quieres eliminar el webhook llamado ":title"?',
'category_areYouSure' => '¿Seguro que quieres eliminar la categoría llamada ":name"?',
'recurring_areYouSure' => '¿Está seguro de que desea eliminar la transacción recurrente ":title"?',
'currency_areYouSure' => '¿Está seguro que desea eliminar la moneda denominada ":name"?',
@ -299,7 +299,7 @@ return [
'submitted' => 'Enviado',
'key' => 'Clave',
'value' => 'Contenido del registro',
'webhook_delivery' => 'Delivery',
'webhook_delivery' => 'Entrega',
'webhook_response' => 'Respuesta',
'webhook_trigger' => 'Disparador',
];

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'El contenido de este campo no es válido sin la información montearia.',
'not_transfer_account' => 'Esta cuenta no es una cuenta que se pueda utilizar para transferencias.',
'require_currency_amount' => 'El contenido de este campo no es válido sin información de cantidad extranjera.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'La descripción de la transacción no debería ser igual a la descripción global.',
'file_invalid_mime' => 'El archivo ":name" es de tipo ":mime", el cual no se acepta.',
'file_too_large' => 'El archivo ":name" es demasiado grande.',
@ -166,8 +167,8 @@ return [
'unique_piggy_bank_for_user' => 'En nombre de la hucha debe ser único.',
'unique_object_group' => 'El nombre del grupo debe ser único',
'starts_with' => 'El valor debe comenzar con :values.',
'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.',
'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.',
'unique_webhook' => 'Ya tiene un webhook con esta combinación de URL, activador, respuesta y entrega.',
'unique_existing_webhook' => 'Ya tiene otro webhook con esta combinación de URL, activador, respuesta y entrega.',
'same_account_type' => 'Ambas cuentas deben ser del mismo tipo de cuenta',
'same_account_currency' => 'Ambas cuentas deben tener la misma configuración de moneda',
@ -231,7 +232,7 @@ return [
'withdrawal_dest_need_data' => 'Necesita obtener un ID de cuenta de destino válido y/o nombre de cuenta de destino válido para continuar.',
'withdrawal_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".',
'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".',
'reconciliation_source_bad_data' => 'No se ha podido encontrar una cuenta de reconciliación válida al buscar por ID ":id" o nombre ":name".',
'generic_source_bad_data' => 'No se pudo encontrar una cuenta de origen válida al buscar el ID ":id" o nombre ":name".',
@ -263,7 +264,7 @@ return [
'lc_source_need_data' => 'Necesita obtener un ID de cuenta de origen válido para continuar.',
'ob_dest_need_data' => 'Necesita obtener un ID de cuenta de destino válido y/o nombre de cuenta de destino válido para continuar.',
'ob_dest_bad_data' => 'No se pudo encontrar una cuenta de destino válida buscando ID ":id" o nombre ":name".',
'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.',
'reconciliation_either_account' => 'Para enviar una reconciliación, debe enviar una cuenta de origen o de destino. Ni ambas ni ninguna de las dos.',
'generic_invalid_source' => 'No puedes usar esta cuenta como cuenta de origen.',
'generic_invalid_destination' => 'No puede usar esta cuenta como cuenta de destino.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version Valtuutus Pyyntö',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Ilman valuuttatietoa tämän kentän sisältö on virheellinen.',
'not_transfer_account' => 'Tätä tiliä ei voi käyttää siirroissa.',
'require_currency_amount' => 'Tämän kentän sisältö on virheellinen ilman ulkomaanvaluuttatietoa.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'Tapahtuman kuvaus ei saisi olla sama kuin yleiskuvaus.',
'file_invalid_mime' => 'Lähetettävän tiedoston ":name" tyyppi ei voi olla ":mime".',
'file_too_large' => 'Tiedoston ":name" koko on liian suuri.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visiter l\'URL du webhook',
'reset_webhook_secret' => 'Réinitialiser le secret du webhook',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Le Webhook #{ID} ("{title}")</a> a été enregistré.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Le webhook #{ID}</a> ("{title}") a été mis à jour.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Le webhook #{ID}</a> ("{title}") a été mis à jour.',
// API access
'authorization_request' => 'Firefly III v:version demande d\'autorisation',
@ -1379,12 +1379,12 @@ return [
'optional_field_attachments' => 'Pièces jointes',
'optional_field_meta_data' => 'Métadonnées facultatives',
'external_url' => 'URL externe',
'pref_notification_bill_reminder' => 'Rappel au renouvellement des factures',
'pref_notification_bill_reminder' => 'Rappel à l\'expiration des factures',
'pref_notification_new_access_token' => 'Alerte à la création d\'un nouveau jeton d\'accès API',
'pref_notification_transaction_creation' => 'Alerte à la création automatique d\'une opération',
'pref_notification_user_login' => 'Alerte à la connexion depuis un nouvel emplacement',
'pref_notifications' => 'Notifications',
'pref_notifications_help' => 'Indiquez si ce sont des notifications que vous souhaitez obtenir. Certaines notifications peuvent contenir des informations financières sensibles.',
'pref_notifications_help' => 'Sélectionnez les notifications que vous souhaitez recevoir. Certaines notifications peuvent contenir des informations financières sensibles.',
'slack_webhook_url' => 'Webhook URL de Slack',
'slack_webhook_url_help' => 'Si vous voulez que Firefly III vous avertisse en utilisant Slack, entrez l\'URL du webhook ici. Sinon, laissez le champ vide. Si vous êtes un administrateur, vous devez également définir cette URL dans l\'administration.',
'slack_url_label' => 'URL du webhook entrant de Slack',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Inviter un nouvel utilisateur',
'invite_new_user_text' => 'En tant qu\'administrateur, vous pouvez inviter des utilisateurs à s\'inscrire sur votre administration Firefly III. En partageant avec eux le lien direct, ils seront en mesure de créer un compte. L\'utilisateur invité et son lien d\'invitation apparaîtront dans le tableau ci-dessous. Vous êtes libre de partager le lien d\'invitation avec eux.',
'invited_user_mail' => 'Adresse e-mail',
@ -2415,7 +2417,7 @@ return [
'admin_notification_check_admin_new_reg' => 'Les administrateurs reçoivent une notification à l\'inscription de nouveaux utilisateurs',
'admin_notification_check_new_version' => 'Une nouvelle version est disponible',
'admin_notification_check_invite_created' => 'Un utilisateur est invité à rejoindre Firefly III',
'admin_notification_check_invite_redeemed' => 'Une invitation d\'utilisateur a été présentée',
'admin_notification_check_invite_redeemed' => 'Une invitation d\'utilisateur a été utilisée',
'all_invited_users' => 'Tous les utilisateurs invités',
'save_notification_settings' => 'Enregistrer les paramètres',
'notification_settings_saved' => 'Les paramètres de notification ont été enregistrés',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Le contenu de ce champ n\'est pas valide sans informations sur la devise.',
'not_transfer_account' => 'Ce compte n\'est pas un compte qui peut être utilisé pour les transferts.',
'require_currency_amount' => 'Le contenu de ce champ est invalide sans informations sur le montant en devise étrangère.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'La description de l\'opération ne doit pas être identique à la description globale.',
'file_invalid_mime' => 'Le fichier ":name" est du type ":mime" ce qui n\'est pas accepté pour un nouvel envoi.',
'file_too_large' => 'Le fichier ":name" est trop grand.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version engedély kérelem',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

View File

@ -66,6 +66,7 @@ return [
'require_currency_info' => 'Ennek a mezőnek a tartalma érvénytelen pénznem információ nélkül.',
'not_transfer_account' => 'Ez a fiók nem használható fel tranzakciókhoz.',
'require_currency_amount' => 'Ennek a mezőnek a tartalma érvénytelen devizanem információ nélkül.',
'require_foreign_currency' => 'This field requires a number',
'equal_description' => 'A tranzakció leírása nem egyezhet meg a globális leírással.',
'file_invalid_mime' => '":name" fájl ":mime" típusú ami nem lehet új feltöltés.',
'file_too_large' => '":name" fájl túl nagy.',

View File

@ -280,7 +280,7 @@ return [
'visit_webhook_url' => 'Visit webhook URL',
'reset_webhook_secret' => 'Reset webhook secret',
'webhook_stored_link' => '<a href="webhooks/show/{ID}">Webhook #{ID} ("{title}")</a> has been stored.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
'webhook_updated_link' => '<a href="webhooks/show/{ID}">Webhook #{ID}</a> ("{title}") has been updated.',
// API access
'authorization_request' => 'Firefly III v:version Permintaan Otorisasi',
@ -2364,6 +2364,8 @@ return [
// administration
'invite_is_already_redeemed' => 'The invite to ":address" has already been redeemed.',
'invite_is_deleted' => 'The invite to ":address" has been deleted.',
'invite_new_user_title' => 'Invite new user',
'invite_new_user_text' => 'As an administrator, you can invite users to register on your Firefly III administration. Using the direct link you can share with them, they will be able to register an account. The invited user and their invite link will appear in the table below. You are free to share the invitation link with them.',
'invited_user_mail' => 'Email address',

Some files were not shown because too many files have changed in this diff Show More