mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-12-03 19:41:54 +00:00
Compare commits
65 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d5e431c3a1 | ||
|
|
ffe0f39f6a | ||
|
|
e99a37bae3 | ||
|
|
27336e0721 | ||
|
|
c20c804f9a | ||
|
|
ddd94276db | ||
|
|
f8c95f2028 | ||
|
|
418150034b | ||
|
|
18589f87b7 | ||
|
|
e2b3e8492d | ||
|
|
8ff40e22e0 | ||
|
|
a941dca5e1 | ||
|
|
b43f0ca4a8 | ||
|
|
2298fb8406 | ||
|
|
8f4511b466 | ||
|
|
b5be712754 | ||
|
|
4f1ea96308 | ||
|
|
7cb8687b88 | ||
|
|
feb6ecb01c | ||
|
|
c63e0a2cc5 | ||
|
|
c53661a579 | ||
|
|
4e15717634 | ||
|
|
860ae9d931 | ||
|
|
d045248747 | ||
|
|
87aa6feb29 | ||
|
|
dfa32353da | ||
|
|
08c9703900 | ||
|
|
101f56d1b1 | ||
|
|
83bdaff033 | ||
|
|
e25fbcfb19 | ||
|
|
40c4c9f109 | ||
|
|
d178956541 | ||
|
|
c29f997733 | ||
|
|
2aabb56d2d | ||
|
|
e1e18a2a0c | ||
|
|
2c41694f41 | ||
|
|
48a641286c | ||
|
|
5eec91f439 | ||
|
|
782f0c7d54 | ||
|
|
a4dff6d39f | ||
|
|
9312ddbb7b | ||
|
|
14a9bede11 | ||
|
|
58d798df86 | ||
|
|
e740fc57a6 | ||
|
|
ecd7750030 | ||
|
|
19c4a82194 | ||
|
|
ffc91d5ead | ||
|
|
4898c29b85 | ||
|
|
84b4ab0cc2 | ||
|
|
eb808a0fbc | ||
|
|
d25ae50d30 | ||
|
|
c43821e29c | ||
|
|
b7570b2651 | ||
|
|
cb77609f27 | ||
|
|
99651bb61e | ||
|
|
bf1e14f66d | ||
|
|
d0e55804f8 | ||
|
|
0a9715b8c1 | ||
|
|
61390e67f6 | ||
|
|
536d25980f | ||
|
|
3253b2e569 | ||
|
|
11ac955303 | ||
|
|
caf9a31bc4 | ||
|
|
3388cb6f66 | ||
|
|
1c3c9377ca |
24
.ci/php-cs-fixer/composer.lock
generated
24
.ci/php-cs-fixer/composer.lock
generated
@@ -1251,16 +1251,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/console.git",
|
"url": "https://github.com/symfony/console.git",
|
||||||
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
|
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
|
"url": "https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
|
||||||
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
|
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1325,7 +1325,7 @@
|
|||||||
"terminal"
|
"terminal"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/console/tree/v7.3.4"
|
"source": "https://github.com/symfony/console/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1345,7 +1345,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-22T15:31:00+00:00"
|
"time": "2025-10-14T15:46:26+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/deprecation-contracts",
|
"name": "symfony/deprecation-contracts",
|
||||||
@@ -1646,16 +1646,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
"version": "v7.3.2",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/finder.git",
|
"url": "https://github.com/symfony/finder.git",
|
||||||
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
|
"reference": "9f696d2f1e340484b4683f7853b273abff94421f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
|
"url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f",
|
||||||
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
|
"reference": "9f696d2f1e340484b4683f7853b273abff94421f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1690,7 +1690,7 @@
|
|||||||
"description": "Finds files and directories via an intuitive fluent interface",
|
"description": "Finds files and directories via an intuitive fluent interface",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/finder/tree/v7.3.2"
|
"source": "https://github.com/symfony/finder/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1710,7 +1710,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-07-15T13:41:35+00:00"
|
"time": "2025-10-15T18:45:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/options-resolver",
|
"name": "symfony/options-resolver",
|
||||||
|
|||||||
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -18,6 +18,16 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: Validate input
|
||||||
|
run: |
|
||||||
|
# validate argument
|
||||||
|
if [[ $version != develo* ]] && [[ $version != v* ]] && [[ $version != branch* ]] ;
|
||||||
|
then
|
||||||
|
echo "Argument '$version' does not start with a d or with a v or a b"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
env:
|
||||||
|
version: ${{ github.event_name == 'schedule' && 'develop' || inputs.version }}
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
@@ -36,6 +46,14 @@ jobs:
|
|||||||
extensions: mbstring, intl, zip, bcmath
|
extensions: mbstring, intl, zip, bcmath
|
||||||
- name: Switch and pull
|
- name: Switch and pull
|
||||||
run: |
|
run: |
|
||||||
|
# validate argument
|
||||||
|
if [[ $version != d* ]] && [[ $version != v* ]] ;
|
||||||
|
then
|
||||||
|
echo 'Argument does not start with a d or with a v'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Always check out origin/develop, unless its a branch release.
|
# Always check out origin/develop, unless its a branch release.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
|
|||||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||||
|
|
||||||
## 2025
|
## 2025
|
||||||
|
- Jihad
|
||||||
- jreyesr
|
- jreyesr
|
||||||
- codearena-bot
|
- codearena-bot
|
||||||
- Nicky De Maeyer
|
- Nicky De Maeyer
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\AccountTypeEnum;
|
use FireflyIII\Enums\AccountTypeEnum;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
@@ -79,20 +79,26 @@ class AccountController extends Controller
|
|||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
public function accounts(AutocompleteRequest $request): JsonResponse
|
public function accounts(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
Log::debug('Before All.');
|
||||||
$types = $data['types'];
|
[
|
||||||
$query = $data['query'];
|
'types' => $types,
|
||||||
$date = $data['date'];
|
'query' => $query,
|
||||||
$return = [];
|
'date' => $date,
|
||||||
$timer = Timer::getInstance();
|
'limit' => $limit,
|
||||||
$timer->start(sprintf('AC accounts "%s"', $query));
|
]
|
||||||
$result = $this->repository->searchAccount((string) $query, $types, $this->parameters->get('limit'));
|
= $request->attributes->all();
|
||||||
|
|
||||||
|
$date ??= today(config('app.timezone'));
|
||||||
|
|
||||||
// set date to end-of-day for account balance. so it is at $date 23:59:59
|
// set date to end-of-day for account balance. so it is at $date 23:59:59
|
||||||
$date->endOfDay();
|
$date->endOfDay();
|
||||||
|
|
||||||
|
$return = [];
|
||||||
|
$timer = Timer::getInstance();
|
||||||
|
$timer->start(sprintf('AC accounts "%s"', $query));
|
||||||
|
$result = $this->repository->searchAccount((string)$query, $types, $limit);
|
||||||
$allBalances = Steam::accountsBalancesOptimized($result, $date, $this->primaryCurrency, $this->convertToPrimary);
|
$allBalances = Steam::accountsBalancesOptimized($result, $date, $this->primaryCurrency, $this->convertToPrimary);
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
@@ -111,17 +117,17 @@ class AccountController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$return[] = [
|
$return[] = [
|
||||||
'id' => (string) $account->id,
|
'id' => (string)$account->id,
|
||||||
'name' => $account->name,
|
'name' => $account->name,
|
||||||
'name_with_balance' => $nameWithBalance,
|
'name_with_balance' => $nameWithBalance,
|
||||||
'active' => $account->active,
|
'active' => $account->active,
|
||||||
'type' => $account->accountType->type,
|
'type' => $account->accountType->type,
|
||||||
'currency_id' => (string) $useCurrency->id,
|
'currency_id' => (string)$useCurrency->id,
|
||||||
'currency_name' => $useCurrency->name,
|
'currency_name' => $useCurrency->name,
|
||||||
'currency_code' => $useCurrency->code,
|
'currency_code' => $useCurrency->code,
|
||||||
'currency_symbol' => $useCurrency->symbol,
|
'currency_symbol' => $useCurrency->symbol,
|
||||||
'currency_decimal_places' => $useCurrency->decimal_places,
|
'currency_decimal_places' => $useCurrency->decimal_places,
|
||||||
'account_currency_id' => (string) $currency->id,
|
'account_currency_id' => (string)$currency->id,
|
||||||
'account_currency_name' => $currency->name,
|
'account_currency_name' => $currency->name,
|
||||||
'account_currency_code' => $currency->code,
|
'account_currency_code' => $currency->code,
|
||||||
'account_currency_symbol' => $currency->symbol,
|
'account_currency_symbol' => $currency->symbol,
|
||||||
@@ -134,8 +140,8 @@ class AccountController extends Controller
|
|||||||
$return,
|
$return,
|
||||||
static function (array $left, array $right) {
|
static function (array $left, array $right) {
|
||||||
$order = [AccountTypeEnum::ASSET->value, AccountTypeEnum::REVENUE->value, AccountTypeEnum::EXPENSE->value];
|
$order = [AccountTypeEnum::ASSET->value, AccountTypeEnum::REVENUE->value, AccountTypeEnum::EXPENSE->value];
|
||||||
$posA = (int) array_search($left['type'], $order, true);
|
$posA = (int)array_search($left['type'], $order, true);
|
||||||
$posB = (int) array_search($right['type'], $order, true);
|
$posB = (int)array_search($right['type'], $order, true);
|
||||||
|
|
||||||
return $posA - $posB;
|
return $posA - $posB;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Bill;
|
use FireflyIII\Models\Bill;
|
||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
@@ -61,10 +61,9 @@ class BillController extends Controller
|
|||||||
* Documentation for this endpoint is at:
|
* Documentation for this endpoint is at:
|
||||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC
|
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC
|
||||||
*/
|
*/
|
||||||
public function bills(AutocompleteRequest $request): JsonResponse
|
public function bills(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$result = $this->repository->searchBill($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$result = $this->repository->searchBill($data['query'], $this->parameters->get('limit'));
|
|
||||||
$filtered = $result->map(
|
$filtered = $result->map(
|
||||||
static fn (Bill $item) => [
|
static fn (Bill $item) => [
|
||||||
'id' => (string) $item->id,
|
'id' => (string) $item->id,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
@@ -61,10 +61,9 @@ class BudgetController extends Controller
|
|||||||
* Documentation for this endpoint is at:
|
* Documentation for this endpoint is at:
|
||||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC
|
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC
|
||||||
*/
|
*/
|
||||||
public function budgets(AutocompleteRequest $request): JsonResponse
|
public function budgets(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$result = $this->repository->searchBudget($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$result = $this->repository->searchBudget($data['query'], $this->parameters->get('limit'));
|
|
||||||
$filtered = $result->map(
|
$filtered = $result->map(
|
||||||
static fn (Budget $item) => [
|
static fn (Budget $item) => [
|
||||||
'id' => (string) $item->id,
|
'id' => (string) $item->id,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
@@ -61,10 +61,9 @@ class CategoryController extends Controller
|
|||||||
* Documentation for this endpoint is at:
|
* Documentation for this endpoint is at:
|
||||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC
|
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC
|
||||||
*/
|
*/
|
||||||
public function categories(AutocompleteRequest $request): JsonResponse
|
public function categories(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$result = $this->repository->searchCategory($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$result = $this->repository->searchCategory($data['query'], $this->parameters->get('limit'));
|
|
||||||
$filtered = $result->map(
|
$filtered = $result->map(
|
||||||
static fn (Category $item) => [
|
static fn (Category $item) => [
|
||||||
'id' => (string) $item->id,
|
'id' => (string) $item->id,
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
|||||||
|
|
||||||
use Deprecated;
|
use Deprecated;
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
@@ -62,10 +63,9 @@ class CurrencyController extends Controller
|
|||||||
* Documentation for this endpoint is at:
|
* Documentation for this endpoint is at:
|
||||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC
|
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC
|
||||||
*/
|
*/
|
||||||
public function currencies(AutocompleteRequest $request): JsonResponse
|
public function currencies(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$collection = $this->repository->searchCurrency($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$collection = $this->repository->searchCurrency($data['query'], $this->parameters->get('limit'));
|
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
/** @var TransactionCurrency $currency */
|
/** @var TransactionCurrency $currency */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\ObjectGroup;
|
use FireflyIII\Models\ObjectGroup;
|
||||||
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
|
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
|
||||||
@@ -61,11 +61,10 @@ class ObjectGroupController extends Controller
|
|||||||
* Documentation for this endpoint is at:
|
* Documentation for this endpoint is at:
|
||||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC
|
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC
|
||||||
*/
|
*/
|
||||||
public function objectGroups(AutocompleteRequest $request): JsonResponse
|
public function objectGroups(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
|
||||||
$return = [];
|
$return = [];
|
||||||
$result = $this->repository->search($data['query'], $this->parameters->get('limit'));
|
$result = $this->repository->search($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
|
|
||||||
/** @var ObjectGroup $objectGroup */
|
/** @var ObjectGroup $objectGroup */
|
||||||
foreach ($result as $objectGroup) {
|
foreach ($result as $objectGroup) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
@@ -64,10 +64,9 @@ class PiggyBankController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function piggyBanks(AutocompleteRequest $request): JsonResponse
|
public function piggyBanks(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$piggies = $this->piggyRepository->searchPiggyBank($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$piggies = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit'));
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
|
||||||
/** @var PiggyBank $piggy */
|
/** @var PiggyBank $piggy */
|
||||||
@@ -90,10 +89,9 @@ class PiggyBankController extends Controller
|
|||||||
return response()->api($response);
|
return response()->api($response);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function piggyBanksWithBalance(AutocompleteRequest $request): JsonResponse
|
public function piggyBanksWithBalance(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$piggies = $this->piggyRepository->searchPiggyBank($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$piggies = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit'));
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
|
||||||
/** @var PiggyBank $piggy */
|
/** @var PiggyBank $piggy */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Recurrence;
|
use FireflyIII\Models\Recurrence;
|
||||||
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
||||||
@@ -57,10 +57,9 @@ class RecurrenceController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function recurring(AutocompleteRequest $request): JsonResponse
|
public function recurring(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$recurrences = $this->repository->searchRecurrence($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$recurrences = $this->repository->searchRecurrence($data['query'], $this->parameters->get('limit'));
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
|
||||||
/** @var Recurrence $recurrence */
|
/** @var Recurrence $recurrence */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Rule;
|
use FireflyIII\Models\Rule;
|
||||||
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
||||||
@@ -57,10 +57,9 @@ class RuleController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rules(AutocompleteRequest $request): JsonResponse
|
public function rules(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$rules = $this->repository->searchRule($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$rules = $this->repository->searchRule($data['query'], $this->parameters->get('limit'));
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
|
||||||
/** @var Rule $rule */
|
/** @var Rule $rule */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\RuleGroup;
|
use FireflyIII\Models\RuleGroup;
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||||
@@ -57,10 +57,9 @@ class RuleGroupController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ruleGroups(AutocompleteRequest $request): JsonResponse
|
public function ruleGroups(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$groups = $this->repository->searchRuleGroup($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$groups = $this->repository->searchRuleGroup($data['query'], $this->parameters->get('limit'));
|
|
||||||
$response = [];
|
$response = [];
|
||||||
|
|
||||||
/** @var RuleGroup $group */
|
/** @var RuleGroup $group */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Tag;
|
use FireflyIII\Models\Tag;
|
||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
@@ -57,10 +57,9 @@ class TagController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tags(AutocompleteRequest $request): JsonResponse
|
public function tags(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$result = $this->repository->searchTags($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$result = $this->repository->searchTags($data['query'], $this->parameters->get('limit'));
|
|
||||||
$array = [];
|
$array = [];
|
||||||
|
|
||||||
/** @var Tag $tag */
|
/** @var Tag $tag */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
@@ -64,10 +64,9 @@ class TransactionController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function transactions(AutocompleteRequest $request): JsonResponse
|
public function transactions(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$result = $this->repository->searchJournalDescriptions($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit'));
|
|
||||||
|
|
||||||
// limit and unique
|
// limit and unique
|
||||||
$filtered = $result->unique('description');
|
$filtered = $result->unique('description');
|
||||||
@@ -86,13 +85,12 @@ class TransactionController extends Controller
|
|||||||
return response()->api($array);
|
return response()->api($array);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function transactionsWithID(AutocompleteRequest $request): JsonResponse
|
public function transactionsWithID(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
|
||||||
$result = new Collection();
|
$result = new Collection();
|
||||||
if (is_numeric($data['query'])) {
|
if (is_numeric($request->attributes->get('query'))) {
|
||||||
// search for group, not journal.
|
// search for group, not journal.
|
||||||
$firstResult = $this->groupRepository->find((int) $data['query']);
|
$firstResult = $this->groupRepository->find((int) $request->attributes->get('query'));
|
||||||
if ($firstResult instanceof TransactionGroup) {
|
if ($firstResult instanceof TransactionGroup) {
|
||||||
// group may contain multiple journals, each a result:
|
// group may contain multiple journals, each a result:
|
||||||
foreach ($firstResult->transactionJournals as $journal) {
|
foreach ($firstResult->transactionJournals as $journal) {
|
||||||
@@ -100,8 +98,8 @@ class TransactionController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!is_numeric($data['query'])) {
|
if (!is_numeric($request->attributes->get('query'))) {
|
||||||
$result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit'));
|
$result = $this->repository->searchJournalDescriptions($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// limit and unique
|
// limit and unique
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
||||||
@@ -55,10 +55,9 @@ class TransactionTypeController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function transactionTypes(AutocompleteRequest $request): JsonResponse
|
public function transactionTypes(AutocompleteApiRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getData();
|
$types = $this->repository->searchTypes($request->attributes->get('query'), $request->attributes->get('limit'));
|
||||||
$types = $this->repository->searchTypes($data['query'], $this->parameters->get('limit'));
|
|
||||||
$array = [];
|
$array = [];
|
||||||
|
|
||||||
/** @var TransactionType $type */
|
/** @var TransactionType $type */
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Chart;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Data\SameDateRequest;
|
use FireflyIII\Api\V1\Requests\DateRangeRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
@@ -83,15 +83,13 @@ class BudgetController extends Controller
|
|||||||
*
|
*
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
public function overview(SameDateRequest $request): JsonResponse
|
public function overview(DateRangeRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$params = $request->getAll();
|
|
||||||
|
|
||||||
/** @var Carbon $start */
|
/** @var Carbon $start */
|
||||||
$start = $params['start'];
|
$start = $request->attributes->get('start');
|
||||||
|
|
||||||
/** @var Carbon $end */
|
/** @var Carbon $end */
|
||||||
$end = $params['end'];
|
$end = $request->attributes->get('end');
|
||||||
|
|
||||||
// code from FrontpageChartGenerator, but not in separate class
|
// code from FrontpageChartGenerator, but not in separate class
|
||||||
$budgets = $this->repository->getActiveBudgets();
|
$budgets = $this->repository->getActiveBudgets();
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Chart;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Data\SameDateRequest;
|
use FireflyIII\Api\V1\Requests\DateRangeRequest;
|
||||||
use FireflyIII\Enums\AccountTypeEnum;
|
use FireflyIII\Enums\AccountTypeEnum;
|
||||||
use FireflyIII\Enums\TransactionTypeEnum;
|
use FireflyIII\Enums\TransactionTypeEnum;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
@@ -80,13 +80,13 @@ class CategoryController extends Controller
|
|||||||
*
|
*
|
||||||
* @SuppressWarnings("PHPMD.UnusedFormalParameter")
|
* @SuppressWarnings("PHPMD.UnusedFormalParameter")
|
||||||
*/
|
*/
|
||||||
public function overview(SameDateRequest $request): JsonResponse
|
public function overview(DateRangeRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
/** @var Carbon $start */
|
/** @var Carbon $start */
|
||||||
$start = $this->parameters->get('start');
|
$start = $request->attributes->get('start');
|
||||||
|
|
||||||
/** @var Carbon $end */
|
/** @var Carbon $end */
|
||||||
$end = $this->parameters->get('end');
|
$end = $request->attributes->get('end');
|
||||||
$accounts = $this->accountRepos->getAccountsByType([AccountTypeEnum::DEBT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::ASSET->value]);
|
$accounts = $this->accountRepos->getAccountsByType([AccountTypeEnum::DEBT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::ASSET->value]);
|
||||||
$currencies = [];
|
$currencies = [];
|
||||||
$return = [];
|
$return = [];
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use Carbon\Exceptions\InvalidFormatException;
|
|||||||
use FireflyIII\Exceptions\BadHttpHeaderException;
|
use FireflyIII\Exceptions\BadHttpHeaderException;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\AbstractTransformer;
|
use FireflyIII\Transformers\AbstractTransformer;
|
||||||
@@ -159,7 +160,7 @@ abstract class Controller extends BaseController
|
|||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
|
|
||||||
$pageSize = (int)app('preferences')->getForUser($user, 'listPageSize', 50)->data;
|
$pageSize = (int)Preferences::getForUser($user, 'listPageSize', 50)->data;
|
||||||
$bag->set($integer, $pageSize);
|
$bag->set($integer, $pageSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
||||||
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@@ -102,7 +103,7 @@ class DestroyController extends Controller
|
|||||||
default => throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects)),
|
default => throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects)),
|
||||||
};
|
};
|
||||||
|
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Account;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,7 +61,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Account $account): JsonResponse
|
public function destroy(Account $account): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($account, null);
|
$this->repository->destroy($account, null);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class ListController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function attachments(Account $account, PaginationRequest $request): JsonResponse
|
public function attachments(PaginationRequest $request, Account $account): JsonResponse
|
||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
[
|
[
|
||||||
@@ -96,18 +96,21 @@ class ListController extends Controller
|
|||||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function piggyBanks(Account $account): JsonResponse
|
public function piggyBanks(PaginationRequest $request, Account $account): JsonResponse
|
||||||
{
|
{
|
||||||
// create some objects:
|
// create some objects:
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
[
|
||||||
$pageSize = $this->parameters->get('limit');
|
'limit' => $limit,
|
||||||
|
'offset' => $offset,
|
||||||
|
'page' => $page,
|
||||||
|
] = $request->attributes->all();
|
||||||
|
|
||||||
// get list of piggy banks. Count it and split it.
|
// get list of piggy banks. Count it and split it.
|
||||||
$collection = $this->repository->getPiggyBanks($account);
|
$collection = $this->repository->getPiggyBanks($account);
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
$piggyBanks = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
$piggyBanks = $collection->slice(($page - 1) * $limit, $limit);
|
||||||
|
|
||||||
// enrich
|
// enrich
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
@@ -117,12 +120,12 @@ class ListController extends Controller
|
|||||||
$piggyBanks = $enrichment->enrich($piggyBanks);
|
$piggyBanks = $enrichment->enrich($piggyBanks);
|
||||||
|
|
||||||
// make paginator:
|
// make paginator:
|
||||||
$paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page'));
|
$paginator = new LengthAwarePaginator($piggyBanks, $count, $limit, $page);
|
||||||
$paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]).$this->buildParams());
|
$paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]).$this->buildParams());
|
||||||
|
|
||||||
/** @var PiggyBankTransformer $transformer */
|
/** @var PiggyBankTransformer $transformer */
|
||||||
$transformer = app(PiggyBankTransformer::class);
|
$transformer = app(PiggyBankTransformer::class);
|
||||||
$transformer->setParameters($this->parameters);
|
// $transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
$resource = new FractalCollection($piggyBanks, $transformer, 'piggy-banks');
|
$resource = new FractalCollection($piggyBanks, $transformer, 'piggy-banks');
|
||||||
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Api\V1\Requests\Models\Account\UpdateRequest;
|
use FireflyIII\Api\V1\Requests\Models\Account\UpdateRequest;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment;
|
use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment;
|
||||||
use FireflyIII\Transformers\AccountTransformer;
|
use FireflyIII\Transformers\AccountTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -74,7 +75,7 @@ class UpdateController extends Controller
|
|||||||
$account = $this->repository->update($account, $data);
|
$account = $this->repository->update($account, $data);
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$account->refresh();
|
$account->refresh();
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
// enrich
|
// enrich
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Api\V1\Middleware\ApiDemoUser;
|
use FireflyIII\Api\V1\Middleware\ApiDemoUser;
|
||||||
use FireflyIII\Models\Attachment;
|
use FireflyIII\Models\Attachment;
|
||||||
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
|
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -74,7 +75,7 @@ class DestroyController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->repository->destroy($attachment);
|
$this->repository->destroy($attachment);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Bill;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Bill;
|
use FireflyIII\Models\Bill;
|
||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +62,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Bill $bill): JsonResponse
|
public function destroy(Bill $bill): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($bill);
|
$this->repository->destroy($bill);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Budget;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +62,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Budget $budget): JsonResponse
|
public function destroy(Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($budget);
|
$this->repository->destroy($budget);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -71,7 +72,7 @@ class DestroyController extends Controller
|
|||||||
throw new FireflyException('20028: The budget limit does not belong to the budget.');
|
throw new FireflyException('20028: The budget limit does not belong to the budget.');
|
||||||
}
|
}
|
||||||
$this->blRepository->destroyBudgetLimit($budgetLimit);
|
$this->blRepository->destroyBudgetLimit($budgetLimit);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Category;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +62,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Category $category): JsonResponse
|
public function destroy(Category $category): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($category);
|
$this->repository->destroy($category);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use Carbon\Carbon;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\DestroyRequest;
|
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\DestroyRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\CurrencyExchangeRate;
|
use FireflyIII\Models\CurrencyExchangeRate;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
@@ -75,6 +76,9 @@ class DestroyController extends Controller
|
|||||||
if ($exchangeRate instanceof CurrencyExchangeRate) {
|
if ($exchangeRate instanceof CurrencyExchangeRate) {
|
||||||
$this->repository->deleteRate($exchangeRate);
|
$this->repository->deleteRate($exchangeRate);
|
||||||
}
|
}
|
||||||
|
if (!$exchangeRate instanceof CurrencyExchangeRate) {
|
||||||
|
throw new FireflyException('Bla');
|
||||||
|
}
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,6 @@ class UpdateController extends Controller
|
|||||||
$exchangeRate = $this->repository->updateExchangeRate($exchangeRate, $rate, $date);
|
$exchangeRate = $this->repository->updateExchangeRate($exchangeRate, $rate, $date);
|
||||||
|
|
||||||
$transformer = new ExchangeRateTransformer();
|
$transformer = new ExchangeRateTransformer();
|
||||||
$transformer->setParameters($this->parameters);
|
|
||||||
|
|
||||||
return response()
|
return response()
|
||||||
->api($this->jsonApiObject(self::RESOURCE_KEY, $exchangeRate, $transformer))
|
->api($this->jsonApiObject(self::RESOURCE_KEY, $exchangeRate, $transformer))
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\ObjectGroup;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\ObjectGroup;
|
use FireflyIII\Models\ObjectGroup;
|
||||||
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
|
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(ObjectGroup $objectGroup): JsonResponse
|
public function destroy(ObjectGroup $objectGroup): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($objectGroup);
|
$this->repository->destroy($objectGroup);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +62,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(PiggyBank $piggyBank): JsonResponse
|
public function destroy(PiggyBank $piggyBank): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($piggyBank);
|
$this->repository->destroy($piggyBank);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Recurrence;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Recurrence;
|
use FireflyIII\Models\Recurrence;
|
||||||
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,7 +62,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Recurrence $recurrence): JsonResponse
|
public function destroy(Recurrence $recurrence): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($recurrence);
|
$this->repository->destroy($recurrence);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Rule;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Rule;
|
use FireflyIII\Models\Rule;
|
||||||
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Rule $rule): JsonResponse
|
public function destroy(Rule $rule): JsonResponse
|
||||||
{
|
{
|
||||||
$this->ruleRepository->destroy($rule);
|
$this->ruleRepository->destroy($rule);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\RuleGroup;
|
use FireflyIII\Models\RuleGroup;
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(RuleGroup $ruleGroup): JsonResponse
|
public function destroy(RuleGroup $ruleGroup): JsonResponse
|
||||||
{
|
{
|
||||||
$this->ruleGroupRepository->destroy($ruleGroup, null);
|
$this->ruleGroupRepository->destroy($ruleGroup, null);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Tag;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\Tag;
|
use FireflyIII\Models\Tag;
|
||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -65,7 +66,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(Tag $tag): JsonResponse
|
public function destroy(Tag $tag): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroy($tag);
|
$this->repository->destroy($tag);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ use FireflyIII\Models\TransactionGroup;
|
|||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository;
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -92,7 +93,7 @@ class DestroyController extends Controller
|
|||||||
|
|
||||||
$this->groupRepository->destroy($transactionGroup);
|
$this->groupRepository->destroy($transactionGroup);
|
||||||
|
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
@@ -112,7 +113,7 @@ class DestroyController extends Controller
|
|||||||
public function destroyJournal(TransactionJournal $transactionJournal): JsonResponse
|
public function destroyJournal(TransactionJournal $transactionJournal): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroyJournal($transactionJournal);
|
$this->repository->destroyJournal($transactionJournal);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
||||||
use FireflyIII\Rules\IsDuplicateTransaction;
|
use FireflyIII\Rules\IsDuplicateTransaction;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
|
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
@@ -107,7 +108,7 @@ class StoreController extends Controller
|
|||||||
|
|
||||||
throw new ValidationException($validator);
|
throw new ValidationException($validator);
|
||||||
}
|
}
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
$applyRules = $data['apply_rules'] ?? true;
|
$applyRules = $data['apply_rules'] ?? true;
|
||||||
$fireWebhooks = $data['fire_webhooks'] ?? true;
|
$fireWebhooks = $data['fire_webhooks'] ?? true;
|
||||||
event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks));
|
event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks));
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use FireflyIII\Events\UpdatedTransactionGroup;
|
|||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
|
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -79,7 +80,7 @@ class UpdateController extends Controller
|
|||||||
$newHash = $this->groupRepository->getCompareHash($transactionGroup);
|
$newHash = $this->groupRepository->getCompareHash($transactionGroup);
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
$applyRules = $data['apply_rules'] ?? true;
|
$applyRules = $data['apply_rules'] ?? true;
|
||||||
$fireWebhooks = $data['fire_webhooks'] ?? true;
|
$fireWebhooks = $data['fire_webhooks'] ?? true;
|
||||||
$runRecalculations = $oldHash !== $newHash;
|
$runRecalculations = $oldHash !== $newHash;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
@@ -89,7 +90,7 @@ class DestroyController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->repository->destroy($currency);
|
$this->repository->destroy($currency);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest;
|
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest;
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\CurrencyTransformer;
|
use FireflyIII\Transformers\CurrencyTransformer;
|
||||||
@@ -71,7 +72,7 @@ class StoreController extends Controller
|
|||||||
$currency = $this->repository->store($request->getAll());
|
$currency = $this->repository->store($request->getAll());
|
||||||
if (true === $request->boolean('default')) {
|
if (true === $request->boolean('default')) {
|
||||||
$this->repository->makePrimary($currency);
|
$this->repository->makePrimary($currency);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
}
|
}
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\CurrencyTransformer;
|
use FireflyIII\Transformers\CurrencyTransformer;
|
||||||
@@ -105,7 +106,7 @@ class UpdateController extends Controller
|
|||||||
$this->repository->enable($currency);
|
$this->repository->enable($currency);
|
||||||
$this->repository->makePrimary($currency);
|
$this->repository->makePrimary($currency);
|
||||||
|
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$currency->refreshForUser($user);
|
$currency->refreshForUser($user);
|
||||||
@@ -172,14 +173,13 @@ class UpdateController extends Controller
|
|||||||
|
|
||||||
$currency = $this->repository->update($currency, $data);
|
$currency = $this->repository->update($currency, $data);
|
||||||
|
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$currency->refreshForUser($user);
|
$currency->refreshForUser($user);
|
||||||
|
|
||||||
/** @var CurrencyTransformer $transformer */
|
/** @var CurrencyTransformer $transformer */
|
||||||
$transformer = app(CurrencyTransformer::class);
|
$transformer = app(CurrencyTransformer::class);
|
||||||
$transformer->setParameters($this->parameters);
|
|
||||||
|
|
||||||
$resource = new Item($currency, $transformer, 'currencies');
|
$resource = new Item($currency, $transformer, 'currencies');
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionLink;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Models\TransactionJournalLink;
|
use FireflyIII\Models\TransactionJournalLink;
|
||||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
|
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ class DestroyController extends Controller
|
|||||||
public function destroy(TransactionJournalLink $link): JsonResponse
|
public function destroy(TransactionJournalLink $link): JsonResponse
|
||||||
{
|
{
|
||||||
$this->repository->destroyLink($link);
|
$this->repository->destroyLink($link);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\LinkType;
|
use FireflyIII\Models\LinkType;
|
||||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
|
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
@@ -73,7 +74,7 @@ class DestroyController extends Controller
|
|||||||
throw new FireflyException('200020: Link type cannot be changed.');
|
throw new FireflyException('200020: Link type cannot be changed.');
|
||||||
}
|
}
|
||||||
$this->repository->destroy($linkType);
|
$this->repository->destroy($linkType);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Api\V1\Requests\Models\UserGroup\UpdateRequest;
|
use FireflyIII\Api\V1\Requests\Models\UserGroup\UpdateRequest;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
|
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Transformers\UserGroupTransformer;
|
use FireflyIII\Transformers\UserGroupTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -59,7 +60,7 @@ class UpdateController extends Controller
|
|||||||
$data = $request->getData();
|
$data = $request->getData();
|
||||||
$userGroup = $this->repository->update($userGroup, $data);
|
$userGroup = $this->repository->update($userGroup, $data);
|
||||||
$userGroup->refresh();
|
$userGroup->refresh();
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
$transformer = new UserGroupTransformer();
|
$transformer = new UserGroupTransformer();
|
||||||
$transformer->setParameters($this->parameters);
|
$transformer->setParameters($this->parameters);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\User\PreferenceStoreRequest;
|
|||||||
use FireflyIII\Api\V1\Requests\User\PreferenceUpdateRequest;
|
use FireflyIII\Api\V1\Requests\User\PreferenceUpdateRequest;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\Preference;
|
use FireflyIII\Models\Preference;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Transformers\PreferenceTransformer;
|
use FireflyIII\Transformers\PreferenceTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
@@ -52,7 +53,7 @@ class PreferencesController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(): JsonResponse
|
public function index(): JsonResponse
|
||||||
{
|
{
|
||||||
$collection = app('preferences')->all();
|
$collection = Preferences::all();
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
$pageSize = $this->parameters->get('limit');
|
$pageSize = $this->parameters->get('limit');
|
||||||
@@ -110,7 +111,7 @@ class PreferencesController extends Controller
|
|||||||
throw new FireflyException('Please use api/v1/currencies/default instead.');
|
throw new FireflyException('Please use api/v1/currencies/default instead.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$pref = app('preferences')->set($data['name'], $data['data']);
|
$pref = Preferences::set($data['name'], $data['data']);
|
||||||
|
|
||||||
/** @var PreferenceTransformer $transformer */
|
/** @var PreferenceTransformer $transformer */
|
||||||
$transformer = app(PreferenceTransformer::class);
|
$transformer = app(PreferenceTransformer::class);
|
||||||
@@ -135,7 +136,7 @@ class PreferencesController extends Controller
|
|||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$data = $request->getAll();
|
$data = $request->getAll();
|
||||||
$pref = app('preferences')->set($preference->name, $data['data']);
|
$pref = Preferences::set($preference->name, $data['data']);
|
||||||
|
|
||||||
/** @var PreferenceTransformer $transformer */
|
/** @var PreferenceTransformer $transformer */
|
||||||
$transformer = app(PreferenceTransformer::class);
|
$transformer = app(PreferenceTransformer::class);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use FireflyIII\Models\Webhook;
|
|||||||
use FireflyIII\Models\WebhookAttempt;
|
use FireflyIII\Models\WebhookAttempt;
|
||||||
use FireflyIII\Models\WebhookMessage;
|
use FireflyIII\Models\WebhookMessage;
|
||||||
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
|
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
@@ -70,7 +71,7 @@ class DestroyController extends Controller
|
|||||||
|
|
||||||
Log::channel('audit')->info(sprintf('User destroys webhook #%d.', $webhook->id));
|
Log::channel('audit')->info(sprintf('User destroys webhook #%d.', $webhook->id));
|
||||||
$this->repository->destroy($webhook);
|
$this->repository->destroy($webhook);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
@@ -101,7 +102,7 @@ class DestroyController extends Controller
|
|||||||
Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d, attempt #%d.', $webhook->id, $message->id, $attempt->id));
|
Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d, attempt #%d.', $webhook->id, $message->id, $attempt->id));
|
||||||
|
|
||||||
$this->repository->destroyAttempt($attempt);
|
$this->repository->destroyAttempt($attempt);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
@@ -128,7 +129,7 @@ class DestroyController extends Controller
|
|||||||
Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d.', $webhook->id, $message->id));
|
Log::channel('audit')->info(sprintf('User destroys webhook #%d, message #%d.', $webhook->id, $message->id));
|
||||||
|
|
||||||
$this->repository->destroyMessage($message);
|
$this->repository->destroyMessage($message);
|
||||||
app('preferences')->mark();
|
Preferences::mark();
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|||||||
46
app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php
Normal file
46
app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/*
|
||||||
|
* AutocompleteApiRequest.php
|
||||||
|
* Copyright (c) 2025 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Api\V1\Requests\Autocomplete;
|
||||||
|
|
||||||
|
use FireflyIII\Api\V1\Requests\AggregateFormRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\DateRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\Generic\QueryRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\Models\Account\AccountTypesApiRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\PaginationRequest;
|
||||||
|
use FireflyIII\Models\Account;
|
||||||
|
use Override;
|
||||||
|
|
||||||
|
class AutocompleteApiRequest extends AggregateFormRequest
|
||||||
|
{
|
||||||
|
#[Override]
|
||||||
|
protected function getRequests(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
DateRequest::class,
|
||||||
|
[PaginationRequest::class, 'sort_class' => Account::class],
|
||||||
|
AccountTypesApiRequest::class,
|
||||||
|
QueryRequest::class,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,8 @@ use Illuminate\Foundation\Http\FormRequest;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AutocompleteRequest
|
* Class AutocompleteRequest
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
class AutocompleteRequest extends FormRequest
|
class AutocompleteRequest extends FormRequest
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ use Illuminate\Foundation\Http\FormRequest;
|
|||||||
* Request class for end points that require date parameters.
|
* Request class for end points that require date parameters.
|
||||||
*
|
*
|
||||||
* Class SameDateRequest
|
* Class SameDateRequest
|
||||||
|
*
|
||||||
|
* @deprecated Replaced by DateRangeRequest
|
||||||
*/
|
*/
|
||||||
class SameDateRequest extends FormRequest
|
class SameDateRequest extends FormRequest
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,10 +40,6 @@ class DateRangeRequest extends ApiRequest
|
|||||||
$validator->after(
|
$validator->after(
|
||||||
function (Validator $validator): void {
|
function (Validator $validator): void {
|
||||||
if ($validator->failed()) {
|
if ($validator->failed()) {
|
||||||
// set null values
|
|
||||||
$this->attributes->set('start', null);
|
|
||||||
$this->attributes->set('end', null);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$start = $this->getCarbonDate('start')?->startOfDay();
|
$start = $this->getCarbonDate('start')?->startOfDay();
|
||||||
|
|||||||
55
app/Api/V1/Requests/Generic/QueryRequest.php
Normal file
55
app/Api/V1/Requests/Generic/QueryRequest.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/*
|
||||||
|
* QueryRequest.php
|
||||||
|
* Copyright (c) 2025 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Api\V1\Requests\Generic;
|
||||||
|
|
||||||
|
use FireflyIII\Api\V1\Requests\ApiRequest;
|
||||||
|
use FireflyIII\Support\Request\ChecksLogin;
|
||||||
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
|
|
||||||
|
class QueryRequest extends ApiRequest
|
||||||
|
{
|
||||||
|
use ChecksLogin;
|
||||||
|
use ConvertsDataTypes;
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'query' => sprintf('min:1|max:50|%s', $this->required),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withValidator(Validator $validator): void
|
||||||
|
{
|
||||||
|
$validator->after(
|
||||||
|
function (Validator $validator): void {
|
||||||
|
if ($validator->failed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$query = $this->convertString('query');
|
||||||
|
$this->attributes->set('query', $query);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,6 +33,8 @@ use Illuminate\Foundation\Http\FormRequest;
|
|||||||
* Request class for end points that require a date parameter.
|
* Request class for end points that require a date parameter.
|
||||||
*
|
*
|
||||||
* Class SingleDateRequest
|
* Class SingleDateRequest
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
class SingleDateRequest extends FormRequest
|
class SingleDateRequest extends FormRequest
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/*
|
||||||
|
* AccountTypeApiRequest.php
|
||||||
|
* Copyright (c) 2025 https://github.com/ctrl-f5
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Api\V1\Requests\Models\Account;
|
||||||
|
|
||||||
|
use FireflyIII\Api\V1\Requests\ApiRequest;
|
||||||
|
use FireflyIII\Rules\Account\IsValidAccountTypeList;
|
||||||
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
|
|
||||||
|
class AccountTypesApiRequest extends ApiRequest
|
||||||
|
{
|
||||||
|
use AccountFilter;
|
||||||
|
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
// sprintf('in:%s', implode(',', array_keys($this->types))),
|
||||||
|
return [
|
||||||
|
'types' => new IsValidAccountTypeList(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withValidator(Validator $validator): void
|
||||||
|
{
|
||||||
|
$validator->after(
|
||||||
|
function (Validator $validator): void {
|
||||||
|
if ($validator->failed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$types = explode(',', $this->convertString('types', 'all'));
|
||||||
|
$result = [];
|
||||||
|
// split and find all types:
|
||||||
|
foreach ($types as $type) {
|
||||||
|
$result = array_merge($result, $this->mapAccountTypes($type));
|
||||||
|
}
|
||||||
|
$result = array_unique($result);
|
||||||
|
$this->attributes->set('types', $result);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,12 +68,10 @@ class PaginationRequest extends ApiRequest
|
|||||||
$user = auth()->user();
|
$user = auth()->user();
|
||||||
$limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data;
|
$limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
$page = $this->convertInteger('page');
|
$page = $this->convertInteger('page');
|
||||||
$page = min(max(1, $page), 2 ** 16);
|
$page = min(max(1, $page), 2 ** 16);
|
||||||
$offset = ($page - 1) * $limit;
|
$offset = ($page - 1) * $limit;
|
||||||
$sort = $this->sortClass ? $this->convertSortParameters('sort', $this->sortClass) : $this->get('sort');
|
$sort = $this->sortClass ? $this->convertSortParameters('sort', $this->sortClass) : $this->get('sort');
|
||||||
|
|
||||||
$this->attributes->set('limit', $limit);
|
$this->attributes->set('limit', $limit);
|
||||||
$this->attributes->set('sort', $sort);
|
$this->attributes->set('sort', $sort);
|
||||||
$this->attributes->set('page', $page);
|
$this->attributes->set('page', $page);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
|||||||
use FireflyIII\Enums\AccountTypeEnum;
|
use FireflyIII\Enums\AccountTypeEnum;
|
||||||
use FireflyIII\Models\Preference;
|
use FireflyIII\Models\Preference;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
@@ -47,7 +48,7 @@ class CorrectsFrontpageAccounts extends Command
|
|||||||
|
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
$preference = app('preferences')->getForUser($user, 'frontpageAccounts');
|
$preference = Preferences::getForUser($user, 'frontpageAccounts');
|
||||||
if (null !== $preference) {
|
if (null !== $preference) {
|
||||||
$this->fixPreference($preference);
|
$this->fixPreference($preference);
|
||||||
}
|
}
|
||||||
@@ -79,6 +80,6 @@ class CorrectsFrontpageAccounts extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
app('preferences')->setForUser($preference->user, 'frontpageAccounts', $fixed);
|
Preferences::setForUser($preference->user, 'frontpageAccounts', $fixed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Console\Commands\Correction;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
@@ -54,10 +55,10 @@ class CreatesAccessTokens extends Command
|
|||||||
|
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
$pref = app('preferences')->getForUser($user, 'access_token');
|
$pref = Preferences::getForUser($user, 'access_token');
|
||||||
if (null === $pref) {
|
if (null === $pref) {
|
||||||
$token = $user->generateAccessToken();
|
$token = $user->generateAccessToken();
|
||||||
app('preferences')->setForUser($user, 'access_token', $token);
|
Preferences::setForUser($user, 'access_token', $token);
|
||||||
$this->friendlyInfo(sprintf('Generated access token for user %s', $user->email));
|
$this->friendlyInfo(sprintf('Generated access token for user %s', $user->email));
|
||||||
++$count;
|
++$count;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
|
||||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
@@ -114,7 +115,7 @@ class UpgradesBillsToRules extends Command
|
|||||||
$this->ruleRepository->setUser($user);
|
$this->ruleRepository->setUser($user);
|
||||||
|
|
||||||
/** @var Preference $lang */
|
/** @var Preference $lang */
|
||||||
$lang = app('preferences')->getForUser($user, 'language', 'en_US');
|
$lang = Preferences::getForUser($user, 'language', 'en_US');
|
||||||
$language = null !== $lang->data && !is_array($lang->data) ? (string) $lang->data : 'en_US';
|
$language = null !== $lang->data && !is_array($lang->data) ? (string) $lang->data : 'en_US';
|
||||||
$groupTitle = (string) trans('firefly.rulegroup_for_bills_title', [], $language);
|
$groupTitle = (string) trans('firefly.rulegroup_for_bills_title', [], $language);
|
||||||
$ruleGroup = $this->ruleGroupRepository->findByTitle($groupTitle);
|
$ruleGroup = $this->ruleGroupRepository->findByTitle($groupTitle);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Console\Commands;
|
|||||||
|
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@@ -79,7 +80,7 @@ trait VerifiesAccessToken
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$accessToken = app('preferences')->getForUser($user, 'access_token');
|
$accessToken = Preferences::getForUser($user, 'access_token');
|
||||||
if (null === $accessToken) {
|
if (null === $accessToken) {
|
||||||
Log::error(sprintf('User #%d has no access token, so cannot access command line options.', $userId));
|
Log::error(sprintf('User #%d has no access token, so cannot access command line options.', $userId));
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Notifications\User\TransactionCreation;
|
use FireflyIII\Notifications\User\TransactionCreation;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use Illuminate\Support\Facades\Notification;
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ class AutomationHandler
|
|||||||
$user = $repository->find($event->userId);
|
$user = $repository->find($event->userId);
|
||||||
|
|
||||||
/** @var bool $sendReport */
|
/** @var bool $sendReport */
|
||||||
$sendReport = app('preferences')->getForUser($user, 'notification_transaction_creation', false)->data;
|
$sendReport = Preferences::getForUser($user, 'notification_transaction_creation', false)->data;
|
||||||
|
|
||||||
if (false === $sendReport) {
|
if (false === $sendReport) {
|
||||||
app('log')->debug('Not sending report, because config says so.');
|
app('log')->debug('Not sending report, because config says so.');
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Handlers\Events\Model;
|
|||||||
use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray;
|
use FireflyIII\Events\Model\Rule\RuleActionFailedOnArray;
|
||||||
use FireflyIII\Events\Model\Rule\RuleActionFailedOnObject;
|
use FireflyIII\Events\Model\Rule\RuleActionFailedOnObject;
|
||||||
use FireflyIII\Notifications\User\RuleActionFailed;
|
use FireflyIII\Notifications\User\RuleActionFailed;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use GuzzleHttp\Exception\ClientException;
|
use GuzzleHttp\Exception\ClientException;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Notification;
|
use Illuminate\Support\Facades\Notification;
|
||||||
@@ -42,7 +43,7 @@ class RuleHandler
|
|||||||
$rule = $ruleAction->rule;
|
$rule = $ruleAction->rule;
|
||||||
|
|
||||||
/** @var bool $preference */
|
/** @var bool $preference */
|
||||||
$preference = app('preferences')->getForUser($rule->user, 'notification_rule_action_failures', true)->data;
|
$preference = Preferences::getForUser($rule->user, 'notification_rule_action_failures', true)->data;
|
||||||
if (false === $preference) {
|
if (false === $preference) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -71,7 +72,7 @@ class RuleHandler
|
|||||||
$rule = $ruleAction->rule;
|
$rule = $ruleAction->rule;
|
||||||
|
|
||||||
/** @var bool $preference */
|
/** @var bool $preference */
|
||||||
$preference = app('preferences')->getForUser($rule->user, 'notification_rule_action_failures', true)->data;
|
$preference = Preferences::getForUser($rule->user, 'notification_rule_action_failures', true)->data;
|
||||||
if (false === $preference) {
|
if (false === $preference) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ use FireflyIII\Notifications\User\UserLogin;
|
|||||||
use FireflyIII\Notifications\User\UserNewPassword;
|
use FireflyIII\Notifications\User\UserNewPassword;
|
||||||
use FireflyIII\Notifications\User\UserRegistration as UserRegistrationNotification;
|
use FireflyIII\Notifications\User\UserRegistration as UserRegistrationNotification;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Auth\Events\Login;
|
use Illuminate\Auth\Events\Login;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -174,9 +175,10 @@ class UserEventHandler
|
|||||||
$user = $event->user;
|
$user = $event->user;
|
||||||
if ($repository->hasRole($user, 'demo')) {
|
if ($repository->hasRole($user, 'demo')) {
|
||||||
// set user back to English.
|
// set user back to English.
|
||||||
app('preferences')->setForUser($user, 'language', 'en_US');
|
Preferences::setForUser($user, 'language', 'en_US');
|
||||||
app('preferences')->setForUser($user, 'locale', 'equal');
|
Preferences::setForUser($user, 'locale', 'equal');
|
||||||
app('preferences')->mark();
|
Preferences::setForUser($user, 'anonymous', false);
|
||||||
|
Preferences::mark();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +190,7 @@ class UserEventHandler
|
|||||||
return; // do not email demo user.
|
return; // do not email demo user.
|
||||||
}
|
}
|
||||||
|
|
||||||
$list = app('preferences')->getForUser($user, 'login_ip_history', [])->data;
|
$list = Preferences::getForUser($user, 'login_ip_history', [])->data;
|
||||||
if (!is_array($list)) {
|
if (!is_array($list)) {
|
||||||
$list = [];
|
$list = [];
|
||||||
}
|
}
|
||||||
@@ -217,12 +219,12 @@ class UserEventHandler
|
|||||||
$list[$index]['notified'] = true;
|
$list[$index]['notified'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
app('preferences')->setForUser($user, 'login_ip_history', $list);
|
Preferences::setForUser($user, 'login_ip_history', $list);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function sendAdminRegistrationNotification(RegisteredUser $event): void
|
public function sendAdminRegistrationNotification(RegisteredUser $event): void
|
||||||
{
|
{
|
||||||
$sendMail = (bool) app('fireflyconfig')->get('notification_admin_new_reg', true)->data;
|
$sendMail = (bool)app('fireflyconfig')->get('notification_admin_new_reg', true)->data;
|
||||||
if ($sendMail) {
|
if ($sendMail) {
|
||||||
$owner = $event->owner;
|
$owner = $event->owner;
|
||||||
|
|
||||||
@@ -257,7 +259,7 @@ class UserEventHandler
|
|||||||
$newEmail = $event->newEmail;
|
$newEmail = $event->newEmail;
|
||||||
$oldEmail = $event->oldEmail;
|
$oldEmail = $event->oldEmail;
|
||||||
$user = $event->user;
|
$user = $event->user;
|
||||||
$token = app('preferences')->getForUser($user, 'email_change_confirm_token', 'invalid');
|
$token = Preferences::getForUser($user, 'email_change_confirm_token', 'invalid');
|
||||||
$url = route('profile.confirm-email-change', [$token->data]);
|
$url = route('profile.confirm-email-change', [$token->data]);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -281,8 +283,8 @@ class UserEventHandler
|
|||||||
$newEmail = $event->newEmail;
|
$newEmail = $event->newEmail;
|
||||||
$oldEmail = $event->oldEmail;
|
$oldEmail = $event->oldEmail;
|
||||||
$user = $event->user;
|
$user = $event->user;
|
||||||
$token = app('preferences')->getForUser($user, 'email_change_undo_token', 'invalid');
|
$token = Preferences::getForUser($user, 'email_change_undo_token', 'invalid');
|
||||||
$hashed = hash('sha256', sprintf('%s%s', (string) config('app.key'), $oldEmail));
|
$hashed = hash('sha256', sprintf('%s%s', (string)config('app.key'), $oldEmail));
|
||||||
$url = route('profile.undo-email-change', [$token->data, $hashed]);
|
$url = route('profile.undo-email-change', [$token->data, $hashed]);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -365,7 +367,7 @@ class UserEventHandler
|
|||||||
*/
|
*/
|
||||||
public function sendRegistrationMail(RegisteredUser $event): void
|
public function sendRegistrationMail(RegisteredUser $event): void
|
||||||
{
|
{
|
||||||
$sendMail = (bool) app('fireflyconfig')->get('notification_user_new_reg', true)->data;
|
$sendMail = (bool)app('fireflyconfig')->get('notification_user_new_reg', true)->data;
|
||||||
if ($sendMail) {
|
if ($sendMail) {
|
||||||
try {
|
try {
|
||||||
Notification::send($event->user, new UserRegistrationNotification());
|
Notification::send($event->user, new UserRegistrationNotification());
|
||||||
@@ -455,7 +457,7 @@ class UserEventHandler
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
/** @var array $preference */
|
/** @var array $preference */
|
||||||
$preference = app('preferences')->getForUser($user, 'login_ip_history', [])->data;
|
$preference = Preferences::getForUser($user, 'login_ip_history', [])->data;
|
||||||
} catch (FireflyException $e) {
|
} catch (FireflyException $e) {
|
||||||
// don't care.
|
// don't care.
|
||||||
app('log')->error($e->getMessage());
|
app('log')->error($e->getMessage());
|
||||||
@@ -491,8 +493,8 @@ class UserEventHandler
|
|||||||
$preference = array_values($preference);
|
$preference = array_values($preference);
|
||||||
|
|
||||||
/** @var bool $send */
|
/** @var bool $send */
|
||||||
$send = app('preferences')->getForUser($user, 'notification_user_login', true)->data;
|
$send = Preferences::getForUser($user, 'notification_user_login', true)->data;
|
||||||
app('preferences')->setForUser($user, 'login_ip_history', $preference);
|
Preferences::setForUser($user, 'login_ip_history', $preference);
|
||||||
|
|
||||||
if (false === $inArray && true === $send) {
|
if (false === $inArray && true === $send) {
|
||||||
event(new DetectedNewIPAddress($user));
|
event(new DetectedNewIPAddress($user));
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Helpers\Fiscal;
|
namespace FireflyIII\Helpers\Fiscal;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ class FiscalHelper implements FiscalHelperInterface
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->useCustomFiscalYear = (bool) app('preferences')->get('customFiscalYear', false)->data;
|
$this->useCustomFiscalYear = (bool) Preferences::get('customFiscalYear', false)->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,7 +75,7 @@ class FiscalHelper implements FiscalHelperInterface
|
|||||||
// get start mm-dd. Then create a start date in the year passed.
|
// get start mm-dd. Then create a start date in the year passed.
|
||||||
$startDate = clone $date;
|
$startDate = clone $date;
|
||||||
if (true === $this->useCustomFiscalYear) {
|
if (true === $this->useCustomFiscalYear) {
|
||||||
$prefStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data;
|
$prefStartStr = Preferences::get('fiscalYearStart', '01-01')->data;
|
||||||
if (is_array($prefStartStr)) {
|
if (is_array($prefStartStr)) {
|
||||||
$prefStartStr = '01-01';
|
$prefStartStr = '01-01';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,11 +96,10 @@ class CreateController extends Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
// interest calculation periods:
|
// interest calculation periods:
|
||||||
$interestPeriods = [
|
$interestPeriods = [];
|
||||||
'daily' => (string) trans('firefly.interest_calc_daily'),
|
foreach (config('firefly.interest_periods') as $period) {
|
||||||
'monthly' => (string) trans('firefly.interest_calc_monthly'),
|
$interestPeriods[$period] = trans(sprintf('firefly.interest_calc_%s', $period));
|
||||||
'yearly' => (string) trans('firefly.interest_calc_yearly'),
|
}
|
||||||
];
|
|
||||||
|
|
||||||
// pre fill some data
|
// pre fill some data
|
||||||
$request->session()->flash(
|
$request->session()->flash(
|
||||||
|
|||||||
@@ -108,11 +108,10 @@ class EditController extends Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
// interest calculation periods:
|
// interest calculation periods:
|
||||||
$interestPeriods = [
|
$interestPeriods = [];
|
||||||
'daily' => (string) trans('firefly.interest_calc_daily'),
|
foreach (config('firefly.interest_periods') as $period) {
|
||||||
'monthly' => (string) trans('firefly.interest_calc_monthly'),
|
$interestPeriods[$period] = trans(sprintf('firefly.interest_calc_%s', $period));
|
||||||
'yearly' => (string) trans('firefly.interest_calc_yearly'),
|
}
|
||||||
];
|
|
||||||
|
|
||||||
// put previous url in session if not redirect from store (not "return_to_edit").
|
// put previous url in session if not redirect from store (not "return_to_edit").
|
||||||
if (true !== session('accounts.edit.fromUpdate')) {
|
if (true !== session('accounts.edit.fromUpdate')) {
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ abstract class Controller extends BaseController
|
|||||||
View::share('DEMO_USERNAME', config('firefly.demo_username'));
|
View::share('DEMO_USERNAME', config('firefly.demo_username'));
|
||||||
View::share('DEMO_PASSWORD', config('firefly.demo_password'));
|
View::share('DEMO_PASSWORD', config('firefly.demo_password'));
|
||||||
View::share('FF_VERSION', config('firefly.version'));
|
View::share('FF_VERSION', config('firefly.version'));
|
||||||
|
View::share('FF_BUILD_TIME', config('firefly.build_time'));
|
||||||
|
|
||||||
// is webhooks enabled?
|
// is webhooks enabled?
|
||||||
View::share('featuringWebhooks', true === config('firefly.feature_flags.webhooks') && true === config('firefly.allow_webhooks'));
|
View::share('featuringWebhooks', true === config('firefly.feature_flags.webhooks') && true === config('firefly.allow_webhooks'));
|
||||||
|
|||||||
@@ -81,11 +81,11 @@ class DebugController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function displayError(): void
|
public function displayError(): void
|
||||||
{
|
{
|
||||||
app('log')->debug('This is a test message at the DEBUG level.');
|
Log::debug('This is a test message at the DEBUG level.');
|
||||||
app('log')->info('This is a test message at the INFO level.');
|
Log::info('This is a test message at the INFO level.');
|
||||||
Log::notice('This is a test message at the NOTICE level.');
|
Log::notice('This is a test message at the NOTICE level.');
|
||||||
app('log')->warning('This is a test message at the WARNING level.');
|
Log::warning('This is a test message at the WARNING level.');
|
||||||
app('log')->error('This is a test message at the ERROR level.');
|
Log::error('This is a test message at the ERROR level.');
|
||||||
Log::critical('This is a test message at the CRITICAL level.');
|
Log::critical('This is a test message at the CRITICAL level.');
|
||||||
Log::alert('This is a test message at the ALERT level.');
|
Log::alert('This is a test message at the ALERT level.');
|
||||||
Log::emergency('This is a test message at the EMERGENCY level.');
|
Log::emergency('This is a test message at the EMERGENCY level.');
|
||||||
@@ -187,6 +187,8 @@ class DebugController extends Controller
|
|||||||
return [
|
return [
|
||||||
'php_version' => PHP_VERSION,
|
'php_version' => PHP_VERSION,
|
||||||
'php_os' => PHP_OS,
|
'php_os' => PHP_OS,
|
||||||
|
'build_time' => config('firefly.build_time'),
|
||||||
|
'build_time_nice' => Carbon::parse(config('firefly.build_time'), 'Europe/Amsterdam')->setTimezone('Europe/Amsterdam')->format('Y-m-d H:i:s e'),
|
||||||
'uname' => php_uname('m'),
|
'uname' => php_uname('m'),
|
||||||
'interface' => PHP_SAPI,
|
'interface' => PHP_SAPI,
|
||||||
'bits' => PHP_INT_SIZE * 8,
|
'bits' => PHP_INT_SIZE * 8,
|
||||||
@@ -212,11 +214,11 @@ class DebugController extends Controller
|
|||||||
try {
|
try {
|
||||||
if (file_exists('/var/www/counter-main.txt')) {
|
if (file_exists('/var/www/counter-main.txt')) {
|
||||||
$return['build'] = trim(file_get_contents('/var/www/counter-main.txt'));
|
$return['build'] = trim(file_get_contents('/var/www/counter-main.txt'));
|
||||||
app('log')->debug(sprintf('build is now "%s"', $return['build']));
|
Log::debug(sprintf('build is now "%s"', $return['build']));
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
app('log')->debug('Could not check build counter, but thats ok.');
|
Log::debug('Could not check build counter, but thats ok.');
|
||||||
app('log')->warning($e->getMessage());
|
Log::warning($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -224,8 +226,8 @@ class DebugController extends Controller
|
|||||||
$return['build_date'] = trim(file_get_contents('/var/www/build-date-main.txt'));
|
$return['build_date'] = trim(file_get_contents('/var/www/build-date-main.txt'));
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
app('log')->debug('Could not check build date, but thats ok.');
|
Log::debug('Could not check build date, but thats ok.');
|
||||||
app('log')->warning($e->getMessage());
|
Log::warning($e->getMessage());
|
||||||
}
|
}
|
||||||
if ('' !== (string) env('BASE_IMAGE_BUILD')) { // @phpstan-ignore-line
|
if ('' !== (string) env('BASE_IMAGE_BUILD')) { // @phpstan-ignore-line
|
||||||
$return['base_build'] = env('BASE_IMAGE_BUILD'); // @phpstan-ignore-line
|
$return['base_build'] = env('BASE_IMAGE_BUILD'); // @phpstan-ignore-line
|
||||||
@@ -282,7 +284,7 @@ class DebugController extends Controller
|
|||||||
$parts = Steam::getLocaleArray(Steam::getLocale());
|
$parts = Steam::getLocaleArray(Steam::getLocale());
|
||||||
foreach ($parts as $code) {
|
foreach ($parts as $code) {
|
||||||
$code = trim($code);
|
$code = trim($code);
|
||||||
app('log')->debug(sprintf('Trying to set %s', $code));
|
Log::debug(sprintf('Trying to set %s', $code));
|
||||||
$result = setlocale(LC_ALL, $code);
|
$result = setlocale(LC_ALL, $code);
|
||||||
$localeAttempts[$code] = $result === $code;
|
$localeAttempts[$code] = $result === $code;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -268,7 +268,6 @@ class CreateController extends Controller
|
|||||||
public function store(RuleFormRequest $request)
|
public function store(RuleFormRequest $request)
|
||||||
{
|
{
|
||||||
$data = $request->getRuleData();
|
$data = $request->getRuleData();
|
||||||
|
|
||||||
$rule = $this->ruleRepos->store($data);
|
$rule = $this->ruleRepos->store($data);
|
||||||
session()->flash('success_url', route('rules.select-transactions', [$rule->id]));
|
session()->flash('success_url', route('rules.select-transactions', [$rule->id]));
|
||||||
session()->flash('success', (string) trans('firefly.stored_new_rule', ['title' => $rule->title]));
|
session()->flash('success', (string) trans('firefly.stored_new_rule', ['title' => $rule->title]));
|
||||||
@@ -283,6 +282,9 @@ class CreateController extends Controller
|
|||||||
if ((int) $request->get('bill_id') > 0) {
|
if ((int) $request->get('bill_id') > 0) {
|
||||||
return redirect($this->getPreviousUrl('bills.create.url'));
|
return redirect($this->getPreviousUrl('bills.create.url'));
|
||||||
}
|
}
|
||||||
|
if (true === $data['run_after_form']) {
|
||||||
|
return redirect(route('rules.select-transactions', [$rule->id]));
|
||||||
|
}
|
||||||
|
|
||||||
$redirect = redirect($this->getPreviousUrl('rules.create.url'));
|
$redirect = redirect($this->getPreviousUrl('rules.create.url'));
|
||||||
|
|
||||||
|
|||||||
@@ -205,6 +205,11 @@ class EditController extends Controller
|
|||||||
session()->flash('success', (string) trans('firefly.updated_rule', ['title' => $rule->title]));
|
session()->flash('success', (string) trans('firefly.updated_rule', ['title' => $rule->title]));
|
||||||
app('preferences')->mark();
|
app('preferences')->mark();
|
||||||
$redirect = redirect($this->getPreviousUrl('rules.edit.url'));
|
$redirect = redirect($this->getPreviousUrl('rules.edit.url'));
|
||||||
|
|
||||||
|
if (true === $data['run_after_form']) {
|
||||||
|
return redirect(route('rules.select-transactions', [$rule->id]));
|
||||||
|
}
|
||||||
|
|
||||||
if (1 === (int) $request->get('return_to_edit')) {
|
if (1 === (int) $request->get('return_to_edit')) {
|
||||||
session()->put('rules.edit.fromUpdate', true);
|
session()->put('rules.edit.fromUpdate', true);
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class RuleFormRequest extends FormRequest
|
|||||||
'description' => $this->stringWithNewlines('description'),
|
'description' => $this->stringWithNewlines('description'),
|
||||||
'stop_processing' => $this->boolean('stop_processing'),
|
'stop_processing' => $this->boolean('stop_processing'),
|
||||||
'strict' => $this->boolean('strict'),
|
'strict' => $this->boolean('strict'),
|
||||||
|
'run_after_form' => $this->boolean('run_after_form'),
|
||||||
'triggers' => $this->getRuleTriggerData(),
|
'triggers' => $this->getRuleTriggerData(),
|
||||||
'actions' => $this->getRuleActionData(),
|
'actions' => $this->getRuleActionData(),
|
||||||
];
|
];
|
||||||
@@ -140,16 +141,17 @@ class RuleFormRequest extends FormRequest
|
|||||||
|
|
||||||
// initial set of rules:
|
// initial set of rules:
|
||||||
$rules = [
|
$rules = [
|
||||||
'title' => 'required|min:1|max:255|uniqueObjectForUser:rules,title',
|
'title' => 'required|min:1|max:255|uniqueObjectForUser:rules,title',
|
||||||
'description' => 'min:1|max:32768|nullable',
|
'description' => 'min:1|max:32768|nullable',
|
||||||
'stop_processing' => 'boolean',
|
'stop_processing' => 'boolean',
|
||||||
'rule_group_id' => 'required|belongsToUser:rule_groups',
|
'rule_group_id' => 'required|belongsToUser:rule_groups',
|
||||||
'trigger' => 'required|in:store-journal,update-journal,manual-activation',
|
'trigger' => 'required|in:store-journal,update-journal,manual-activation',
|
||||||
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
|
'triggers.*.type' => 'required|in:'.implode(',', $validTriggers),
|
||||||
'triggers.*.value' => sprintf('required_if:triggers.*.type,%s|max:1024|min:1|ruleTriggerValue', $contextTriggers),
|
'triggers.*.value' => sprintf('required_if:triggers.*.type,%s|max:1024|min:1|ruleTriggerValue', $contextTriggers),
|
||||||
'actions.*.type' => 'required|in:'.implode(',', $validActions),
|
'actions.*.type' => 'required|in:'.implode(',', $validActions),
|
||||||
'actions.*.value' => [sprintf('required_if:actions.*.type,%s|min:0|max:1024', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
'actions.*.value' => [sprintf('required_if:actions.*.type,%s|min:0|max:1024', $contextActions), new IsValidActionExpression(), 'ruleActionValue'],
|
||||||
'strict' => 'in:0,1',
|
'strict' => 'in:0,1',
|
||||||
|
'run_after_form' => 'in:0,1',
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var null|Rule $rule */
|
/** @var null|Rule $rule */
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ use Illuminate\Queue\InteractsWithQueue;
|
|||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use Safe\Exceptions\FilesystemException;
|
||||||
|
use Safe\Exceptions\JsonException;
|
||||||
use Symfony\Component\Mailer\Exception\TransportException;
|
use Symfony\Component\Mailer\Exception\TransportException;
|
||||||
|
|
||||||
use function Safe\file_get_contents;
|
use function Safe\file_get_contents;
|
||||||
@@ -54,7 +56,7 @@ class MailError extends Job implements ShouldQueue
|
|||||||
$debug = $this->exception;
|
$debug = $this->exception;
|
||||||
unset($debug['stackTrace'], $debug['headers']);
|
unset($debug['stackTrace'], $debug['headers']);
|
||||||
|
|
||||||
app('log')->error(sprintf('Exception is: %s', json_encode($debug)));
|
Log::error(sprintf('Exception is: %s', json_encode($debug)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -90,17 +92,17 @@ class MailError extends Job implements ShouldQueue
|
|||||||
} catch (Exception|TransportException $e) {
|
} catch (Exception|TransportException $e) {
|
||||||
$message = $e->getMessage();
|
$message = $e->getMessage();
|
||||||
if (str_contains($message, 'Bcc')) {
|
if (str_contains($message, 'Bcc')) {
|
||||||
app('log')->warning('[Bcc] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
|
Log::warning('[Bcc] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (str_contains($message, 'RFC 2822')) {
|
if (str_contains($message, 'RFC 2822')) {
|
||||||
app('log')->warning('[RFC] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
|
Log::warning('[RFC] Could not email or log the error. Please validate your email settings, use the .env.example file as a guide.');
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
app('log')->error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
app('log')->error($e->getTraceAsString());
|
Log::error($e->getTraceAsString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -125,11 +127,25 @@ class MailError extends Job implements ShouldQueue
|
|||||||
|
|
||||||
if (!file_exists($file)) {
|
if (!file_exists($file)) {
|
||||||
Log::debug(sprintf('Wrote new file in "%s"', $file));
|
Log::debug(sprintf('Wrote new file in "%s"', $file));
|
||||||
file_put_contents($file, json_encode($limits, JSON_PRETTY_PRINT));
|
|
||||||
|
try {
|
||||||
|
file_put_contents($file, json_encode($limits, JSON_PRETTY_PRINT));
|
||||||
|
} catch (FilesystemException $e) {
|
||||||
|
Log::warning(sprintf('[a] Could not write file "%s": %s', $file, $e->getMessage()));
|
||||||
|
} catch (JsonException $e) {
|
||||||
|
Log::warning(sprintf('[b] Could not parse file "%s": %s', $file, $e->getMessage()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (file_exists($file)) {
|
if (file_exists($file)) {
|
||||||
Log::debug(sprintf('Read file in "%s"', $file));
|
Log::debug(sprintf('Read file in "%s"', $file));
|
||||||
$limits = json_decode(file_get_contents($file), true);
|
|
||||||
|
try {
|
||||||
|
$limits = json_decode(file_get_contents($file), true);
|
||||||
|
} catch (FilesystemException $e) {
|
||||||
|
Log::warning(sprintf('[c] Could not read file "%s": %s', $file, $e->getMessage()));
|
||||||
|
} catch (JsonException $e) {
|
||||||
|
Log::warning(sprintf('[d] Could not parse file "%s": %s', $file, $e->getMessage()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// limit reached?
|
// limit reached?
|
||||||
foreach ($types as $type => $info) {
|
foreach ($types as $type => $info) {
|
||||||
@@ -157,7 +173,14 @@ class MailError extends Job implements ShouldQueue
|
|||||||
}
|
}
|
||||||
++$limits[$type]['sent'];
|
++$limits[$type]['sent'];
|
||||||
}
|
}
|
||||||
file_put_contents($file, json_encode($limits, JSON_PRETTY_PRINT));
|
|
||||||
|
try {
|
||||||
|
file_put_contents($file, json_encode($limits, JSON_PRETTY_PRINT));
|
||||||
|
} catch (FilesystemException $e) {
|
||||||
|
Log::warning(sprintf('[c] Could not write file "%s": %s', $file, $e->getMessage()));
|
||||||
|
} catch (JsonException $e) {
|
||||||
|
Log::warning(sprintf('[c] Could not parse file "%s": %s', $file, $e->getMessage()));
|
||||||
|
}
|
||||||
Log::debug('No limits reached, return FALSE.');
|
Log::debug('No limits reached, return FALSE.');
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
56
app/Rules/Account/IsValidAccountTypeList.php
Normal file
56
app/Rules/Account/IsValidAccountTypeList.php
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IsValidAccountType.php
|
||||||
|
* Copyright (c) 2024 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace FireflyIII\Rules\Account;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||||||
|
use Override;
|
||||||
|
|
||||||
|
class IsValidAccountTypeList implements ValidationRule
|
||||||
|
{
|
||||||
|
use AccountFilter;
|
||||||
|
|
||||||
|
#[Override]
|
||||||
|
public function validate(string $attribute, mixed $value, Closure $fail): void
|
||||||
|
{
|
||||||
|
|
||||||
|
// only check the type.
|
||||||
|
$values = [];
|
||||||
|
if (is_string($value)) {
|
||||||
|
$values = explode(',', $value);
|
||||||
|
}
|
||||||
|
if (!is_array($values)) {
|
||||||
|
$fail('validation.invalid_account_list')->translate();
|
||||||
|
}
|
||||||
|
$keys = array_keys($this->types);
|
||||||
|
foreach ($values as $entry) {
|
||||||
|
$entry = (string) $entry;
|
||||||
|
if (!in_array($entry, $keys, true)) {
|
||||||
|
$fail('validation.invalid_account_list')->translate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Support;
|
namespace FireflyIII\Support;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use JsonException;
|
use JsonException;
|
||||||
@@ -44,6 +45,7 @@ class CacheProperties
|
|||||||
if (auth()->check()) {
|
if (auth()->check()) {
|
||||||
$this->addProperty(auth()->user()->id);
|
$this->addProperty(auth()->user()->id);
|
||||||
$this->addProperty(app('preferences')->lastActivity());
|
$this->addProperty(app('preferences')->lastActivity());
|
||||||
|
$this->addProperty(Steam::anonymous());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ trait UserGroupTrait
|
|||||||
public function setUserGroup(UserGroup $userGroup): void
|
public function setUserGroup(UserGroup $userGroup): void
|
||||||
{
|
{
|
||||||
if (null === $this->user) {
|
if (null === $this->user) {
|
||||||
Log::warning(sprintf('User is not set in repository %s', static::class));
|
Log::warning(sprintf('User is not set in repository %s. This does not have to be a problem.', static::class));
|
||||||
}
|
}
|
||||||
$this->userGroup = $userGroup;
|
$this->userGroup = $userGroup;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,13 +52,23 @@ class QueryParser implements QueryParserInterface
|
|||||||
$inQuotes = false;
|
$inQuotes = false;
|
||||||
$fieldName = '';
|
$fieldName = '';
|
||||||
$prohibited = false;
|
$prohibited = false;
|
||||||
|
$chrArray = preg_split('//u', $this->query, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
while ($this->position < strlen($this->query)) {
|
$count = count($chrArray);
|
||||||
$char = $this->query[$this->position];
|
while ($this->position < $count) {
|
||||||
|
$char = $chrArray[$this->position];
|
||||||
|
$nextChar = $chrArray[$this->position + 1] ?? '';
|
||||||
// Log::debug(sprintf('Char #%d: %s', $this->position, $char));
|
// Log::debug(sprintf('Char #%d: %s', $this->position, $char));
|
||||||
|
|
||||||
// If we're in a quoted string, we treat all characters except another quote as ordinary characters
|
// If we're in a quoted string, we treat all characters except another quote as ordinary characters
|
||||||
if ($inQuotes) {
|
if ($inQuotes) {
|
||||||
|
if ('\\' === $char && '"' === $nextChar) {
|
||||||
|
// Log::debug('BACKSLASH!');
|
||||||
|
// escaped quote, pretend it's a normal char and continue two places (skipping the actual character).
|
||||||
|
$tokenUnderConstruction .= '\\'.$nextChar;
|
||||||
|
$this->position += 2;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if ('"' !== $char) {
|
if ('"' !== $char) {
|
||||||
$tokenUnderConstruction .= $char;
|
$tokenUnderConstruction .= $char;
|
||||||
++$this->position;
|
++$this->position;
|
||||||
@@ -67,11 +77,9 @@ class QueryParser implements QueryParserInterface
|
|||||||
}
|
}
|
||||||
// char is "
|
// char is "
|
||||||
++$this->position;
|
++$this->position;
|
||||||
|
Log::debug(sprintf('Constructed token: %s', $tokenUnderConstruction));
|
||||||
|
|
||||||
return new NodeResult(
|
return new NodeResult($this->createNode($tokenUnderConstruction, $fieldName, $prohibited), false);
|
||||||
$this->createNode($tokenUnderConstruction, $fieldName, $prohibited),
|
|
||||||
false
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($char) {
|
switch ($char) {
|
||||||
@@ -197,9 +205,13 @@ class QueryParser implements QueryParserInterface
|
|||||||
private function createNode(string $token, string $fieldName, bool $prohibited): Node
|
private function createNode(string $token, string $fieldName, bool $prohibited): Node
|
||||||
{
|
{
|
||||||
if ('' !== $fieldName) {
|
if ('' !== $fieldName) {
|
||||||
Log::debug(sprintf('Create FieldNode %s:%s (%s)', $fieldName, $token, var_export($prohibited, true)));
|
// OK dus hoe trim je \" correct?
|
||||||
$token = ltrim($token, ':"');
|
$token = ltrim($token, ':"');
|
||||||
$token = rtrim($token, '"');
|
if (!str_ends_with($token, '\"')) {
|
||||||
|
$token = rtrim($token, '"');
|
||||||
|
}
|
||||||
|
$token = str_replace('\"', '"', $token);
|
||||||
|
Log::debug(sprintf('Create FieldNode %s:%s (%s)', $fieldName, $token, var_export($prohibited, true)));
|
||||||
|
|
||||||
return new FieldNode(trim($fieldName), trim($token), $prohibited);
|
return new FieldNode(trim($fieldName), trim($token), $prohibited);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ use Illuminate\Support\Facades\Log;
|
|||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
use Psr\Container\ContainerExceptionInterface;
|
||||||
use Psr\Container\NotFoundExceptionInterface;
|
use Psr\Container\NotFoundExceptionInterface;
|
||||||
|
use Safe\Exceptions\UrlException;
|
||||||
use ValueError;
|
use ValueError;
|
||||||
|
|
||||||
use function Safe\parse_url;
|
use function Safe\parse_url;
|
||||||
@@ -671,8 +672,22 @@ class Steam
|
|||||||
{
|
{
|
||||||
// Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl));
|
// Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl));
|
||||||
$returnUrl = $safeUrl;
|
$returnUrl = $safeUrl;
|
||||||
$unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
|
|
||||||
$safeHost = parse_url($safeUrl, PHP_URL_HOST);
|
try {
|
||||||
|
$unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
|
||||||
|
} catch (UrlException $e) {
|
||||||
|
Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage()));
|
||||||
|
|
||||||
|
return $returnUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$safeHost = parse_url($safeUrl, PHP_URL_HOST);
|
||||||
|
} catch (UrlException $e) {
|
||||||
|
Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage()));
|
||||||
|
|
||||||
|
return $returnUrl;
|
||||||
|
}
|
||||||
|
|
||||||
if (null !== $unknownHost && $unknownHost === $safeHost) {
|
if (null !== $unknownHost && $unknownHost === $safeHost) {
|
||||||
$returnUrl = $unknownUrl;
|
$returnUrl = $unknownUrl;
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ class UpdatePiggyBank implements ActionInterface
|
|||||||
if (false === $repository->canAddAmount($piggyBank, $account, $amount)) {
|
if (false === $repository->canAddAmount($piggyBank, $account, $amount)) {
|
||||||
Log::warning(sprintf('Cannot add %s to piggy bank.', $amount));
|
Log::warning(sprintf('Cannot add %s to piggy bank.', $amount));
|
||||||
$currency = $accountRepository->getAccountCurrency($account) ?? Amount::getPrimaryCurrency();
|
$currency = $accountRepository->getAccountCurrency($account) ?? Amount::getPrimaryCurrency();
|
||||||
event(new RuleActionFailedOnArray($this->action, $array, trans('rules.cannot_add_to_piggy', ['amount' => Amount::formatAnything($amount, $currency, false), 'name' => $piggyBank->name])));
|
event(new RuleActionFailedOnArray($this->action, $array, trans('rules.cannot_add_to_piggy', ['amount' => Amount::formatAnything($currency, $amount, false), 'name' => $piggyBank->name])));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
53
changelog.md
53
changelog.md
@@ -3,6 +3,59 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## 6.4.5 - 2025-11-xx
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11157](https://github.com/firefly-iii/firefly-iii/issues/11157) (Redacted amounts misbehave with Reports) reported by @barreeeiroo
|
||||||
|
|
||||||
|
## 6.4.4 - 2025-11-02
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- [PR 11140](https://github.com/firefly-iii/firefly-iii/pull/11140) (Add Saudi Riyal (SAR) currency) reported by @Jihad
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11144](https://github.com/firefly-iii/firefly-iii/issues/11144) (Initial balance is auto suggested as an account) reported by @elliot-gh
|
||||||
|
- [Issue 11147](https://github.com/firefly-iii/firefly-iii/issues/11147) (Start and End Balance gets blanked out during reconciliation) reported by @lrdshaper
|
||||||
|
|
||||||
|
## 6.4.3 - 2025-11-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- [PR 10993](https://github.com/firefly-iii/firefly-iii/pull/10993) (use correct translation key for category report income table) reported by @ctrl-f5
|
||||||
|
- [PR 11028](https://github.com/firefly-iii/firefly-iii/pull/11028) (Adding Latin American Currency Support) reported by @codearena-bot
|
||||||
|
- [PR 11039](https://github.com/firefly-iii/firefly-iii/pull/11039) (proposal for improved request handling) reported by @ctrl-f5
|
||||||
|
- [PR 11041](https://github.com/firefly-iii/firefly-iii/pull/11041) (Add XML mimetypes to the allowedMimes list) reported by @jreyesr
|
||||||
|
- [Issue 11102](https://github.com/firefly-iii/firefly-iii/issues/11102) (Allow to redact account totals in web ui) reported by @edvgui
|
||||||
|
- [Issue 11132](https://github.com/firefly-iii/firefly-iii/issues/11132) (Add a 6 month interest period) reported by @CiramorDev
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 11109](https://github.com/firefly-iii/firefly-iii/issues/11109) (Could not find a transaction currency with code "Korean Won"/"Russian ruble") reported by @mattephi
|
||||||
|
- [PR 11019](https://github.com/firefly-iii/firefly-iii/pull/11019) (fix issue 11015 set end date time to end of day) reported by @ctrl-f5
|
||||||
|
- [PR 11024](https://github.com/firefly-iii/firefly-iii/pull/11024) (improved balance range date handling) reported by @ctrl-f5
|
||||||
|
- [Issue 11031](https://github.com/firefly-iii/firefly-iii/issues/11031) (Rule with trigger "When a transaction is created" being triggered on transaction updates) reported by @pvieira84
|
||||||
|
- [Issue 11038](https://github.com/firefly-iii/firefly-iii/issues/11038) (Missing date formats when using "MTD" on the frontpage) reported by @cristiangrossano
|
||||||
|
- [Issue 11042](https://github.com/firefly-iii/firefly-iii/issues/11042) (Option to apply rules on a specific date range has disappeared from the UI) reported by @angelbarrera92
|
||||||
|
- [PR 11052](https://github.com/firefly-iii/firefly-iii/pull/11052) (correct validator function to check for errors + `Account\ShowControllerTest`) reported by @ctrl-f5
|
||||||
|
- [Issue 11054](https://github.com/firefly-iii/firefly-iii/issues/11054) (Autocreation of revenue account when depositing to liability) reported by @Mr-Kanister
|
||||||
|
- [Issue 11063](https://github.com/firefly-iii/firefly-iii/issues/11063) ("bcadd: argument must be of type string, int given" when viewing categories or tags) reported by @df911
|
||||||
|
- [Discussion 11104](https://github.com/orgs/firefly-iii/discussions/11104) (Personal Access Token failing on 6.4.2 for data-importer) started by @marcoblancas
|
||||||
|
- [Discussion 11122](https://github.com/orgs/firefly-iii/discussions/11122) (Convenient Rules Creation) started by @viewmatic2025
|
||||||
|
- [Issue 11134](https://github.com/firefly-iii/firefly-iii/issues/11134) (Rules are not applied if description in quotes) reported by @beatbesmer
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Debug route is now behind 2FA
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
- [Issue 11050](https://github.com/firefly-iii/firefly-iii/issues/11050) (Dev Version: `/api/v1/accounts/get/$id` requires (optional) `start` parameter, throws error otherwise) reported by @dreautall
|
||||||
|
- [PR 11056](https://github.com/firefly-iii/firefly-iii/pull/11056) (account/attachments endpoint use request object for pagination, add test) reported by @ctrl-f5
|
||||||
|
- [Issue 11096](https://github.com/firefly-iii/firefly-iii/issues/11096) (Budget Limit API ignores transactions on the last day of the month) reported by @edbingo
|
||||||
|
|
||||||
|
|
||||||
## 6.4.2 - 2055-10-07
|
## 6.4.2 - 2055-10-07
|
||||||
|
|
||||||
|
|||||||
284
composer.lock
generated
284
composer.lock
generated
@@ -753,29 +753,28 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "dragonmantank/cron-expression",
|
"name": "dragonmantank/cron-expression",
|
||||||
"version": "v3.4.0",
|
"version": "v3.6.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/dragonmantank/cron-expression.git",
|
"url": "https://github.com/dragonmantank/cron-expression.git",
|
||||||
"reference": "8c784d071debd117328803d86b2097615b457500"
|
"reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
|
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013",
|
||||||
"reference": "8c784d071debd117328803d86b2097615b457500",
|
"reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2|^8.0",
|
"php": "^8.2|^8.3|^8.4|^8.5"
|
||||||
"webmozart/assert": "^1.0"
|
|
||||||
},
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
"mtdowling/cron-expression": "^1.0"
|
"mtdowling/cron-expression": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpstan/extension-installer": "^1.0",
|
"phpstan/extension-installer": "^1.4.3",
|
||||||
"phpstan/phpstan": "^1.0",
|
"phpstan/phpstan": "^1.12.32|^2.1.31",
|
||||||
"phpunit/phpunit": "^7.0|^8.0|^9.0"
|
"phpunit/phpunit": "^8.5.48|^9.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
@@ -806,7 +805,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/dragonmantank/cron-expression/issues",
|
"issues": "https://github.com/dragonmantank/cron-expression/issues",
|
||||||
"source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
|
"source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -814,7 +813,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-10-09T13:47:03+00:00"
|
"time": "2025-10-31T18:51:33+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "egulias/email-validator",
|
"name": "egulias/email-validator",
|
||||||
@@ -1878,16 +1877,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/framework",
|
"name": "laravel/framework",
|
||||||
"version": "v12.35.1",
|
"version": "v12.36.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/framework.git",
|
"url": "https://github.com/laravel/framework.git",
|
||||||
"reference": "d6d6e3cb68238e2fb25b440f222442adef5a8a15"
|
"reference": "cad110d7685fbab990a6bb8184d0cfd847d7c4d8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/framework/zipball/d6d6e3cb68238e2fb25b440f222442adef5a8a15",
|
"url": "https://api.github.com/repos/laravel/framework/zipball/cad110d7685fbab990a6bb8184d0cfd847d7c4d8",
|
||||||
"reference": "d6d6e3cb68238e2fb25b440f222442adef5a8a15",
|
"reference": "cad110d7685fbab990a6bb8184d0cfd847d7c4d8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2093,7 +2092,7 @@
|
|||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2025-10-23T15:25:03+00:00"
|
"time": "2025-10-29T14:20:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/passport",
|
"name": "laravel/passport",
|
||||||
@@ -2485,20 +2484,20 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "lcobucci/clock",
|
"name": "lcobucci/clock",
|
||||||
"version": "3.4.0",
|
"version": "3.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/lcobucci/clock.git",
|
"url": "https://github.com/lcobucci/clock.git",
|
||||||
"reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f"
|
"reference": "a3139d9e97d47826f27e6a17bb63f13621f86058"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/lcobucci/clock/zipball/f91d84f65cb3e974988bbe872b5da8ca132a155f",
|
"url": "https://api.github.com/repos/lcobucci/clock/zipball/a3139d9e97d47826f27e6a17bb63f13621f86058",
|
||||||
"reference": "f91d84f65cb3e974988bbe872b5da8ca132a155f",
|
"reference": "a3139d9e97d47826f27e6a17bb63f13621f86058",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "~8.3.0 || ~8.4.0",
|
"php": "~8.3.0 || ~8.4.0 || ~8.5.0",
|
||||||
"psr/clock": "^1.0"
|
"psr/clock": "^1.0"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
@@ -2506,7 +2505,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"infection/infection": "^0.31",
|
"infection/infection": "^0.31",
|
||||||
"lcobucci/coding-standard": "^11.1.0",
|
"lcobucci/coding-standard": "^11.2.0",
|
||||||
"phpstan/extension-installer": "^1.3.1",
|
"phpstan/extension-installer": "^1.3.1",
|
||||||
"phpstan/phpstan": "^2.0.0",
|
"phpstan/phpstan": "^2.0.0",
|
||||||
"phpstan/phpstan-deprecation-rules": "^2.0.0",
|
"phpstan/phpstan-deprecation-rules": "^2.0.0",
|
||||||
@@ -2533,7 +2532,7 @@
|
|||||||
"description": "Yet another clock abstraction",
|
"description": "Yet another clock abstraction",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/lcobucci/clock/issues",
|
"issues": "https://github.com/lcobucci/clock/issues",
|
||||||
"source": "https://github.com/lcobucci/clock/tree/3.4.0"
|
"source": "https://github.com/lcobucci/clock/tree/3.5.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2545,7 +2544,7 @@
|
|||||||
"type": "patreon"
|
"type": "patreon"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-10-08T18:00:48+00:00"
|
"time": "2025-10-27T09:03:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "lcobucci/jwt",
|
"name": "lcobucci/jwt",
|
||||||
@@ -3476,22 +3475,22 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mailersend/laravel-driver",
|
"name": "mailersend/laravel-driver",
|
||||||
"version": "v2.11.0",
|
"version": "v2.12.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mailersend/mailersend-laravel-driver.git",
|
"url": "https://github.com/mailersend/mailersend-laravel-driver.git",
|
||||||
"reference": "63acebb5064745076df27b1a80423986b6d7b69e"
|
"reference": "15e1ec41e29e65d3ca226929c65804190aaa93eb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/63acebb5064745076df27b1a80423986b6d7b69e",
|
"url": "https://api.github.com/repos/mailersend/mailersend-laravel-driver/zipball/15e1ec41e29e65d3ca226929c65804190aaa93eb",
|
||||||
"reference": "63acebb5064745076df27b1a80423986b6d7b69e",
|
"reference": "15e1ec41e29e65d3ca226929c65804190aaa93eb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0",
|
"illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0",
|
||||||
"mailersend/mailersend": "^0.34.0",
|
"mailersend/mailersend": "^0.35.0",
|
||||||
"nyholm/psr7": "^1.5",
|
"nyholm/psr7": "^1.5",
|
||||||
"php": ">=8.0",
|
"php": ">=8.0",
|
||||||
"php-http/guzzle7-adapter": "^1.0",
|
"php-http/guzzle7-adapter": "^1.0",
|
||||||
@@ -3539,22 +3538,22 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/mailersend/mailersend-laravel-driver/issues",
|
"issues": "https://github.com/mailersend/mailersend-laravel-driver/issues",
|
||||||
"source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.11.0"
|
"source": "https://github.com/mailersend/mailersend-laravel-driver/tree/v2.12.0"
|
||||||
},
|
},
|
||||||
"time": "2025-06-04T08:47:41+00:00"
|
"time": "2025-10-28T14:59:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mailersend/mailersend",
|
"name": "mailersend/mailersend",
|
||||||
"version": "v0.34.0",
|
"version": "v0.35.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mailersend/mailersend-php.git",
|
"url": "https://github.com/mailersend/mailersend-php.git",
|
||||||
"reference": "1cb8c42e5569e7455b1e0e794dcbf68e3b7898ab"
|
"reference": "f1696cf9e727e9503fbc5882d2a111bd966ad276"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/mailersend/mailersend-php/zipball/1cb8c42e5569e7455b1e0e794dcbf68e3b7898ab",
|
"url": "https://api.github.com/repos/mailersend/mailersend-php/zipball/f1696cf9e727e9503fbc5882d2a111bd966ad276",
|
||||||
"reference": "1cb8c42e5569e7455b1e0e794dcbf68e3b7898ab",
|
"reference": "f1696cf9e727e9503fbc5882d2a111bd966ad276",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -3605,9 +3604,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/mailersend/mailersend-php/issues",
|
"issues": "https://github.com/mailersend/mailersend-php/issues",
|
||||||
"source": "https://github.com/mailersend/mailersend-php/tree/v0.34.0"
|
"source": "https://github.com/mailersend/mailersend-php/tree/v0.35.0"
|
||||||
},
|
},
|
||||||
"time": "2025-06-04T07:53:52+00:00"
|
"time": "2025-10-28T13:11:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
@@ -3819,25 +3818,25 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nette/schema",
|
"name": "nette/schema",
|
||||||
"version": "v1.3.2",
|
"version": "v1.3.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nette/schema.git",
|
"url": "https://github.com/nette/schema.git",
|
||||||
"reference": "da801d52f0354f70a638673c4a0f04e16529431d"
|
"reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
|
"url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
|
||||||
"reference": "da801d52f0354f70a638673c4a0f04e16529431d",
|
"reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"nette/utils": "^4.0",
|
"nette/utils": "^4.0",
|
||||||
"php": "8.1 - 8.4"
|
"php": "8.1 - 8.5"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"nette/tester": "^2.5.2",
|
"nette/tester": "^2.5.2",
|
||||||
"phpstan/phpstan-nette": "^1.0",
|
"phpstan/phpstan-nette": "^2.0@stable",
|
||||||
"tracy/tracy": "^2.8"
|
"tracy/tracy": "^2.8"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@@ -3847,6 +3846,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Nette\\": "src"
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"src/"
|
"src/"
|
||||||
]
|
]
|
||||||
@@ -3875,9 +3877,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nette/schema/issues",
|
"issues": "https://github.com/nette/schema/issues",
|
||||||
"source": "https://github.com/nette/schema/tree/v1.3.2"
|
"source": "https://github.com/nette/schema/tree/v1.3.3"
|
||||||
},
|
},
|
||||||
"time": "2024-10-06T23:10:23+00:00"
|
"time": "2025-10-30T22:57:59+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nette/utils",
|
"name": "nette/utils",
|
||||||
@@ -6416,16 +6418,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/cache.git",
|
"url": "https://github.com/symfony/cache.git",
|
||||||
"reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f"
|
"reference": "4a55feb59664f49042a0824c0f955e2f4c1412ad"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/cache/zipball/bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f",
|
"url": "https://api.github.com/repos/symfony/cache/zipball/4a55feb59664f49042a0824c0f955e2f4c1412ad",
|
||||||
"reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f",
|
"reference": "4a55feb59664f49042a0824c0f955e2f4c1412ad",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -6494,7 +6496,7 @@
|
|||||||
"psr6"
|
"psr6"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/cache/tree/v7.3.4"
|
"source": "https://github.com/symfony/cache/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -6514,7 +6516,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-11T10:12:26+00:00"
|
"time": "2025-10-16T13:55:38+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache-contracts",
|
"name": "symfony/cache-contracts",
|
||||||
@@ -6668,16 +6670,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/console.git",
|
"url": "https://github.com/symfony/console.git",
|
||||||
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
|
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
|
"url": "https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
|
||||||
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
|
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -6742,7 +6744,7 @@
|
|||||||
"terminal"
|
"terminal"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/console/tree/v7.3.4"
|
"source": "https://github.com/symfony/console/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -6762,7 +6764,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-22T15:31:00+00:00"
|
"time": "2025-10-14T15:46:26+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/css-selector",
|
"name": "symfony/css-selector",
|
||||||
@@ -7207,16 +7209,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
"version": "v7.3.2",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/finder.git",
|
"url": "https://github.com/symfony/finder.git",
|
||||||
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
|
"reference": "9f696d2f1e340484b4683f7853b273abff94421f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
|
"url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f",
|
||||||
"reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
|
"reference": "9f696d2f1e340484b4683f7853b273abff94421f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -7251,7 +7253,7 @@
|
|||||||
"description": "Finds files and directories via an intuitive fluent interface",
|
"description": "Finds files and directories via an intuitive fluent interface",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/finder/tree/v7.3.2"
|
"source": "https://github.com/symfony/finder/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -7271,7 +7273,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-07-15T13:41:35+00:00"
|
"time": "2025-10-15T18:45:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-client",
|
"name": "symfony/http-client",
|
||||||
@@ -7453,16 +7455,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-foundation",
|
"name": "symfony/http-foundation",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/http-foundation.git",
|
"url": "https://github.com/symfony/http-foundation.git",
|
||||||
"reference": "c061c7c18918b1b64268771aad04b40be41dd2e6"
|
"reference": "ce31218c7cac92eab280762c4375fb70a6f4f897"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/c061c7c18918b1b64268771aad04b40be41dd2e6",
|
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce31218c7cac92eab280762c4375fb70a6f4f897",
|
||||||
"reference": "c061c7c18918b1b64268771aad04b40be41dd2e6",
|
"reference": "ce31218c7cac92eab280762c4375fb70a6f4f897",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -7512,7 +7514,7 @@
|
|||||||
"description": "Defines an object-oriented layer for the HTTP specification",
|
"description": "Defines an object-oriented layer for the HTTP specification",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/http-foundation/tree/v7.3.4"
|
"source": "https://github.com/symfony/http-foundation/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -7532,20 +7534,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-16T08:38:17+00:00"
|
"time": "2025-10-24T21:42:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-kernel",
|
"name": "symfony/http-kernel",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/http-kernel.git",
|
"url": "https://github.com/symfony/http-kernel.git",
|
||||||
"reference": "b796dffea7821f035047235e076b60ca2446e3cf"
|
"reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/b796dffea7821f035047235e076b60ca2446e3cf",
|
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/24fd3f123532e26025f49f1abefcc01a69ef15ab",
|
||||||
"reference": "b796dffea7821f035047235e076b60ca2446e3cf",
|
"reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -7630,7 +7632,7 @@
|
|||||||
"description": "Provides a structured process for converting a Request into a Response",
|
"description": "Provides a structured process for converting a Request into a Response",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/http-kernel/tree/v7.3.4"
|
"source": "https://github.com/symfony/http-kernel/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -7650,20 +7652,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-27T12:32:17+00:00"
|
"time": "2025-10-28T10:19:01+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/mailer",
|
"name": "symfony/mailer",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/mailer.git",
|
"url": "https://github.com/symfony/mailer.git",
|
||||||
"reference": "ab97ef2f7acf0216955f5845484235113047a31d"
|
"reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/mailer/zipball/ab97ef2f7acf0216955f5845484235113047a31d",
|
"url": "https://api.github.com/repos/symfony/mailer/zipball/fd497c45ba9c10c37864e19466b090dcb60a50ba",
|
||||||
"reference": "ab97ef2f7acf0216955f5845484235113047a31d",
|
"reference": "fd497c45ba9c10c37864e19466b090dcb60a50ba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -7714,7 +7716,7 @@
|
|||||||
"description": "Helps sending emails",
|
"description": "Helps sending emails",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/mailer/tree/v7.3.4"
|
"source": "https://github.com/symfony/mailer/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -7734,7 +7736,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-17T05:51:54+00:00"
|
"time": "2025-10-24T14:27:20+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/mailgun-mailer",
|
"name": "symfony/mailgun-mailer",
|
||||||
@@ -9453,16 +9455,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-dumper",
|
"name": "symfony/var-dumper",
|
||||||
"version": "v7.3.4",
|
"version": "v7.3.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/var-dumper.git",
|
"url": "https://github.com/symfony/var-dumper.git",
|
||||||
"reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb"
|
"reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
|
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/476c4ae17f43a9a36650c69879dcf5b1e6ae724d",
|
||||||
"reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
|
"reference": "476c4ae17f43a9a36650c69879dcf5b1e6ae724d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -9516,7 +9518,7 @@
|
|||||||
"dump"
|
"dump"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/var-dumper/tree/v7.3.4"
|
"source": "https://github.com/symfony/var-dumper/tree/v7.3.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -9536,7 +9538,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-09-11T10:12:26+00:00"
|
"time": "2025-09-27T09:00:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-exporter",
|
"name": "symfony/var-exporter",
|
||||||
@@ -9815,16 +9817,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.21.1",
|
"version": "v3.22.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d"
|
"reference": "4509984193026de413baf4ba80f68590a7f2c51d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/4509984193026de413baf4ba80f68590a7f2c51d",
|
||||||
"reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d",
|
"reference": "4509984193026de413baf4ba80f68590a7f2c51d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -9878,7 +9880,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v3.21.1"
|
"source": "https://github.com/twigphp/Twig/tree/v3.22.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -9890,7 +9892,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-05-03T07:21:55+00:00"
|
"time": "2025-10-29T15:56:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vlucas/phpdotenv",
|
"name": "vlucas/phpdotenv",
|
||||||
@@ -10049,64 +10051,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-11-21T01:49:47+00:00"
|
"time": "2024-11-21T01:49:47+00:00"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "webmozart/assert",
|
|
||||||
"version": "1.12.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/webmozarts/assert.git",
|
|
||||||
"reference": "541057574806f942c94662b817a50f63f7345360"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/webmozarts/assert/zipball/541057574806f942c94662b817a50f63f7345360",
|
|
||||||
"reference": "541057574806f942c94662b817a50f63f7345360",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-ctype": "*",
|
|
||||||
"ext-date": "*",
|
|
||||||
"ext-filter": "*",
|
|
||||||
"php": "^7.2 || ^8.0"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-intl": "",
|
|
||||||
"ext-simplexml": "",
|
|
||||||
"ext-spl": ""
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.10-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Webmozart\\Assert\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Bernhard Schussek",
|
|
||||||
"email": "bschussek@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Assertions to validate method input/output with nice error messages.",
|
|
||||||
"keywords": [
|
|
||||||
"assert",
|
|
||||||
"check",
|
|
||||||
"validate"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/webmozarts/assert/issues",
|
|
||||||
"source": "https://github.com/webmozarts/assert/tree/1.12.0"
|
|
||||||
},
|
|
||||||
"time": "2025-10-20T12:43:39+00:00"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
@@ -10549,21 +10493,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "driftingly/rector-laravel",
|
"name": "driftingly/rector-laravel",
|
||||||
"version": "2.1.1",
|
"version": "2.1.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/driftingly/rector-laravel.git",
|
"url": "https://github.com/driftingly/rector-laravel.git",
|
||||||
"reference": "abc336cbf06f53d90ab74cecfd319379fc55d408"
|
"reference": "d7cd932cff9e398a43393f1a1a63b27d574e35ef"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/driftingly/rector-laravel/zipball/abc336cbf06f53d90ab74cecfd319379fc55d408",
|
"url": "https://api.github.com/repos/driftingly/rector-laravel/zipball/d7cd932cff9e398a43393f1a1a63b27d574e35ef",
|
||||||
"reference": "abc336cbf06f53d90ab74cecfd319379fc55d408",
|
"reference": "d7cd932cff9e398a43393f1a1a63b27d574e35ef",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.4 || ^8.0",
|
"php": "^7.4 || ^8.0",
|
||||||
"rector/rector": "^2.0"
|
"rector/rector": "^2.2.7"
|
||||||
},
|
},
|
||||||
"type": "rector-extension",
|
"type": "rector-extension",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -10578,9 +10522,9 @@
|
|||||||
"description": "Rector upgrades rules for Laravel Framework",
|
"description": "Rector upgrades rules for Laravel Framework",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/driftingly/rector-laravel/issues",
|
"issues": "https://github.com/driftingly/rector-laravel/issues",
|
||||||
"source": "https://github.com/driftingly/rector-laravel/tree/2.1.1"
|
"source": "https://github.com/driftingly/rector-laravel/tree/2.1.2"
|
||||||
},
|
},
|
||||||
"time": "2025-10-23T13:53:44+00:00"
|
"time": "2025-10-31T21:56:58+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fakerphp/faker",
|
"name": "fakerphp/faker",
|
||||||
@@ -11815,16 +11759,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "12.4.1",
|
"version": "12.4.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194"
|
"reference": "a94ea4d26d865875803b23aaf78c3c2c670ea2ea"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc5413a2e6d240d2f6d9317bdf7f0a24e73de194",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a94ea4d26d865875803b23aaf78c3c2c670ea2ea",
|
||||||
"reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194",
|
"reference": "a94ea4d26d865875803b23aaf78c3c2c670ea2ea",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -11892,7 +11836,7 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.1"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -11916,20 +11860,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-10-09T14:08:29+00:00"
|
"time": "2025-10-30T08:41:39+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "rector/rector",
|
"name": "rector/rector",
|
||||||
"version": "2.2.5",
|
"version": "2.2.7",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/rectorphp/rector.git",
|
"url": "https://github.com/rectorphp/rector.git",
|
||||||
"reference": "fb9418af7777dfb1c87a536dc58398b5b07c74b9"
|
"reference": "022038537838bc8a4e526af86c2d6e38eaeff7ef"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/rectorphp/rector/zipball/fb9418af7777dfb1c87a536dc58398b5b07c74b9",
|
"url": "https://api.github.com/repos/rectorphp/rector/zipball/022038537838bc8a4e526af86c2d6e38eaeff7ef",
|
||||||
"reference": "fb9418af7777dfb1c87a536dc58398b5b07c74b9",
|
"reference": "022038537838bc8a4e526af86c2d6e38eaeff7ef",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -11968,7 +11912,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/rectorphp/rector/issues",
|
"issues": "https://github.com/rectorphp/rector/issues",
|
||||||
"source": "https://github.com/rectorphp/rector/tree/2.2.5"
|
"source": "https://github.com/rectorphp/rector/tree/2.2.7"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -11976,7 +11920,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-10-23T11:22:37+00:00"
|
"time": "2025-10-29T15:46:12+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ return [
|
|||||||
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
||||||
// see cer.php for exchange rates feature flag.
|
// see cer.php for exchange rates feature flag.
|
||||||
],
|
],
|
||||||
'version' => 'develop/2025-10-25',
|
'version' => 'develop/2025-11-02',
|
||||||
'build_time' => 1761394881,
|
'build_time' => 1762056298,
|
||||||
'api_version' => '2.1.0', // field is no longer used.
|
'api_version' => '2.1.0', // field is no longer used.
|
||||||
'db_version' => 28, // field is no longer used.
|
'db_version' => 28, // field is no longer used.
|
||||||
|
|
||||||
@@ -309,7 +309,7 @@ return [
|
|||||||
|
|
||||||
// "period must be in this list" values
|
// "period must be in this list" values
|
||||||
'bill_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'],
|
'bill_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'],
|
||||||
'interest_periods' => ['weekly', 'monthly', 'quarterly', 'half-year', 'yearly'],
|
'interest_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'],
|
||||||
|
|
||||||
// settings to translate X to Y
|
// settings to translate X to Y
|
||||||
'range_to_repeat_freq' => [
|
'range_to_repeat_freq' => [
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ class TransactionCurrencySeeder extends Seeder
|
|||||||
$currencies[] = ['code' => 'NOK', 'name' => 'Norwegian krone', 'symbol' => 'kr.', 'decimal_places' => 2];
|
$currencies[] = ['code' => 'NOK', 'name' => 'Norwegian krone', 'symbol' => 'kr.', 'decimal_places' => 2];
|
||||||
$currencies[] = ['code' => 'CZK', 'name' => 'Czech koruna', 'symbol' => 'Kč', 'decimal_places' => 2];
|
$currencies[] = ['code' => 'CZK', 'name' => 'Czech koruna', 'symbol' => 'Kč', 'decimal_places' => 2];
|
||||||
$currencies[] = ['code' => 'KZT', 'name' => 'Kazakhstani tenge', 'symbol' => '₸', 'decimal_places' => 2];
|
$currencies[] = ['code' => 'KZT', 'name' => 'Kazakhstani tenge', 'symbol' => '₸', 'decimal_places' => 2];
|
||||||
|
$currencies[] = ['code' => 'SAR', 'name' => 'Saudi Riyal', 'symbol' => 'SAR', 'decimal_places' => 2];
|
||||||
|
|
||||||
foreach ($currencies as $currency) {
|
foreach ($currencies as $currency) {
|
||||||
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {
|
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {
|
||||||
|
|||||||
276
package-lock.json
generated
276
package-lock.json
generated
@@ -1693,9 +1693,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
|
||||||
"integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==",
|
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -1710,9 +1710,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm": {
|
"node_modules/@esbuild/android-arm": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
|
||||||
"integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==",
|
"integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1727,9 +1727,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-arm64": {
|
"node_modules/@esbuild/android-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==",
|
"integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1744,9 +1744,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/android-x64": {
|
"node_modules/@esbuild/android-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==",
|
"integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1761,9 +1761,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-arm64": {
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==",
|
"integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1778,9 +1778,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/darwin-x64": {
|
"node_modules/@esbuild/darwin-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==",
|
"integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1795,9 +1795,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-arm64": {
|
"node_modules/@esbuild/freebsd-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==",
|
"integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1812,9 +1812,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/freebsd-x64": {
|
"node_modules/@esbuild/freebsd-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==",
|
"integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1829,9 +1829,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm": {
|
"node_modules/@esbuild/linux-arm": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
|
||||||
"integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==",
|
"integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1846,9 +1846,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-arm64": {
|
"node_modules/@esbuild/linux-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==",
|
"integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1863,9 +1863,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ia32": {
|
"node_modules/@esbuild/linux-ia32": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
|
||||||
"integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==",
|
"integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -1880,9 +1880,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-loong64": {
|
"node_modules/@esbuild/linux-loong64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
|
||||||
"integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==",
|
"integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@@ -1897,9 +1897,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-mips64el": {
|
"node_modules/@esbuild/linux-mips64el": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
|
||||||
"integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==",
|
"integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"mips64el"
|
"mips64el"
|
||||||
],
|
],
|
||||||
@@ -1914,9 +1914,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-ppc64": {
|
"node_modules/@esbuild/linux-ppc64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
|
||||||
"integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==",
|
"integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -1931,9 +1931,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-riscv64": {
|
"node_modules/@esbuild/linux-riscv64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
|
||||||
"integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==",
|
"integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@@ -1948,9 +1948,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-s390x": {
|
"node_modules/@esbuild/linux-s390x": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
|
||||||
"integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==",
|
"integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -1965,9 +1965,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/linux-x64": {
|
"node_modules/@esbuild/linux-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==",
|
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1982,9 +1982,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-arm64": {
|
"node_modules/@esbuild/netbsd-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==",
|
"integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1999,9 +1999,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/netbsd-x64": {
|
"node_modules/@esbuild/netbsd-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==",
|
"integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -2016,9 +2016,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-arm64": {
|
"node_modules/@esbuild/openbsd-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==",
|
"integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -2033,9 +2033,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openbsd-x64": {
|
"node_modules/@esbuild/openbsd-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==",
|
"integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -2050,9 +2050,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/openharmony-arm64": {
|
"node_modules/@esbuild/openharmony-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==",
|
"integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -2067,9 +2067,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/sunos-x64": {
|
"node_modules/@esbuild/sunos-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==",
|
"integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -2084,9 +2084,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-arm64": {
|
"node_modules/@esbuild/win32-arm64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
|
||||||
"integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==",
|
"integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -2101,9 +2101,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-ia32": {
|
"node_modules/@esbuild/win32-ia32": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
|
||||||
"integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==",
|
"integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -2118,9 +2118,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@esbuild/win32-x64": {
|
"node_modules/@esbuild/win32-x64": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
|
||||||
"integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==",
|
"integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -3034,16 +3034,16 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/express": {
|
"node_modules/@types/express": {
|
||||||
"version": "4.17.24",
|
"version": "4.17.25",
|
||||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.24.tgz",
|
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz",
|
||||||
"integrity": "sha512-Mbrt4SRlXSTWryOnHAh2d4UQ/E7n9lZyGSi6KgX+4hkuL9soYbLOVXVhnk/ODp12YsGc95f4pOvqywJ6kngUwg==",
|
"integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/body-parser": "*",
|
"@types/body-parser": "*",
|
||||||
"@types/express-serve-static-core": "^4.17.33",
|
"@types/express-serve-static-core": "^4.17.33",
|
||||||
"@types/qs": "*",
|
"@types/qs": "*",
|
||||||
"@types/serve-static": "*"
|
"@types/serve-static": "^1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/express-serve-static-core": {
|
"node_modules/@types/express-serve-static-core": {
|
||||||
@@ -3173,9 +3173,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "24.9.1",
|
"version": "24.9.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz",
|
||||||
"integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==",
|
"integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -3776,9 +3776,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/alpinejs": {
|
"node_modules/alpinejs": {
|
||||||
"version": "3.15.0",
|
"version": "3.15.1",
|
||||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.0.tgz",
|
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.1.tgz",
|
||||||
"integrity": "sha512-lpokA5okCF1BKh10LG8YjqhfpxyHBk4gE7boIgVHltJzYoM7O9nK3M7VlntLEJGsVmu7U/RzUWajmHREGT38Eg==",
|
"integrity": "sha512-HLO1TtiE92VajFHtLLPK8BWaK1YepV/uj31UrfoGnQ00lyFOJZ+oVY3F0DghPAwvg8sLU79pmjGQSytERa2gEg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/reactivity": "~3.1.1"
|
"@vue/reactivity": "~3.1.1"
|
||||||
@@ -3963,9 +3963,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.12.2",
|
"version": "1.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz",
|
||||||
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
|
"integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4075,9 +4075,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/baseline-browser-mapping": {
|
"node_modules/baseline-browser-mapping": {
|
||||||
"version": "2.8.20",
|
"version": "2.8.23",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz",
|
||||||
"integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==",
|
"integrity": "sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -4521,9 +4521,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001751",
|
"version": "1.0.30001752",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz",
|
||||||
"integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==",
|
"integrity": "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -5736,9 +5736,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.240",
|
"version": "1.5.244",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz",
|
||||||
"integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==",
|
"integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
@@ -5899,9 +5899,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.25.11",
|
"version": "0.25.12",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
|
||||||
"integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==",
|
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -5912,32 +5912,32 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@esbuild/aix-ppc64": "0.25.11",
|
"@esbuild/aix-ppc64": "0.25.12",
|
||||||
"@esbuild/android-arm": "0.25.11",
|
"@esbuild/android-arm": "0.25.12",
|
||||||
"@esbuild/android-arm64": "0.25.11",
|
"@esbuild/android-arm64": "0.25.12",
|
||||||
"@esbuild/android-x64": "0.25.11",
|
"@esbuild/android-x64": "0.25.12",
|
||||||
"@esbuild/darwin-arm64": "0.25.11",
|
"@esbuild/darwin-arm64": "0.25.12",
|
||||||
"@esbuild/darwin-x64": "0.25.11",
|
"@esbuild/darwin-x64": "0.25.12",
|
||||||
"@esbuild/freebsd-arm64": "0.25.11",
|
"@esbuild/freebsd-arm64": "0.25.12",
|
||||||
"@esbuild/freebsd-x64": "0.25.11",
|
"@esbuild/freebsd-x64": "0.25.12",
|
||||||
"@esbuild/linux-arm": "0.25.11",
|
"@esbuild/linux-arm": "0.25.12",
|
||||||
"@esbuild/linux-arm64": "0.25.11",
|
"@esbuild/linux-arm64": "0.25.12",
|
||||||
"@esbuild/linux-ia32": "0.25.11",
|
"@esbuild/linux-ia32": "0.25.12",
|
||||||
"@esbuild/linux-loong64": "0.25.11",
|
"@esbuild/linux-loong64": "0.25.12",
|
||||||
"@esbuild/linux-mips64el": "0.25.11",
|
"@esbuild/linux-mips64el": "0.25.12",
|
||||||
"@esbuild/linux-ppc64": "0.25.11",
|
"@esbuild/linux-ppc64": "0.25.12",
|
||||||
"@esbuild/linux-riscv64": "0.25.11",
|
"@esbuild/linux-riscv64": "0.25.12",
|
||||||
"@esbuild/linux-s390x": "0.25.11",
|
"@esbuild/linux-s390x": "0.25.12",
|
||||||
"@esbuild/linux-x64": "0.25.11",
|
"@esbuild/linux-x64": "0.25.12",
|
||||||
"@esbuild/netbsd-arm64": "0.25.11",
|
"@esbuild/netbsd-arm64": "0.25.12",
|
||||||
"@esbuild/netbsd-x64": "0.25.11",
|
"@esbuild/netbsd-x64": "0.25.12",
|
||||||
"@esbuild/openbsd-arm64": "0.25.11",
|
"@esbuild/openbsd-arm64": "0.25.12",
|
||||||
"@esbuild/openbsd-x64": "0.25.11",
|
"@esbuild/openbsd-x64": "0.25.12",
|
||||||
"@esbuild/openharmony-arm64": "0.25.11",
|
"@esbuild/openharmony-arm64": "0.25.12",
|
||||||
"@esbuild/sunos-x64": "0.25.11",
|
"@esbuild/sunos-x64": "0.25.12",
|
||||||
"@esbuild/win32-arm64": "0.25.11",
|
"@esbuild/win32-arm64": "0.25.12",
|
||||||
"@esbuild/win32-ia32": "0.25.11",
|
"@esbuild/win32-ia32": "0.25.12",
|
||||||
"@esbuild/win32-x64": "0.25.11"
|
"@esbuild/win32-x64": "0.25.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/escalade": {
|
"node_modules/escalade": {
|
||||||
@@ -7874,9 +7874,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/launch-editor": {
|
"node_modules/launch-editor": {
|
||||||
"version": "2.11.1",
|
"version": "2.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz",
|
||||||
"integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==",
|
"integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -8468,9 +8468,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.26",
|
"version": "2.0.27",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
|
||||||
"integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==",
|
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -10203,9 +10203,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/sass": {
|
"node_modules/sass": {
|
||||||
"version": "1.93.2",
|
"version": "1.93.3",
|
||||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz",
|
"resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz",
|
||||||
"integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==",
|
"integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -89,9 +89,9 @@ function selectAllReconcile(e) {
|
|||||||
console.log('in selectAllReconcile(' + journalId + ') with amount ' + amount + ' and selected amount ' + selectedAmount);
|
console.log('in selectAllReconcile(' + journalId + ') with amount ' + amount + ' and selected amount ' + selectedAmount);
|
||||||
|
|
||||||
// do nothing if line is already in target state
|
// do nothing if line is already in target state
|
||||||
if (check.prop('checked') === doCheck )
|
if (check.prop('checked') === doCheck)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
check.prop('checked', doCheck);
|
check.prop('checked', doCheck);
|
||||||
// if checked, add to selected amount
|
// if checked, add to selected amount
|
||||||
if (doCheck === true && check.data('younger') === false) {
|
if (doCheck === true && check.data('younger') === false) {
|
||||||
@@ -201,6 +201,7 @@ function getTransactionsForRange() {
|
|||||||
|
|
||||||
$.getJSON(url).done(placeTransactions).catch(exceptionHandling)
|
$.getJSON(url).done(placeTransactions).catch(exceptionHandling)
|
||||||
}
|
}
|
||||||
|
|
||||||
function exceptionHandling() {
|
function exceptionHandling() {
|
||||||
$('#transactions_holder').empty().append($('<p>').addClass('text-center lead').html(selectRangeAndBalance));
|
$('#transactions_holder').empty().append($('<p>').addClass('text-center lead').html(selectRangeAndBalance));
|
||||||
$('.start_reconcile').show();
|
$('.start_reconcile').show();
|
||||||
@@ -254,8 +255,8 @@ function placeTransactions(data) {
|
|||||||
selectedAmount = 0;
|
selectedAmount = 0;
|
||||||
// update start + end balance when user has not touched them.
|
// update start + end balance when user has not touched them.
|
||||||
if (!changedBalances) {
|
if (!changedBalances) {
|
||||||
$('input[name="start_balance"]').val(data.startBalance);
|
$('input[name="start_balance"]').val(data.startBalance.balance);
|
||||||
$('input[name="end_balance"]').val(data.endBalance);
|
$('input[name="end_balance"]').val(data.endBalance.balance);
|
||||||
}
|
}
|
||||||
|
|
||||||
// as long as the dates are equal, changing the balance does not matter.
|
// as long as the dates are equal, changing the balance does not matter.
|
||||||
|
|||||||
14
readme.md
14
readme.md
@@ -143,9 +143,19 @@ There is also a [security policy](https://github.com/firefly-iii/firefly-iii/sec
|
|||||||
|
|
||||||
## Support the development of Firefly III
|
## Support the development of Firefly III
|
||||||
|
|
||||||
If you like Firefly III and if it helps you save lots of money, why not send me a dime for every dollar saved! 🥳
|
Firefly III is a side gig. With your sponsorship or support, I can spend more time on Firefly III. So, if you like Firefly III, and if it helps you save lots of money, why not send me a dime for every dollar saved! 🥳
|
||||||
|
|
||||||
OK that was a joke. If you feel Firefly III made your life better, please consider contributing as a sponsor. Please check out my [Patreon](https://www.patreon.com/jc5) and [GitHub Sponsors](https://github.com/sponsors/JC5) page for more information. You can also [buy me a ☕️ coffee at ko-fi.com](https://ko-fi.com/Q5Q5R4SH1). Thank you for your consideration.
|
OK, that was a joke. But for real, when you feel Firefly III made your life better, please consider contributing as a sponsor. Please check out my [Patreon](https://www.patreon.com/jc5) and [GitHub Sponsors](https://github.com/sponsors/JC5) page for more information. You can also [buy me a ☕️ coffee at ko-fi.com](https://ko-fi.com/Q5Q5R4SH1) or send something my way using [Liberapay](https://liberapay.com/JC5). Thank you for your consideration.
|
||||||
|
|
||||||
|
### Sponsorships
|
||||||
|
|
||||||
|
Firefly III is sponsored by LamdaTest. Their support allows me to test Firefly III more easily and introduce even fewer bugs with every release.
|
||||||
|
|
||||||
|
<p style="font-size:21px; color:black;">Browser testing via
|
||||||
|
<a href="https://www.lambdatest.com/?utm_source=fireflyiii&utm_medium=sponsor" target="_blank">
|
||||||
|
<img src="https://www.lambdatest.com/blue-logo.png" style="vertical-align: middle;" width="250" height="45" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
<!-- END OF SPONSOR TEXT -->
|
<!-- END OF SPONSOR TEXT -->
|
||||||
|
|
||||||
|
|||||||
@@ -44,20 +44,29 @@
|
|||||||
<div class="box-body no-padding">
|
<div class="box-body no-padding">
|
||||||
<nav v-if="totalPages > 1">
|
<nav v-if="totalPages > 1">
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
<li v-if="1 === this.page" class="page-item disabled" aria-disabled="true" :aria-label="$t('pagination.previous')">
|
<li v-if="1 === this.page" class="page-item disabled" aria-disabled="true"
|
||||||
|
:aria-label="$t('pagination.previous')">
|
||||||
<span class="page-link" aria-hidden="true">‹</span>
|
<span class="page-link" aria-hidden="true">‹</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="page-item" v-if="1 !== this.page">
|
<li class="page-item" v-if="1 !== this.page">
|
||||||
<a class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page-1)" rel="prev" :aria-label="$t('pagination.next')">‹</a>
|
<a class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page-1)"
|
||||||
|
rel="prev" :aria-label="$t('pagination.next')">‹</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-for="item in this.totalPages" :class="item === page ? 'page-item active' : 'page-item'" aria-current="page">
|
<li v-for="item in this.totalPages"
|
||||||
|
:class="item === page ? 'page-item active' : 'page-item'" aria-current="page">
|
||||||
<span v-if="item === page" class="page-link" v-text="item"></span>
|
<span v-if="item === page" class="page-link" v-text="item"></span>
|
||||||
<a v-if="item !== page" class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + item" v-text="item"></a>
|
<a v-if="item !== page" class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + item"
|
||||||
|
v-text="item"></a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="totalPages !== page" class="page-item">
|
<li v-if="totalPages !== page" class="page-item">
|
||||||
<a class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page+1)" rel="next" :aria-label="$t('pagination.next')">›</a>
|
<a class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page+1)"
|
||||||
|
rel="next" :aria-label="$t('pagination.next')">›</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="totalPages === page" class="page-item disabled" aria-disabled="true" :aria-label="$t('pagination.next')">
|
<li v-if="totalPages === page" class="page-item disabled" aria-disabled="true"
|
||||||
|
:aria-label="$t('pagination.next')">
|
||||||
<span class="page-link" aria-hidden="true">›</span>
|
<span class="page-link" aria-hidden="true">›</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -97,9 +106,11 @@
|
|||||||
>
|
>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
<!-- (<span v-text="rate.rate_id"></span>) -->
|
||||||
<input type="number" class="form-control" min="0" step="any" v-model="rate.rate">
|
<input type="number" class="form-control" min="0" step="any" v-model="rate.rate">
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
<!-- (<span v-text="rate.inverse_id"></span>) -->
|
||||||
<input type="number" class="form-control" min="0" step="any" v-model="rate.inverse">
|
<input type="number" class="form-control" min="0" step="any" v-model="rate.inverse">
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -122,20 +133,29 @@
|
|||||||
|
|
||||||
<nav v-if="totalPages > 1">
|
<nav v-if="totalPages > 1">
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
<li v-if="1 === this.page" class="page-item disabled" aria-disabled="true" :aria-label="$t('pagination.previous')">
|
<li v-if="1 === this.page" class="page-item disabled" aria-disabled="true"
|
||||||
|
:aria-label="$t('pagination.previous')">
|
||||||
<span class="page-link" aria-hidden="true">‹</span>
|
<span class="page-link" aria-hidden="true">‹</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="page-item" v-if="1 !== this.page">
|
<li class="page-item" v-if="1 !== this.page">
|
||||||
<a class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page-1)" rel="prev" :aria-label="$t('pagination.next')">‹</a>
|
<a class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page-1)"
|
||||||
|
rel="prev" :aria-label="$t('pagination.next')">‹</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-for="item in this.totalPages" :class="item === page ? 'page-item active' : 'page-item'" aria-current="page">
|
<li v-for="item in this.totalPages"
|
||||||
|
:class="item === page ? 'page-item active' : 'page-item'" aria-current="page">
|
||||||
<span v-if="item === page" class="page-link" v-text="item"></span>
|
<span v-if="item === page" class="page-link" v-text="item"></span>
|
||||||
<a v-if="item !== page" class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + item" v-text="item"></a>
|
<a v-if="item !== page" class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + item"
|
||||||
|
v-text="item"></a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="totalPages !== page" class="page-item">
|
<li v-if="totalPages !== page" class="page-item">
|
||||||
<a class="page-link" :href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page+1)" rel="next" :aria-label="$t('pagination.next')">›</a>
|
<a class="page-link"
|
||||||
|
:href="'/exchange-rates/'+from_code+'/'+to_code+'?page=' + (this.page+1)"
|
||||||
|
rel="next" :aria-label="$t('pagination.next')">›</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="totalPages === page" class="page-item disabled" aria-disabled="true" :aria-label="$t('pagination.next')">
|
<li v-if="totalPages === page" class="page-item disabled" aria-disabled="true"
|
||||||
|
:aria-label="$t('pagination.next')">
|
||||||
<span class="page-link" aria-hidden="true">›</span>
|
<span class="page-link" aria-hidden="true">›</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -160,7 +180,8 @@
|
|||||||
<label for="ffInput_date" class="col-sm-4 control-label"
|
<label for="ffInput_date" class="col-sm-4 control-label"
|
||||||
v-text="$t('form.date')"></label>
|
v-text="$t('form.date')"></label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="date" name="date" id="ffInput_date" :disabled="posting"
|
<input class="form-control" type="date" name="date" id="ffInput_date"
|
||||||
|
:disabled="posting"
|
||||||
autocomplete="off" spellcheck="false" v-model="newDate">
|
autocomplete="off" spellcheck="false" v-model="newDate">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -168,16 +189,19 @@
|
|||||||
<label for="ffInput_rate" class="col-sm-4 control-label"
|
<label for="ffInput_rate" class="col-sm-4 control-label"
|
||||||
v-text="$t('form.rate')"></label>
|
v-text="$t('form.rate')"></label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input class="form-control" type="number" name="rate" id="ffInput_rate" :disabled="posting"
|
<input class="form-control" type="number" name="rate" id="ffInput_rate"
|
||||||
|
:disabled="posting"
|
||||||
autocomplete="off" spellcheck="false" v-model="newRate" step="any">
|
autocomplete="off" spellcheck="false" v-model="newRate" step="any">
|
||||||
<p class="help-block" v-text="$t('firefly.help_rate_form', {from: from_code, to: to_code})">
|
<p class="help-block"
|
||||||
|
v-text="$t('firefly.help_rate_form', {from: from_code, to: to_code})">
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-footer">
|
<div class="box-footer">
|
||||||
<button type="submit" class="nodisablebutton btn pull-right btn-success" v-text="$t('firefly.save_new_rate')"></button>
|
<button type="submit" class="nodisablebutton btn pull-right btn-success"
|
||||||
|
v-text="$t('firefly.save_new_rate')"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -217,9 +241,9 @@ export default {
|
|||||||
mounted() {
|
mounted() {
|
||||||
// get from and to code from URL
|
// get from and to code from URL
|
||||||
this.newDate = format(new Date, 'yyyy-MM-dd');
|
this.newDate = format(new Date, 'yyyy-MM-dd');
|
||||||
let parts = window.location.href.split('/');
|
let parts = window.location.pathname.split('/');
|
||||||
this.from_code = parts[parts.length - 2];
|
this.from_code = parts[parts.length - 2].toUpperCase();
|
||||||
this.to_code = parts[parts.length - 1];
|
this.to_code = parts[parts.length - 1].toUpperCase();
|
||||||
|
|
||||||
const params = new Proxy(new URLSearchParams(window.location.search), {
|
const params = new Proxy(new URLSearchParams(window.location.search), {
|
||||||
get: (searchParams, prop) => searchParams.get(prop),
|
get: (searchParams, prop) => searchParams.get(prop),
|
||||||
@@ -232,8 +256,8 @@ export default {
|
|||||||
this.downloadRates(this.page);
|
this.downloadRates(this.page);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
submitRate: function(e) {
|
submitRate: function (e) {
|
||||||
if(e) e.preventDefault();
|
if (e) e.preventDefault();
|
||||||
this.posting = true;
|
this.posting = true;
|
||||||
|
|
||||||
axios.post("./api/v1/exchange-rates", {
|
axios.post("./api/v1/exchange-rates", {
|
||||||
@@ -260,33 +284,74 @@ export default {
|
|||||||
if (0 === parts.length) {
|
if (0 === parts.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
console.log('These are the parts', parts);
|
||||||
if ('' !== this.rates[index].rate) {
|
if ('' !== this.rates[index].rate) {
|
||||||
|
//console.log('[a] Rate info is', this.rates[index]);
|
||||||
this.updating = true;
|
this.updating = true;
|
||||||
axios.put("./api/v1/exchange-rates/" + this.rates[index].rate_id, {rate: this.rates[index].rate})
|
if (0 === parseInt(this.rates[index].rate_id)) {
|
||||||
.then(() => {
|
console.log('[a] POST, not PUT.');
|
||||||
this.updating = false;
|
axios.post('./api/v1/exchange-rates',
|
||||||
});
|
{
|
||||||
|
from: this.from_code,
|
||||||
|
to: this.to_code,
|
||||||
|
rate: this.rates[index].rate,
|
||||||
|
date: this.rates[index].date_field
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.updating = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (0 !== parseInt(this.rates[index].rate_id)) {
|
||||||
|
console.log('[a] PUT, not POST.');
|
||||||
|
axios.put('./api/v1/exchange-rates/' + this.rates[index].rate_id, {rate: this.rates[index].rate})
|
||||||
|
.then(() => {
|
||||||
|
this.updating = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ('' !== this.rates[index].inverse) {
|
if ('' !== this.rates[index].inverse) {
|
||||||
|
//console.log('[b] Rate info is', this.rates[index]);
|
||||||
this.updating = true;
|
this.updating = true;
|
||||||
axios.put("./api/v1/exchange-rates/" + this.rates[index].inverse_id, {rate: this.rates[index].inverse})
|
if (0 === parseInt(this.rates[index].inverse_id)) {
|
||||||
.then(() => {
|
console.log('[b] POST, not PUT.');
|
||||||
this.updating = false;
|
// post, not put
|
||||||
});
|
axios.post('./api/v1/exchange-rates',
|
||||||
|
{
|
||||||
|
// remember, this is in reverse.
|
||||||
|
from: this.to_code,
|
||||||
|
to: this.from_code,
|
||||||
|
rate: this.rates[index].inverse,
|
||||||
|
date: this.rates[index].date_field
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
this.updating = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (0 !== parseInt(this.rates[index].inverse_id)) {
|
||||||
|
console.log('[b] PUT, not POST.');
|
||||||
|
axios.put('./api/v1/exchange-rates/' + this.rates[index].inverse_id, {rate: this.rates[index].inverse})
|
||||||
|
.then(() => {
|
||||||
|
this.updating = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deleteRate: function (index) {
|
deleteRate: function (index) {
|
||||||
// console.log(this.rates[index].key);
|
// console.log(this.rates[index].key);
|
||||||
let parts = this.spliceKey(this.rates[index].key);
|
let parts = this.spliceKey(this.rates[index].key);
|
||||||
|
|
||||||
if (0 === parts.length) {
|
if (0 === parts.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// console.log(parts);
|
let rateId = parseInt(this.rates[index].rate_id);
|
||||||
|
let inverseId = parseInt(this.rates[index].inverse_id);
|
||||||
// delete A to B
|
// delete A to B
|
||||||
axios.delete("./api/v1/exchange-rates/" + parts.from + '/' + parts.to + '/' + format(parts.date, 'yyyy-MM-dd'));
|
if (rateId > 0) {
|
||||||
// delete B to A.
|
axios.delete('./api/v1/exchange-rates/' + rateId);
|
||||||
axios.delete("./api/v1/exchange-rates/" + parts.to + '/' + parts.from + '/' + format(parts.date, 'yyyy-MM-dd'));
|
}
|
||||||
|
if (inverseId > 0) {
|
||||||
|
axios.delete('./api/v1/exchange-rates/' + inverseId);
|
||||||
|
}
|
||||||
|
|
||||||
this.rates.splice(index, 1);
|
this.rates.splice(index, 1);
|
||||||
},
|
},
|
||||||
@@ -307,6 +372,7 @@ export default {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
downloadCurrencies: function () {
|
downloadCurrencies: function () {
|
||||||
|
console.log('Now downloading currencies.');
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
axios.get("./api/v1/currencies/" + this.from_code).then((response) => {
|
axios.get("./api/v1/currencies/" + this.from_code).then((response) => {
|
||||||
this.from = {
|
this.from = {
|
||||||
@@ -327,31 +393,36 @@ export default {
|
|||||||
downloadRates: function (page) {
|
downloadRates: function (page) {
|
||||||
this.tempRates = {};
|
this.tempRates = {};
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
axios.get("./api/v1/exchange-rates/" + this.from_code + '/' + this.to_code + '?page=' + page).then((response) => {
|
console.log('Now downloading rates.', page);
|
||||||
|
axios.get('./api/v1/exchange-rates/' + this.from_code + '/' + this.to_code + '?page=' + page).then((response) => {
|
||||||
for (let i in response.data.data) {
|
for (let i in response.data.data) {
|
||||||
if (response.data.data.hasOwnProperty(i)) {
|
if (response.data.data.hasOwnProperty(i)) {
|
||||||
|
console.log('Downloaded entry #' + i);
|
||||||
let current = response.data.data[i];
|
let current = response.data.data[i];
|
||||||
let date = new Date(current.attributes.date);
|
let date = new Date(current.attributes.date);
|
||||||
let from_code = current.attributes.from_currency_code;
|
let from_code = current.attributes.from_currency_code.toUpperCase();
|
||||||
let to_code = current.attributes.to_currency_code;
|
let to_code = current.attributes.to_currency_code.toUpperCase();
|
||||||
let rate = current.attributes.rate;
|
let rate = current.attributes.rate;
|
||||||
let inverse = '';
|
let inverse = '';
|
||||||
let rate_id = current.id;
|
let rate_id = current.id;
|
||||||
let inverse_id = '0';
|
let inverse_id = '0';
|
||||||
let key = from_code + '_' + to_code + '_' + format(date, 'yyyy-MM-dd');
|
let key = from_code + '_' + to_code + '_' + format(date, 'yyyy-MM-dd');
|
||||||
// console.log('Key is now "' + key + '"');
|
console.log('Key is now "' + key + '"');
|
||||||
|
|
||||||
// perhaps the returned rate is actually the inverse rate.
|
// perhaps the returned rate is actually the inverse rate.
|
||||||
if (from_code === this.to_code && to_code === this.from_code) {
|
if (from_code === this.to_code && to_code === this.from_code) {
|
||||||
// console.log('Inverse rate found!');
|
// console.log('Inverse rate found!');
|
||||||
key = to_code + '_' + from_code + '_' + format(date, 'yyyy-MM-dd');
|
key = to_code + '_' + from_code + '_' + format(date, 'yyyy-MM-dd');
|
||||||
rate = '';
|
rate = '';
|
||||||
|
// new: set rate id to zero.
|
||||||
|
rate_id = '0';
|
||||||
inverse = current.attributes.rate;
|
inverse = current.attributes.rate;
|
||||||
inverse_id = current.id;
|
inverse_id = current.id;
|
||||||
// console.log('Key updated to "' + key + '"');
|
console.log('Key updated to "' + key + '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.tempRates.hasOwnProperty(key)) {
|
if (!this.tempRates.hasOwnProperty(key)) {
|
||||||
|
console.log('New entry stored');
|
||||||
this.tempRates[key] = {
|
this.tempRates[key] = {
|
||||||
key: key,
|
key: key,
|
||||||
date: date,
|
date: date,
|
||||||
@@ -374,6 +445,7 @@ export default {
|
|||||||
this.tempRates[key].rate = rate;
|
this.tempRates[key].rate = rate;
|
||||||
this.tempRates[key].rate_id = rate_id;
|
this.tempRates[key].rate_id = rate_id;
|
||||||
}
|
}
|
||||||
|
console.log('Found exchange rate #' + this.tempRates[key].rate_id + ' with inverse #' + this.tempRates[key].inverse_id);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,5 +35,5 @@ return [
|
|||||||
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
'currencies-index' => 'Firefly III supports multiple currencies. Although it defaults to the Euro it can be set to the US Dollar and many other currencies. As you can see a small selection of currencies has been included but you can add your own if you wish to. Changing the default currency will not change the currency of existing transactions however: Firefly III supports the use of multiple currencies at the same time.',
|
||||||
'transactions-index' => 'These expenses, deposits and transfers are not particularly imaginative. They have been generated automatically.',
|
'transactions-index' => 'These expenses, deposits and transfers are not particularly imaginative. They have been generated automatically.',
|
||||||
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
|
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
|
||||||
'profile-index' => 'Keep in mind that the demo site resets every four hours. Your access may be revoked at any time. This happens automatically and is not a bug.',
|
'profile-index' => 'Keep in mind that the demo site resets every four hours. Standard user agents (curl, Postman, wget) are blocked. Your access may be revoked at any time. This happens automatically and is not a bug.',
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -825,6 +825,8 @@ return [
|
|||||||
'apply_rule_group_selection' => 'Apply rule group ":title" to a selection of your transactions',
|
'apply_rule_group_selection' => 'Apply rule group ":title" to a selection of your transactions',
|
||||||
'apply_rule_group_selection_intro' => 'Rule groups like ":title" are normally only applied to new or updated transactions, but you can tell Firefly III to run all the rules in this group on a selection of your existing transactions. This can be useful when you have updated a group of rules and you need the changes to be applied to all of your other transactions.',
|
'apply_rule_group_selection_intro' => 'Rule groups like ":title" are normally only applied to new or updated transactions, but you can tell Firefly III to run all the rules in this group on a selection of your existing transactions. This can be useful when you have updated a group of rules and you need the changes to be applied to all of your other transactions.',
|
||||||
'applied_rule_group_selection' => 'Rule group ":title" has been applied to your selection.',
|
'applied_rule_group_selection' => 'Rule group ":title" has been applied to your selection.',
|
||||||
|
'rule_run_after_creation' => 'If you check this box, you get the opportunity to run the rule after it has been created.',
|
||||||
|
'rule_run_after_edit' => 'If you check this box, you get the opportunity to run the rule after it has been updated.',
|
||||||
|
|
||||||
// actions and triggers
|
// actions and triggers
|
||||||
'rule_trigger_store_journal' => 'When a transaction is created',
|
'rule_trigger_store_journal' => 'When a transaction is created',
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ return [
|
|||||||
'opening_balance' => 'Opening balance',
|
'opening_balance' => 'Opening balance',
|
||||||
'tag_mode' => 'Tag mode',
|
'tag_mode' => 'Tag mode',
|
||||||
'virtual_balance' => 'Virtual balance',
|
'virtual_balance' => 'Virtual balance',
|
||||||
|
'run_after_form' => 'Run this rule',
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
'invalid_account_list' => 'Invalid account type list',
|
||||||
'limit_exists' => 'There is already a budget limit (amount) for this budget and currency in the given period.',
|
'limit_exists' => 'There is already a budget limit (amount) for this budget and currency in the given period.',
|
||||||
'invalid_sort_instruction' => 'The sort instruction is invalid for an object of type ":object".',
|
'invalid_sort_instruction' => 'The sort instruction is invalid for an object of type ":object".',
|
||||||
'invalid_sort_instruction_index' => 'The sort instruction at index #:index is invalid for an object of type ":object".',
|
'invalid_sort_instruction_index' => 'The sort instruction at index #:index is invalid for an object of type ":object".',
|
||||||
@@ -32,6 +33,7 @@ return [
|
|||||||
'webhook_account_info' => 'Cannot deliver account information for budget related webhooks.',
|
'webhook_account_info' => 'Cannot deliver account information for budget related webhooks.',
|
||||||
'webhook_transaction_info' => 'Cannot deliver transaction information for budget related webhooks.',
|
'webhook_transaction_info' => 'Cannot deliver transaction information for budget related webhooks.',
|
||||||
'invalid_account_type' => 'A piggy bank can only be linked to asset accounts and liabilities',
|
'invalid_account_type' => 'A piggy bank can only be linked to asset accounts and liabilities',
|
||||||
|
'unique_currency_code' => 'This currency code is already in use',
|
||||||
'invalid_account_currency' => 'This account does not use the currency you have selected',
|
'invalid_account_currency' => 'This account does not use the currency you have selected',
|
||||||
'current_amount_too_much' => 'The combined amount in "current_amount" cannot exceed the "target_amount".',
|
'current_amount_too_much' => 'The combined amount in "current_amount" cannot exceed the "target_amount".',
|
||||||
'filter_must_be_in' => 'Filter ":filter" must be one of: :values',
|
'filter_must_be_in' => 'Filter ":filter" must be one of: :values',
|
||||||
|
|||||||
@@ -90,15 +90,15 @@
|
|||||||
var iAmOwed = '{{ 'i_am_owed_amount'|_|escape('js') }}';
|
var iAmOwed = '{{ 'i_am_owed_amount'|_|escape('js') }}';
|
||||||
var iOwe = '{{ 'i_owe_amount'|_|escape('js') }}';
|
var iOwe = '{{ 'i_owe_amount'|_|escape('js') }}';
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/accounts/create.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/accounts/create.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -122,15 +122,15 @@
|
|||||||
var iAmOwed = '{{ 'i_am_owed_amount'|_|escape('js') }}';
|
var iAmOwed = '{{ 'i_am_owed_amount'|_|escape('js') }}';
|
||||||
var iOwe = '{{ 'i_owe_amount'|_|escape('js') }}';
|
var iOwe = '{{ 'i_owe_amount'|_|escape('js') }}';
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/accounts/edit.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/accounts/edit.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -90,6 +90,6 @@
|
|||||||
<script type="text/javascript" nonce="{{ JS_NONCE }}">
|
<script type="text/javascript" nonce="{{ JS_NONCE }}">
|
||||||
var objectType = '{{ objectType|escape }}';
|
var objectType = '{{ objectType|escape }}';
|
||||||
</script>
|
</script>
|
||||||
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" nonce="{{ JS_NONCE }}" src="v1/js/ff/accounts/index.js?v={{ FF_VERSION }}"></script>
|
<script type="text/javascript" nonce="{{ JS_NONCE }}" src="v1/js/ff/accounts/index.js?v={{ FF_BUILD_TIME }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -133,5 +133,5 @@
|
|||||||
var indexUrl = '{{ indexUrl }}';
|
var indexUrl = '{{ indexUrl }}';
|
||||||
var selectRangeAndBalance = '{{ 'select_range_and_balance'|_|escape('js') }}';
|
var selectRangeAndBalance = '{{ 'select_range_and_balance'|_|escape('js') }}';
|
||||||
</script>
|
</script>
|
||||||
<script src="v1/js/ff/accounts/reconcile.js?v={{ FF_VERSION }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/js/ff/accounts/reconcile.js?v={{ FF_BUILD_TIME }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -219,25 +219,25 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
{% if location %}
|
{% if location %}
|
||||||
<script src="v1/lib/leaflet/leaflet.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/lib/leaflet/leaflet.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/chartjs-plugin-annotation.min.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/chartjs-plugin-annotation.min.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
|
|
||||||
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script src="v1/js/lib/jquery.color-2.1.2.min.js?v={{ FF_VERSION }}" type="text/javascript"
|
<script src="v1/js/lib/jquery.color-2.1.2.min.js?v={{ FF_BUILD_TIME }}" type="text/javascript"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script src="v1/js/ff/accounts/show.js?v={{ FF_VERSION }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/js/ff/accounts/show.js?v={{ FF_BUILD_TIME }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
||||||
{# required for groups.twig #}
|
{# required for groups.twig #}
|
||||||
<script type="text/javascript" src="v1/js/ff/list/groups.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/list/groups.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
{% if location %}
|
{% if location %}
|
||||||
<link rel="stylesheet" href="v1/lib/leaflet/leaflet.css?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}">
|
<link rel="stylesheet" href="v1/lib/leaflet/leaflet.css?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -68,10 +68,10 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/bootstrap-sortable.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_VERSION }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
|
<link rel="stylesheet" href="v1/css/bootstrap-sortable.css?v={{ FF_BUILD_TIME }}" type="text/css" media="all" nonce="{{ JS_NONCE }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -68,17 +68,17 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
<link href="v1/css/bootstrap-tagsinput.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
<link href="v1/css/bootstrap-tagsinput.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet" media="all" nonce="{{ JS_NONCE }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script type="text/javascript" src="v1/js/lib/bootstrap-tagsinput.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/bootstrap-tagsinput.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/bills/create.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/bills/create.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
|
|
||||||
{# auto complete for object groups #}
|
{# auto complete for object groups #}
|
||||||
<script type="text/javascript" src="v1/js/lib/typeahead/typeahead.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/typeahead/typeahead.bundle.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/object-groups/create-edit.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/object-groups/create-edit.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -74,24 +74,24 @@
|
|||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block styles %}
|
{% block styles %}
|
||||||
<link href="v1/css/bootstrap-tagsinput.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet" media="all"
|
<link href="v1/css/bootstrap-tagsinput.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet" media="all"
|
||||||
nonce="{{ JS_NONCE }}">
|
nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.structure.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_VERSION }}" type="text/css" rel="stylesheet"
|
<link href="v1/css/jquery-ui/jquery-ui.theme.min.css?v={{ FF_BUILD_TIME }}" type="text/css" rel="stylesheet"
|
||||||
media="all" nonce="{{ JS_NONCE }}">
|
media="all" nonce="{{ JS_NONCE }}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script type="text/javascript" src="v1/js/lib/bootstrap-tagsinput.min.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/bootstrap-tagsinput.min.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/modernizr-custom.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/accounts/edit.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/accounts/edit.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
|
|
||||||
{# auto complete for object groups #}
|
{# auto complete for object groups #}
|
||||||
<script type="text/javascript" src="v1/js/lib/typeahead/typeahead.bundle.min.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/lib/typeahead/typeahead.bundle.min.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/object-groups/create-edit.js?v={{ FF_VERSION }}"
|
<script type="text/javascript" src="v1/js/ff/object-groups/create-edit.js?v={{ FF_BUILD_TIME }}"
|
||||||
nonce="{{ JS_NONCE }}"></script>
|
nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -41,6 +41,6 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_VERSION }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
<script src="v1/js/lib/jquery-ui.min.js?v={{ FF_BUILD_TIME }}" type="text/javascript" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/bills/index.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/bills/index.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -188,10 +188,10 @@
|
|||||||
var billCurrencySymbol = "{{ convertToPrimary ? primaryCurrency.symbol : object.data.currency.symbol }}";
|
var billCurrencySymbol = "{{ convertToPrimary ? primaryCurrency.symbol : object.data.currency.symbol }}";
|
||||||
var billUrl = '{{ route('chart.bill.single', [object.data.id]) }}';
|
var billUrl = '{{ route('chart.bill.single', [object.data.id]) }}';
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/lib/Chart.bundle.min.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/charts.defaults.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/charts.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
<script type="text/javascript" src="v1/js/ff/bills/show.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/bills/show.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{# required for groups.twig #}
|
{# required for groups.twig #}
|
||||||
<script type="text/javascript" src="v1/js/ff/list/groups.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/list/groups.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -60,5 +60,5 @@
|
|||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script type="text/javascript" src="v1/js/ff/budgets/create.js?v={{ FF_VERSION }}" nonce="{{ JS_NONCE }}"></script>
|
<script type="text/javascript" src="v1/js/ff/budgets/create.js?v={{ FF_BUILD_TIME }}" nonce="{{ JS_NONCE }}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user