mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-30 02:26:58 +00:00
Merge branch 'develop' into issues/509
# Conflicts: # public/js/ff/transactions/list.js
This commit is contained in:
@@ -1,5 +1,24 @@
|
||||
# 4.6.1.1
|
||||
|
||||
# 4.6.12
|
||||
- Support for Indonesian.
|
||||
- New report, see [issue 384](https://github.com/firefly-iii/firefly-iii/issues/384)
|
||||
- [Issue 964](https://github.com/firefly-iii/firefly-iii/issues/964) as suggested by [gavu](https://github.com/gavu)
|
||||
- Greatly improved Docker support and documentation.
|
||||
- [Issue 1046](https://github.com/firefly-iii/firefly-iii/issues/1046), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1047](https://github.com/firefly-iii/firefly-iii/issues/1047), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1048](https://github.com/firefly-iii/firefly-iii/issues/1048), as reported by [webence](https://github.com/webence)
|
||||
- [Issue 1049](https://github.com/firefly-iii/firefly-iii/issues/1049), as reported by [nicoschreiner](https://github.com/nicoschreiner)
|
||||
- [Issue 1015](https://github.com/firefly-iii/firefly-iii/issues/1015), as reporterd by a user on Tweakers.net
|
||||
- [Issue 1056](https://github.com/firefly-iii/firefly-iii/issues/1056), as reported by [repercussion](https://github.com/repercussion)
|
||||
- [Issue 1061](https://github.com/firefly-iii/firefly-iii/issues/1061), as reported by [Meizikyn](https://github.com/Meizikyn)
|
||||
- [Issue 1045](https://github.com/firefly-iii/firefly-iii/issues/1045), as reported by [gavu](https://github.com/gavu)
|
||||
- First code for [issue 1040](https://github.com/firefly-iii/firefly-iii/issues/1040) ([simonsmiley](https://github.com/simonsmiley))
|
||||
- [Issue 1059](https://github.com/firefly-iii/firefly-iii/issues/1059), as reported by [4oo4](https://github.com/4oo4)
|
||||
- [Issue 1063](https://github.com/firefly-iii/firefly-iii/issues/1063), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1064](https://github.com/firefly-iii/firefly-iii/issues/1064), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1066](https://github.com/firefly-iii/firefly-iii/issues/1066), reported by [wtercato](https://github.com/wtercato)
|
||||
|
||||
# 4.6.1.1
|
||||
- Import routine can scan for matching bills, [issue 956](https://github.com/firefly-iii/firefly-iii/issues/956)
|
||||
- Import will no longer scan for rules, this has become optional. Originally suggested in [issue 956](https://github.com/firefly-iii/firefly-iii/issues/956) by [gavu](https://github.com/gavu)
|
||||
- [Issue 1033](https://github.com/firefly-iii/firefly-iii/issues/1033), as reported by [Jumanjii](https://github.com/Jumanjii)
|
||||
|
@@ -208,14 +208,6 @@ opt/app/.env.heroku
|
||||
opt/app/.env.sandstorm
|
||||
opt/app/.gitattributes
|
||||
opt/app/.sandstorm/.gitattributes
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/action_provision
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/action_set_name
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/creator_uid
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/id
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/index_uuid
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/private_key
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/synced_folders
|
||||
opt/app/.sandstorm/.vagrant/machines/default/virtualbox/vagrant_cwd
|
||||
opt/app/.sandstorm/Vagrantfile
|
||||
opt/app/.sandstorm/app-graphics/firefly-iii-128.png
|
||||
opt/app/.sandstorm/app-graphics/firefly-iii-150.png
|
||||
@@ -260,6 +252,7 @@ opt/app/app/Events/AdminRequestedTestMessage.php
|
||||
opt/app/app/Events/Event.php
|
||||
opt/app/app/Events/RegisteredUser.php
|
||||
opt/app/app/Events/RequestedNewPassword.php
|
||||
opt/app/app/Events/RequestedVersionCheckStatus.php
|
||||
opt/app/app/Events/StoredTransactionJournal.php
|
||||
opt/app/app/Events/UpdatedTransactionJournal.php
|
||||
opt/app/app/Events/UserChangedEmail.php
|
||||
@@ -279,6 +272,9 @@ opt/app/app/Export/Exporter/ExporterInterface.php
|
||||
opt/app/app/Export/ProcessorInterface.php
|
||||
opt/app/app/Generator/Chart/Basic/ChartJsGenerator.php
|
||||
opt/app/app/Generator/Chart/Basic/GeneratorInterface.php
|
||||
opt/app/app/Generator/Report/Account/MonthReportGenerator.php
|
||||
opt/app/app/Generator/Report/Account/MultiYearReportGenerator.php
|
||||
opt/app/app/Generator/Report/Account/YearReportGenerator.php
|
||||
opt/app/app/Generator/Report/Audit/MonthReportGenerator.php
|
||||
opt/app/app/Generator/Report/Audit/MultiYearReportGenerator.php
|
||||
opt/app/app/Generator/Report/Audit/YearReportGenerator.php
|
||||
@@ -301,6 +297,7 @@ opt/app/app/Handlers/Events/AdminEventHandler.php
|
||||
opt/app/app/Handlers/Events/StoredJournalEventHandler.php
|
||||
opt/app/app/Handlers/Events/UpdatedJournalEventHandler.php
|
||||
opt/app/app/Handlers/Events/UserEventHandler.php
|
||||
opt/app/app/Handlers/Events/VersionCheckEventHandler.php
|
||||
opt/app/app/Helpers/Attachments/AttachmentHelper.php
|
||||
opt/app/app/Helpers/Attachments/AttachmentHelperInterface.php
|
||||
opt/app/app/Helpers/Chart/MetaPieChart.php
|
||||
@@ -339,6 +336,7 @@ opt/app/app/Http/Controllers/AccountController.php
|
||||
opt/app/app/Http/Controllers/Admin/ConfigurationController.php
|
||||
opt/app/app/Http/Controllers/Admin/HomeController.php
|
||||
opt/app/app/Http/Controllers/Admin/LinkController.php
|
||||
opt/app/app/Http/Controllers/Admin/UpdateController.php
|
||||
opt/app/app/Http/Controllers/Admin/UserController.php
|
||||
opt/app/app/Http/Controllers/AttachmentController.php
|
||||
opt/app/app/Http/Controllers/Auth/ForgotPasswordController.php
|
||||
@@ -355,6 +353,7 @@ opt/app/app/Http/Controllers/Chart/BudgetController.php
|
||||
opt/app/app/Http/Controllers/Chart/BudgetReportController.php
|
||||
opt/app/app/Http/Controllers/Chart/CategoryController.php
|
||||
opt/app/app/Http/Controllers/Chart/CategoryReportController.php
|
||||
opt/app/app/Http/Controllers/Chart/ExpenseReportController.php
|
||||
opt/app/app/Http/Controllers/Chart/PiggyBankController.php
|
||||
opt/app/app/Http/Controllers/Chart/ReportController.php
|
||||
opt/app/app/Http/Controllers/Chart/TagReportController.php
|
||||
@@ -363,9 +362,10 @@ opt/app/app/Http/Controllers/CurrencyController.php
|
||||
opt/app/app/Http/Controllers/ExportController.php
|
||||
opt/app/app/Http/Controllers/HelpController.php
|
||||
opt/app/app/Http/Controllers/HomeController.php
|
||||
opt/app/app/Http/Controllers/Import/BankController.php
|
||||
opt/app/app/Http/Controllers/Import/FileController.php
|
||||
opt/app/app/Http/Controllers/ImportController.php
|
||||
opt/app/app/Http/Controllers/Import/ConfigurationController.php
|
||||
opt/app/app/Http/Controllers/Import/IndexController.php
|
||||
opt/app/app/Http/Controllers/Import/PrerequisitesController.php
|
||||
opt/app/app/Http/Controllers/Import/StatusController.php
|
||||
opt/app/app/Http/Controllers/JavascriptController.php
|
||||
opt/app/app/Http/Controllers/Json/AutoCompleteController.php
|
||||
opt/app/app/Http/Controllers/Json/BoxController.php
|
||||
@@ -382,6 +382,7 @@ opt/app/app/Http/Controllers/Report/AccountController.php
|
||||
opt/app/app/Http/Controllers/Report/BalanceController.php
|
||||
opt/app/app/Http/Controllers/Report/BudgetController.php
|
||||
opt/app/app/Http/Controllers/Report/CategoryController.php
|
||||
opt/app/app/Http/Controllers/Report/ExpenseController.php
|
||||
opt/app/app/Http/Controllers/Report/OperationsController.php
|
||||
opt/app/app/Http/Controllers/ReportController.php
|
||||
opt/app/app/Http/Controllers/RuleController.php
|
||||
@@ -400,7 +401,8 @@ opt/app/app/Http/Middleware/AuthenticateTwoFactor.php
|
||||
opt/app/app/Http/Middleware/Binder.php
|
||||
opt/app/app/Http/Middleware/EncryptCookies.php
|
||||
opt/app/app/Http/Middleware/IsAdmin.php
|
||||
opt/app/app/Http/Middleware/IsLimitedUser.php
|
||||
opt/app/app/Http/Middleware/IsDemoUser.php
|
||||
opt/app/app/Http/Middleware/IsSandStormUser.php
|
||||
opt/app/app/Http/Middleware/Range.php
|
||||
opt/app/app/Http/Middleware/RedirectIfAuthenticated.php
|
||||
opt/app/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php
|
||||
@@ -420,7 +422,6 @@ opt/app/app/Http/Requests/CurrencyFormRequest.php
|
||||
opt/app/app/Http/Requests/DeleteAccountFormRequest.php
|
||||
opt/app/app/Http/Requests/EmailFormRequest.php
|
||||
opt/app/app/Http/Requests/ExportFormRequest.php
|
||||
opt/app/app/Http/Requests/ImportUploadRequest.php
|
||||
opt/app/app/Http/Requests/JournalFormRequest.php
|
||||
opt/app/app/Http/Requests/JournalLinkRequest.php
|
||||
opt/app/app/Http/Requests/LinkTypeFormRequest.php
|
||||
@@ -441,15 +442,15 @@ opt/app/app/Http/Requests/TestRuleFormRequest.php
|
||||
opt/app/app/Http/Requests/TokenFormRequest.php
|
||||
opt/app/app/Http/Requests/UserFormRequest.php
|
||||
opt/app/app/Http/Requests/UserRegistrationRequest.php
|
||||
opt/app/app/Http/breadcrumbs.php
|
||||
opt/app/app/Import/Configurator/ConfiguratorInterface.php
|
||||
opt/app/app/Import/Configurator/CsvConfigurator.php
|
||||
opt/app/app/Import/Configuration/ConfiguratorInterface.php
|
||||
opt/app/app/Import/Configuration/FileConfigurator.php
|
||||
opt/app/app/Import/Configuration/SpectreConfigurator.php
|
||||
opt/app/app/Import/Converter/Amount.php
|
||||
opt/app/app/Import/Converter/AmountCredit.php
|
||||
opt/app/app/Import/Converter/AmountDebet.php
|
||||
opt/app/app/Import/Converter/AmountDebit.php
|
||||
opt/app/app/Import/Converter/ConverterInterface.php
|
||||
opt/app/app/Import/Converter/INGDebetCredit.php
|
||||
opt/app/app/Import/Converter/RabobankDebetCredit.php
|
||||
opt/app/app/Import/Converter/INGDebitCredit.php
|
||||
opt/app/app/Import/Converter/RabobankDebitCredit.php
|
||||
opt/app/app/Import/FileProcessor/CsvProcessor.php
|
||||
opt/app/app/Import/FileProcessor/FileProcessorInterface.php
|
||||
opt/app/app/Import/Logging/CommandHandler.php
|
||||
@@ -472,7 +473,13 @@ opt/app/app/Import/Object/ImportBudget.php
|
||||
opt/app/app/Import/Object/ImportCategory.php
|
||||
opt/app/app/Import/Object/ImportCurrency.php
|
||||
opt/app/app/Import/Object/ImportJournal.php
|
||||
opt/app/app/Import/Routine/ImportRoutine.php
|
||||
opt/app/app/Import/Prerequisites/BunqPrerequisites.php
|
||||
opt/app/app/Import/Prerequisites/FilePrerequisites.php
|
||||
opt/app/app/Import/Prerequisites/PrerequisitesInterface.php
|
||||
opt/app/app/Import/Prerequisites/SpectrePrerequisites.php
|
||||
opt/app/app/Import/Routine/FileRoutine.php
|
||||
opt/app/app/Import/Routine/RoutineInterface.php
|
||||
opt/app/app/Import/Routine/SpectreRoutine.php
|
||||
opt/app/app/Import/Specifics/AbnAmroDescription.php
|
||||
opt/app/app/Import/Specifics/IngDescription.php
|
||||
opt/app/app/Import/Specifics/PresidentsChoice.php
|
||||
@@ -612,8 +619,18 @@ opt/app/app/Services/Bunq/Token/InstallationToken.php
|
||||
opt/app/app/Services/Bunq/Token/SessionToken.php
|
||||
opt/app/app/Services/Currency/ExchangeRateInterface.php
|
||||
opt/app/app/Services/Currency/FixerIO.php
|
||||
opt/app/app/Services/Github/Object/GithubObject.php
|
||||
opt/app/app/Services/Github/Object/Release.php
|
||||
opt/app/app/Services/Github/Request/GithubRequest.php
|
||||
opt/app/app/Services/Github/Request/UpdateRequest.php
|
||||
opt/app/app/Services/Password/PwndVerifier.php
|
||||
opt/app/app/Services/Password/Verifier.php
|
||||
opt/app/app/Services/Spectre/Object/Customer.php
|
||||
opt/app/app/Services/Spectre/Object/SpectreObject.php
|
||||
opt/app/app/Services/Spectre/Object/Token.php
|
||||
opt/app/app/Services/Spectre/Request/CreateTokenRequest.php
|
||||
opt/app/app/Services/Spectre/Request/NewCustomerRequest.php
|
||||
opt/app/app/Services/Spectre/Request/SpectreRequest.php
|
||||
opt/app/app/Support/Amount.php
|
||||
opt/app/app/Support/Binder/AccountList.php
|
||||
opt/app/app/Support/Binder/BinderInterface.php
|
||||
@@ -637,13 +654,12 @@ opt/app/app/Support/Facades/Preferences.php
|
||||
opt/app/app/Support/Facades/Steam.php
|
||||
opt/app/app/Support/FireflyConfig.php
|
||||
opt/app/app/Support/Import/Configuration/ConfigurationInterface.php
|
||||
opt/app/app/Support/Import/Configuration/Csv/Initial.php
|
||||
opt/app/app/Support/Import/Configuration/Csv/Map.php
|
||||
opt/app/app/Support/Import/Configuration/Csv/Roles.php
|
||||
opt/app/app/Support/Import/Configuration/File/Initial.php
|
||||
opt/app/app/Support/Import/Configuration/File/Map.php
|
||||
opt/app/app/Support/Import/Configuration/File/Roles.php
|
||||
opt/app/app/Support/Import/Configuration/File/Upload.php
|
||||
opt/app/app/Support/Import/Information/BunqInformation.php
|
||||
opt/app/app/Support/Import/Information/InformationInterface.php
|
||||
opt/app/app/Support/Import/Prerequisites/BunqPrerequisites.php
|
||||
opt/app/app/Support/Import/Prerequisites/PrerequisitesInterface.php
|
||||
opt/app/app/Support/Models/TransactionJournalTrait.php
|
||||
opt/app/app/Support/Navigation.php
|
||||
opt/app/app/Support/Preferences.php
|
||||
@@ -730,12 +746,15 @@ opt/app/composer.lock
|
||||
opt/app/composer.phar
|
||||
opt/app/config/app.php
|
||||
opt/app/config/auth.php
|
||||
opt/app/config/breadcrumbs.php
|
||||
opt/app/config/broadcasting.php
|
||||
opt/app/config/cache.php
|
||||
opt/app/config/csv.php
|
||||
opt/app/config/database.php
|
||||
opt/app/config/filesystems.php
|
||||
opt/app/config/firefly.php
|
||||
opt/app/config/google2fa.php
|
||||
opt/app/config/import.php
|
||||
opt/app/config/intro.php
|
||||
opt/app/config/mail.php
|
||||
opt/app/config/queue.php
|
||||
@@ -766,9 +785,6 @@ opt/app/database/seeds/LinkTypeSeeder.php
|
||||
opt/app/database/seeds/PermissionSeeder.php
|
||||
opt/app/database/seeds/TransactionCurrencySeeder.php
|
||||
opt/app/database/seeds/TransactionTypeSeeder.php
|
||||
opt/app/docker-compose.dockerhub.yml
|
||||
opt/app/docker-compose.override.yml
|
||||
opt/app/docker-compose.prod.yml
|
||||
opt/app/docker-compose.yml
|
||||
opt/app/nginx_app.conf
|
||||
opt/app/phpunit.coverage.xml
|
||||
@@ -850,6 +866,10 @@ opt/app/public/images/image.png
|
||||
opt/app/public/images/loading-small.gif
|
||||
opt/app/public/images/loading-wide.gif
|
||||
opt/app/public/images/logos/bunq.png
|
||||
opt/app/public/images/logos/csv.png
|
||||
opt/app/public/images/logos/file.png
|
||||
opt/app/public/images/logos/plaid.png
|
||||
opt/app/public/images/logos/spectre.png
|
||||
opt/app/public/images/page_green.png
|
||||
opt/app/public/images/page_white_acrobat.png
|
||||
opt/app/public/index.php
|
||||
@@ -858,6 +878,7 @@ opt/app/public/js/ff/accounts/edit-reconciliation.js
|
||||
opt/app/public/js/ff/accounts/edit.js
|
||||
opt/app/public/js/ff/accounts/reconcile.js
|
||||
opt/app/public/js/ff/accounts/show.js
|
||||
opt/app/public/js/ff/admin/update/index.js
|
||||
opt/app/public/js/ff/bills/create.js
|
||||
opt/app/public/js/ff/bills/edit.js
|
||||
opt/app/public/js/ff/bills/show.js
|
||||
@@ -880,17 +901,16 @@ opt/app/public/js/ff/piggy-banks/edit.js
|
||||
opt/app/public/js/ff/piggy-banks/index.js
|
||||
opt/app/public/js/ff/piggy-banks/show.js
|
||||
opt/app/public/js/ff/preferences/index.js
|
||||
opt/app/public/js/ff/reports/account/month.js
|
||||
opt/app/public/js/ff/reports/all.js
|
||||
opt/app/public/js/ff/reports/audit/all.js
|
||||
opt/app/public/js/ff/reports/budget/all.js
|
||||
opt/app/public/js/ff/reports/budget/month.js
|
||||
opt/app/public/js/ff/reports/category/all.js
|
||||
opt/app/public/js/ff/reports/category/month.js
|
||||
opt/app/public/js/ff/reports/default/all.js
|
||||
opt/app/public/js/ff/reports/default/month.js
|
||||
opt/app/public/js/ff/reports/default/multi-year.js
|
||||
opt/app/public/js/ff/reports/default/year.js
|
||||
opt/app/public/js/ff/reports/index.js
|
||||
opt/app/public/js/ff/reports/tag/all.js
|
||||
opt/app/public/js/ff/reports/tag/month.js
|
||||
opt/app/public/js/ff/rules/create-edit.js
|
||||
opt/app/public/js/ff/rules/index.js
|
||||
@@ -975,6 +995,7 @@ opt/app/resources/lang/de_DE/demo.php
|
||||
opt/app/resources/lang/de_DE/firefly.php
|
||||
opt/app/resources/lang/de_DE/form.php
|
||||
opt/app/resources/lang/de_DE/help.php
|
||||
opt/app/resources/lang/de_DE/import.php
|
||||
opt/app/resources/lang/de_DE/intro.php
|
||||
opt/app/resources/lang/de_DE/list.php
|
||||
opt/app/resources/lang/de_DE/pagination.php
|
||||
@@ -988,6 +1009,7 @@ opt/app/resources/lang/en_US/csv.php
|
||||
opt/app/resources/lang/en_US/demo.php
|
||||
opt/app/resources/lang/en_US/firefly.php
|
||||
opt/app/resources/lang/en_US/form.php
|
||||
opt/app/resources/lang/en_US/import.php
|
||||
opt/app/resources/lang/en_US/intro.php
|
||||
opt/app/resources/lang/en_US/list.php
|
||||
opt/app/resources/lang/en_US/pagination.php
|
||||
@@ -1002,11 +1024,26 @@ opt/app/resources/lang/fr_FR/demo.php
|
||||
opt/app/resources/lang/fr_FR/firefly.php
|
||||
opt/app/resources/lang/fr_FR/form.php
|
||||
opt/app/resources/lang/fr_FR/help.php
|
||||
opt/app/resources/lang/fr_FR/import.php
|
||||
opt/app/resources/lang/fr_FR/intro.php
|
||||
opt/app/resources/lang/fr_FR/list.php
|
||||
opt/app/resources/lang/fr_FR/pagination.php
|
||||
opt/app/resources/lang/fr_FR/passwords.php
|
||||
opt/app/resources/lang/fr_FR/validation.php
|
||||
opt/app/resources/lang/id_ID/auth.php
|
||||
opt/app/resources/lang/id_ID/bank.php
|
||||
opt/app/resources/lang/id_ID/breadcrumbs.php
|
||||
opt/app/resources/lang/id_ID/config.php
|
||||
opt/app/resources/lang/id_ID/csv.php
|
||||
opt/app/resources/lang/id_ID/demo.php
|
||||
opt/app/resources/lang/id_ID/firefly.php
|
||||
opt/app/resources/lang/id_ID/form.php
|
||||
opt/app/resources/lang/id_ID/import.php
|
||||
opt/app/resources/lang/id_ID/intro.php
|
||||
opt/app/resources/lang/id_ID/list.php
|
||||
opt/app/resources/lang/id_ID/pagination.php
|
||||
opt/app/resources/lang/id_ID/passwords.php
|
||||
opt/app/resources/lang/id_ID/validation.php
|
||||
opt/app/resources/lang/nl_NL/auth.php
|
||||
opt/app/resources/lang/nl_NL/bank.php
|
||||
opt/app/resources/lang/nl_NL/breadcrumbs.php
|
||||
@@ -1016,6 +1053,7 @@ opt/app/resources/lang/nl_NL/demo.php
|
||||
opt/app/resources/lang/nl_NL/firefly.php
|
||||
opt/app/resources/lang/nl_NL/form.php
|
||||
opt/app/resources/lang/nl_NL/help.php
|
||||
opt/app/resources/lang/nl_NL/import.php
|
||||
opt/app/resources/lang/nl_NL/intro.php
|
||||
opt/app/resources/lang/nl_NL/list.php
|
||||
opt/app/resources/lang/nl_NL/pagination.php
|
||||
@@ -1030,6 +1068,7 @@ opt/app/resources/lang/pl_PL/demo.php
|
||||
opt/app/resources/lang/pl_PL/firefly.php
|
||||
opt/app/resources/lang/pl_PL/form.php
|
||||
opt/app/resources/lang/pl_PL/help.php
|
||||
opt/app/resources/lang/pl_PL/import.php
|
||||
opt/app/resources/lang/pl_PL/intro.php
|
||||
opt/app/resources/lang/pl_PL/list.php
|
||||
opt/app/resources/lang/pl_PL/pagination.php
|
||||
@@ -1057,6 +1096,7 @@ opt/app/resources/views/admin/link/delete.twig
|
||||
opt/app/resources/views/admin/link/edit.twig
|
||||
opt/app/resources/views/admin/link/index.twig
|
||||
opt/app/resources/views/admin/link/show.twig
|
||||
opt/app/resources/views/admin/update/index.twig
|
||||
opt/app/resources/views/admin/users/delete.twig
|
||||
opt/app/resources/views/admin/users/edit.twig
|
||||
opt/app/resources/views/admin/users/index.twig
|
||||
@@ -1151,13 +1191,17 @@ opt/app/resources/views/form/text.twig
|
||||
opt/app/resources/views/form/textarea.twig
|
||||
opt/app/resources/views/import/bank/form.twig
|
||||
opt/app/resources/views/import/bunq/prerequisites.twig
|
||||
opt/app/resources/views/import/csv/initial.twig
|
||||
opt/app/resources/views/import/csv/map.twig
|
||||
opt/app/resources/views/import/csv/roles.twig
|
||||
opt/app/resources/views/import/file/finished.twig
|
||||
opt/app/resources/views/import/file/index.twig
|
||||
opt/app/resources/views/import/file/status.twig
|
||||
opt/app/resources/views/import/file/initial.twig
|
||||
opt/app/resources/views/import/file/map.twig
|
||||
opt/app/resources/views/import/file/roles.twig
|
||||
opt/app/resources/views/import/file/upload.twig
|
||||
opt/app/resources/views/import/index.twig
|
||||
opt/app/resources/views/import/spectre/input-fields.twig
|
||||
opt/app/resources/views/import/spectre/prerequisites.twig
|
||||
opt/app/resources/views/import/spectre/redirect.twig
|
||||
opt/app/resources/views/import/spectre/select-country.twig
|
||||
opt/app/resources/views/import/spectre/select-provider.twig
|
||||
opt/app/resources/views/import/status.twig
|
||||
opt/app/resources/views/index.twig
|
||||
opt/app/resources/views/javascript/accounts.twig
|
||||
opt/app/resources/views/javascript/currencies.twig
|
||||
@@ -1204,6 +1248,7 @@ opt/app/resources/views/profile/change-email.twig
|
||||
opt/app/resources/views/profile/change-password.twig
|
||||
opt/app/resources/views/profile/delete-account.twig
|
||||
opt/app/resources/views/profile/index.twig
|
||||
opt/app/resources/views/reports/account/report.twig
|
||||
opt/app/resources/views/reports/audit/report.twig
|
||||
opt/app/resources/views/reports/budget/month.twig
|
||||
opt/app/resources/views/reports/category/month.twig
|
||||
@@ -1211,6 +1256,7 @@ opt/app/resources/views/reports/default/month.twig
|
||||
opt/app/resources/views/reports/default/multi-year.twig
|
||||
opt/app/resources/views/reports/default/year.twig
|
||||
opt/app/resources/views/reports/index.twig
|
||||
opt/app/resources/views/reports/options/account.twig
|
||||
opt/app/resources/views/reports/options/budget.twig
|
||||
opt/app/resources/views/reports/options/category.twig
|
||||
opt/app/resources/views/reports/options/no-options.twig
|
||||
@@ -1222,10 +1268,14 @@ opt/app/resources/views/reports/partials/budget-period.twig
|
||||
opt/app/resources/views/reports/partials/budgets.twig
|
||||
opt/app/resources/views/reports/partials/categories.twig
|
||||
opt/app/resources/views/reports/partials/category-period.twig
|
||||
opt/app/resources/views/reports/partials/exp-budgets.twig
|
||||
opt/app/resources/views/reports/partials/exp-categories.twig
|
||||
opt/app/resources/views/reports/partials/exp-not-grouped.twig
|
||||
opt/app/resources/views/reports/partials/income-expenses.twig
|
||||
opt/app/resources/views/reports/partials/journals-audit.twig
|
||||
opt/app/resources/views/reports/partials/operations.twig
|
||||
opt/app/resources/views/reports/partials/tags.twig
|
||||
opt/app/resources/views/reports/partials/top-transactions.twig
|
||||
opt/app/resources/views/reports/tag/month.twig
|
||||
opt/app/resources/views/rules/index.twig
|
||||
opt/app/resources/views/rules/partials/action.twig
|
||||
@@ -1246,6 +1296,7 @@ opt/app/resources/views/tags/delete.twig
|
||||
opt/app/resources/views/tags/edit.twig
|
||||
opt/app/resources/views/tags/index.twig
|
||||
opt/app/resources/views/tags/show.twig
|
||||
opt/app/resources/views/test/test.twig
|
||||
opt/app/resources/views/transactions/convert.twig
|
||||
opt/app/resources/views/transactions/index.twig
|
||||
opt/app/resources/views/transactions/links/delete.twig
|
||||
@@ -1257,6 +1308,7 @@ opt/app/resources/views/transactions/single/delete.twig
|
||||
opt/app/resources/views/transactions/single/edit.twig
|
||||
opt/app/resources/views/transactions/split/edit.twig
|
||||
opt/app/routes/api.php
|
||||
opt/app/routes/breadcrumbs.php
|
||||
opt/app/routes/channels.php
|
||||
opt/app/routes/console.php
|
||||
opt/app/routes/web.php
|
||||
@@ -1325,14 +1377,6 @@ opt/app/vendor/bacon/bacon-qr-code/tests/BaconQrCode/Renderer/Text/TextTest.php
|
||||
opt/app/vendor/bacon/bacon-qr-code/tests/bootstrap.php
|
||||
opt/app/vendor/bin/commonmark
|
||||
opt/app/vendor/bin/doctrine-dbal
|
||||
opt/app/vendor/christian-riesen/base32/LICENSE
|
||||
opt/app/vendor/christian-riesen/base32/README.md
|
||||
opt/app/vendor/christian-riesen/base32/build.xml
|
||||
opt/app/vendor/christian-riesen/base32/composer.json
|
||||
opt/app/vendor/christian-riesen/base32/phpunit.xml.dist
|
||||
opt/app/vendor/christian-riesen/base32/src/Base32.php
|
||||
opt/app/vendor/christian-riesen/base32/tests/Base32Test.php
|
||||
opt/app/vendor/christian-riesen/base32/tests/bootstrap.php
|
||||
opt/app/vendor/composer/ClassLoader.php
|
||||
opt/app/vendor/composer/LICENSE
|
||||
opt/app/vendor/composer/autoload_classmap.php
|
||||
@@ -1342,37 +1386,24 @@ opt/app/vendor/composer/autoload_psr4.php
|
||||
opt/app/vendor/composer/autoload_real.php
|
||||
opt/app/vendor/composer/autoload_static.php
|
||||
opt/app/vendor/composer/installed.json
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/.editorconfig
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/README.md
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/RELEASE-CHECKLIST.md
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/composer.json
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/config/breadcrumbs.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/scripts/test-coverage.sh
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/CurrentRoute.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Exception.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Facade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Generator.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Manager.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/ServiceProvider.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/View.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/TestCase.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/bootstrap.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/fixtures/CustomServiceProvider.html
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/fixtures/DependantServiceProvider.html
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/fixtures/bootstrap2.html
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/fixtures/bootstrap3.html
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/fixtures/integration.html
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/integration/CustomServiceProviderTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/integration/DependantServiceProviderErrorTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/integration/DependantServiceProviderTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/integration/IntegrationTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/unit/CurrentRouteTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/unit/FacadeTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/unit/GeneratorTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/unit/ManagerTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/tests/unit/ViewTest.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/BreadcrumbsException.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/BreadcrumbsGenerator.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/BreadcrumbsManager.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/BreadcrumbsServiceProvider.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Exceptions/DuplicateBreadcrumbException.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Exceptions/InvalidBreadcrumbException.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Exceptions/UnnamedRouteException.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Exceptions/ViewNotSetException.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/src/Facades/Breadcrumbs.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/bootstrap2.blade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/bootstrap3.blade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/bootstrap4.blade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/bulma.blade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/foundation6.blade.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/json-ld.php
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/views/materialize.blade.php
|
||||
opt/app/vendor/doctrine/annotations/CHANGELOG.md
|
||||
opt/app/vendor/doctrine/annotations/LICENSE
|
||||
opt/app/vendor/doctrine/annotations/README.md
|
||||
@@ -2188,6 +2219,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Events/composer.json
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Filesystem/Cache.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php
|
||||
@@ -2663,6 +2695,7 @@ opt/app/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/Optional.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/ProcessUtils.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/Str.php
|
||||
opt/app/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php
|
||||
@@ -2865,23 +2898,29 @@ opt/app/vendor/league/commonmark/src/Util/Html5Entities.php
|
||||
opt/app/vendor/league/commonmark/src/Util/LinkParserHelper.php
|
||||
opt/app/vendor/league/commonmark/src/Util/RegexHelper.php
|
||||
opt/app/vendor/league/commonmark/src/Util/UrlEncoder.php
|
||||
opt/app/vendor/league/commonmark/src/Util/Xml.php
|
||||
opt/app/vendor/league/csv/LICENSE
|
||||
opt/app/vendor/league/csv/autoload.php
|
||||
opt/app/vendor/league/csv/composer.json
|
||||
opt/app/vendor/league/csv/src/AbstractCsv.php
|
||||
opt/app/vendor/league/csv/src/Config/Controls.php
|
||||
opt/app/vendor/league/csv/src/Config/Output.php
|
||||
opt/app/vendor/league/csv/src/Exception/InvalidRowException.php
|
||||
opt/app/vendor/league/csv/src/Modifier/MapIterator.php
|
||||
opt/app/vendor/league/csv/src/Modifier/QueryFilter.php
|
||||
opt/app/vendor/league/csv/src/Modifier/RowFilter.php
|
||||
opt/app/vendor/league/csv/src/Modifier/StreamFilter.php
|
||||
opt/app/vendor/league/csv/src/Modifier/StreamIterator.php
|
||||
opt/app/vendor/league/csv/src/Plugin/ColumnConsistencyValidator.php
|
||||
opt/app/vendor/league/csv/src/Plugin/ForbiddenNullValuesValidator.php
|
||||
opt/app/vendor/league/csv/src/Plugin/SkipNullValuesFormatter.php
|
||||
opt/app/vendor/league/csv/src/ByteSequence.php
|
||||
opt/app/vendor/league/csv/src/CannotInsertRecord.php
|
||||
opt/app/vendor/league/csv/src/CharsetConverter.php
|
||||
opt/app/vendor/league/csv/src/ColumnConsistency.php
|
||||
opt/app/vendor/league/csv/src/EncloseField.php
|
||||
opt/app/vendor/league/csv/src/EscapeFormula.php
|
||||
opt/app/vendor/league/csv/src/Exception.php
|
||||
opt/app/vendor/league/csv/src/HTMLConverter.php
|
||||
opt/app/vendor/league/csv/src/MapIterator.php
|
||||
opt/app/vendor/league/csv/src/RFC4180Field.php
|
||||
opt/app/vendor/league/csv/src/Reader.php
|
||||
opt/app/vendor/league/csv/src/ResultSet.php
|
||||
opt/app/vendor/league/csv/src/Statement.php
|
||||
opt/app/vendor/league/csv/src/Stream.php
|
||||
opt/app/vendor/league/csv/src/Writer.php
|
||||
opt/app/vendor/league/csv/src/XMLConverter.php
|
||||
opt/app/vendor/league/csv/src/functions.php
|
||||
opt/app/vendor/league/csv/src/functions_include.php
|
||||
opt/app/vendor/league/flysystem/LICENSE
|
||||
opt/app/vendor/league/flysystem/composer.json
|
||||
opt/app/vendor/league/flysystem/docs/CNAME
|
||||
@@ -3229,6 +3268,31 @@ opt/app/vendor/nesbot/carbon/src/Carbon/Lang/uz.php
|
||||
opt/app/vendor/nesbot/carbon/src/Carbon/Lang/vi.php
|
||||
opt/app/vendor/nesbot/carbon/src/Carbon/Lang/zh.php
|
||||
opt/app/vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/LICENSE.txt
|
||||
opt/app/vendor/paragonie/constant_time_encoding/README.md
|
||||
opt/app/vendor/paragonie/constant_time_encoding/composer.json
|
||||
opt/app/vendor/paragonie/constant_time_encoding/phpunit.xml.dist
|
||||
opt/app/vendor/paragonie/constant_time_encoding/psalm.xml
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base32.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base64.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Binary.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Encoding.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/Hex.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/src/RFC4648.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base32HexTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base32Test.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashOrderedTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base64DotSlashTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base64Test.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/Base64UrlSafeTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/EncodingTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/HexTest.php
|
||||
opt/app/vendor/paragonie/constant_time_encoding/tests/RFC4648Test.php
|
||||
opt/app/vendor/paragonie/random_compat/LICENSE
|
||||
opt/app/vendor/paragonie/random_compat/build-phar.sh
|
||||
opt/app/vendor/paragonie/random_compat/composer.json
|
||||
@@ -3247,19 +3311,45 @@ opt/app/vendor/paragonie/random_compat/lib/random_int.php
|
||||
opt/app/vendor/paragonie/random_compat/other/build_phar.php
|
||||
opt/app/vendor/paragonie/random_compat/psalm-autoload.php
|
||||
opt/app/vendor/paragonie/random_compat/psalm.xml
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/LICENSE
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/changelog.md
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/composer.json
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/docs/middleware.jpg
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/phpspec.yml
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/readme.md
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Events/OneTimePasswordRequested.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Exceptions/InvalidOneTimePassword.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Exceptions/InvalidSecretKey.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Facade.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Middleware.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/ServiceProvider.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Auth.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Authenticator.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Config.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Constants.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/ErrorBag.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Input.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Request.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Response.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/Support/Session.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/src/config/config.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/tests/spec/Support/AuthenticatorSpec.php
|
||||
opt/app/vendor/pragmarx/google2fa-laravel/upgrading.md
|
||||
opt/app/vendor/pragmarx/google2fa/LICENSE
|
||||
opt/app/vendor/pragmarx/google2fa/changelog.md
|
||||
opt/app/vendor/pragmarx/google2fa/composer.json
|
||||
opt/app/vendor/pragmarx/google2fa/phpspec.yml
|
||||
opt/app/vendor/pragmarx/google2fa/docs/playground.jpg
|
||||
opt/app/vendor/pragmarx/google2fa/readme.md
|
||||
opt/app/vendor/pragmarx/google2fa/src/Contracts/Google2FA.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Exceptions/InvalidCharactersException.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Exceptions/SecretKeyTooShortException.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Google2FA.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Support/Base32.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Support/Constants.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Support/QRCode.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Support/Url.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Vendor/Laravel/Facade.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Vendor/Laravel/ServiceProvider.php
|
||||
opt/app/vendor/pragmarx/google2fa/tests/spec/Google2FASpec.php
|
||||
opt/app/vendor/pragmarx/google2fa/tests/Google2FATest.php
|
||||
opt/app/vendor/pragmarx/google2fa/tests/bootstrap.php
|
||||
opt/app/vendor/pragmarx/google2fa/upgrading.md
|
||||
opt/app/vendor/psr/container/LICENSE
|
||||
opt/app/vendor/psr/container/README.md
|
||||
@@ -4245,10 +4335,11 @@ opt/app/vendor/symfony/debug/Tests/Fixtures/reallyNotPsr0.php
|
||||
opt/app/vendor/symfony/debug/Tests/Fixtures2/RequiredTwice.php
|
||||
opt/app/vendor/symfony/debug/Tests/HeaderMock.php
|
||||
opt/app/vendor/symfony/debug/Tests/MockExceptionHandler.php
|
||||
opt/app/vendor/symfony/debug/Tests/phpt/exception_rethrown.phpt
|
||||
opt/app/vendor/symfony/debug/Tests/phpt/fatal_with_nested_handlers.phpt
|
||||
opt/app/vendor/symfony/debug/composer.json
|
||||
opt/app/vendor/symfony/debug/phpunit.xml.dist
|
||||
opt/app/vendor/symfony/event-dispatcher/CHANGELOG.md
|
||||
opt/app/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Debug/WrappedListener.php
|
||||
@@ -4262,7 +4353,6 @@ opt/app/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php
|
||||
opt/app/vendor/symfony/event-dispatcher/LICENSE
|
||||
opt/app/vendor/symfony/event-dispatcher/README.md
|
||||
opt/app/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Tests/ContainerAwareEventDispatcherTest.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
|
||||
opt/app/vendor/symfony/event-dispatcher/Tests/EventDispatcherTest.php
|
||||
@@ -4453,6 +4543,8 @@ opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/st
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/storage.php
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/with_cookie.expected
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/with_cookie.php
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/with_cookie_and_session.expected
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/Fixtures/with_cookie_and_session.php
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcacheSessionHandlerTest.php
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MemcachedSessionHandlerTest.php
|
||||
opt/app/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
|
||||
@@ -4529,9 +4621,12 @@ opt/app/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueRe
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/Extension.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php
|
||||
opt/app/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php
|
||||
opt/app/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php
|
||||
opt/app/vendor/symfony/http-kernel/Event/FilterControllerEvent.php
|
||||
opt/app/vendor/symfony/http-kernel/Event/FilterResponseEvent.php
|
||||
@@ -4600,11 +4695,14 @@ opt/app/vendor/symfony/http-kernel/KernelEvents.php
|
||||
opt/app/vendor/symfony/http-kernel/KernelInterface.php
|
||||
opt/app/vendor/symfony/http-kernel/LICENSE
|
||||
opt/app/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php
|
||||
opt/app/vendor/symfony/http-kernel/Log/Logger.php
|
||||
opt/app/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
|
||||
opt/app/vendor/symfony/http-kernel/Profiler/Profile.php
|
||||
opt/app/vendor/symfony/http-kernel/Profiler/Profiler.php
|
||||
opt/app/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
|
||||
opt/app/vendor/symfony/http-kernel/README.md
|
||||
opt/app/vendor/symfony/http-kernel/RebootableInterface.php
|
||||
opt/app/vendor/symfony/http-kernel/Resources/welcome.html.php
|
||||
opt/app/vendor/symfony/http-kernel/TerminableInterface.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/CacheClearer/ChainCacheClearerTest.php
|
||||
@@ -4614,11 +4712,13 @@ opt/app/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/ClientTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Config/EnvParametersResourceTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataFactoryTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DataCollector/Compiler.log
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DataCollector/ConfigDataCollectorTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DataCollector/DataCollectorTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DataCollector/DumpDataCollectorTest.php
|
||||
@@ -4634,9 +4734,13 @@ opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/AddAnnotatedClasses
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/ControllerArgumentValueResolverPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/LoggerPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/MergeExtensionConfigurationPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/ResettableServicePassTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/DependencyInjection/ServicesResetterTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Event/FilterControllerArgumentsEventTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Event/GetResponseForExceptionEventTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/EventListener/AddRequestFormatsListenerTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/EventListener/DebugHandlersListenerTest.php
|
||||
@@ -4676,6 +4780,7 @@ opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Bundle1Bundle/foo.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Bundle2Bundle/foo.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/foo.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/ChildBundle/Resources/hide.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/ClearableService.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Controller/BasicTypesController.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Controller/ExtendingRequest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Controller/ExtendingSession.php
|
||||
@@ -4694,6 +4799,7 @@ opt/app/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Extensi
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/KernelForOverrideName.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/KernelWithoutBundles.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/ResettableService.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Resources/BaseBundle/hide.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Resources/Bundle1Bundle/foo.txt
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Fixtures/Resources/ChildBundle/foo.txt
|
||||
@@ -4716,6 +4822,7 @@ opt/app/vendor/symfony/http-kernel/Tests/HttpCache/TestHttpKernel.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/HttpCache/TestMultipleHttpKernel.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/KernelTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Log/LoggerTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Logger.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Profiler/FileProfilerStorageTest.php
|
||||
opt/app/vendor/symfony/http-kernel/Tests/Profiler/ProfilerTest.php
|
||||
@@ -5297,6 +5404,7 @@ opt/app/vendor/twig/twig/lib/Twig/Cache/Null.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/CacheInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Compiler.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/CompilerInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/ContainerRuntimeLoader.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Environment.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Error.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Error/Loader.php
|
||||
@@ -5417,6 +5525,7 @@ opt/app/vendor/twig/twig/lib/Twig/Node/SetTemp.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Node/Spaceless.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Node/Text.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Node/With.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/NodeCaptureInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/NodeInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/NodeOutputInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/NodeTraverser.php
|
||||
@@ -5427,6 +5536,7 @@ opt/app/vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/NodeVisitorInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Parser.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/ParserInterface.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Profiler/Dumper/Base.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Profiler/Dumper/Blackfire.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Profiler/Dumper/Html.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Profiler/Dumper/Text.php
|
||||
@@ -5486,15 +5596,188 @@ opt/app/vendor/twig/twig/lib/Twig/TokenStream.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Util/DeprecationCollector.php
|
||||
opt/app/vendor/twig/twig/lib/Twig/Util/TemplateDirIterator.php
|
||||
opt/app/vendor/twig/twig/phpunit.xml.dist
|
||||
opt/app/vendor/twig/twig/src/Cache/CacheInterface.php
|
||||
opt/app/vendor/twig/twig/src/Cache/FilesystemCache.php
|
||||
opt/app/vendor/twig/twig/src/Cache/NullCache.php
|
||||
opt/app/vendor/twig/twig/src/Compiler.php
|
||||
opt/app/vendor/twig/twig/src/Environment.php
|
||||
opt/app/vendor/twig/twig/src/Error/Error.php
|
||||
opt/app/vendor/twig/twig/src/Error/LoaderError.php
|
||||
opt/app/vendor/twig/twig/src/Error/RuntimeError.php
|
||||
opt/app/vendor/twig/twig/src/Error/SyntaxError.php
|
||||
opt/app/vendor/twig/twig/src/ExpressionParser.php
|
||||
opt/app/vendor/twig/twig/src/Extension/AbstractExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/CoreExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/DebugExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/EscaperExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/ExtensionInterface.php
|
||||
opt/app/vendor/twig/twig/src/Extension/GlobalsInterface.php
|
||||
opt/app/vendor/twig/twig/src/Extension/InitRuntimeInterface.php
|
||||
opt/app/vendor/twig/twig/src/Extension/OptimizerExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/ProfilerExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php
|
||||
opt/app/vendor/twig/twig/src/Extension/SandboxExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/StagingExtension.php
|
||||
opt/app/vendor/twig/twig/src/Extension/StringLoaderExtension.php
|
||||
opt/app/vendor/twig/twig/src/FileExtensionEscapingStrategy.php
|
||||
opt/app/vendor/twig/twig/src/Lexer.php
|
||||
opt/app/vendor/twig/twig/src/Loader/ArrayLoader.php
|
||||
opt/app/vendor/twig/twig/src/Loader/ChainLoader.php
|
||||
opt/app/vendor/twig/twig/src/Loader/ExistsLoaderInterface.php
|
||||
opt/app/vendor/twig/twig/src/Loader/FilesystemLoader.php
|
||||
opt/app/vendor/twig/twig/src/Loader/LoaderInterface.php
|
||||
opt/app/vendor/twig/twig/src/Loader/SourceContextLoaderInterface.php
|
||||
opt/app/vendor/twig/twig/src/Markup.php
|
||||
opt/app/vendor/twig/twig/src/Node/AutoEscapeNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/BlockNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/BlockReferenceNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/BodyNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/CheckSecurityNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/DoNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/EmbedNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/AbstractExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/ArrayExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/CallExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/ConstantExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/FilterExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/FunctionExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/NameExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/ParentExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/TempNameExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/NullTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/OddTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/TestExpression.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php
|
||||
opt/app/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php
|
||||
opt/app/vendor/twig/twig/src/Node/FlushNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/ForLoopNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/ForNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/IfNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/ImportNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/IncludeNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/MacroNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/ModuleNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/Node.php
|
||||
opt/app/vendor/twig/twig/src/Node/NodeCaptureInterface.php
|
||||
opt/app/vendor/twig/twig/src/Node/NodeOutputInterface.php
|
||||
opt/app/vendor/twig/twig/src/Node/PrintNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/SandboxNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/SandboxedPrintNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/SetNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/SetTempNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/SpacelessNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/TextNode.php
|
||||
opt/app/vendor/twig/twig/src/Node/WithNode.php
|
||||
opt/app/vendor/twig/twig/src/NodeTraverser.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/Parser.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php
|
||||
opt/app/vendor/twig/twig/src/Profiler/Profile.php
|
||||
opt/app/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php
|
||||
opt/app/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php
|
||||
opt/app/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityPolicy.php
|
||||
opt/app/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php
|
||||
opt/app/vendor/twig/twig/src/Source.php
|
||||
opt/app/vendor/twig/twig/src/Template.php
|
||||
opt/app/vendor/twig/twig/src/TemplateWrapper.php
|
||||
opt/app/vendor/twig/twig/src/Test/IntegrationTestCase.php
|
||||
opt/app/vendor/twig/twig/src/Test/NodeTestCase.php
|
||||
opt/app/vendor/twig/twig/src/Token.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/BlockTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/DoTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/FilterTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/FlushTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/ForTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/FromTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/IfTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/ImportTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/MacroTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/SetTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/SpacelessTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/TokenParserInterface.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/UseTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenParser/WithTokenParser.php
|
||||
opt/app/vendor/twig/twig/src/TokenStream.php
|
||||
opt/app/vendor/twig/twig/src/TwigFilter.php
|
||||
opt/app/vendor/twig/twig/src/TwigFunction.php
|
||||
opt/app/vendor/twig/twig/src/TwigTest.php
|
||||
opt/app/vendor/twig/twig/src/Util/DeprecationCollector.php
|
||||
opt/app/vendor/twig/twig/src/Util/TemplateDirIterator.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/AutoloaderTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Cache/FilesystemTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/CompilerTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/ContainerRuntimeLoaderTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/CustomExtensionTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/EnvironmentTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/ErrorTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/ExpressionParserTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Extension/CoreTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Extension/SandboxTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/FactoryRuntimeLoaderTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/FileCachingTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/FileExtensionEscapingStrategyTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/FilesystemHelper.php
|
||||
@@ -5561,6 +5844,7 @@ opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/default.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/dynamic_filter.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/escape.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/escape_html_attr.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/escape_javascript.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/escape_non_supported_charset.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/first.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/filters/force_escape.test
|
||||
@@ -5751,6 +6035,7 @@ opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/use/multiple_aliases.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/use/parent_block.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/use/parent_block2.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/use/parent_block3.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/use/use_with_parent.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/verbatim/basic.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/verbatim/mixed_usage_with_raw.test
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Fixtures/tags/verbatim/whitespace_control.test
|
||||
@@ -5851,12 +6136,11 @@ opt/app/vendor/twig/twig/test/Twig/Tests/Profiler/Dumper/BlackfireTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Profiler/Dumper/HtmlTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Profiler/Dumper/TextTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Profiler/ProfileTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/RuntimeFactoryLoaderTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/TemplateTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/TemplateWrapperTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/TokenStreamTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/Util/DeprecationCollectorTest.php
|
||||
opt/app/vendor/twig/twig/test/Twig/Tests/escapingTest.php
|
||||
opt/app/vendor/twig/twig/test/bootstrap.php
|
||||
opt/app/vendor/vlucas/phpdotenv/LICENSE.txt
|
||||
opt/app/vendor/vlucas/phpdotenv/composer.json
|
||||
opt/app/vendor/vlucas/phpdotenv/src/Dotenv.php
|
||||
@@ -6010,6 +6294,8 @@ usr/lib/x86_64-linux-gnu/libxml2.so.2
|
||||
usr/lib/x86_64-linux-gnu/libxml2.so.2.9.1
|
||||
usr/lib/x86_64-linux-gnu/libxslt.so.1
|
||||
usr/lib/x86_64-linux-gnu/libxslt.so.1.1.28
|
||||
usr/lib/x86_64-linux-gnu/libzip.so.5
|
||||
usr/lib/x86_64-linux-gnu/libzip.so.5.0.0
|
||||
usr/sbin/mysqld
|
||||
usr/sbin/nginx
|
||||
usr/sbin/php-fpm7.1
|
||||
|
@@ -15,8 +15,8 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
|
||||
manifest = (
|
||||
appTitle = (defaultText = "Firefly III"),
|
||||
appVersion = 5,
|
||||
appMarketingVersion = (defaultText = "4.6.11.1"),
|
||||
appVersion = 6,
|
||||
appMarketingVersion = (defaultText = "4.6.12"),
|
||||
|
||||
actions = [
|
||||
# Define your "new document" handlers here.
|
||||
|
25
CHANGELOG.md
25
CHANGELOG.md
@@ -2,6 +2,31 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [4.6.12] - 2017-12-31
|
||||
### Added
|
||||
- Support for Indonesian.
|
||||
- New report, see [issue 384](https://github.com/firefly-iii/firefly-iii/issues/384)
|
||||
- [Issue 964](https://github.com/firefly-iii/firefly-iii/issues/964) as suggested by [gavu](https://github.com/gavu)
|
||||
|
||||
### Changed
|
||||
- Greatly improved Docker support and documentation.
|
||||
|
||||
### Fixed
|
||||
- [Issue 1046](https://github.com/firefly-iii/firefly-iii/issues/1046), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1047](https://github.com/firefly-iii/firefly-iii/issues/1047), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1048](https://github.com/firefly-iii/firefly-iii/issues/1048), as reported by [webence](https://github.com/webence)
|
||||
- [Issue 1049](https://github.com/firefly-iii/firefly-iii/issues/1049), as reported by [nicoschreiner](https://github.com/nicoschreiner)
|
||||
- [Issue 1015](https://github.com/firefly-iii/firefly-iii/issues/1015), as reporterd by a user on Tweakers.net
|
||||
- [Issue 1056](https://github.com/firefly-iii/firefly-iii/issues/1056), as reported by [repercussion](https://github.com/repercussion)
|
||||
- [Issue 1061](https://github.com/firefly-iii/firefly-iii/issues/1061), as reported by [Meizikyn](https://github.com/Meizikyn)
|
||||
- [Issue 1045](https://github.com/firefly-iii/firefly-iii/issues/1045), as reported by [gavu](https://github.com/gavu)
|
||||
- First code for [issue 1040](https://github.com/firefly-iii/firefly-iii/issues/1040) ([simonsmiley](https://github.com/simonsmiley))
|
||||
- [Issue 1059](https://github.com/firefly-iii/firefly-iii/issues/1059), as reported by [4oo4](https://github.com/4oo4)
|
||||
- [Issue 1063](https://github.com/firefly-iii/firefly-iii/issues/1063), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1064](https://github.com/firefly-iii/firefly-iii/issues/1064), as reported by [pkoziol](https://github.com/pkoziol)
|
||||
- [Issue 1066](https://github.com/firefly-iii/firefly-iii/issues/1066), reported by [wtercato](https://github.com/wtercato)
|
||||
|
||||
|
||||
## [4.6.11.1] - 2017-12-08
|
||||
### Added
|
||||
- Import routine can scan for matching bills, [issue 956](https://github.com/firefly-iii/firefly-iii/issues/956)
|
||||
|
@@ -150,7 +150,9 @@ class CreateImport extends Command
|
||||
$this->error(sprintf('Error importing line #%d: %s', $index, $error));
|
||||
}
|
||||
$this->line(
|
||||
sprintf('The import has finished. %d transactions have been imported out of %d records.', $routine->getJournals()->count(), $routine->lines)
|
||||
sprintf(
|
||||
'The import has finished. %d transactions have been imported out of %d records.', $routine->getJournals()->count(), $routine->getLines()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -85,8 +85,8 @@ class Import extends Command
|
||||
$monolog->pushHandler($handler);
|
||||
|
||||
// actually start job:
|
||||
$type = 'csv' === $job->file_type ? 'file' : $job->file_type;
|
||||
$key = sprintf('import.routine.%s', $type);
|
||||
$type = 'csv' === $job->file_type ? 'file' : $job->file_type;
|
||||
$key = sprintf('import.routine.%s', $type);
|
||||
$className = config($key);
|
||||
if (null === $className || !class_exists($className)) {
|
||||
throw new FireflyException(sprintf('Cannot find import routine class for job of type "%s".', $type)); // @codeCoverageIgnore
|
||||
@@ -98,11 +98,13 @@ class Import extends Command
|
||||
$routine->run();
|
||||
|
||||
/** @var MessageBag $error */
|
||||
foreach ($routine->errors as $index => $error) {
|
||||
foreach ($routine->getErrors() as $index => $error) {
|
||||
$this->error(sprintf('Error importing line #%d: %s', $index, $error));
|
||||
}
|
||||
|
||||
$this->line(sprintf('The import has finished. %d transactions have been imported out of %d records.', $routine->journals->count(), $routine->lines));
|
||||
$this->line(
|
||||
sprintf('The import has finished. %d transactions have been imported out of %d records.', $routine->getJournals()->count(), $routine->getLines())
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@@ -57,6 +57,12 @@ class UseEncryption extends Command
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
if (config('firefly.encryption') === true) {
|
||||
$this->info('Firefly III configuration calls for encrypted data.');
|
||||
}
|
||||
if (config('firefly.encryption') === false) {
|
||||
$this->info('Firefly III configuration calls for unencrypted data.');
|
||||
}
|
||||
$this->handleObjects('Account', 'name', 'encrypted');
|
||||
$this->handleObjects('Bill', 'name', 'name_encrypted');
|
||||
$this->handleObjects('Bill', 'match', 'match_encrypted');
|
||||
@@ -76,7 +82,7 @@ class UseEncryption extends Command
|
||||
public function handleObjects(string $class, string $field, string $indicator)
|
||||
{
|
||||
$fqn = sprintf('FireflyIII\Models\%s', $class);
|
||||
$encrypt = config('firefly.encryption') ? 0 : 1;
|
||||
$encrypt = config('firefly.encryption') === true ? 0 : 1;
|
||||
$set = $fqn::where($indicator, $encrypt)->get();
|
||||
|
||||
foreach ($set as $entry) {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* Login.php
|
||||
* RequestedVersionCheckStatus.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
@@ -21,12 +21,32 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Object;
|
||||
namespace FireflyIII\Events;
|
||||
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
|
||||
/**
|
||||
* Class Login
|
||||
* Class RequestedVersionCheckStatus
|
||||
*/
|
||||
class Login extends SpectreObject
|
||||
class RequestedVersionCheckStatus extends Event
|
||||
{
|
||||
use SerializesModels;
|
||||
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
public $user;
|
||||
|
||||
/**
|
||||
* Create a new event instance. This event is triggered when Firefly III wants to know
|
||||
* what the deal is with the version checker.
|
||||
*
|
||||
* @param User $user
|
||||
*/
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
}
|
@@ -203,7 +203,7 @@ final class Entry
|
||||
$entry->description = $transaction->transaction_description . '(' . $transaction->description . ')';
|
||||
}
|
||||
$entry->currency_code = $transaction->transactionCurrency->code;
|
||||
$entry->amount = round($transaction->transaction_amount, $transaction->transactionCurrency->decimal_places);
|
||||
$entry->amount = strval(round($transaction->transaction_amount, $transaction->transactionCurrency->decimal_places));
|
||||
|
||||
$entry->foreign_currency_code = null === $transaction->foreign_currency_id ? null : $transaction->foreignCurrency->code;
|
||||
$entry->foreign_amount = null === $transaction->foreign_currency_id
|
||||
@@ -216,14 +216,14 @@ final class Entry
|
||||
);
|
||||
|
||||
$entry->transaction_type = $transaction->transaction_type_type;
|
||||
$entry->asset_account_id = $transaction->account_id;
|
||||
$entry->asset_account_id = strval($transaction->account_id);
|
||||
$entry->asset_account_name = app('steam')->tryDecrypt($transaction->account_name);
|
||||
$entry->asset_account_iban = $transaction->account_iban;
|
||||
$entry->asset_account_number = $transaction->account_number;
|
||||
$entry->asset_account_bic = $transaction->account_bic;
|
||||
$entry->asset_currency_code = $transaction->account_currency_code;
|
||||
|
||||
$entry->opposing_account_id = $transaction->opposing_account_id;
|
||||
$entry->opposing_account_id = strval($transaction->opposing_account_id);
|
||||
$entry->opposing_account_name = app('steam')->tryDecrypt($transaction->opposing_account_name);
|
||||
$entry->opposing_account_iban = $transaction->opposing_account_iban;
|
||||
$entry->opposing_account_number = $transaction->opposing_account_number;
|
||||
@@ -231,7 +231,7 @@ final class Entry
|
||||
$entry->opposing_currency_code = $transaction->opposing_currency_code;
|
||||
|
||||
// budget
|
||||
$entry->budget_id = $transaction->transaction_budget_id;
|
||||
$entry->budget_id = strval($transaction->transaction_budget_id);
|
||||
$entry->budget_name = app('steam')->tryDecrypt($transaction->transaction_budget_name);
|
||||
if (null === $transaction->transaction_budget_id) {
|
||||
$entry->budget_id = $transaction->transaction_journal_budget_id;
|
||||
@@ -239,7 +239,7 @@ final class Entry
|
||||
}
|
||||
|
||||
// category
|
||||
$entry->category_id = $transaction->transaction_category_id;
|
||||
$entry->category_id = strval($transaction->transaction_category_id);
|
||||
$entry->category_name = app('steam')->tryDecrypt($transaction->transaction_category_name);
|
||||
if (null === $transaction->transaction_category_id) {
|
||||
$entry->category_id = $transaction->transaction_journal_category_id;
|
||||
@@ -247,7 +247,7 @@ final class Entry
|
||||
}
|
||||
|
||||
// budget
|
||||
$entry->bill_id = $transaction->bill_id;
|
||||
$entry->bill_id = strval($transaction->bill_id);
|
||||
$entry->bill_name = app('steam')->tryDecrypt($transaction->bill_name);
|
||||
|
||||
$entry->tags = $transaction->tags;
|
||||
|
@@ -24,8 +24,6 @@ namespace FireflyIII\Export\Exporter;
|
||||
|
||||
use FireflyIII\Export\Entry\Entry;
|
||||
use League\Csv\Writer;
|
||||
use SplFileObject;
|
||||
use SplTempFileObject;
|
||||
use Storage;
|
||||
|
||||
/**
|
||||
@@ -66,12 +64,9 @@ class CsvExporter extends BasicExporter implements ExporterInterface
|
||||
$fullPath = storage_path('export') . DIRECTORY_SEPARATOR . $this->fileName;
|
||||
|
||||
|
||||
|
||||
//we create the CSV into memory
|
||||
//$writer = Writer::createFromFileObject(new SplTempFileObject());
|
||||
$writer = Writer::createFromPath($fullPath);
|
||||
//$writer = Writer::createFromPath(new SplFileObject($fullPath, 'a+'), 'w');
|
||||
$rows = [];
|
||||
$rows = [];
|
||||
|
||||
// get field names for header row:
|
||||
$first = $this->getEntries()->first();
|
||||
@@ -91,8 +86,6 @@ class CsvExporter extends BasicExporter implements ExporterInterface
|
||||
$rows[] = $line;
|
||||
}
|
||||
$writer->insertAll($rows);
|
||||
//$writer->output($fullPath);
|
||||
//$writer->
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -102,6 +95,6 @@ class CsvExporter extends BasicExporter implements ExporterInterface
|
||||
$this->fileName = $this->job->key . '-records.csv';
|
||||
// touch file in export directory:
|
||||
$disk = Storage::disk('export');
|
||||
$disk->put($this->fileName,'');
|
||||
$disk->put($this->fileName, '');
|
||||
}
|
||||
}
|
||||
|
@@ -65,6 +65,7 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function generate(): string
|
||||
{
|
||||
|
@@ -76,6 +76,7 @@ class UserEventHandler
|
||||
{
|
||||
Log::debug('In checkSingleUserIsAdmin');
|
||||
|
||||
/** @var User $user */
|
||||
$user = $event->user;
|
||||
$count = User::count();
|
||||
|
||||
|
@@ -23,20 +23,21 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Handlers\Events;
|
||||
|
||||
use FireflyConfig;
|
||||
use FireflyIII\Events\RequestedVersionCheckStatus;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Auth\Events\Login;
|
||||
use Log;
|
||||
use Preferences;
|
||||
|
||||
/**
|
||||
* Class VersionCheckEventHandler
|
||||
*/
|
||||
class VersionCheckEventHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Login $event
|
||||
* @param RequestedVersionCheckStatus $event
|
||||
*/
|
||||
public function checkForUpdates(Login $event)
|
||||
public function checkForUpdates(RequestedVersionCheckStatus $event)
|
||||
{
|
||||
// in Sandstorm, cannot check for updates:
|
||||
$sandstorm = 1 === intval(getenv('SANDSTORM'));
|
||||
@@ -45,9 +46,13 @@ class VersionCheckEventHandler
|
||||
}
|
||||
|
||||
/** @var User $user */
|
||||
$user = $event->user;
|
||||
$permission = Preferences::getForUser($user, 'permission_update_check', -1);
|
||||
$lastCheckTime = Preferences::getForUser($user, 'last_update_check', time());
|
||||
$user = $event->user;
|
||||
if (!$user->hasRole('owner')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$permission = FireflyConfig::get('permission_update_check', -1);
|
||||
$lastCheckTime = FireflyConfig::get('last_update_check', time());
|
||||
$now = time();
|
||||
if ($now - $lastCheckTime->data < 604800) {
|
||||
Log::debug('Checked for updates less than a week ago.');
|
||||
@@ -66,6 +71,8 @@ class VersionCheckEventHandler
|
||||
return;
|
||||
}
|
||||
|
||||
// actually check for update and inform the user.
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -101,13 +101,12 @@ class AccountController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param AccountRepositoryInterface $repository
|
||||
* @param Account $account
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function delete(Request $request, AccountRepositoryInterface $repository, Account $account)
|
||||
public function delete(AccountRepositoryInterface $repository, Account $account)
|
||||
{
|
||||
$typeName = config('firefly.shortNamesByFullName.' . $account->accountType->type);
|
||||
$subTitle = trans('firefly.delete_' . $typeName . '_account', ['name' => $account->name]);
|
||||
|
@@ -22,6 +22,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Http\Controllers\Admin;
|
||||
|
||||
use FireflyConfig;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Http\Middleware\IsDemoUser;
|
||||
@@ -30,7 +31,6 @@ use FireflyIII\Services\Github\Object\Release;
|
||||
use FireflyIII\Services\Github\Request\UpdateRequest;
|
||||
use Illuminate\Http\Request;
|
||||
use Log;
|
||||
use Preferences;
|
||||
use Response;
|
||||
use Session;
|
||||
|
||||
@@ -67,7 +67,7 @@ class UpdateController extends Controller
|
||||
{
|
||||
$subTitle = trans('firefly.update_check_title');
|
||||
$subTitleIcon = 'fa-star';
|
||||
$permission = app('preferences')->get('permission_update_check', -1);
|
||||
$permission = app('fireflyconfig')->get('permission_update_check', -1);
|
||||
$selected = $permission->data;
|
||||
$options = [
|
||||
'-1' => trans('firefly.updates_ask_me_later'),
|
||||
@@ -86,9 +86,9 @@ class UpdateController extends Controller
|
||||
public function post(Request $request)
|
||||
{
|
||||
$checkForUpdates = intval($request->get('check_for_updates'));
|
||||
Preferences::set('permission_update_check', $checkForUpdates);
|
||||
FireflyConfig::set('permission_update_check', $checkForUpdates);
|
||||
FireflyConfig::set('last_update_check', time());
|
||||
Session::flash('success', strval(trans('firefly.configuration_updated')));
|
||||
Preferences::mark();
|
||||
|
||||
return redirect(route('admin.update-check'));
|
||||
}
|
||||
@@ -99,17 +99,19 @@ class UpdateController extends Controller
|
||||
public function updateCheck()
|
||||
{
|
||||
$current = config('firefly.version');
|
||||
$request = new UpdateRequest();
|
||||
/** @var UpdateRequest $request */
|
||||
$request = app(UpdateRequest::class);
|
||||
$check = -2;
|
||||
$first = new Release(['id' => '0', 'title' => '0', 'updated' => '2017-01-01', 'content' => '']);
|
||||
$string = '';
|
||||
try {
|
||||
$request->call();
|
||||
$releases = $request->getReleases();
|
||||
// first entry should be the latest entry:
|
||||
/** @var Release $first */
|
||||
$first = reset($releases);
|
||||
$string = '';
|
||||
$check = version_compare($current, $first->getTitle());
|
||||
Preferences::set('last_update_check', time());
|
||||
$first = reset($releases);
|
||||
$check = version_compare($current, $first->getTitle());
|
||||
FireflyConfig::set('last_update_check', time());
|
||||
} catch (FireflyException $e) {
|
||||
Log::error(sprintf('Could not check for updates: %s', $e->getMessage()));
|
||||
}
|
||||
@@ -119,7 +121,12 @@ class UpdateController extends Controller
|
||||
|
||||
if ($check === -1) {
|
||||
// there is a new FF version!
|
||||
$string = strval(trans('firefly.update_new_version_alert', ['your_version' => $current, 'new_version' => $first->getTitle()]));
|
||||
$string = strval(
|
||||
trans(
|
||||
'firefly.update_new_version_alert',
|
||||
['your_version' => $current, 'new_version' => $first->getTitle(), 'date' => $first->getUpdated()->formatLocalized($this->monthAndDayFormat)]
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($check === 0) {
|
||||
// you are running the current version!
|
||||
|
@@ -59,12 +59,11 @@ class AttachmentController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Attachment $attachment
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function delete(Request $request, Attachment $attachment)
|
||||
public function delete(Attachment $attachment)
|
||||
{
|
||||
$subTitle = trans('firefly.delete_attachment', ['name' => $attachment->filename]);
|
||||
|
||||
|
@@ -64,7 +64,7 @@ class LoginController extends Controller
|
||||
*
|
||||
* @param Request $request
|
||||
*
|
||||
* @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response|void
|
||||
* @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
@@ -102,7 +102,7 @@ class LoginController extends Controller
|
||||
* @param Request $request
|
||||
* @param CookieJar $cookieJar
|
||||
*
|
||||
* @return $this
|
||||
* @return $this|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function logout(Request $request, CookieJar $cookieJar)
|
||||
{
|
||||
|
@@ -91,12 +91,11 @@ class BillController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Bill $bill
|
||||
* @param Bill $bill
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function delete(Request $request, Bill $bill)
|
||||
public function delete(Bill $bill)
|
||||
{
|
||||
// put previous url in session
|
||||
$this->rememberPreviousUri('bills.delete.uri');
|
||||
@@ -194,7 +193,7 @@ class BillController extends Controller
|
||||
}
|
||||
);
|
||||
// paginate bills
|
||||
$bills= new LengthAwarePaginator($collection, $total, $pageSize, $page);
|
||||
$bills = new LengthAwarePaginator($collection, $total, $pageSize, $page);
|
||||
$bills->setPath(route('bills.index'));
|
||||
|
||||
return view('bills.index', compact('bills'));
|
||||
|
@@ -118,12 +118,11 @@ class BudgetController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Budget $budget
|
||||
* @param Budget $budget
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function delete(Request $request, Budget $budget)
|
||||
public function delete(Budget $budget)
|
||||
{
|
||||
$subTitle = trans('firefly.delete_budget', ['name' => $budget->name]);
|
||||
|
||||
|
@@ -80,12 +80,11 @@ class CategoryController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Category $category
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function delete(Request $request, Category $category)
|
||||
public function delete(Category $category)
|
||||
{
|
||||
$subTitle = trans('firefly.delete_category', ['name' => $category->name]);
|
||||
|
||||
|
@@ -25,6 +25,8 @@ namespace FireflyIII\Http\Controllers;
|
||||
use Artisan;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use Exception;
|
||||
use FireflyIII\Events\RequestedVersionCheckStatus;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Http\Middleware\IsDemoUser;
|
||||
@@ -38,7 +40,6 @@ use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
use Monolog\Handler\RotatingFileHandler;
|
||||
use Preferences;
|
||||
use ReflectionException;
|
||||
use Response;
|
||||
use Route as RouteFacade;
|
||||
use View;
|
||||
@@ -185,7 +186,7 @@ class HomeController extends Controller
|
||||
Log::debug('Call twig:clean...');
|
||||
try {
|
||||
Artisan::call('twig:clean');
|
||||
} catch (ReflectionException $e) {
|
||||
} catch (Exception $e) {
|
||||
// dont care
|
||||
}
|
||||
Log::debug('Call view:clear...');
|
||||
@@ -234,6 +235,9 @@ class HomeController extends Controller
|
||||
$transactions[] = [$set, $account];
|
||||
}
|
||||
|
||||
// fire check update event:
|
||||
event(new RequestedVersionCheckStatus(auth()->user()));
|
||||
|
||||
return view(
|
||||
'index',
|
||||
compact('count', 'subTitle', 'transactions', 'showDeps', 'billCount', 'start', 'end', 'today')
|
||||
|
@@ -60,7 +60,7 @@ class PrerequisitesController extends Controller
|
||||
*
|
||||
* @param string $bank
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|null
|
||||
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
|
@@ -108,8 +108,6 @@ class StatusController extends Controller
|
||||
$result['running'] = true;
|
||||
}
|
||||
|
||||
// TODO cannot handle 'error'
|
||||
|
||||
return Response::json($result);
|
||||
}
|
||||
}
|
||||
|
@@ -29,7 +29,6 @@ use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
use Log;
|
||||
use Response;
|
||||
|
||||
/**
|
||||
|
@@ -46,6 +46,7 @@ class IntroController
|
||||
$specificSteps = $this->getSpecificSteps($route, $specificPage);
|
||||
if (0 === count($specificSteps)) {
|
||||
Log::debug(sprintf('No specific steps for route "%s" and page "%s"', $route, $specificPage));
|
||||
|
||||
return Response::json($steps);
|
||||
}
|
||||
if ($this->hasOutroStep($route)) {
|
||||
|
@@ -238,7 +238,7 @@ class ReportController extends Controller
|
||||
private function parseAttributes(array $attributes): array
|
||||
{
|
||||
$attributes['location'] = $attributes['location'] ?? '';
|
||||
$attributes['accounts'] = AccountList::routeBinder($attributes['accounts'] ?? '', new Route('get','',[]));
|
||||
$attributes['accounts'] = AccountList::routeBinder($attributes['accounts'] ?? '', new Route('get', '', []));
|
||||
try {
|
||||
$attributes['startDate'] = Carbon::createFromFormat('Ymd', $attributes['startDate']);
|
||||
} catch (InvalidArgumentException $e) {
|
||||
|
@@ -26,8 +26,8 @@ use FireflyIII\Http\Requests\TokenFormRequest;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use Illuminate\Http\Request;
|
||||
use Google2FA;
|
||||
use Illuminate\Http\Request;
|
||||
use Preferences;
|
||||
use Session;
|
||||
use View;
|
||||
|
@@ -231,7 +231,7 @@ class ExpenseController extends Controller
|
||||
$cache->addProperty($accounts->pluck('id')->toArray());
|
||||
$cache->addProperty($expense->pluck('id')->toArray());
|
||||
if ($cache->has()) {
|
||||
//return $cache->get(); // @codeCoverageIgnore
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
$combined = $this->combineAccounts($expense);
|
||||
$all = new Collection;
|
||||
|
@@ -59,12 +59,10 @@ class SplitController extends Controller
|
||||
|
||||
/** @var CurrencyRepositoryInterface */
|
||||
private $currencies;
|
||||
|
||||
/** @var JournalTaskerInterface */
|
||||
private $tasker;
|
||||
|
||||
/** @var JournalRepositoryInterface */
|
||||
private $repository;
|
||||
/** @var JournalTaskerInterface */
|
||||
private $tasker;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -81,7 +79,7 @@ class SplitController extends Controller
|
||||
$this->tasker = app(JournalTaskerInterface::class);
|
||||
$this->attachments = app(AttachmentHelperInterface::class);
|
||||
$this->currencies = app(CurrencyRepositoryInterface::class);
|
||||
$this->repository = app(JournalRepositoryInterface::class);
|
||||
$this->repository = app(JournalRepositoryInterface::class);
|
||||
app('view')->share('mainTitleIcon', 'fa-share-alt');
|
||||
app('view')->share('title', trans('firefly.split-transactions'));
|
||||
|
||||
@@ -145,8 +143,8 @@ class SplitController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SplitJournalFormRequest $request
|
||||
* @param TransactionJournal $journal
|
||||
* @param SplitJournalFormRequest $request
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
|
@@ -22,13 +22,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Import\Configuration;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Support\Import\Configuration\ConfigurationInterface;
|
||||
use FireflyIII\Support\Import\Configuration\Spectre\InputMandatory;
|
||||
use FireflyIII\Support\Import\Configuration\Spectre\SelectCountry;
|
||||
use FireflyIII\Support\Import\Configuration\Spectre\SelectProvider;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class SpectreConfigurator.
|
||||
@@ -54,58 +48,35 @@ class SpectreConfigurator implements ConfiguratorInterface
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function configureJob(array $data): bool
|
||||
{
|
||||
$class = $this->getConfigurationClass();
|
||||
$job = $this->job;
|
||||
/** @var ConfigurationInterface $object */
|
||||
$object = new $class($this->job);
|
||||
$object->setJob($job);
|
||||
$result = $object->storeConfiguration($data);
|
||||
$this->warning = $object->getWarningMessage();
|
||||
|
||||
return $result;
|
||||
die('cannot store config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the data required for the next step in the job configuration.
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getNextData(): array
|
||||
{
|
||||
$class = $this->getConfigurationClass();
|
||||
$job = $this->job;
|
||||
/** @var ConfigurationInterface $object */
|
||||
$object = app($class);
|
||||
$object->setJob($job);
|
||||
// update config to tell Firefly we've redirected the user.
|
||||
$config = $this->job->configuration;
|
||||
$config['is-redirected'] = true;
|
||||
$this->job->configuration = $config;
|
||||
$this->job->status = 'configured';
|
||||
$this->job->save();
|
||||
|
||||
return $object->getData();
|
||||
return $this->job->configuration;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getNextView(): string
|
||||
{
|
||||
if (!$this->job->configuration['selected-country']) {
|
||||
return 'import.spectre.select-country';
|
||||
}
|
||||
if (!$this->job->configuration['selected-provider']) {
|
||||
return 'import.spectre.select-provider';
|
||||
}
|
||||
if (!$this->job->configuration['has-input-mandatory']) {
|
||||
return 'import.spectre.input-fields';
|
||||
}
|
||||
|
||||
throw new FireflyException('No view for state');
|
||||
return 'import.spectre.redirect';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,16 +94,9 @@ class SpectreConfigurator implements ConfiguratorInterface
|
||||
*/
|
||||
public function isJobConfigured(): bool
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$config['selected-country'] = $config['selected-country'] ?? false;
|
||||
$config['selected-provider'] = $config['selected-provider'] ?? false;
|
||||
$config['has-input-mandatory'] = $config['has-input-mandatory'] ?? false;
|
||||
$config['has-input-interactive'] = $config['has-input-interactive'] ?? true; // defaults to true.
|
||||
$this->job->configuration = $config;
|
||||
$this->job->save();
|
||||
|
||||
if ($config['selected-country'] && $config['selected-provider'] && $config['has-input-mandatory'] && $config['has-input-interactive']) {
|
||||
// give job another status
|
||||
// job is configured (and can start) when token is empty:
|
||||
$config = $this->job->configuration;
|
||||
if ($config['has-token'] === false) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -144,45 +108,19 @@ class SpectreConfigurator implements ConfiguratorInterface
|
||||
*/
|
||||
public function setJob(ImportJob $job)
|
||||
{
|
||||
$defaultConfig = [
|
||||
'has-token' => false,
|
||||
'token' => '',
|
||||
'token-expires' => 0,
|
||||
'token-url' => '',
|
||||
'is-redirected' => false,
|
||||
|
||||
];
|
||||
|
||||
$config = $job->configuration;
|
||||
$finalConfig = array_merge($defaultConfig, $config);
|
||||
$job->configuration = $finalConfig;
|
||||
$job->save();
|
||||
$this->job = $job;
|
||||
if (null === $this->job->configuration || 0 === count($this->job->configuration)) {
|
||||
Log::debug(sprintf('Gave import job %s initial configuration.', $this->job->key));
|
||||
$this->job->configuration = [
|
||||
'selected-country' => false,
|
||||
];
|
||||
$this->job->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function getConfigurationClass(): string
|
||||
{
|
||||
$class = false;
|
||||
switch (true) {
|
||||
case !$this->job->configuration['selected-country']:
|
||||
$class = SelectCountry::class;
|
||||
break;
|
||||
case !$this->job->configuration['selected-provider']:
|
||||
$class = SelectProvider::class;
|
||||
break;
|
||||
case !$this->job->configuration['has-input-mandatory']:
|
||||
$class = InputMandatory::class;
|
||||
// no break
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (false === $class || 0 === strlen($class)) {
|
||||
throw new FireflyException('Cannot handle current job state in getConfigurationClass().');
|
||||
}
|
||||
if (!class_exists($class)) {
|
||||
throw new FireflyException(sprintf('Class %s does not exist in getConfigurationClass().', $class));
|
||||
}
|
||||
|
||||
return $class;
|
||||
}
|
||||
}
|
||||
|
@@ -72,6 +72,7 @@ class CsvProcessor implements FileProcessorInterface
|
||||
* @return bool
|
||||
*
|
||||
* @throws \League\Csv\Exception
|
||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||
*/
|
||||
public function run(): bool
|
||||
{
|
||||
|
@@ -359,7 +359,7 @@ class ImportAccount
|
||||
'name' => $this->accountName['value'] ?? '(no name)',
|
||||
'iban' => $this->accountIban['value'] ?? null,
|
||||
'active' => true,
|
||||
'virtualBalance' => null,
|
||||
'virtualBalance' => '0',
|
||||
];
|
||||
|
||||
$this->account = $this->repository->store($data);
|
||||
|
@@ -330,6 +330,7 @@ class ImportJournal
|
||||
*/
|
||||
private function selectAmountInput()
|
||||
{
|
||||
$info = [];
|
||||
$converterClass = '';
|
||||
if (!is_null($this->amount)) {
|
||||
Log::debug('Amount value is not NULL, assume this is the correct value.');
|
||||
|
@@ -22,7 +22,6 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Import\Prerequisites;
|
||||
|
||||
use FireflyIII\Jobs\GetSpectreProviders;
|
||||
use FireflyIII\Models\Preference;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -86,10 +85,6 @@ class SpectrePrerequisites implements PrerequisitesInterface
|
||||
}
|
||||
Log::debug('All prerequisites are here!');
|
||||
|
||||
// at this point, check if all providers are present. Providers are shared amongst
|
||||
// users in a multi-user environment.
|
||||
GetSpectreProviders::dispatch($this->user);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -22,11 +22,11 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Import\Routine;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Services\Spectre\Object\Customer;
|
||||
use FireflyIII\Services\Spectre\Request\CreateLoginRequest;
|
||||
use FireflyIII\Services\Spectre\Request\ListLoginsRequest;
|
||||
use FireflyIII\Services\Spectre\Object\Token;
|
||||
use FireflyIII\Services\Spectre\Request\CreateTokenRequest;
|
||||
use FireflyIII\Services\Spectre\Request\NewCustomerRequest;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
@@ -90,31 +90,48 @@ class SpectreRoutine implements RoutineInterface
|
||||
|
||||
return false;
|
||||
}
|
||||
set_time_limit(0);
|
||||
Log::info(sprintf('Start with import job %s using Spectre.', $this->job->key));
|
||||
// create customer if user does not have one:
|
||||
$customer = $this->getCustomer();
|
||||
set_time_limit(0);
|
||||
|
||||
// list all logins present at Spectre
|
||||
$logins = $this->listLogins($customer);
|
||||
// check if job has token first!
|
||||
$config = $this->job->configuration;
|
||||
$hasToken = $config['has-token'] ?? false;
|
||||
if ($hasToken === false) {
|
||||
Log::debug('Job has no token');
|
||||
// create customer if user does not have one:
|
||||
$customer = $this->getCustomer();
|
||||
Log::debug(sprintf('Customer ID is %s', $customer->getId()));
|
||||
// use customer to request a token:
|
||||
$uri = route('import.status', [$this->job->key]);
|
||||
$token = $this->getToken($customer, $uri);
|
||||
Log::debug(sprintf('Token is %s', $token->getToken()));
|
||||
|
||||
// use latest (depending on status, and if login exists for selected country + provider)
|
||||
$country = $this->job->configuration['country'];
|
||||
$providerId = $this->job->configuration['provider'];
|
||||
$login = $this->filterLogins($logins, $country, $providerId);
|
||||
// update job, give it the token:
|
||||
$config = $this->job->configuration;
|
||||
$config['has-token'] = true;
|
||||
$config['token'] = $token->getToken();
|
||||
$config['token-expires'] = $token->getExpiresAt()->format('U');
|
||||
$config['token-url'] = $token->getConnectUrl();
|
||||
$this->job->configuration = $config;
|
||||
|
||||
// create new login if list is empty or no login exists.
|
||||
if (is_null($login)) {
|
||||
$login = $this->createLogin($customer);
|
||||
var_dump($login);
|
||||
exit;
|
||||
Log::debug('Job config is now', $config);
|
||||
|
||||
// update job, set status to "configuring".
|
||||
$this->job->status = 'configuring';
|
||||
$this->job->save();
|
||||
Log::debug(sprintf('Job status is now %s', $this->job->status));
|
||||
|
||||
return true;
|
||||
}
|
||||
$isRedirected = $config['is-redirected'] ?? false;
|
||||
if ($isRedirected === true) {
|
||||
// assume user has "used" the token.
|
||||
// ...
|
||||
// now what?
|
||||
throw new FireflyException('Application cannot handle this.');
|
||||
}
|
||||
|
||||
echo '<pre>';
|
||||
print_r($logins);
|
||||
exit;
|
||||
|
||||
return true;
|
||||
throw new FireflyException('Application cannot handle this.');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -135,49 +152,12 @@ class SpectreRoutine implements RoutineInterface
|
||||
$newCustomerRequest->call();
|
||||
$customer = $newCustomerRequest->getCustomer();
|
||||
|
||||
// store customer. Not sure where. User preference? TODO
|
||||
Preferences::setForUser($this->job->user, 'spectre_customer', $customer->toArray());
|
||||
|
||||
return $customer;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Customer $customer
|
||||
*/
|
||||
protected function createLogin(Customer $customer)
|
||||
{
|
||||
|
||||
$providerId = intval($this->job->configuration['provider']);
|
||||
$provider = $this->findProvider($providerId);
|
||||
|
||||
|
||||
$createLoginRequest = new CreateLoginRequest($this->job->user);
|
||||
$createLoginRequest->setCustomer($customer);
|
||||
$createLoginRequest->setProvider($provider);
|
||||
$createLoginRequest->setMandatoryFields($this->decrypt($this->job->configuration['mandatory-fields']));
|
||||
$createLoginRequest->call();
|
||||
echo '123';
|
||||
// country code, provider code (find by spectre ID)
|
||||
// credentials
|
||||
// daily_refresh=true
|
||||
// fetch_type=recent
|
||||
// include_fake_providers=true
|
||||
// store_credentials=true
|
||||
|
||||
|
||||
var_dump($this->job->configuration);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $providerId
|
||||
*
|
||||
* @return SpectreProvider|null
|
||||
*/
|
||||
protected function findProvider(int $providerId): ?SpectreProvider
|
||||
{
|
||||
return SpectreProvider::where('spectre_id', $providerId)->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Customer
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
@@ -188,61 +168,27 @@ class SpectreRoutine implements RoutineInterface
|
||||
if (is_null($preference)) {
|
||||
return $this->createCustomer();
|
||||
}
|
||||
var_dump($preference->data);
|
||||
exit;
|
||||
$customer = new Customer($preference->data);
|
||||
|
||||
return $customer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Customer $customer
|
||||
* @param string $returnUri
|
||||
*
|
||||
* @return array
|
||||
* @return Token
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
protected function listLogins(Customer $customer): array
|
||||
protected function getToken(Customer $customer, string $returnUri): Token
|
||||
{
|
||||
$listLoginRequest = new ListLoginsRequest($this->job->user);
|
||||
$listLoginRequest->setCustomer($customer);
|
||||
$listLoginRequest->call();
|
||||
$request = new CreateTokenRequest($this->job->user);
|
||||
$request->setUri($returnUri);
|
||||
$request->setCustomer($customer);
|
||||
$request->call();
|
||||
Log::debug('Call to get token is finished');
|
||||
|
||||
$logins = $listLoginRequest->getLogins();
|
||||
return $request->getToken();
|
||||
|
||||
return $logins;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $configuration
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function decrypt(array $configuration): array
|
||||
{
|
||||
$new = [];
|
||||
foreach ($configuration as $key => $value) {
|
||||
$new[$key] = app('steam')->tryDecrypt($value);
|
||||
}
|
||||
|
||||
return $new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return login belonging to country and provider
|
||||
* TODO must return Login object, not array
|
||||
*
|
||||
* @param array $logins
|
||||
* @param string $country
|
||||
* @param int $providerId
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
private function filterLogins(array $logins, string $country, int $providerId): ?array
|
||||
{
|
||||
if (count($logins) === 0) {
|
||||
return null;
|
||||
}
|
||||
foreach ($logins as $login) {
|
||||
die('do some filter');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -236,7 +236,6 @@ class ImportStorage
|
||||
|
||||
// match bills if config calls for it.
|
||||
if (true === $this->matchBills) {
|
||||
//$this->/applyRules($journal);
|
||||
Log::info('Cannot match bills (yet).');
|
||||
$this->matchBills($journal);
|
||||
}
|
||||
|
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* GetSpectreProviders.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace FireflyIII\Jobs;
|
||||
|
||||
use FireflyIII\Models\Configuration;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Services\Spectre\Request\ListProvidersRequest;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class GetSpectreProviders
|
||||
*/
|
||||
class GetSpectreProviders implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @param User $user
|
||||
*/
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
Log::debug('Constructed job GetSpectreProviders');
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the job.
|
||||
*
|
||||
* @throws \Illuminate\Container\EntryNotFoundException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
/** @var Configuration $configValue */
|
||||
$configValue = app('fireflyconfig')->get('spectre_provider_download', 0);
|
||||
$now = time();
|
||||
if ($now - intval($configValue->data) < 86400) {
|
||||
Log::debug(sprintf('Difference is %d, so will NOT execute job.', ($now - intval($configValue->data))));
|
||||
|
||||
return;
|
||||
}
|
||||
Log::debug(sprintf('Difference is %d, so will execute job.', ($now - intval($configValue->data))));
|
||||
|
||||
// get user
|
||||
|
||||
// fire away!
|
||||
$request = new ListProvidersRequest($this->user);
|
||||
$request->call();
|
||||
|
||||
// store all providers:
|
||||
$providers = $request->getProviders();
|
||||
foreach ($providers as $provider) {
|
||||
// find provider?
|
||||
$dbProvider = SpectreProvider::where('spectre_id', $provider['id'])->first();
|
||||
if (is_null($dbProvider)) {
|
||||
$dbProvider = new SpectreProvider;
|
||||
}
|
||||
// update fields:
|
||||
$dbProvider->spectre_id = $provider['id'];
|
||||
$dbProvider->code = $provider['code'];
|
||||
$dbProvider->mode = $provider['mode'];
|
||||
$dbProvider->status = $provider['status'];
|
||||
$dbProvider->interactive = 1 === $provider['interactive'];
|
||||
$dbProvider->automatic_fetch = 1 === $provider['automatic_fetch'];
|
||||
$dbProvider->country_code = $provider['country_code'];
|
||||
$dbProvider->data = $provider;
|
||||
$dbProvider->save();
|
||||
Log::debug(sprintf('Stored provider #%d under ID #%d', $provider['id'], $dbProvider->id));
|
||||
}
|
||||
|
||||
app('fireflyconfig')->set('spectre_provider_download', time());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
@@ -189,6 +189,7 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $fieldName
|
||||
*
|
||||
* @return string
|
||||
@@ -206,6 +207,7 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -299,6 +301,7 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param array $types
|
||||
*/
|
||||
@@ -313,6 +316,7 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
@@ -331,7 +335,9 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setIbanAttribute($value)
|
||||
@@ -341,6 +347,7 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
@@ -352,7 +359,9 @@ class Account extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setVirtualBalanceAttribute($value)
|
||||
|
@@ -69,6 +69,7 @@ class AccountMeta extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setDataAttribute($value)
|
||||
|
@@ -70,6 +70,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* Get all of the owning attachable models.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @return MorphTo
|
||||
@@ -81,7 +82,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* Returns the expected filename for this attachment.
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return string
|
||||
*/
|
||||
public function fileName(): string
|
||||
@@ -91,7 +93,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return null|string
|
||||
*/
|
||||
public function getDescriptionAttribute($value)
|
||||
@@ -105,7 +108,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return null|string
|
||||
*/
|
||||
public function getFilenameAttribute($value)
|
||||
@@ -119,7 +123,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return null|string
|
||||
*/
|
||||
public function getMimeAttribute($value)
|
||||
@@ -133,7 +138,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return null|string
|
||||
*/
|
||||
public function getNotesAttribute($value)
|
||||
@@ -147,7 +153,8 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*@codeCoverageIgnore
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
* @return null|string
|
||||
*/
|
||||
public function getTitleAttribute($value)
|
||||
@@ -161,6 +168,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
public function setDescriptionAttribute(string $value)
|
||||
@@ -170,6 +178,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
public function setFilenameAttribute(string $value)
|
||||
@@ -179,6 +188,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
public function setMimeAttribute(string $value)
|
||||
@@ -188,6 +198,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
public function setNotesAttribute(string $value)
|
||||
@@ -197,6 +208,7 @@ class Attachment extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $value
|
||||
*/
|
||||
public function setTitleAttribute(string $value)
|
||||
|
@@ -96,6 +96,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -111,6 +112,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -135,6 +137,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setAmountMaxAttribute($value)
|
||||
@@ -144,6 +147,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setAmountMinAttribute($value)
|
||||
@@ -153,6 +157,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setMatchAttribute($value)
|
||||
@@ -164,6 +169,7 @@ class Bill extends Model
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
|
@@ -84,7 +84,7 @@ class Budget extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Budget $value
|
||||
* @param string $value
|
||||
*
|
||||
* @return Budget
|
||||
*/
|
||||
@@ -111,6 +111,7 @@ class Budget extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -126,6 +127,7 @@ class Budget extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
|
@@ -77,6 +77,7 @@ class BudgetLimit extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setAmountAttribute($value)
|
||||
|
@@ -83,7 +83,7 @@ class Category extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Category $value
|
||||
* @param string $value
|
||||
*
|
||||
* @return Category
|
||||
*/
|
||||
@@ -101,6 +101,7 @@ class Category extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -116,6 +117,7 @@ class Category extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
|
@@ -49,6 +49,7 @@ class Configuration extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return mixed
|
||||
@@ -60,6 +61,7 @@ class Configuration extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setDataAttribute($value)
|
||||
|
@@ -61,6 +61,7 @@ class ExportJob extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $status
|
||||
*/
|
||||
public function change($status)
|
||||
|
@@ -127,6 +127,7 @@ class ImportJob extends Model
|
||||
public function change(string $status): void
|
||||
{
|
||||
if (in_array($status, $this->validStatus)) {
|
||||
Log::debug(sprintf('Job status set (in model) to "%s"', $status));
|
||||
$this->status = $status;
|
||||
$this->save();
|
||||
|
||||
@@ -169,6 +170,7 @@ class ImportJob extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setConfigurationAttribute($value)
|
||||
@@ -178,6 +180,7 @@ class ImportJob extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setExtendedStatusAttribute($value)
|
||||
|
@@ -69,9 +69,9 @@ class PiggyBank extends Model
|
||||
{
|
||||
if (auth()->check()) {
|
||||
$piggyBankId = intval($value);
|
||||
$piggyBank = PiggyBank::where('piggy_banks.id', $piggyBankId)
|
||||
->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')
|
||||
->where('accounts.user_id', auth()->user()->id)->first(['piggy_banks.*']);
|
||||
$piggyBank = self::where('piggy_banks.id', $piggyBankId)
|
||||
->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')
|
||||
->where('accounts.user_id', auth()->user()->id)->first(['piggy_banks.*']);
|
||||
if (!is_null($piggyBank)) {
|
||||
return $piggyBank;
|
||||
}
|
||||
@@ -111,6 +111,7 @@ class PiggyBank extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -196,6 +197,7 @@ class PiggyBank extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setNameAttribute($value)
|
||||
@@ -207,6 +209,7 @@ class PiggyBank extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setTargetamountAttribute($value)
|
||||
|
@@ -62,6 +62,7 @@ class PiggyBankEvent extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setAmountAttribute($value)
|
||||
|
@@ -60,6 +60,7 @@ class PiggyBankRepetition extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $start
|
||||
* @param Carbon $target
|
||||
@@ -73,6 +74,7 @@ class PiggyBankRepetition extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -96,6 +98,7 @@ class PiggyBankRepetition extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setCurrentamountAttribute($value)
|
||||
|
@@ -80,6 +80,7 @@ class Preference extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setDataAttribute($value)
|
||||
|
@@ -1,52 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* SpectreProvider.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class SpectreProvider
|
||||
*/
|
||||
class SpectreProvider extends Model
|
||||
{
|
||||
/**
|
||||
* The attributes that should be casted to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts
|
||||
= [
|
||||
'spectre_id' => 'int',
|
||||
'created_at' => 'datetime',
|
||||
'updated_at' => 'datetime',
|
||||
'deleted_at' => 'datetime',
|
||||
'interactive' => 'boolean',
|
||||
'automatic_fetch' => 'boolean',
|
||||
'data' => 'array',
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = ['spectre_id', 'code', 'mode', 'name', 'status', 'interactive', 'automatic_fetch', 'country_code', 'data'];
|
||||
}
|
@@ -123,6 +123,7 @@ class Tag extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -138,6 +139,7 @@ class Tag extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -171,6 +173,7 @@ class Tag extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setDescriptionAttribute($value)
|
||||
@@ -180,6 +183,7 @@ class Tag extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setTagAttribute($value)
|
||||
|
@@ -108,6 +108,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Builder $query
|
||||
* @param string $table
|
||||
*
|
||||
@@ -168,6 +169,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return float|int
|
||||
@@ -179,6 +181,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Builder $query
|
||||
* @param Carbon $date
|
||||
*/
|
||||
@@ -192,6 +195,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Builder $query
|
||||
* @param Carbon $date
|
||||
*/
|
||||
@@ -205,6 +209,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param Builder $query
|
||||
* @param array $types
|
||||
*/
|
||||
@@ -222,6 +227,7 @@ class Transaction extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setAmountAttribute($value)
|
||||
|
@@ -59,7 +59,7 @@ class TransactionCurrency extends Model
|
||||
{
|
||||
if (auth()->check()) {
|
||||
$currencyId = intval($value);
|
||||
$currency = TransactionCurrency::find($currencyId);
|
||||
$currency = self::find($currencyId);
|
||||
if (!is_null($currency)) {
|
||||
return $currency;
|
||||
}
|
||||
|
@@ -141,6 +141,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
@@ -163,6 +164,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return string
|
||||
@@ -214,6 +216,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return bool
|
||||
@@ -311,6 +314,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -323,6 +327,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param Carbon $date
|
||||
*
|
||||
@@ -335,6 +340,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
*/
|
||||
public function scopeSortCorrectly(EloquentBuilder $query)
|
||||
@@ -346,6 +352,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param EloquentBuilder $query
|
||||
* @param array $types
|
||||
*/
|
||||
@@ -361,6 +368,7 @@ class TransactionJournal extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setDescriptionAttribute($value)
|
||||
|
@@ -72,6 +72,7 @@ class TransactionJournalLink extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return null|string
|
||||
@@ -96,6 +97,7 @@ class TransactionJournalLink extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setCommentAttribute($value): void
|
||||
|
@@ -50,6 +50,7 @@ class TransactionJournalMeta extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*
|
||||
* @return mixed
|
||||
@@ -61,6 +62,7 @@ class TransactionJournalMeta extends Model
|
||||
|
||||
/**
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param $value
|
||||
*/
|
||||
public function setDataAttribute($value)
|
||||
|
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Providers;
|
||||
|
||||
use FireflyIII\Events\RegisteredUser;
|
||||
use FireflyIII\Events\RequestedVersionCheckStatus;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
@@ -54,6 +55,9 @@ class EventServiceProvider extends ServiceProvider
|
||||
// is a User related event.
|
||||
Login::class => [
|
||||
'FireflyIII\Handlers\Events\UserEventHandler@checkSingleUserIsAdmin',
|
||||
|
||||
],
|
||||
RequestedVersionCheckStatus::class => [
|
||||
'FireflyIII\Handlers\Events\VersionCheckEventHandler@checkForUpdates',
|
||||
],
|
||||
|
||||
|
@@ -190,7 +190,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
// update the account:
|
||||
$account->name = $data['name'];
|
||||
$account->active = $data['active'];
|
||||
$account->virtual_balance = $data['virtualBalance'];
|
||||
$account->virtual_balance = trim($data['virtualBalance']) === '' ? '0' : $data['virtualBalance'];
|
||||
$account->iban = $data['iban'];
|
||||
$account->save();
|
||||
|
||||
@@ -424,7 +424,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
'name' => $name . ' initial balance',
|
||||
'active' => false,
|
||||
'iban' => '',
|
||||
'virtualBalance' => 0,
|
||||
'virtualBalance' => '0',
|
||||
];
|
||||
Log::debug('Going to create an opening balance opposing account.');
|
||||
|
||||
|
@@ -252,7 +252,7 @@ trait FindAccountsTrait
|
||||
'accountType' => 'reconcile',
|
||||
'name' => $name,
|
||||
'iban' => null,
|
||||
'virtualBalance' => null,
|
||||
'virtualBalance' => '0',
|
||||
'active' => true,
|
||||
];
|
||||
$account = $this->storeAccount($data);
|
||||
|
@@ -26,7 +26,6 @@ use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\Note;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Models\TransactionJournalLink;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
@@ -54,13 +53,6 @@ interface JournalRepositoryInterface
|
||||
*/
|
||||
public function countTransactions(TransactionJournal $journal): int;
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return Note|null
|
||||
*/
|
||||
public function getNote(TransactionJournal $journal): ?Note;
|
||||
|
||||
/**
|
||||
* Deletes a journal.
|
||||
*
|
||||
@@ -107,6 +99,13 @@ interface JournalRepositoryInterface
|
||||
*/
|
||||
public function getAssetTransaction(TransactionJournal $journal): ?Transaction;
|
||||
|
||||
/**
|
||||
* @param TransactionJournal $journal
|
||||
*
|
||||
* @return Note|null
|
||||
*/
|
||||
public function getNote(TransactionJournal $journal): ?Note;
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
|
@@ -95,7 +95,7 @@ interface LinkTypeRepositoryInterface
|
||||
/**
|
||||
* Store link between two journals.
|
||||
*
|
||||
* @param array $information
|
||||
* @param array $information
|
||||
* @param TransactionJournal $left
|
||||
* @param TransactionJournal $right
|
||||
*
|
||||
|
@@ -37,20 +37,6 @@ interface UserRepositoryInterface
|
||||
*/
|
||||
public function all(): Collection;
|
||||
|
||||
/**
|
||||
* Returns the first user in the DB. Generally only works when there is just one.
|
||||
*
|
||||
* @return null|User
|
||||
*/
|
||||
public function first(): ?User;
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function store(array $data): User;
|
||||
|
||||
/**
|
||||
* Gives a user a role.
|
||||
*
|
||||
@@ -119,6 +105,13 @@ interface UserRepositoryInterface
|
||||
*/
|
||||
public function findByEmail(string $email): ?User;
|
||||
|
||||
/**
|
||||
* Returns the first user in the DB. Generally only works when there is just one.
|
||||
*
|
||||
* @return null|User
|
||||
*/
|
||||
public function first(): ?User;
|
||||
|
||||
/**
|
||||
* Return basic user information.
|
||||
*
|
||||
@@ -136,6 +129,13 @@ interface UserRepositoryInterface
|
||||
*/
|
||||
public function hasRole(User $user, string $role): bool;
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function store(array $data): User;
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
*/
|
||||
|
@@ -93,4 +93,16 @@ class Customer extends SpectreObject
|
||||
{
|
||||
$this->secret = $secret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'identifier' => $this->identifier,
|
||||
'secret' => $this->secret,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
76
app/Services/Spectre/Object/Token.php
Normal file
76
app/Services/Spectre/Object/Token.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
/**
|
||||
* Token.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Object;
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
/**
|
||||
* Class Token
|
||||
*/
|
||||
class Token extends SpectreObject
|
||||
{
|
||||
/** @var string */
|
||||
private $connectUrl;
|
||||
/** @var Carbon */
|
||||
private $expiresAt;
|
||||
/** @var string */
|
||||
private $token;
|
||||
|
||||
/**
|
||||
* Token constructor.
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->token = $data['token'];
|
||||
$this->expiresAt = new Carbon($data['expires_at']);
|
||||
$this->connectUrl = $data['connect_url'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getConnectUrl(): string
|
||||
{
|
||||
return $this->connectUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Carbon
|
||||
*/
|
||||
public function getExpiresAt(): Carbon
|
||||
{
|
||||
return $this->expiresAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getToken(): string
|
||||
{
|
||||
return $this->token;
|
||||
}
|
||||
|
||||
}
|
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* CreateLoginRequest.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Request;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Services\Spectre\Object\Customer;
|
||||
|
||||
/**
|
||||
* Class CreateLoginRequest
|
||||
*/
|
||||
class CreateLoginRequest extends SpectreRequest
|
||||
{
|
||||
/** @var Customer */
|
||||
private $customer;
|
||||
/** @var array */
|
||||
private $mandatoryFields = [];
|
||||
/** @var SpectreProvider */
|
||||
private $provider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function call(): void
|
||||
{
|
||||
// add mandatory fields to login object
|
||||
$data = [
|
||||
'customer_id' => $this->customer->getId(),
|
||||
'country_code' => $this->provider->country_code,
|
||||
'provider_code' => $this->provider->code,
|
||||
'credentials' => $this->buildCredentials(),
|
||||
'daily_refresh' => true,
|
||||
'fetch_type' => 'recent',
|
||||
'include_fake_providers' => true,
|
||||
];
|
||||
$uri = '/api/v3/logins';
|
||||
$response = $this->sendSignedSpectrePost($uri, $data);
|
||||
echo '<pre>';
|
||||
print_r($response);
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Customer $customer
|
||||
*/
|
||||
public function setCustomer(Customer $customer): void
|
||||
{
|
||||
$this->customer = $customer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $mandatoryFields
|
||||
*/
|
||||
public function setMandatoryFields(array $mandatoryFields): void
|
||||
{
|
||||
$this->mandatoryFields = $mandatoryFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SpectreProvider $provider
|
||||
*/
|
||||
public function setProvider(SpectreProvider $provider): void
|
||||
{
|
||||
$this->provider = $provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function buildCredentials(): array
|
||||
{
|
||||
$return = [];
|
||||
/** @var array $requiredField */
|
||||
foreach ($this->provider->data['required_fields'] as $requiredField) {
|
||||
$fieldName = $requiredField['name'];
|
||||
if (!isset($this->mandatoryFields[$fieldName])) {
|
||||
throw new FireflyException(sprintf('Mandatory field "%s" is missing from job.', $fieldName));
|
||||
}
|
||||
$return[$fieldName] = $this->mandatoryFields[$fieldName];
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
}
|
94
app/Services/Spectre/Request/CreateTokenRequest.php
Normal file
94
app/Services/Spectre/Request/CreateTokenRequest.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/**
|
||||
* CreateTokenRequest.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Request;
|
||||
|
||||
use FireflyIII\Services\Spectre\Object\Customer;
|
||||
use FireflyIII\Services\Spectre\Object\Token;
|
||||
|
||||
|
||||
/**
|
||||
* Class CreateTokenRequest
|
||||
*/
|
||||
class CreateTokenRequest extends SpectreRequest
|
||||
{
|
||||
/** @var Customer */
|
||||
private $customer;
|
||||
|
||||
/** @var Token */
|
||||
private $token;
|
||||
|
||||
/** @var string */
|
||||
private $uri;
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function call(): void
|
||||
{
|
||||
// add mandatory fields to login object
|
||||
$data = [
|
||||
'data' => [
|
||||
'customer_id' => $this->customer->getId(),
|
||||
'fetch_type' => 'recent',
|
||||
'daily_refresh' => true,
|
||||
'include_fake_providers' => true,
|
||||
'show_consent_confirmation' => true,
|
||||
'credentials_strategy' => 'ask',
|
||||
'return_to' => $this->uri,
|
||||
],
|
||||
];
|
||||
$uri = '/api/v3/tokens/create';
|
||||
$response = $this->sendSignedSpectrePost($uri, $data);
|
||||
$this->token = new Token($response['data']);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Token
|
||||
*/
|
||||
public function getToken(): Token
|
||||
{
|
||||
return $this->token;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Customer $customer
|
||||
*/
|
||||
public function setCustomer(Customer $customer): void
|
||||
{
|
||||
$this->customer = $customer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $uri
|
||||
*/
|
||||
public function setUri(string $uri): void
|
||||
{
|
||||
$this->uri = $uri;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ListLoginsRequest.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Request;
|
||||
|
||||
use FireflyIII\Services\Spectre\Object\Customer;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class ListLoginsRequest
|
||||
*/
|
||||
class ListLoginsRequest extends SpectreRequest
|
||||
{
|
||||
/** @var Customer */
|
||||
protected $customer;
|
||||
|
||||
/** @var array */
|
||||
protected $logins = [];
|
||||
|
||||
/**
|
||||
*
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function call(): void
|
||||
{
|
||||
$hasNextPage = true;
|
||||
$nextId = 0;
|
||||
while ($hasNextPage) {
|
||||
Log::debug(sprintf('Now calling list-logins for next_id %d', $nextId));
|
||||
$parameters = ['customer_id' => $this->customer->getId(), 'from_id' => $nextId];
|
||||
$uri = '/api/v3/logins?' . http_build_query($parameters);
|
||||
$response = $this->sendSignedSpectreGet($uri, []);
|
||||
|
||||
// count entries:
|
||||
Log::debug(sprintf('Found %d entries in data-array', count($response['data'])));
|
||||
|
||||
// extract next ID
|
||||
$hasNextPage = false;
|
||||
if (isset($response['meta']['next_id']) && intval($response['meta']['next_id']) > $nextId) {
|
||||
$hasNextPage = true;
|
||||
$nextId = $response['meta']['next_id'];
|
||||
Log::debug(sprintf('Next ID is now %d.', $nextId));
|
||||
} else {
|
||||
Log::debug('No next page.');
|
||||
}
|
||||
|
||||
// store providers:
|
||||
foreach ($response['data'] as $loginArray) {
|
||||
var_dump($loginArray);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Customer
|
||||
*/
|
||||
public function getCustomer(): Customer
|
||||
{
|
||||
return $this->customer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Customer $customer
|
||||
*/
|
||||
public function setCustomer(Customer $customer): void
|
||||
{
|
||||
$this->customer = $customer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getLogins(): array
|
||||
{
|
||||
return $this->logins;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -1,81 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* ListProvidersRequest.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Spectre\Request;
|
||||
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class ListProvidersRequest
|
||||
*/
|
||||
class ListProvidersRequest extends SpectreRequest
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $providers = [];
|
||||
|
||||
/**
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function call(): void
|
||||
{
|
||||
$hasNextPage = true;
|
||||
$nextId = 0;
|
||||
while ($hasNextPage) {
|
||||
Log::debug(sprintf('Now calling for next_id %d', $nextId));
|
||||
$parameters = ['include_fake_providers' => 'true', 'include_provider_fields' => 'true', 'from_id' => $nextId];
|
||||
$uri = '/api/v3/providers?' . http_build_query($parameters);
|
||||
$response = $this->sendSignedSpectreGet($uri, []);
|
||||
|
||||
// count entries:
|
||||
Log::debug(sprintf('Found %d entries in data-array', count($response['data'])));
|
||||
|
||||
// extract next ID
|
||||
$hasNextPage = false;
|
||||
if (isset($response['meta']['next_id']) && intval($response['meta']['next_id']) > $nextId) {
|
||||
$hasNextPage = true;
|
||||
$nextId = $response['meta']['next_id'];
|
||||
Log::debug(sprintf('Next ID is now %d.', $nextId));
|
||||
} else {
|
||||
Log::debug('No next page.');
|
||||
}
|
||||
|
||||
// store providers:
|
||||
foreach ($response['data'] as $providerArray) {
|
||||
$providerId = $providerArray['id'];
|
||||
$this->providers[$providerId] = $providerArray;
|
||||
Log::debug(sprintf('Stored provider #%d', $providerId));
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getProviders(): array
|
||||
{
|
||||
return $this->providers;
|
||||
}
|
||||
}
|
@@ -37,19 +37,13 @@ class NewCustomerRequest extends SpectreRequest
|
||||
*/
|
||||
public function call(): void
|
||||
{
|
||||
$data = [
|
||||
$data = [
|
||||
'data' => [
|
||||
'identifier' => 'default_ff3_customer',
|
||||
],
|
||||
];
|
||||
$uri = '/api/v3/customers/';
|
||||
//$response = $this->sendSignedSpectrePost($uri, $data);
|
||||
$response = ['data' => [
|
||||
'id' => 527858,
|
||||
'identifier' => 'default_ff3_customer',
|
||||
'secret' => 'qpZjRPJRTb6mMcQgwDkssZ3fQVVDPIH04zBlkKC6MvI',
|
||||
],
|
||||
];
|
||||
$uri = '/api/v3/customers/';
|
||||
$response = $this->sendSignedSpectrePost($uri, $data);
|
||||
// create customer:
|
||||
$this->customer = new Customer($response['data']);
|
||||
|
||||
|
@@ -40,8 +40,6 @@ abstract class SpectreRequest
|
||||
* @var int
|
||||
*/
|
||||
protected $expiresAt = 0;
|
||||
/** @var ServerPublicKey */
|
||||
protected $serverPublicKey;
|
||||
/** @var string */
|
||||
protected $serviceSecret = '';
|
||||
/** @var string */
|
||||
@@ -104,22 +102,6 @@ abstract class SpectreRequest
|
||||
return $this->server;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ServerPublicKey
|
||||
*/
|
||||
public function getServerPublicKey(): ServerPublicKey
|
||||
{
|
||||
return $this->serverPublicKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ServerPublicKey $serverPublicKey
|
||||
*/
|
||||
public function setServerPublicKey(ServerPublicKey $serverPublicKey)
|
||||
{
|
||||
$this->serverPublicKey = $serverPublicKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
@@ -144,14 +126,6 @@ abstract class SpectreRequest
|
||||
$this->privateKey = $privateKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $secret
|
||||
*/
|
||||
public function setSecret(string $secret)
|
||||
{
|
||||
$this->secret = $secret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $method
|
||||
* @param string $uri
|
||||
@@ -169,8 +143,6 @@ abstract class SpectreRequest
|
||||
if ('get' === strtolower($method) || 'delete' === strtolower($method)) {
|
||||
$data = '';
|
||||
}
|
||||
// base64(sha1_signature(private_key, "Expires-at|request_method|original_url|post_body|md5_of_uploaded_file|")))
|
||||
// Prepare the signature
|
||||
$toSign = $this->expiresAt . '|' . strtoupper($method) . '|' . $uri . '|' . $data . ''; // no file so no content there.
|
||||
Log::debug(sprintf('String to sign: "%s"', $toSign));
|
||||
$signature = '';
|
||||
|
@@ -202,7 +202,7 @@ class Amount
|
||||
/**
|
||||
* @return \FireflyIII\Models\TransactionCurrency
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function getDefaultCurrency(): TransactionCurrency
|
||||
{
|
||||
@@ -216,7 +216,7 @@ class Amount
|
||||
*
|
||||
* @return \FireflyIII\Models\TransactionCurrency
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function getDefaultCurrencyByUser(User $user): TransactionCurrency
|
||||
{
|
||||
|
@@ -24,7 +24,6 @@ namespace FireflyIII\Support\Binder;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use FireflyIII\Helpers\FiscalHelper;
|
||||
use FireflyIII\Helpers\FiscalHelperInterface;
|
||||
use Illuminate\Routing\Route;
|
||||
use Log;
|
||||
|
@@ -25,6 +25,7 @@ namespace FireflyIII\Support;
|
||||
use Amount as Amt;
|
||||
use Carbon\Carbon;
|
||||
use Eloquent;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use RuntimeException;
|
||||
@@ -36,11 +37,12 @@ use Session;
|
||||
class ExpandedForm
|
||||
{
|
||||
/**
|
||||
* @param $name
|
||||
* @param null $value
|
||||
* @param array $options
|
||||
* @param string $name
|
||||
* @param null $value
|
||||
* @param array $options
|
||||
*
|
||||
* @return string
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function amount(string $name, $value = null, array $options = []): string
|
||||
{
|
||||
@@ -53,6 +55,7 @@ class ExpandedForm
|
||||
* @param array $options
|
||||
*
|
||||
* @return string
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function amountSmall(string $name, $value = null, array $options = []): string
|
||||
{
|
||||
@@ -65,6 +68,8 @@ class ExpandedForm
|
||||
* @param array $options
|
||||
*
|
||||
* @return string
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*
|
||||
*/
|
||||
public function balance(string $name, $value = null, array $options = []): string
|
||||
{
|
||||
@@ -594,8 +599,7 @@ class ExpandedForm
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws \Throwable
|
||||
* @throws Facades\FireflyException
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
private function currencyField(string $name, string $view, $value = null, array $options = []): string
|
||||
{
|
||||
|
@@ -1,121 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* InputMandatory.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Support\Import\Configuration\Spectre;
|
||||
|
||||
use Crypt;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Support\Import\Configuration\ConfigurationInterface;
|
||||
|
||||
/**
|
||||
* Class InputMandatory
|
||||
*/
|
||||
class InputMandatory implements ConfigurationInterface
|
||||
{
|
||||
/** @var ImportJob */
|
||||
private $job;
|
||||
|
||||
/**
|
||||
* Get the data necessary to show the configuration screen.
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getData(): array
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$providerId = $config['provider'];
|
||||
$provider = SpectreProvider::where('spectre_id', $providerId)->first();
|
||||
if (is_null($provider)) {
|
||||
throw new FireflyException(sprintf('Cannot find Spectre provider with ID #%d', $providerId));
|
||||
}
|
||||
$fields = $provider->data['required_fields'] ?? [];
|
||||
$positions = [];
|
||||
// Obtain a list of columns
|
||||
foreach ($fields as $key => $row) {
|
||||
$positions[$key] = $row['position'];
|
||||
}
|
||||
array_multisort($positions, SORT_ASC, $fields);
|
||||
$country = SelectCountry::$allCountries[$config['country']] ?? $config['country'];
|
||||
|
||||
return compact('provider', 'country', 'fields');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return possible warning to user.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWarningMessage(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ImportJob $job
|
||||
*/
|
||||
public function setJob(ImportJob $job)
|
||||
{
|
||||
$this->job = $job;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the result.
|
||||
*
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function storeConfiguration(array $data): bool
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$providerId = $config['provider'];
|
||||
$provider = SpectreProvider::where('spectre_id', $providerId)->first();
|
||||
if (is_null($provider)) {
|
||||
throw new FireflyException(sprintf('Cannot find Spectre provider with ID #%d', $providerId));
|
||||
}
|
||||
$mandatory = [];
|
||||
$fields = $provider->data['required_fields'] ?? [];
|
||||
foreach ($fields as $field) {
|
||||
$name = $field['name'];
|
||||
$mandatory[$name] = Crypt::encrypt($data[$name]) ?? null;
|
||||
}
|
||||
|
||||
// store in config of job:
|
||||
$config['mandatory-fields'] = $mandatory;
|
||||
$config['has-input-mandatory'] = true;
|
||||
$this->job->configuration = $config;
|
||||
$this->job->save();
|
||||
|
||||
// try to grab login for this job. See what happens?
|
||||
// fire job that creates login object. user is redirected to "wait here" page (status page). Page should
|
||||
// refresh and go back to interactive when user is supposed to enter SMS code or something.
|
||||
// otherwise start downloading stuff
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -1,348 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* SelectCountry.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Support\Import\Configuration\Spectre;
|
||||
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Support\Import\Configuration\ConfigurationInterface;
|
||||
|
||||
/**
|
||||
* Class SelectCountry
|
||||
*/
|
||||
class SelectCountry implements ConfigurationInterface
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
public static $allCountries
|
||||
= [
|
||||
'AF' => 'Afghanistan',
|
||||
'AX' => 'Aland Islands',
|
||||
'AL' => 'Albania',
|
||||
'DZ' => 'Algeria',
|
||||
'AS' => 'American Samoa',
|
||||
'AD' => 'Andorra',
|
||||
'AO' => 'Angola',
|
||||
'AI' => 'Anguilla',
|
||||
'AQ' => 'Antarctica',
|
||||
'AG' => 'Antigua and Barbuda',
|
||||
'AR' => 'Argentina',
|
||||
'AM' => 'Armenia',
|
||||
'AW' => 'Aruba',
|
||||
'AU' => 'Australia',
|
||||
'AT' => 'Austria',
|
||||
'AZ' => 'Azerbaijan',
|
||||
'BS' => 'Bahamas',
|
||||
'BH' => 'Bahrain',
|
||||
'BD' => 'Bangladesh',
|
||||
'BB' => 'Barbados',
|
||||
'BY' => 'Belarus',
|
||||
'BE' => 'Belgium',
|
||||
'BZ' => 'Belize',
|
||||
'BJ' => 'Benin',
|
||||
'BM' => 'Bermuda',
|
||||
'BT' => 'Bhutan',
|
||||
'BO' => 'Bolivia',
|
||||
'BQ' => 'Bonaire, Saint Eustatius and Saba',
|
||||
'BA' => 'Bosnia and Herzegovina',
|
||||
'BW' => 'Botswana',
|
||||
'BV' => 'Bouvet Island',
|
||||
'BR' => 'Brazil',
|
||||
'IO' => 'British Indian Ocean Territory',
|
||||
'VG' => 'British Virgin Islands',
|
||||
'BN' => 'Brunei',
|
||||
'BG' => 'Bulgaria',
|
||||
'BF' => 'Burkina Faso',
|
||||
'BI' => 'Burundi',
|
||||
'KH' => 'Cambodia',
|
||||
'CM' => 'Cameroon',
|
||||
'CA' => 'Canada',
|
||||
'CV' => 'Cape Verde',
|
||||
'KY' => 'Cayman Islands',
|
||||
'CF' => 'Central African Republic',
|
||||
'TD' => 'Chad',
|
||||
'CL' => 'Chile',
|
||||
'CN' => 'China',
|
||||
'CX' => 'Christmas Island',
|
||||
'CC' => 'Cocos Islands',
|
||||
'CO' => 'Colombia',
|
||||
'KM' => 'Comoros',
|
||||
'CK' => 'Cook Islands',
|
||||
'CR' => 'Costa Rica',
|
||||
'HR' => 'Croatia',
|
||||
'CU' => 'Cuba',
|
||||
'CW' => 'Curacao',
|
||||
'CY' => 'Cyprus',
|
||||
'CZ' => 'Czech Republic',
|
||||
'CD' => 'Democratic Republic of the Congo',
|
||||
'DK' => 'Denmark',
|
||||
'DJ' => 'Djibouti',
|
||||
'DM' => 'Dominica',
|
||||
'DO' => 'Dominican Republic',
|
||||
'TL' => 'East Timor',
|
||||
'EC' => 'Ecuador',
|
||||
'EG' => 'Egypt',
|
||||
'SV' => 'El Salvador',
|
||||
'GQ' => 'Equatorial Guinea',
|
||||
'ER' => 'Eritrea',
|
||||
'EE' => 'Estonia',
|
||||
'ET' => 'Ethiopia',
|
||||
'FK' => 'Falkland Islands',
|
||||
'FO' => 'Faroe Islands',
|
||||
'FJ' => 'Fiji',
|
||||
'FI' => 'Finland',
|
||||
'FR' => 'France',
|
||||
'GF' => 'French Guiana',
|
||||
'PF' => 'French Polynesia',
|
||||
'TF' => 'French Southern Territories',
|
||||
'GA' => 'Gabon',
|
||||
'GM' => 'Gambia',
|
||||
'GE' => 'Georgia',
|
||||
'DE' => 'Germany',
|
||||
'GH' => 'Ghana',
|
||||
'GI' => 'Gibraltar',
|
||||
'GR' => 'Greece',
|
||||
'GL' => 'Greenland',
|
||||
'GD' => 'Grenada',
|
||||
'GP' => 'Guadeloupe',
|
||||
'GU' => 'Guam',
|
||||
'GT' => 'Guatemala',
|
||||
'GG' => 'Guernsey',
|
||||
'GN' => 'Guinea',
|
||||
'GW' => 'Guinea-Bissau',
|
||||
'GY' => 'Guyana',
|
||||
'HT' => 'Haiti',
|
||||
'HM' => 'Heard Island and McDonald Islands',
|
||||
'HN' => 'Honduras',
|
||||
'HK' => 'Hong Kong',
|
||||
'HU' => 'Hungary',
|
||||
'IS' => 'Iceland',
|
||||
'IN' => 'India',
|
||||
'ID' => 'Indonesia',
|
||||
'IR' => 'Iran',
|
||||
'IQ' => 'Iraq',
|
||||
'IE' => 'Ireland',
|
||||
'IM' => 'Isle of Man',
|
||||
'IL' => 'Israel',
|
||||
'IT' => 'Italy',
|
||||
'CI' => 'Ivory Coast',
|
||||
'JM' => 'Jamaica',
|
||||
'JP' => 'Japan',
|
||||
'JE' => 'Jersey',
|
||||
'JO' => 'Jordan',
|
||||
'KZ' => 'Kazakhstan',
|
||||
'KE' => 'Kenya',
|
||||
'KI' => 'Kiribati',
|
||||
'XK' => 'Kosovo',
|
||||
'KW' => 'Kuwait',
|
||||
'KG' => 'Kyrgyzstan',
|
||||
'LA' => 'Laos',
|
||||
'LV' => 'Latvia',
|
||||
'LB' => 'Lebanon',
|
||||
'LS' => 'Lesotho',
|
||||
'LR' => 'Liberia',
|
||||
'LY' => 'Libya',
|
||||
'LI' => 'Liechtenstein',
|
||||
'LT' => 'Lithuania',
|
||||
'LU' => 'Luxembourg',
|
||||
'MO' => 'Macao',
|
||||
'MK' => 'Macedonia',
|
||||
'MG' => 'Madagascar',
|
||||
'MW' => 'Malawi',
|
||||
'MY' => 'Malaysia',
|
||||
'MV' => 'Maldives',
|
||||
'ML' => 'Mali',
|
||||
'MT' => 'Malta',
|
||||
'MH' => 'Marshall Islands',
|
||||
'MQ' => 'Martinique',
|
||||
'MR' => 'Mauritania',
|
||||
'MU' => 'Mauritius',
|
||||
'YT' => 'Mayotte',
|
||||
'MX' => 'Mexico',
|
||||
'FM' => 'Micronesia',
|
||||
'MD' => 'Moldova',
|
||||
'MC' => 'Monaco',
|
||||
'MN' => 'Mongolia',
|
||||
'ME' => 'Montenegro',
|
||||
'MS' => 'Montserrat',
|
||||
'MA' => 'Morocco',
|
||||
'MZ' => 'Mozambique',
|
||||
'MM' => 'Myanmar',
|
||||
'NA' => 'Namibia',
|
||||
'NR' => 'Nauru',
|
||||
'NP' => 'Nepal',
|
||||
'NL' => 'Netherlands',
|
||||
'NC' => 'New Caledonia',
|
||||
'NZ' => 'New Zealand',
|
||||
'NI' => 'Nicaragua',
|
||||
'NE' => 'Niger',
|
||||
'NG' => 'Nigeria',
|
||||
'NU' => 'Niue',
|
||||
'NF' => 'Norfolk Island',
|
||||
'KP' => 'North Korea',
|
||||
'MP' => 'Northern Mariana Islands',
|
||||
'NO' => 'Norway',
|
||||
'OM' => 'Oman',
|
||||
'PK' => 'Pakistan',
|
||||
'PW' => 'Palau',
|
||||
'PS' => 'Palestinian Territory',
|
||||
'PA' => 'Panama',
|
||||
'PG' => 'Papua New Guinea',
|
||||
'PY' => 'Paraguay',
|
||||
'PE' => 'Peru',
|
||||
'PH' => 'Philippines',
|
||||
'PN' => 'Pitcairn',
|
||||
'PL' => 'Poland',
|
||||
'PT' => 'Portugal',
|
||||
'PR' => 'Puerto Rico',
|
||||
'QA' => 'Qatar',
|
||||
'CG' => 'Republic of the Congo',
|
||||
'RE' => 'Reunion',
|
||||
'RO' => 'Romania',
|
||||
'RU' => 'Russia',
|
||||
'RW' => 'Rwanda',
|
||||
'BL' => 'Saint Barthelemy',
|
||||
'SH' => 'Saint Helena',
|
||||
'KN' => 'Saint Kitts and Nevis',
|
||||
'LC' => 'Saint Lucia',
|
||||
'MF' => 'Saint Martin',
|
||||
'PM' => 'Saint Pierre and Miquelon',
|
||||
'VC' => 'Saint Vincent and the Grenadines',
|
||||
'WS' => 'Samoa',
|
||||
'SM' => 'San Marino',
|
||||
'ST' => 'Sao Tome and Principe',
|
||||
'SA' => 'Saudi Arabia',
|
||||
'SN' => 'Senegal',
|
||||
'RS' => 'Serbia',
|
||||
'SC' => 'Seychelles',
|
||||
'SL' => 'Sierra Leone',
|
||||
'SG' => 'Singapore',
|
||||
'SX' => 'Sint Maarten',
|
||||
'SK' => 'Slovakia',
|
||||
'SI' => 'Slovenia',
|
||||
'SB' => 'Solomon Islands',
|
||||
'SO' => 'Somalia',
|
||||
'ZA' => 'South Africa',
|
||||
'GS' => 'South Georgia and the South Sandwich Islands',
|
||||
'KR' => 'South Korea',
|
||||
'SS' => 'South Sudan',
|
||||
'ES' => 'Spain',
|
||||
'LK' => 'Sri Lanka',
|
||||
'SD' => 'Sudan',
|
||||
'SR' => 'Suriname',
|
||||
'SJ' => 'Svalbard and Jan Mayen',
|
||||
'SZ' => 'Swaziland',
|
||||
'SE' => 'Sweden',
|
||||
'CH' => 'Switzerland',
|
||||
'SY' => 'Syria',
|
||||
'TW' => 'Taiwan',
|
||||
'TJ' => 'Tajikistan',
|
||||
'TZ' => 'Tanzania',
|
||||
'TH' => 'Thailand',
|
||||
'TG' => 'Togo',
|
||||
'TK' => 'Tokelau',
|
||||
'TO' => 'Tonga',
|
||||
'TT' => 'Trinidad and Tobago',
|
||||
'TN' => 'Tunisia',
|
||||
'TR' => 'Turkey',
|
||||
'TM' => 'Turkmenistan',
|
||||
'TC' => 'Turks and Caicos Islands',
|
||||
'TV' => 'Tuvalu',
|
||||
'VI' => 'U.S. Virgin Islands',
|
||||
'UG' => 'Uganda',
|
||||
'UA' => 'Ukraine',
|
||||
'AE' => 'United Arab Emirates',
|
||||
'GB' => 'United Kingdom',
|
||||
'US' => 'United States',
|
||||
'UM' => 'United States Minor Outlying Islands',
|
||||
'UY' => 'Uruguay',
|
||||
'UZ' => 'Uzbekistan',
|
||||
'VU' => 'Vanuatu',
|
||||
'VA' => 'Vatican',
|
||||
'VE' => 'Venezuela',
|
||||
'VN' => 'Vietnam',
|
||||
'WF' => 'Wallis and Futuna',
|
||||
'EH' => 'Western Sahara',
|
||||
'YE' => 'Yemen',
|
||||
'ZM' => 'Zambia',
|
||||
'ZW' => 'Zimbabwe',
|
||||
'XF' => 'Fake Country (for testing)',
|
||||
'XO' => 'Other financial applications',
|
||||
];
|
||||
/** @var ImportJob */
|
||||
private $job;
|
||||
|
||||
/**
|
||||
* Get the data necessary to show the configuration screen.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getData(): array
|
||||
{
|
||||
$providers = SpectreProvider::get();
|
||||
$countries = [];
|
||||
/** @var SpectreProvider $provider */
|
||||
foreach ($providers as $provider) {
|
||||
$countries[$provider->country_code] = self::$allCountries[$provider->country_code] ?? $provider->country_code;
|
||||
}
|
||||
asort($countries);
|
||||
|
||||
return compact('countries');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return possible warning to user.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWarningMessage(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ImportJob $job
|
||||
*/
|
||||
public function setJob(ImportJob $job)
|
||||
{
|
||||
$this->job = $job;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the result.
|
||||
*
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function storeConfiguration(array $data): bool
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$config['country'] = $data['country_code'] ?? 'XF'; // default to fake country.
|
||||
$config['selected-country'] = true;
|
||||
$this->job->configuration = $config;
|
||||
$this->job->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* SelectProvider.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Support\Import\Configuration\Spectre;
|
||||
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Models\SpectreProvider;
|
||||
use FireflyIII\Support\Import\Configuration\ConfigurationInterface;
|
||||
|
||||
/**
|
||||
* Class SelectProvider
|
||||
*/
|
||||
class SelectProvider implements ConfigurationInterface
|
||||
{
|
||||
/** @var ImportJob */
|
||||
private $job;
|
||||
|
||||
/**
|
||||
* Get the data necessary to show the configuration screen.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getData(): array
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$selection = SpectreProvider::where('country_code', $config['country'])->where('status', 'active')->get();
|
||||
$providers = [];
|
||||
/** @var SpectreProvider $provider */
|
||||
foreach ($selection as $provider) {
|
||||
$providerId = $provider->spectre_id;
|
||||
$name = $provider->data['name'];
|
||||
$providers[$providerId] = $name;
|
||||
}
|
||||
$country = SelectCountry::$allCountries[$config['country']] ?? $config['country'];
|
||||
|
||||
return compact('providers', 'country');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return possible warning to user.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getWarningMessage(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ImportJob $job
|
||||
*/
|
||||
public function setJob(ImportJob $job)
|
||||
{
|
||||
$this->job = $job;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the result.
|
||||
*
|
||||
* @param array $data
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function storeConfiguration(array $data): bool
|
||||
{
|
||||
$config = $this->job->configuration;
|
||||
$config['provider'] = intval($data['provider_code']) ?? 0; // default to fake country.
|
||||
$config['selected-provider'] = true;
|
||||
$this->job->configuration = $config;
|
||||
$this->job->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -63,6 +63,7 @@ class BunqInformation implements InformationInterface
|
||||
* @return array
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getAccounts(): array
|
||||
{
|
||||
|
@@ -1,217 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* SpectreInformation.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Support\Import\Information;
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Services\Bunq\Object\Alias;
|
||||
use FireflyIII\Services\Bunq\Object\MonetaryAccountBank;
|
||||
use FireflyIII\Services\Bunq\Request\DeleteDeviceSessionRequest;
|
||||
use FireflyIII\Services\Bunq\Request\DeviceSessionRequest;
|
||||
use FireflyIII\Services\Bunq\Request\ListMonetaryAccountRequest;
|
||||
use FireflyIII\Services\Bunq\Request\ListUserRequest;
|
||||
use FireflyIII\Services\Bunq\Token\SessionToken;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
use Preferences;
|
||||
|
||||
/**
|
||||
* Class SpectreInformation
|
||||
*/
|
||||
class SpectreInformation implements InformationInterface
|
||||
{
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* Returns a collection of accounts. Preferrably, these follow a uniform Firefly III format so they can be managed over banks.
|
||||
*
|
||||
* The format for these bank accounts is basically this:
|
||||
*
|
||||
* id: bank specific id
|
||||
* name: bank appointed name
|
||||
* number: account number (usually IBAN)
|
||||
* currency: ISO code of currency
|
||||
* balance: current balance
|
||||
*
|
||||
*
|
||||
* any other fields are optional but can be useful:
|
||||
* image: logo or account specific thing
|
||||
* color: any associated color.
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function getAccounts(): array
|
||||
{
|
||||
// cache for an hour:
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty('bunq.get-accounts');
|
||||
$cache->addProperty(date('dmy h'));
|
||||
if ($cache->has()) {
|
||||
return $cache->get(); // @codeCoverageIgnore
|
||||
}
|
||||
Log::debug('Now in getAccounts()');
|
||||
$sessionToken = $this->startSession();
|
||||
$userId = $this->getUserInformation($sessionToken);
|
||||
// get list of Bunq accounts:
|
||||
$accounts = $this->getMonetaryAccounts($sessionToken, $userId);
|
||||
$return = [];
|
||||
/** @var MonetaryAccountBank $account */
|
||||
foreach ($accounts as $account) {
|
||||
$current = [
|
||||
'id' => $account->getId(),
|
||||
'name' => $account->getDescription(),
|
||||
'currency' => $account->getCurrency(),
|
||||
'balance' => $account->getBalance()->getValue(),
|
||||
'color' => $account->getSetting()->getColor(),
|
||||
];
|
||||
/** @var Alias $alias */
|
||||
foreach ($account->getAliases() as $alias) {
|
||||
if ('IBAN' === $alias->getType()) {
|
||||
$current['number'] = $alias->getValue();
|
||||
}
|
||||
}
|
||||
$return[] = $current;
|
||||
}
|
||||
$cache->store($return);
|
||||
|
||||
$this->closeSession($sessionToken);
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the user for this Prerequisites-routine. Class is expected to implement and save this.
|
||||
*
|
||||
* @param User $user
|
||||
*/
|
||||
public function setUser(User $user): void
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SessionToken $sessionToken
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function closeSession(SessionToken $sessionToken): void
|
||||
{
|
||||
Log::debug('Going to close session');
|
||||
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key')->data;
|
||||
$serverPublicKey = Preferences::getForUser($this->user, 'bunq_server_public_key')->data;
|
||||
$privateKey = Preferences::getForUser($this->user, 'bunq_private_key')->data;
|
||||
$request = new DeleteDeviceSessionRequest();
|
||||
$request->setSecret($apiKey);
|
||||
$request->setPrivateKey($privateKey);
|
||||
$request->setServerPublicKey($serverPublicKey);
|
||||
$request->setSessionToken($sessionToken);
|
||||
$request->call();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SessionToken $sessionToken
|
||||
* @param int $userId
|
||||
*
|
||||
* @return Collection
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function getMonetaryAccounts(SessionToken $sessionToken, int $userId): Collection
|
||||
{
|
||||
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key')->data;
|
||||
$serverPublicKey = Preferences::getForUser($this->user, 'bunq_server_public_key')->data;
|
||||
$privateKey = Preferences::getForUser($this->user, 'bunq_private_key')->data;
|
||||
$request = new ListMonetaryAccountRequest;
|
||||
|
||||
$request->setSessionToken($sessionToken);
|
||||
$request->setSecret($apiKey);
|
||||
$request->setServerPublicKey($serverPublicKey);
|
||||
$request->setPrivateKey($privateKey);
|
||||
$request->setUserId($userId);
|
||||
$request->call();
|
||||
|
||||
return $request->getMonetaryAccounts();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SessionToken $sessionToken
|
||||
*
|
||||
* @return int
|
||||
*
|
||||
* @throws FireflyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function getUserInformation(SessionToken $sessionToken): int
|
||||
{
|
||||
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key')->data;
|
||||
$serverPublicKey = Preferences::getForUser($this->user, 'bunq_server_public_key')->data;
|
||||
$privateKey = Preferences::getForUser($this->user, 'bunq_private_key')->data;
|
||||
$request = new ListUserRequest;
|
||||
$request->setSessionToken($sessionToken);
|
||||
$request->setSecret($apiKey);
|
||||
$request->setServerPublicKey($serverPublicKey);
|
||||
$request->setPrivateKey($privateKey);
|
||||
$request->call();
|
||||
// return the first that isn't null?
|
||||
$company = $request->getUserCompany();
|
||||
if ($company->getId() > 0) {
|
||||
return $company->getId();
|
||||
}
|
||||
$user = $request->getUserPerson();
|
||||
if ($user->getId() > 0) {
|
||||
return $user->getId();
|
||||
}
|
||||
throw new FireflyException('Expected user or company from Bunq, but got neither.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SessionToken
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function startSession(): SessionToken
|
||||
{
|
||||
Log::debug('Now in startSession.');
|
||||
$apiKey = Preferences::getForUser($this->user, 'bunq_api_key')->data;
|
||||
$serverPublicKey = Preferences::getForUser($this->user, 'bunq_server_public_key')->data;
|
||||
$privateKey = Preferences::getForUser($this->user, 'bunq_private_key')->data;
|
||||
$installationToken = Preferences::getForUser($this->user, 'bunq_installation_token')->data;
|
||||
$request = new DeviceSessionRequest();
|
||||
$request->setSecret($apiKey);
|
||||
$request->setServerPublicKey($serverPublicKey);
|
||||
$request->setPrivateKey($privateKey);
|
||||
$request->setInstallationToken($installationToken);
|
||||
$request->call();
|
||||
$sessionToken = $request->getSessionToken();
|
||||
Log::debug(sprintf('Now have got session token: %s', serialize($sessionToken)));
|
||||
|
||||
return $sessionToken;
|
||||
}
|
||||
}
|
@@ -473,6 +473,7 @@ class Navigation
|
||||
$date->subMonths($subtract);
|
||||
Log::debug(sprintf('%s is in modifier map with value %d, execute subMonths with argument %d', $repeatFreq, $modifierMap[$repeatFreq], $subtract));
|
||||
Log::debug(sprintf('subtractPeriod: resulting date is %s', $date->format('Y-m-d')));
|
||||
|
||||
return $date;
|
||||
}
|
||||
// a custom range requires the session start
|
||||
|
@@ -29,6 +29,7 @@ use FireflyIII\Models\TransactionJournal;
|
||||
* This class will be magical!
|
||||
*
|
||||
* Class AbstractTrigger
|
||||
* @method triggered
|
||||
*/
|
||||
class AbstractTrigger
|
||||
{
|
||||
@@ -43,15 +44,6 @@ class AbstractTrigger
|
||||
/** @var string Trigger value */
|
||||
protected $triggerValue;
|
||||
|
||||
/**
|
||||
* AbstractTrigger constructor.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a new trigger from the value given in the string.
|
||||
*
|
||||
|
@@ -340,7 +340,7 @@ class FireflyValidator extends Validator
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function validateUniqueAccountNumberForUser($attribute, $value, $parameters): bool
|
||||
public function validateUniqueAccountNumberForUser($attribute, $value): bool
|
||||
{
|
||||
$accountId = $this->data['id'] ?? 0;
|
||||
|
||||
|
10
composer.lock
generated
10
composer.lock
generated
@@ -748,16 +748,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v5.5.27",
|
||||
"version": "v5.5.28",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "b4fb6eeb227b7327b4ca7f92263b693ec9ac9875"
|
||||
"reference": "cfafae1f2043208390a7c984e3070696f4969605"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/b4fb6eeb227b7327b4ca7f92263b693ec9ac9875",
|
||||
"reference": "b4fb6eeb227b7327b4ca7f92263b693ec9ac9875",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/cfafae1f2043208390a7c984e3070696f4969605",
|
||||
"reference": "cfafae1f2043208390a7c984e3070696f4969605",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -878,7 +878,7 @@
|
||||
"framework",
|
||||
"laravel"
|
||||
],
|
||||
"time": "2017-12-20T15:43:48+00:00"
|
||||
"time": "2017-12-26T16:24:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
|
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* 2017_12_09_111046_changes_for_spectre.php
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
*
|
||||
* Firefly III is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Firefly III 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
/**
|
||||
* Class ChangesForSpectre
|
||||
*/
|
||||
class ChangesForSpectre extends Migration
|
||||
{
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
// create provider table:
|
||||
if (!Schema::hasTable('spectre_providers')) {
|
||||
Schema::create(
|
||||
'spectre_providers',
|
||||
function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
//'spectre_id', 'code', 'mode', 'name', 'status', 'interactive', 'automatic_fetch', 'country_code', 'data'
|
||||
$table->integer('spectre_id', false, true);
|
||||
$table->string('code', 100);
|
||||
$table->string('mode', 20);
|
||||
$table->string('status', 20);
|
||||
$table->boolean('interactive')->default(0);
|
||||
$table->boolean('automatic_fetch')->default(0);
|
||||
$table->string('country_code', 3);
|
||||
$table->text('data');
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
1
public/js/ff/accounts/reconcile.js
vendored
1
public/js/ff/accounts/reconcile.js
vendored
@@ -92,7 +92,6 @@ function storeReconcile() {
|
||||
transactions: ids,
|
||||
cleared: cleared,
|
||||
};
|
||||
console.log
|
||||
var uri = overviewUri.replace('%start%', $('input[name="start_date"]').val()).replace('%end%', $('input[name="end_date"]').val());
|
||||
|
||||
|
||||
|
2
public/js/ff/accounts/show.js
vendored
2
public/js/ff/accounts/show.js
vendored
@@ -18,7 +18,7 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: chartUri, incomeCategoryUri, expenseCategoryUri, expenseBudgetUri */
|
||||
/** global: chartUri, incomeCategoryUri, expenseCategoryUri, expenseBudgetUri, token */
|
||||
|
||||
var fixHelper = function (e, tr) {
|
||||
"use strict";
|
||||
|
4
public/js/ff/admin/update/index.js
vendored
4
public/js/ff/admin/update/index.js
vendored
@@ -18,6 +18,8 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: updateCheckUri */
|
||||
|
||||
$(function () {
|
||||
"use strict";
|
||||
|
||||
@@ -31,7 +33,7 @@ function checkUpdate() {
|
||||
// do post update check:
|
||||
$.post(updateCheckUri).done(function (data) {
|
||||
alert(data.result);
|
||||
}).fail(function() {
|
||||
}).fail(function () {
|
||||
alert('Error while checking.');
|
||||
});
|
||||
|
||||
|
6
public/js/ff/budgets/index.js
vendored
6
public/js/ff/budgets/index.js
vendored
@@ -18,7 +18,7 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: infoIncomeUri, spent, budgeted, available, currencySymbol, budgetIndexUri, updateIncomeUri, periodStart, periodEnd, budgetAmountUri, accounting */
|
||||
/** global: infoIncomeUri, token, spent, budgeted, available, currencySymbol, budgetIndexUri, updateIncomeUri, periodStart, periodEnd, budgetAmountUri, accounting */
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -104,7 +104,7 @@ function updateBudgetedAmounts(e) {
|
||||
var target = $(e.target);
|
||||
var id = target.data('id');
|
||||
var leftCell = $('td[class$="left"][data-id="' + id + '"]');
|
||||
var link = $('a[data-id="'+id+'"][class="budget-link"]');
|
||||
var link = $('a[data-id="' + id + '"][class="budget-link"]');
|
||||
var value = target.val();
|
||||
var original = target.data('original');
|
||||
|
||||
@@ -112,7 +112,7 @@ function updateBudgetedAmounts(e) {
|
||||
target.prop('disabled', true);
|
||||
|
||||
// replace link (for now)
|
||||
link.attr('href','#');
|
||||
link.attr('href', '#');
|
||||
|
||||
// replace "left" with spinner.
|
||||
leftCell.empty().html('<i class="fa fa-fw fa-spin fa-spinner"></i>');
|
||||
|
21
public/js/ff/charts.defaults.js
vendored
21
public/js/ff/charts.defaults.js
vendored
@@ -29,40 +29,37 @@
|
||||
* @param maxwidth
|
||||
* @returns {Array}
|
||||
*/
|
||||
function formatLabel(str, maxwidth){
|
||||
function formatLabel(str, maxwidth) {
|
||||
var sections = [];
|
||||
var words = str.split(" ");
|
||||
var temp = "";
|
||||
|
||||
words.forEach(function(item, index){
|
||||
if(temp.length > 0)
|
||||
{
|
||||
words.forEach(function (item, index) {
|
||||
if (temp.length > 0) {
|
||||
var concat = temp + ' ' + item;
|
||||
|
||||
if(concat.length > maxwidth){
|
||||
if (concat.length > maxwidth) {
|
||||
sections.push(temp);
|
||||
temp = "";
|
||||
}
|
||||
else{
|
||||
if(index === (words.length-1))
|
||||
{
|
||||
else {
|
||||
if (index === (words.length - 1)) {
|
||||
sections.push(concat);
|
||||
return;
|
||||
}
|
||||
else{
|
||||
else {
|
||||
temp = concat;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(index === (words.length-1))
|
||||
{
|
||||
if (index === (words.length - 1)) {
|
||||
sections.push(item);
|
||||
return;
|
||||
}
|
||||
|
||||
if(item.length < maxwidth) {
|
||||
if (item.length < maxwidth) {
|
||||
temp = item;
|
||||
}
|
||||
else {
|
||||
|
2
public/js/ff/help.js
vendored
2
public/js/ff/help.js
vendored
@@ -17,7 +17,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: token */
|
||||
$(function () {
|
||||
"use strict";
|
||||
$('#help').click(showHelp);
|
||||
|
17
public/js/ff/import/status.js
vendored
17
public/js/ff/import/status.js
vendored
@@ -18,7 +18,7 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: langImportSingleError, langImportMultiError, jobStartUrl, langImportTimeOutError, langImportFinished, langImportFatalError */
|
||||
/** global: job, langImportSingleError, langImportMultiError, jobStartUrl, langImportTimeOutError, langImportFinished, langImportFatalError */
|
||||
|
||||
var timeOutId;
|
||||
var startInterval = 1000;
|
||||
@@ -34,10 +34,12 @@ var knownErrors = 0;
|
||||
|
||||
$(function () {
|
||||
"use strict";
|
||||
console.log('in start');
|
||||
timeOutId = setTimeout(checkJobStatus, startInterval);
|
||||
|
||||
$('.start-job').click(startJob);
|
||||
if (job.configuration['auto-start']) {
|
||||
console.log('Called startJob()!');
|
||||
startJob();
|
||||
}
|
||||
});
|
||||
@@ -46,6 +48,7 @@ $(function () {
|
||||
* Downloads some JSON and responds to its content to see what the status is of the current import.
|
||||
*/
|
||||
function checkJobStatus() {
|
||||
console.log('in checkJobStatus');
|
||||
$.getJSON(jobStatusUri).done(reportOnJobStatus).fail(reportFailedJob);
|
||||
}
|
||||
|
||||
@@ -53,6 +56,7 @@ function checkJobStatus() {
|
||||
* This method is called when the JSON query returns an error. If possible, this error is relayed to the user.
|
||||
*/
|
||||
function reportFailedJob(jqxhr, textStatus, error) {
|
||||
console.log('in reportFailedJob');
|
||||
// hide all possible boxes:
|
||||
$('.statusbox').hide();
|
||||
|
||||
@@ -72,6 +76,7 @@ function reportFailedJob(jqxhr, textStatus, error) {
|
||||
* @param data
|
||||
*/
|
||||
function reportOnJobStatus(data) {
|
||||
console.log('in reportOnJobStatus: ' + data.status);
|
||||
|
||||
switch (data.status) {
|
||||
case "configured":
|
||||
@@ -80,6 +85,10 @@ function reportOnJobStatus(data) {
|
||||
$('.statusbox').hide();
|
||||
$('.status_configured').show();
|
||||
}
|
||||
if (job.configuration['auto-start']) {
|
||||
console.log('Job is auto start. Check status again in 500ms.');
|
||||
timeOutId = setTimeout(checkJobStatus, interval);
|
||||
}
|
||||
break;
|
||||
case "running":
|
||||
// job is running! Show the running box:
|
||||
@@ -122,7 +131,13 @@ function reportOnJobStatus(data) {
|
||||
// show the fatal error box:
|
||||
$('.fatal_error').show();
|
||||
break;
|
||||
case "configuring":
|
||||
// redirect back to configure screen.
|
||||
console.log('Will now redirect to ' + jobConfigureUri);
|
||||
window.location = jobConfigureUri;
|
||||
break;
|
||||
default:
|
||||
console.error('Cannot handle job status ' + data.status);
|
||||
break;
|
||||
|
||||
}
|
||||
|
2
public/js/ff/piggy-banks/index.js
vendored
2
public/js/ff/piggy-banks/index.js
vendored
@@ -17,7 +17,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: token */
|
||||
var fixHelper = function (e, tr) {
|
||||
"use strict";
|
||||
var $originals = tr.children();
|
||||
|
11
public/js/ff/reports/account/month.js
vendored
11
public/js/ff/reports/account/month.js
vendored
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* month.js
|
||||
* Copyright (c) 2017 thegrumpydictator@gmail.com
|
||||
@@ -18,10 +17,10 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: spentUri, categoryUri, budgetUri, expenseUri, incomeUri, mainUri */
|
||||
$(function () {
|
||||
"use strict";
|
||||
drawChart();
|
||||
doubleYChart(mainUri, 'in-out-chart');
|
||||
|
||||
loadAjaxPartial('inOutAccounts', spentUri);
|
||||
loadAjaxPartial('inOutCategory', categoryUri);
|
||||
@@ -31,9 +30,3 @@ $(function () {
|
||||
|
||||
});
|
||||
|
||||
function drawChart() {
|
||||
"use strict";
|
||||
|
||||
// month view:
|
||||
doubleYChart(mainUri, 'in-out-chart');
|
||||
}
|
2
public/js/ff/reports/all.js
vendored
2
public/js/ff/reports/all.js
vendored
@@ -17,7 +17,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: startDate, endDate, accountIds */
|
||||
function loadAjaxPartial(holder, uri) {
|
||||
"use strict";
|
||||
$.get(uri).done(function (data) {
|
||||
|
3
public/js/ff/reports/index.js
vendored
3
public/js/ff/reports/index.js
vendored
@@ -139,7 +139,6 @@ function setOptionalFromCookies() {
|
||||
$('#inputExpRevAccounts').multiselect(defaultMultiSelect);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function catchSubmit() {
|
||||
@@ -161,7 +160,7 @@ function catchSubmit() {
|
||||
createCookie('report-categories', categories, 365);
|
||||
createCookie('report-budgets', budgets, 365);
|
||||
createCookie('report-tags', tags, 365);
|
||||
createCookie('report-exp-rev', expRev , 365);
|
||||
createCookie('report-exp-rev', expRev, 365);
|
||||
createCookie('report-start', moment(picker.startDate).format("YYYYMMDD"), 365);
|
||||
createCookie('report-end', moment(picker.endDate).format("YYYYMMDD"), 365);
|
||||
|
||||
|
2
public/js/ff/rules/index.js
vendored
2
public/js/ff/rules/index.js
vendored
@@ -17,7 +17,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: token */
|
||||
var fixHelper = function (e, tr) {
|
||||
"use strict";
|
||||
var $originals = tr.children();
|
||||
|
2
public/js/ff/search/index.js
vendored
2
public/js/ff/search/index.js
vendored
@@ -18,7 +18,7 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: searchQuery,searchUri */
|
||||
/** global: searchQuery,searchUri,token */
|
||||
|
||||
|
||||
|
||||
|
2
public/js/ff/tags/show.js
vendored
2
public/js/ff/tags/show.js
vendored
@@ -48,7 +48,7 @@ $(function () {
|
||||
}).addTo(mymap);
|
||||
|
||||
if (doPlaceMarker) {
|
||||
var marker = L.marker([latitude, longitude]).addTo(mymap);
|
||||
L.marker([latitude, longitude]).addTo(mymap);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
2
public/js/ff/transactions/list.js
vendored
2
public/js/ff/transactions/list.js
vendored
@@ -18,7 +18,7 @@
|
||||
* along with Firefly III. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** global: edit_selected_txt, edit_bulk_selected_txt, delete_selected_txt */
|
||||
/** global: edit_selected_txt, edit_bulk_selected_txt, delete_selected_txt, token */
|
||||
|
||||
/**
|
||||
*
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user