mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Merge branch 'release/4.6.10'
This commit is contained in:
commit
9ac5657b52
@ -40,9 +40,10 @@ SHOW_INCOMPLETE_TRANSLATIONS=false
|
||||
|
||||
CACHE_PREFIX=firefly
|
||||
|
||||
SEARCH_RESULT_LIMIT=50
|
||||
EXCHANGE_RATE_SERVICE=fixerio
|
||||
|
||||
GOOGLE_MAPS_API_KEY=
|
||||
MAPBOX_API_KEY=
|
||||
ANALYTICS_ID=
|
||||
SITE_OWNER=mail@example.com
|
||||
USE_ENCRYPTION=true
|
||||
|
@ -41,6 +41,7 @@ SHOW_INCOMPLETE_TRANSLATIONS=false
|
||||
|
||||
CACHE_PREFIX=firefly
|
||||
|
||||
SEARCH_RESULT_LIMIT=50
|
||||
EXCHANGE_RATE_SERVICE=fixerio
|
||||
|
||||
MAPBOX_API_KEY=
|
||||
|
@ -1,9 +1,9 @@
|
||||
APP_ENV=local
|
||||
APP_DEBUG=true
|
||||
APP_DEBUG=false
|
||||
APP_NAME=FireflyIII
|
||||
APP_KEY=SomeRandomStringOf32CharsExactly
|
||||
APP_LOG=syslog
|
||||
APP_LOG_LEVEL=debug
|
||||
APP_LOG_LEVEL=info
|
||||
APP_URL=http://localhost
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
@ -40,9 +40,10 @@ SHOW_INCOMPLETE_TRANSLATIONS=false
|
||||
|
||||
CACHE_PREFIX=firefly
|
||||
|
||||
SEARCH_RESULT_LIMIT=50
|
||||
EXCHANGE_RATE_SERVICE=fixerio
|
||||
|
||||
GOOGLE_MAPS_API_KEY=
|
||||
MAPBOX_API_KEY=
|
||||
ANALYTICS_ID=
|
||||
SITE_OWNER=mail@example.com
|
||||
USE_ENCRYPTION=true
|
||||
|
@ -1,12 +1,18 @@
|
||||
# 4.6.9.1
|
||||
# 4.6.10
|
||||
- Greatly expanded Docker support thanks to [alazare619](https://github.com/alazare619)
|
||||
- [Issue 967](https://github.com/firefly-iii/firefly-iii/issues/967), thanks to [Aquariu](https://github.com/Aquariu)
|
||||
- Improved Sandstorm support.
|
||||
- [Issue 963](https://github.com/firefly-iii/firefly-iii/issues/963), as reported by [gavu](https://github.com/gavu)
|
||||
- [Issue 970](https://github.com/firefly-iii/firefly-iii/issues/970), as reported by [gavu](https://github.com/gavu)
|
||||
- [Issue 971](https://github.com/firefly-iii/firefly-iii/issues/971), as reported by [gavu](https://github.com/gavu)
|
||||
- Various Sandstorm.io related issues.
|
||||
|
||||
* Updated license
|
||||
* Updated file list
|
||||
# 4.6.9.1
|
||||
- Updated license
|
||||
- Updated file list
|
||||
|
||||
# 4.6.9
|
||||
|
||||
* First version that works!
|
||||
- First version that works!
|
||||
|
||||
# 3.4.3
|
||||
|
||||
* Initial release on Sandstorm.io
|
||||
- Initial release on Sandstorm.io
|
@ -39,6 +39,7 @@ etc/php/7.1/cli/conf.d/20-dom.ini
|
||||
etc/php/7.1/cli/conf.d/20-exif.ini
|
||||
etc/php/7.1/cli/conf.d/20-fileinfo.ini
|
||||
etc/php/7.1/cli/conf.d/20-ftp.ini
|
||||
etc/php/7.1/cli/conf.d/20-gd.ini
|
||||
etc/php/7.1/cli/conf.d/20-gettext.ini
|
||||
etc/php/7.1/cli/conf.d/20-iconv.ini
|
||||
etc/php/7.1/cli/conf.d/20-intl.ini
|
||||
@ -75,6 +76,7 @@ etc/php/7.1/fpm/conf.d/20-dom.ini
|
||||
etc/php/7.1/fpm/conf.d/20-exif.ini
|
||||
etc/php/7.1/fpm/conf.d/20-fileinfo.ini
|
||||
etc/php/7.1/fpm/conf.d/20-ftp.ini
|
||||
etc/php/7.1/fpm/conf.d/20-gd.ini
|
||||
etc/php/7.1/fpm/conf.d/20-gettext.ini
|
||||
etc/php/7.1/fpm/conf.d/20-iconv.ini
|
||||
etc/php/7.1/fpm/conf.d/20-intl.ini
|
||||
@ -109,6 +111,7 @@ etc/php/7.1/mods-available/dom.ini
|
||||
etc/php/7.1/mods-available/exif.ini
|
||||
etc/php/7.1/mods-available/fileinfo.ini
|
||||
etc/php/7.1/mods-available/ftp.ini
|
||||
etc/php/7.1/mods-available/gd.ini
|
||||
etc/php/7.1/mods-available/gettext.ini
|
||||
etc/php/7.1/mods-available/iconv.ini
|
||||
etc/php/7.1/mods-available/intl.ini
|
||||
@ -177,6 +180,8 @@ lib/x86_64-linux-gnu/libnss_nis-2.19.so
|
||||
lib/x86_64-linux-gnu/libnss_nis.so.2
|
||||
lib/x86_64-linux-gnu/libpcre.so.3
|
||||
lib/x86_64-linux-gnu/libpcre.so.3.13.3
|
||||
lib/x86_64-linux-gnu/libpng12.so.0
|
||||
lib/x86_64-linux-gnu/libpng12.so.0.50.0
|
||||
lib/x86_64-linux-gnu/libpthread-2.19.so
|
||||
lib/x86_64-linux-gnu/libpthread.so.0
|
||||
lib/x86_64-linux-gnu/libreadline.so.6
|
||||
@ -195,20 +200,12 @@ lib/x86_64-linux-gnu/libwrap.so.0.7.6
|
||||
lib/x86_64-linux-gnu/libz.so.1
|
||||
lib/x86_64-linux-gnu/libz.so.1.2.8
|
||||
lib64/ld-linux-x86-64.so.2
|
||||
opt/app/.DS_Store
|
||||
opt/app/.dockerignore
|
||||
opt/app/.env
|
||||
opt/app/.env.docker
|
||||
opt/app/.env.example
|
||||
opt/app/.env.sandstorm
|
||||
opt/app/.env.testing
|
||||
opt/app/.gitattributes
|
||||
opt/app/.gitignore
|
||||
opt/app/.sandstorm/launcher.sh
|
||||
opt/app/.sandstorm/service-config/mime.types
|
||||
opt/app/.sandstorm/service-config/nginx.conf
|
||||
opt/app/.scrutinizer.yml
|
||||
opt/app/.travis.yml
|
||||
opt/app/CHANGELOG.md
|
||||
opt/app/CODE_OF_CONDUCT.md
|
||||
opt/app/Dockerfile
|
||||
@ -341,6 +338,7 @@ opt/app/app/Http/Controllers/JavascriptController.php
|
||||
opt/app/app/Http/Controllers/Json/AutoCompleteController.php
|
||||
opt/app/app/Http/Controllers/Json/BoxController.php
|
||||
opt/app/app/Http/Controllers/Json/ExchangeController.php
|
||||
opt/app/app/Http/Controllers/Json/FrontpageController.php
|
||||
opt/app/app/Http/Controllers/Json/IntroController.php
|
||||
opt/app/app/Http/Controllers/JsonController.php
|
||||
opt/app/app/Http/Controllers/NewUserController.php
|
||||
@ -375,6 +373,7 @@ opt/app/app/Http/Middleware/Range.php
|
||||
opt/app/app/Http/Middleware/RedirectIfAuthenticated.php
|
||||
opt/app/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php
|
||||
opt/app/app/Http/Middleware/Sandstorm.php
|
||||
opt/app/app/Http/Middleware/StartFireflySession.php
|
||||
opt/app/app/Http/Middleware/TrimStrings.php
|
||||
opt/app/app/Http/Middleware/TrustProxies.php
|
||||
opt/app/app/Http/Middleware/VerifyCsrfToken.php
|
||||
@ -509,6 +508,7 @@ opt/app/app/Providers/RouteServiceProvider.php
|
||||
opt/app/app/Providers/RuleGroupServiceProvider.php
|
||||
opt/app/app/Providers/RuleServiceProvider.php
|
||||
opt/app/app/Providers/SearchServiceProvider.php
|
||||
opt/app/app/Providers/SessionServiceProvider.php
|
||||
opt/app/app/Providers/TagServiceProvider.php
|
||||
opt/app/app/Repositories/Account/AccountRepository.php
|
||||
opt/app/app/Repositories/Account/AccountRepositoryInterface.php
|
||||
@ -688,6 +688,7 @@ opt/app/bootstrap/cache/packages.php
|
||||
opt/app/bootstrap/cache/services.php
|
||||
opt/app/composer.json
|
||||
opt/app/composer.lock
|
||||
opt/app/composer.phar
|
||||
opt/app/config/app.php
|
||||
opt/app/config/auth.php
|
||||
opt/app/config/broadcasting.php
|
||||
@ -704,7 +705,6 @@ opt/app/config/session.php
|
||||
opt/app/config/twigbridge.php
|
||||
opt/app/config/upgrade.php
|
||||
opt/app/config/view.php
|
||||
opt/app/crowdin.yaml
|
||||
opt/app/database/factories/ModelFactory.php
|
||||
opt/app/database/migrations/2016_06_16_000000_create_support_tables.php
|
||||
opt/app/database/migrations/2016_06_16_000001_create_users_table.php
|
||||
@ -725,14 +725,12 @@ 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/package.json
|
||||
opt/app/phpunit.coverage.specific.xml
|
||||
opt/app/phpunit.coverage.xml
|
||||
opt/app/phpunit.xml
|
||||
opt/app/public/.htaccess
|
||||
opt/app/public/android-chrome-192x192.png
|
||||
opt/app/public/android-chrome-512x512.png
|
||||
@ -743,6 +741,7 @@ opt/app/public/css/bootstrap-sortable.css
|
||||
opt/app/public/css/bootstrap-tagsinput.css
|
||||
opt/app/public/css/daterangepicker.css
|
||||
opt/app/public/css/firefly.css
|
||||
opt/app/public/css/google-fonts.css
|
||||
opt/app/public/css/jquery-ui/images/ui-icons_444444_256x240.png
|
||||
opt/app/public/css/jquery-ui/images/ui-icons_555555_256x240.png
|
||||
opt/app/public/css/jquery-ui/images/ui-icons_777620_256x240.png
|
||||
@ -754,6 +753,55 @@ opt/app/public/css/jquery-ui/jquery-ui.theme.min.css
|
||||
opt/app/public/favicon-16x16.png
|
||||
opt/app/public/favicon-32x32.png
|
||||
opt/app/public/favicon.ico
|
||||
opt/app/public/fonts/SourceSansPro-Bold-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Bold-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Italic-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Light-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-LightItalic-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-Regular-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBold-vietnamese.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-greek.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-latin.woff2
|
||||
opt/app/public/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2
|
||||
opt/app/public/fonts/lato-100.woff2
|
||||
opt/app/public/fonts/roboto-light-300.woff2
|
||||
opt/app/public/images/error.png
|
||||
@ -826,6 +874,8 @@ opt/app/public/js/lib/daterangepicker.js
|
||||
opt/app/public/js/lib/html5shiv.min.js
|
||||
opt/app/public/js/lib/jquery-3.1.1.min.js
|
||||
opt/app/public/js/lib/jquery-3.1.1.min.map
|
||||
opt/app/public/js/lib/jquery-3.2.1.min.js
|
||||
opt/app/public/js/lib/jquery-3.2.1.min.map
|
||||
opt/app/public/js/lib/jquery-ui.min.js
|
||||
opt/app/public/js/lib/jquery.color-2.1.2.min.js
|
||||
opt/app/public/js/lib/modernizr-custom.js
|
||||
@ -1062,6 +1112,7 @@ opt/app/resources/views/currencies/create.twig
|
||||
opt/app/resources/views/currencies/delete.twig
|
||||
opt/app/resources/views/currencies/edit.twig
|
||||
opt/app/resources/views/currencies/index.twig
|
||||
opt/app/resources/views/debug.twig
|
||||
opt/app/resources/views/demo/accounts/index.twig
|
||||
opt/app/resources/views/demo/budgets/index.twig
|
||||
opt/app/resources/views/demo/currencies/index.twig
|
||||
@ -1110,6 +1161,7 @@ opt/app/resources/views/form/location.twig
|
||||
opt/app/resources/views/form/multiCheckbox.twig
|
||||
opt/app/resources/views/form/multiRadio.twig
|
||||
opt/app/resources/views/form/non-selectable-amount.twig
|
||||
opt/app/resources/views/form/number.twig
|
||||
opt/app/resources/views/form/options.twig
|
||||
opt/app/resources/views/form/password.twig
|
||||
opt/app/resources/views/form/select.twig
|
||||
@ -1130,6 +1182,7 @@ opt/app/resources/views/index.twig
|
||||
opt/app/resources/views/javascript/accounts.twig
|
||||
opt/app/resources/views/javascript/currencies.twig
|
||||
opt/app/resources/views/javascript/variables.twig
|
||||
opt/app/resources/views/json/piggy-banks.twig
|
||||
opt/app/resources/views/layout/default.twig
|
||||
opt/app/resources/views/layout/empty.twig
|
||||
opt/app/resources/views/layout/guest.twig
|
||||
@ -1228,9 +1281,7 @@ opt/app/routes/console.php
|
||||
opt/app/routes/web.php
|
||||
opt/app/server.php
|
||||
opt/app/storage
|
||||
opt/app/test.sh
|
||||
opt/app/vendor/autoload.php
|
||||
opt/app/vendor/bacon/bacon-qr-code/.travis.yml
|
||||
opt/app/vendor/bacon/bacon-qr-code/LICENSE
|
||||
opt/app/vendor/bacon/bacon-qr-code/Module.php
|
||||
opt/app/vendor/bacon/bacon-qr-code/README.md
|
||||
@ -1291,11 +1342,8 @@ opt/app/vendor/bacon/bacon-qr-code/tests/BaconQrCode/Encoder/MatrixUtilTest.php
|
||||
opt/app/vendor/bacon/bacon-qr-code/tests/BaconQrCode/Renderer/Text/HtmlTest.php
|
||||
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/bacon/bacon-qr-code/tests/phpunit.xml
|
||||
opt/app/vendor/bin/commonmark
|
||||
opt/app/vendor/bin/doctrine-dbal
|
||||
opt/app/vendor/christian-riesen/base32/.scrutinizer.yml
|
||||
opt/app/vendor/christian-riesen/base32/.travis.yml
|
||||
opt/app/vendor/christian-riesen/base32/LICENSE
|
||||
opt/app/vendor/christian-riesen/base32/README.md
|
||||
opt/app/vendor/christian-riesen/base32/build.xml
|
||||
@ -1318,9 +1366,7 @@ 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/phpunit.xml
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/scripts/test-coverage.sh
|
||||
opt/app/vendor/davejamesmiller/laravel-breadcrumbs/scripts/test.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
|
||||
@ -1487,7 +1533,6 @@ opt/app/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php
|
||||
opt/app/vendor/doctrine/common/lib/Doctrine/Common/Util/Inflector.php
|
||||
opt/app/vendor/doctrine/common/lib/Doctrine/Common/Version.php
|
||||
opt/app/vendor/doctrine/common/phpstan.neon
|
||||
opt/app/vendor/doctrine/dbal/.scrutinizer.yml
|
||||
opt/app/vendor/doctrine/dbal/LICENSE
|
||||
opt/app/vendor/doctrine/dbal/README.md
|
||||
opt/app/vendor/doctrine/dbal/SECURITY.md
|
||||
@ -3218,12 +3263,10 @@ 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/.travis.yml
|
||||
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/phpunit.xml
|
||||
opt/app/vendor/pragmarx/google2fa/readme.md
|
||||
opt/app/vendor/pragmarx/google2fa/src/Contracts/Google2FA.php
|
||||
opt/app/vendor/pragmarx/google2fa/src/Exceptions/InvalidCharactersException.php
|
||||
@ -3347,7 +3390,6 @@ opt/app/vendor/rcrowe/twigbridge/src/Twig/Globals.php
|
||||
opt/app/vendor/rcrowe/twigbridge/src/Twig/Loader.php
|
||||
opt/app/vendor/rcrowe/twigbridge/src/Twig/Template.php
|
||||
opt/app/vendor/rmccue/requests/.coveralls.yml
|
||||
opt/app/vendor/rmccue/requests/.travis.yml
|
||||
opt/app/vendor/rmccue/requests/CHANGELOG.md
|
||||
opt/app/vendor/rmccue/requests/LICENSE
|
||||
opt/app/vendor/rmccue/requests/README.md
|
||||
@ -3454,7 +3496,6 @@ opt/app/vendor/swiftmailer/swiftmailer/.gitattributes
|
||||
opt/app/vendor/swiftmailer/swiftmailer/.github/ISSUE_TEMPLATE.md
|
||||
opt/app/vendor/swiftmailer/swiftmailer/.github/PULL_REQUEST_TEMPLATE.md
|
||||
opt/app/vendor/swiftmailer/swiftmailer/.php_cs.dist
|
||||
opt/app/vendor/swiftmailer/swiftmailer/.travis.yml
|
||||
opt/app/vendor/swiftmailer/swiftmailer/CHANGES
|
||||
opt/app/vendor/swiftmailer/swiftmailer/LICENSE
|
||||
opt/app/vendor/swiftmailer/swiftmailer/README
|
||||
@ -5087,7 +5128,6 @@ opt/app/vendor/tijsverkoyen/css-to-inline-styles/src/Css/Rule/Rule.php
|
||||
opt/app/vendor/tijsverkoyen/css-to-inline-styles/src/CssToInlineStyles.php
|
||||
opt/app/vendor/twig/twig/.editorconfig
|
||||
opt/app/vendor/twig/twig/.php_cs.dist
|
||||
opt/app/vendor/twig/twig/.travis.yml
|
||||
opt/app/vendor/twig/twig/CHANGELOG
|
||||
opt/app/vendor/twig/twig/LICENSE
|
||||
opt/app/vendor/twig/twig/README.rst
|
||||
@ -5790,6 +5830,7 @@ usr/lib/php/20160303/dom.so
|
||||
usr/lib/php/20160303/exif.so
|
||||
usr/lib/php/20160303/fileinfo.so
|
||||
usr/lib/php/20160303/ftp.so
|
||||
usr/lib/php/20160303/gd.so
|
||||
usr/lib/php/20160303/gettext.so
|
||||
usr/lib/php/20160303/iconv.so
|
||||
usr/lib/php/20160303/intl.so
|
||||
@ -5819,6 +5860,14 @@ usr/lib/php/20160303/zip.so
|
||||
usr/lib/ssl/openssl.cnf
|
||||
usr/lib/x86_64-linux-gnu/libGeoIP.so.1
|
||||
usr/lib/x86_64-linux-gnu/libGeoIP.so.1.6.2
|
||||
usr/lib/x86_64-linux-gnu/libX11.so.6
|
||||
usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
|
||||
usr/lib/x86_64-linux-gnu/libXau.so.6
|
||||
usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
|
||||
usr/lib/x86_64-linux-gnu/libXdmcp.so.6
|
||||
usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
|
||||
usr/lib/x86_64-linux-gnu/libXpm.so.4
|
||||
usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0
|
||||
usr/lib/x86_64-linux-gnu/libapparmor.so.1
|
||||
usr/lib/x86_64-linux-gnu/libapparmor.so.1.2.0
|
||||
usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
|
||||
@ -5831,6 +5880,12 @@ usr/lib/x86_64-linux-gnu/libexslt.so.0
|
||||
usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17
|
||||
usr/lib/x86_64-linux-gnu/libffi.so.6
|
||||
usr/lib/x86_64-linux-gnu/libffi.so.6.0.2
|
||||
usr/lib/x86_64-linux-gnu/libfontconfig.so.1
|
||||
usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0
|
||||
usr/lib/x86_64-linux-gnu/libfreetype.so.6
|
||||
usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1
|
||||
usr/lib/x86_64-linux-gnu/libgd.so.3
|
||||
usr/lib/x86_64-linux-gnu/libgd.so.3.0.0
|
||||
usr/lib/x86_64-linux-gnu/libgmp.so.10
|
||||
usr/lib/x86_64-linux-gnu/libgmp.so.10.2.0
|
||||
usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28
|
||||
@ -5849,6 +5904,9 @@ usr/lib/x86_64-linux-gnu/libicuuc.so.52
|
||||
usr/lib/x86_64-linux-gnu/libicuuc.so.52.1
|
||||
usr/lib/x86_64-linux-gnu/libidn.so.11
|
||||
usr/lib/x86_64-linux-gnu/libidn.so.11.6.12
|
||||
usr/lib/x86_64-linux-gnu/libjbig.so.0
|
||||
usr/lib/x86_64-linux-gnu/libjpeg.so.62
|
||||
usr/lib/x86_64-linux-gnu/libjpeg.so.62.1.0
|
||||
usr/lib/x86_64-linux-gnu/libk5crypto.so.3
|
||||
usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
|
||||
usr/lib/x86_64-linux-gnu/libkrb5.so.3
|
||||
@ -5874,6 +5932,14 @@ usr/lib/x86_64-linux-gnu/libstdc++.so.6
|
||||
usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
|
||||
usr/lib/x86_64-linux-gnu/libtasn1.so.6
|
||||
usr/lib/x86_64-linux-gnu/libtasn1.so.6.3.2
|
||||
usr/lib/x86_64-linux-gnu/libtiff.so.5
|
||||
usr/lib/x86_64-linux-gnu/libtiff.so.5.2.0
|
||||
usr/lib/x86_64-linux-gnu/libvpx.so.1
|
||||
usr/lib/x86_64-linux-gnu/libvpx.so.1.3.0
|
||||
usr/lib/x86_64-linux-gnu/libwebp.so.5
|
||||
usr/lib/x86_64-linux-gnu/libwebp.so.5.0.1
|
||||
usr/lib/x86_64-linux-gnu/libxcb.so.1
|
||||
usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
|
||||
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
|
||||
|
@ -15,8 +15,8 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
|
||||
manifest = (
|
||||
appTitle = (defaultText = "Firefly III"),
|
||||
appVersion = 1,
|
||||
appMarketingVersion = (defaultText = "4.6.9.1"),
|
||||
appVersion = 2,
|
||||
appMarketingVersion = (defaultText = "4.6.10"),
|
||||
|
||||
actions = [
|
||||
# Define your "new document" handlers here.
|
||||
|
@ -11,6 +11,16 @@ export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update
|
||||
apt-get install -y python-software-properties software-properties-common
|
||||
|
||||
# install all languages
|
||||
sed -i 's/# nl_NL.UTF-8 UTF-8/nl_NL.UTF-8 UTF-8/g' /etc/locale.gen
|
||||
sed -i 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/g' /etc/locale.gen
|
||||
sed -i 's/# pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/g' /etc/locale.gen
|
||||
sed -i 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/g' /etc/locale.gen
|
||||
dpkg-reconfigure --frontend=noninteractive locales
|
||||
|
||||
|
||||
|
||||
|
||||
# actually add repository
|
||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E9C74FEEA2098A6E
|
||||
add-apt-repository "deb http://packages.dotdeb.org jessie all"
|
||||
@ -29,6 +39,10 @@ service mysql stop
|
||||
systemctl disable nginx
|
||||
systemctl disable php7.1-fpm
|
||||
systemctl disable mysql
|
||||
|
||||
# make php.ini display errors:
|
||||
sed -i 's/display_errors = Off/display_errors = On/g' /etc/php/7.1/fpm/php.ini
|
||||
|
||||
# patch /etc/php/7.1/fpm/pool.d/www.conf to not change uid/gid to www-data
|
||||
sed --in-place='' \
|
||||
--expression='s/^listen.owner = www-data/;listen.owner = www-data/' \
|
||||
@ -64,3 +78,5 @@ cat <<EOF > /etc/mysql/conf.d/sandstorm.cnf
|
||||
# Set the main data file to grow by 1MB at a time, rather than 8MB at a time.
|
||||
innodb_autoextend_increment = 1
|
||||
EOF
|
||||
|
||||
|
||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@ -2,6 +2,20 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [4.6.10] - 2017-11-xx
|
||||
### Added
|
||||
- Greatly expanded Docker support thanks to [alazare619](https://github.com/alazare619)
|
||||
- [Issue 967](https://github.com/firefly-iii/firefly-iii/issues/967), thanks to [Aquariu](https://github.com/Aquariu)
|
||||
|
||||
### Changed
|
||||
- Improved Sandstorm support.
|
||||
|
||||
### Fixed
|
||||
- [Issue 963](https://github.com/firefly-iii/firefly-iii/issues/963), as reported by [gavu](https://github.com/gavu)
|
||||
- [Issue 970](https://github.com/firefly-iii/firefly-iii/issues/970), as reported by [gavu](https://github.com/gavu)
|
||||
- [Issue 971](https://github.com/firefly-iii/firefly-iii/issues/971), as reported by [gavu](https://github.com/gavu)
|
||||
- Various Sandstorm.io related issues.
|
||||
|
||||
## [4.6.9] - 2017-10-22
|
||||
### Added
|
||||
- Firefly III is now available on the [Sandstorm.io](https://apps.sandstorm.io/app/uws252ya9mep4t77tevn85333xzsgrpgth8q4y1rhknn1hammw70) market.
|
||||
|
@ -32,6 +32,7 @@ use Illuminate\Console\Command;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Log;
|
||||
use Monolog\Formatter\LineFormatter;
|
||||
use Preferences;
|
||||
|
||||
/**
|
||||
* Class CreateImport
|
||||
@ -154,6 +155,9 @@ class CreateImport extends Command
|
||||
);
|
||||
}
|
||||
|
||||
// clear cache for user:
|
||||
Preferences::setForUser($user, 'lastActivity', microtime());
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -112,12 +112,17 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
public function saveAttachmentsForModel(Model $model, ?array $files): bool
|
||||
{
|
||||
if (is_array($files)) {
|
||||
/** @var UploadedFile $entry */
|
||||
foreach ($files as $entry) {
|
||||
if (!is_null($entry)) {
|
||||
$this->processFile($entry, $model);
|
||||
}
|
||||
}
|
||||
Log::debug('Done processing uploads.');
|
||||
|
||||
return true;
|
||||
}
|
||||
Log::debug('Array of files is not an array. Probably nothing uploaded. Will not store attachments.');
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -138,6 +143,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
if ($count > 0) {
|
||||
$msg = (string)trans('validation.file_already_attached', ['name' => $name]);
|
||||
$this->errors->add('attachments', $msg);
|
||||
Log::error($msg);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -204,6 +210,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
if (!in_array($mime, $this->allowedMimes)) {
|
||||
$msg = (string)trans('validation.file_invalid_mime', ['name' => $name, 'mime' => $mime]);
|
||||
$this->errors->add('attachments', $msg);
|
||||
Log::error($msg);
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -225,6 +232,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
||||
if ($size > $this->maxUploadSize) {
|
||||
$msg = (string)trans('validation.file_too_large', ['name' => $name]);
|
||||
$this->errors->add('attachments', $msg);
|
||||
Log::error($msg);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ class JournalCollector implements JournalCollectorInterface
|
||||
public function addFilter(string $filter): JournalCollectorInterface
|
||||
{
|
||||
$interfaces = class_implements($filter);
|
||||
if (in_array(FilterInterface::class, $interfaces) && !in_array($filter, $this->filters) ) {
|
||||
if (in_array(FilterInterface::class, $interfaces) && !in_array($filter, $this->filters)) {
|
||||
Log::debug(sprintf('Enabled filter %s', $filter));
|
||||
$this->filters[] = $filter;
|
||||
}
|
||||
@ -141,6 +141,78 @@ class JournalCollector implements JournalCollectorInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountIs(string $amount): JournalCollectorInterface
|
||||
{
|
||||
$this->query->where(
|
||||
function (EloquentBuilder $q) use ($amount) {
|
||||
$q->where('transactions.amount', $amount);
|
||||
$q->orWhere('transactions.amount', bcmul($amount, '-1'));
|
||||
}
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountLess(string $amount): JournalCollectorInterface
|
||||
{
|
||||
$this->query->where(
|
||||
function (EloquentBuilder $q1) use ($amount) {
|
||||
$q1->where(
|
||||
function (EloquentBuilder $q2) use ($amount) {
|
||||
// amount < 0 and .amount > -$amount
|
||||
$amount = bcmul($amount,'-1');
|
||||
$q2->where('transactions.amount', '<', 0)->where('transactions.amount', '>', $amount);
|
||||
}
|
||||
)
|
||||
->orWhere(
|
||||
function (EloquentBuilder $q3) use ($amount) {
|
||||
// amount > 0 and .amount < $amount
|
||||
$q3->where('transactions.amount', '>', 0)->where('transactions.amount', '<', $amount);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountMore(string $amount): JournalCollectorInterface
|
||||
{
|
||||
$this->query->where(
|
||||
function (EloquentBuilder $q1) use ($amount) {
|
||||
$q1->where(
|
||||
function (EloquentBuilder $q2) use ($amount) {
|
||||
// amount < 0 and .amount < -$amount
|
||||
$amount = bcmul($amount,'-1');
|
||||
$q2->where('transactions.amount', '<', 0)->where('transactions.amount', '<', $amount);
|
||||
}
|
||||
)
|
||||
->orWhere(
|
||||
function (EloquentBuilder $q3) use ($amount) {
|
||||
// amount > 0 and .amount > $amount
|
||||
$q3->where('transactions.amount', '>', 0)->where('transactions.amount', '>', $amount);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @throws FireflyException
|
||||
@ -251,6 +323,20 @@ class JournalCollector implements JournalCollectorInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Carbon $after
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function setAfter(Carbon $after): JournalCollectorInterface
|
||||
{
|
||||
$afterStr = $after->format('Y-m-d');
|
||||
$this->query->where('transaction_journals.date', '>=', $afterStr);
|
||||
Log::debug(sprintf('JournalCollector range is now after %s (inclusive)', $afterStr));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
@ -273,6 +359,20 @@ class JournalCollector implements JournalCollectorInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Carbon $before
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function setBefore(Carbon $before): JournalCollectorInterface
|
||||
{
|
||||
$beforeStr = $before->format('Y-m-d');
|
||||
$this->query->where('transaction_journals.date', '<=', $beforeStr);
|
||||
Log::debug(sprintf('JournalCollector range is now before %s (inclusive)', $beforeStr));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Collection $bills
|
||||
*
|
||||
@ -523,7 +623,7 @@ class JournalCollector implements JournalCollectorInterface
|
||||
->orderBy('transaction_journals.order', 'ASC')
|
||||
->orderBy('transaction_journals.id', 'DESC')
|
||||
->orderBy('transaction_journals.description', 'DESC')
|
||||
->orderBy('transactions.amount','DESC');
|
||||
->orderBy('transactions.amount', 'DESC');
|
||||
|
||||
$this->query = $query;
|
||||
|
||||
|
@ -45,6 +45,27 @@ interface JournalCollectorInterface
|
||||
*/
|
||||
public function addFilter(string $filter): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountMore(string $amount): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountLess(string $amount): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param string $amount
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function amountIs(string $amount): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
@ -74,11 +95,25 @@ interface JournalCollectorInterface
|
||||
*/
|
||||
public function setAccounts(Collection $accounts): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param Carbon $after
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function setAfter(Carbon $after): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function setAllAssetAccounts(): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param Carbon $before
|
||||
*
|
||||
* @return JournalCollectorInterface
|
||||
*/
|
||||
public function setBefore(Carbon $before): JournalCollectorInterface;
|
||||
|
||||
/**
|
||||
* @param Collection $bills
|
||||
*
|
||||
|
@ -27,7 +27,6 @@ use Carbon\Carbon;
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Http\Requests\BudgetFormRequest;
|
||||
use FireflyIII\Http\Requests\BudgetIncomeRequest;
|
||||
use FireflyIII\Models\Budget;
|
||||
@ -49,6 +48,7 @@ use View;
|
||||
*
|
||||
* @package FireflyIII\Http\Controllers
|
||||
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
||||
* @SuppressWarnings(PHPMD.TooManyPublicMethods)
|
||||
*/
|
||||
class BudgetController extends Controller
|
||||
{
|
||||
@ -256,6 +256,7 @@ class BudgetController extends Controller
|
||||
/**
|
||||
* @param Carbon $start
|
||||
* @param Carbon $end
|
||||
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
@ -269,50 +270,49 @@ class BudgetController extends Controller
|
||||
|
||||
if ($cache->has()) {
|
||||
$result = $cache->get(); // @codeCoverageIgnore
|
||||
|
||||
return view('budgets.info', compact('result', 'begin', 'currentEnd'));
|
||||
}
|
||||
if (!$cache->has()) {
|
||||
$result = [
|
||||
'available' => '0',
|
||||
'earned' => '0',
|
||||
'suggested' => '0',
|
||||
];
|
||||
$currency = app('amount')->getDefaultCurrency();
|
||||
$range = Preferences::get('viewRange', '1M')->data;
|
||||
$begin = Navigation::subtractPeriod($start, $range, 3);
|
||||
$result = [
|
||||
'available' => '0',
|
||||
'earned' => '0',
|
||||
'suggested' => '0',
|
||||
];
|
||||
$currency = app('amount')->getDefaultCurrency();
|
||||
$range = Preferences::get('viewRange', '1M')->data;
|
||||
$begin = Navigation::subtractPeriod($start, $range, 3);
|
||||
|
||||
// get average amount available.
|
||||
$total = '0';
|
||||
$count = 0;
|
||||
$currentStart = clone $begin;
|
||||
while ($currentStart < $start) {
|
||||
$currentEnd = Navigation::endOfPeriod($currentStart, $range);
|
||||
$total = bcadd($total, $this->repository->getAvailableBudget($currency, $currentStart, $currentEnd));
|
||||
$currentStart = Navigation::addPeriod($currentStart, $range, 0);
|
||||
$count++;
|
||||
}
|
||||
$result['available'] = bcdiv($total, strval($count));
|
||||
|
||||
// amount earned in this period:
|
||||
$subDay = clone $end;
|
||||
$subDay->subDay();
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($begin, $subDay)->setTypes([TransactionType::DEPOSIT])->withOpposingAccount();
|
||||
$result['earned'] = bcdiv(strval($collector->getJournals()->sum('transaction_amount')), strval($count));
|
||||
|
||||
// amount spent in period
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($begin, $subDay)->setTypes([TransactionType::WITHDRAWAL])->withOpposingAccount();
|
||||
$result['spent'] = bcdiv(strval($collector->getJournals()->sum('transaction_amount')), strval($count));
|
||||
// suggestion starts with the amount spent
|
||||
$result['suggested'] = bcmul($result['spent'], '-1');
|
||||
$result['suggested'] = bccomp($result['suggested'], $result['earned']) === 1 ? $result['earned'] : $result['suggested'];
|
||||
// unless it's more than you earned. So min() of suggested/earned
|
||||
|
||||
|
||||
$cache->store($result);
|
||||
// get average amount available.
|
||||
$total = '0';
|
||||
$count = 0;
|
||||
$currentStart = clone $begin;
|
||||
while ($currentStart < $start) {
|
||||
$currentEnd = Navigation::endOfPeriod($currentStart, $range);
|
||||
$total = bcadd($total, $this->repository->getAvailableBudget($currency, $currentStart, $currentEnd));
|
||||
$currentStart = Navigation::addPeriod($currentStart, $range, 0);
|
||||
$count++;
|
||||
}
|
||||
$result['available'] = bcdiv($total, strval($count));
|
||||
|
||||
// amount earned in this period:
|
||||
$subDay = clone $end;
|
||||
$subDay->subDay();
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($begin, $subDay)->setTypes([TransactionType::DEPOSIT])->withOpposingAccount();
|
||||
$result['earned'] = bcdiv(strval($collector->getJournals()->sum('transaction_amount')), strval($count));
|
||||
|
||||
// amount spent in period
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($begin, $subDay)->setTypes([TransactionType::WITHDRAWAL])->withOpposingAccount();
|
||||
$result['spent'] = bcdiv(strval($collector->getJournals()->sum('transaction_amount')), strval($count));
|
||||
// suggestion starts with the amount spent
|
||||
$result['suggested'] = bcmul($result['spent'], '-1');
|
||||
$result['suggested'] = bccomp($result['suggested'], $result['earned']) === 1 ? $result['earned'] : $result['suggested'];
|
||||
// unless it's more than you earned. So min() of suggested/earned
|
||||
|
||||
$cache->store($result);
|
||||
|
||||
|
||||
return view('budgets.info', compact('result', 'begin', 'currentEnd'));
|
||||
@ -573,9 +573,7 @@ class BudgetController extends Controller
|
||||
$start = Navigation::startOfPeriod($start, $range);
|
||||
$end = Navigation::endOfX(new Carbon, $range, null);
|
||||
$entries = new Collection;
|
||||
|
||||
// properties for cache
|
||||
$cache = new CacheProperties;
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty($start);
|
||||
$cache->addProperty($end);
|
||||
$cache->addProperty('no-budget-period-entries');
|
||||
@ -588,25 +586,15 @@ class BudgetController extends Controller
|
||||
while ($end >= $start) {
|
||||
$end = Navigation::startOfPeriod($end, $range);
|
||||
$currentEnd = Navigation::endOfPeriod($end, $range);
|
||||
|
||||
// count journals without budget in this period:
|
||||
/** @var JournalCollectorInterface $collector */
|
||||
$collector = app(JournalCollectorInterface::class);
|
||||
$collector->setAllAssetAccounts()->setRange($end, $currentEnd)->withoutBudget()->withOpposingAccount()->setTypes([TransactionType::WITHDRAWAL]);
|
||||
$set = $collector->getJournals();
|
||||
$sum = $set->sum('transaction_amount');
|
||||
$sum = $set->sum('transaction_amount') ?? '0';
|
||||
$journals = $set->count();
|
||||
$dateStr = $end->format('Y-m-d');
|
||||
$dateName = Navigation::periodShow($end, $range);
|
||||
$entries->push(
|
||||
[
|
||||
'string' => $dateStr,
|
||||
'name' => $dateName,
|
||||
'count' => $journals,
|
||||
'sum' => $sum,
|
||||
'date' => clone $end,
|
||||
]
|
||||
);
|
||||
$entries->push(['string' => $dateStr, 'name' => $dateName, 'count' => $journals, 'sum' => $sum, 'date' => clone $end,]);
|
||||
$end = Navigation::subtractPeriod($end, $range, 1);
|
||||
}
|
||||
$cache->store($entries);
|
||||
|
@ -25,6 +25,7 @@ namespace FireflyIII\Http\Controllers;
|
||||
|
||||
use Artisan;
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Models\AccountType;
|
||||
@ -87,6 +88,18 @@ class HomeController extends Controller
|
||||
Session::put('end', $end);
|
||||
}
|
||||
|
||||
public function displayDebug()
|
||||
{
|
||||
$phpVersion = PHP_VERSION;
|
||||
$now = Carbon::create()->format('Y-m-d H:i:s e');
|
||||
$extensions = join(', ', get_loaded_extensions());
|
||||
$drivers = join(', ', DB::availableDrivers());
|
||||
$currentDriver = DB::getDriverName();
|
||||
|
||||
return view('debug', compact('phpVersion', 'extensions', 'carbon', 'now', 'drivers','currentDriver'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws FireflyException
|
||||
*/
|
||||
@ -157,7 +170,7 @@ class HomeController extends Controller
|
||||
}
|
||||
|
||||
return view(
|
||||
'index', compact('count', 'subTitle', 'transactions', 'showDeps','billCount')
|
||||
'index', compact('count', 'subTitle', 'transactions', 'showDeps', 'billCount')
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -142,26 +142,23 @@ class JavascriptController extends Controller
|
||||
];
|
||||
Log::debug(sprintf('viewRange is %s', $viewRange));
|
||||
|
||||
// get the format for the ranges:
|
||||
$format = $this->getFormatByRange($viewRange);
|
||||
|
||||
// when current range is a custom range, add the current period as the next range.
|
||||
if ($isCustom) {
|
||||
Log::debug('Custom is true.');
|
||||
$index = $start->formatLocalized($format);
|
||||
$index = Navigation::periodShow($start, $viewRange);
|
||||
$customPeriodStart = Navigation::startOfPeriod($start, $viewRange);
|
||||
$customPeriodEnd = Navigation::endOfPeriod($customPeriodStart, $viewRange);
|
||||
$ranges[$index] = [$customPeriodStart, $customPeriodEnd];
|
||||
}
|
||||
// then add previous range and next range
|
||||
$previousDate = Navigation::subtractPeriod($start, $viewRange);
|
||||
$index = $previousDate->formatLocalized($format);
|
||||
$index = Navigation::periodShow($previousDate, $viewRange);
|
||||
$previousStart = Navigation::startOfPeriod($previousDate, $viewRange);
|
||||
$previousEnd = Navigation::endOfPeriod($previousStart, $viewRange);
|
||||
$ranges[$index] = [$previousStart, $previousEnd];
|
||||
|
||||
$nextDate = Navigation::addPeriod($start, $viewRange, 0);
|
||||
$index = $nextDate->formatLocalized($format);
|
||||
$index = Navigation::periodShow($nextDate, $viewRange);
|
||||
$nextStart = Navigation::startOfPeriod($nextDate, $viewRange);
|
||||
$nextEnd = Navigation::endOfPeriod($nextStart, $viewRange);
|
||||
$ranges[$index] = [$nextStart, $nextEnd];
|
||||
@ -188,33 +185,4 @@ class JavascriptController extends Controller
|
||||
return $return;
|
||||
|
||||
}
|
||||
|
||||
private function getFormatByRange(string $viewRange): string
|
||||
{
|
||||
switch ($viewRange) {
|
||||
default:
|
||||
throw new FireflyException(sprintf('The date picker does not yet support "%s".', $viewRange)); // @codeCoverageIgnore
|
||||
case '1D':
|
||||
case 'custom':
|
||||
$format = (string)trans('config.month_and_day');
|
||||
break;
|
||||
case '3M':
|
||||
$format = (string)trans('config.quarter_in_year');
|
||||
break;
|
||||
case '6M':
|
||||
$format = (string)trans('config.half_year');
|
||||
break;
|
||||
case '1Y':
|
||||
$format = (string)trans('config.year');
|
||||
break;
|
||||
case '1M':
|
||||
$format = (string)trans('config.month');
|
||||
break;
|
||||
case '1W':
|
||||
$format = (string)trans('config.week_in_year');
|
||||
break;
|
||||
}
|
||||
|
||||
return $format;
|
||||
}
|
||||
}
|
||||
|
74
app/Http/Controllers/Json/FrontpageController.php
Normal file
74
app/Http/Controllers/Json/FrontpageController.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* FrontpageController.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\Http\Controllers\Json;
|
||||
|
||||
use FireflyIII\Http\Controllers\Controller;
|
||||
use FireflyIII\Models\PiggyBank;
|
||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||
use Response;
|
||||
|
||||
/**
|
||||
* Class FrontpageController
|
||||
*
|
||||
* @package FireflyIII\Http\Controllers\Json
|
||||
*/
|
||||
class FrontpageController extends Controller
|
||||
{
|
||||
/**
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function piggyBanks(PiggyBankRepositoryInterface $repository)
|
||||
{
|
||||
$set = $repository->getPiggyBanks();
|
||||
$info = [];
|
||||
/** @var PiggyBank $piggyBank */
|
||||
foreach ($set as $piggyBank) {
|
||||
$rep = $piggyBank->currentRelevantRep();
|
||||
$amount = strval($rep->currentamount);
|
||||
if (!is_null($rep->id) && bccomp($amount, '0') === 1) {
|
||||
|
||||
// percentage!
|
||||
$pct = round(($amount / $piggyBank->targetamount) * 100);
|
||||
|
||||
$entry = [
|
||||
'id' => $piggyBank->id,
|
||||
'name' => $piggyBank->name,
|
||||
'amount' => $amount,
|
||||
'target' => $piggyBank->targetamount,
|
||||
'percentage' => $pct,
|
||||
];
|
||||
|
||||
$info[] = $entry;
|
||||
}
|
||||
|
||||
}
|
||||
$html = '';
|
||||
if (count($info) > 0) {
|
||||
$html = view('json.piggy-banks', compact('info'))->render();
|
||||
}
|
||||
|
||||
return Response::json(['html' => $html]);
|
||||
}
|
||||
|
||||
}
|
@ -26,6 +26,7 @@ namespace FireflyIII\Http\Controllers;
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Http\Requests\NewUserFormRequest;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use Preferences;
|
||||
use Session;
|
||||
use View;
|
||||
@ -81,7 +82,7 @@ class NewUserController extends Controller
|
||||
*
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function submit(NewUserFormRequest $request, AccountRepositoryInterface $repository)
|
||||
public function submit(NewUserFormRequest $request, AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository)
|
||||
{
|
||||
// create normal asset account:
|
||||
$this->createAssetAccount($request, $repository);
|
||||
@ -89,6 +90,16 @@ class NewUserController extends Controller
|
||||
// create savings account
|
||||
$this->createSavingsAccount($request, $repository);
|
||||
|
||||
// also store currency preference from input:
|
||||
$currency = $currencyRepository->find(intval($request->input('amount_currency_id_bank_balance')));
|
||||
|
||||
if(!is_null($currency->id)) {
|
||||
// store currency preference:
|
||||
Preferences::set('currencyPreference', $currency->code);
|
||||
Preferences::mark();
|
||||
}
|
||||
|
||||
|
||||
Session::flash('success', strval(trans('firefly.stored_new_accounts_new_user')));
|
||||
Preferences::mark();
|
||||
|
||||
@ -137,7 +148,7 @@ class NewUserController extends Controller
|
||||
'accountRole' => 'savingAsset',
|
||||
'openingBalance' => round($request->input('savings_balance'), 12),
|
||||
'openingBalanceDate' => new Carbon,
|
||||
'currency_id' => intval($request->input('amount_currency_id_savings_balance')),
|
||||
'currency_id' => intval($request->input('amount_currency_id_bank_balance')),
|
||||
];
|
||||
$repository->store($savingsAccount);
|
||||
|
||||
|
@ -285,7 +285,7 @@ class PiggyBankController extends Controller
|
||||
*/
|
||||
public function postAdd(Request $request, PiggyBankRepositoryInterface $repository, PiggyBank $piggyBank)
|
||||
{
|
||||
$amount = $request->get('amount');
|
||||
$amount = $request->get('amount') ?? '0';
|
||||
$currency = app('amount')->getDefaultCurrency();
|
||||
if ($repository->canAddAmount($piggyBank, $amount)) {
|
||||
$repository->addAmount($piggyBank, $amount);
|
||||
@ -324,7 +324,7 @@ class PiggyBankController extends Controller
|
||||
*/
|
||||
public function postRemove(Request $request, PiggyBankRepositoryInterface $repository, PiggyBank $piggyBank)
|
||||
{
|
||||
$amount = $request->get('amount');
|
||||
$amount = $request->get('amount') ?? '0';
|
||||
$currency = app('amount')->getDefaultCurrency();
|
||||
if ($repository->canRemoveAmount($piggyBank, $amount)) {
|
||||
$repository->removeAmount($piggyBank, $amount);
|
||||
|
@ -67,9 +67,9 @@ class PreferencesController extends Controller
|
||||
public function code(Google2FA $google2fa)
|
||||
{
|
||||
$domain = $this->getDomain();
|
||||
$secret = $google2fa->generateSecretKey(16);
|
||||
$secret = $google2fa->generateSecretKey();
|
||||
Session::flash('two-factor-secret', $secret);
|
||||
$image = $google2fa->getQRCodeInline('Firefly III at ' . $domain, auth()->user()->email, $secret, 150);
|
||||
$image = $google2fa->getQRCodeInline($domain, auth()->user()->email, $secret, 200);
|
||||
|
||||
|
||||
return view('preferences.code', compact('image'));
|
||||
|
@ -261,6 +261,7 @@ class ReportController extends Controller
|
||||
* @param ReportFormRequest $request
|
||||
*
|
||||
* @return RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
||||
*/
|
||||
public function postIndex(ReportFormRequest $request)
|
||||
{
|
||||
@ -299,7 +300,7 @@ class ReportController extends Controller
|
||||
return redirect(route('reports.index'));
|
||||
}
|
||||
|
||||
if ($end < $start) {
|
||||
if ($request->getEndDate() < $request->getStartDate()) {
|
||||
return view('error')->with('message', trans('firefly.end_after_start_date'));
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Http\Controllers;
|
||||
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
use FireflyIII\Support\Search\SearchInterface;
|
||||
use Illuminate\Http\Request;
|
||||
use Response;
|
||||
@ -75,11 +76,24 @@ class SearchController extends Controller
|
||||
{
|
||||
$fullQuery = strval($request->get('query'));
|
||||
|
||||
// parse search terms:
|
||||
$searcher->parseQuery($fullQuery);
|
||||
$searcher->setLimit(20);
|
||||
$transactions = $searcher->searchTransactions();
|
||||
$html = view('search.search', compact('transactions'))->render();
|
||||
// cache
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty('search');
|
||||
$cache->addProperty($fullQuery);
|
||||
|
||||
if ($cache->has()) {
|
||||
$transactions = $cache->get();
|
||||
}
|
||||
|
||||
if (!$cache->has()) {
|
||||
// parse search terms:
|
||||
$searcher->parseQuery($fullQuery);
|
||||
$searcher->setLimit(intval(env('SEARCH_RESULT_LIMIT', 50)));
|
||||
$transactions = $searcher->searchTransactions();
|
||||
$cache->store($transactions);
|
||||
}
|
||||
|
||||
$html = view('search.search', compact('transactions'))->render();
|
||||
|
||||
return Response::json(['count' => $transactions->count(), 'html' => $html]);
|
||||
|
||||
|
@ -355,6 +355,7 @@ class SingleController extends Controller
|
||||
$this->attachments->saveAttachmentsForModel($journal, $files);
|
||||
|
||||
// store the journal only, flash the rest.
|
||||
Log::debug(sprintf('Count of error messages is %d', $this->attachments->getErrors()->count()));
|
||||
if (count($this->attachments->getErrors()->get('attachments')) > 0) {
|
||||
Session::flash('error', $this->attachments->getErrors()->get('attachments'));
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ use FireflyIII\Http\Middleware\Range;
|
||||
use FireflyIII\Http\Middleware\RedirectIfAuthenticated;
|
||||
use FireflyIII\Http\Middleware\RedirectIfTwoFactorAuthenticated;
|
||||
use FireflyIII\Http\Middleware\Sandstorm;
|
||||
use FireflyIII\Http\Middleware\StartFireflySession;
|
||||
use FireflyIII\Http\Middleware\TrimStrings;
|
||||
use FireflyIII\Http\Middleware\TrustProxies;
|
||||
use FireflyIII\Http\Middleware\VerifyCsrfToken;
|
||||
@ -54,7 +55,6 @@ use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
|
||||
use Illuminate\Foundation\Http\Middleware\ValidatePostSize;
|
||||
use Illuminate\Routing\Middleware\SubstituteBindings;
|
||||
use Illuminate\Routing\Middleware\ThrottleRequests;
|
||||
use Illuminate\Session\Middleware\StartSession;
|
||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
@ -102,7 +102,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
@ -115,7 +115,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
@ -130,7 +130,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
@ -145,7 +145,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
@ -163,7 +163,7 @@ class Kernel extends HttpKernel
|
||||
Sandstorm::class,
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
StartSession::class,
|
||||
StartFireflySession::class,
|
||||
ShareErrorsFromSession::class,
|
||||
VerifyCsrfToken::class,
|
||||
SubstituteBindings::class,
|
||||
|
@ -49,6 +49,7 @@ class Sandstorm
|
||||
*
|
||||
* @return mixed
|
||||
* @throws FireflyException
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, $guard = null)
|
||||
{
|
||||
|
67
app/Http/Middleware/StartFireflySession.php
Normal file
67
app/Http/Middleware/StartFireflySession.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* StartFireflySession.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\Http\Middleware;
|
||||
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Session\Middleware\StartSession;
|
||||
|
||||
/**
|
||||
* Class StartFireflySession
|
||||
*
|
||||
* @package FireflyIII\Http\Middleware
|
||||
*/
|
||||
class StartFireflySession extends StartSession
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param Closure $next
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
// public function handle($request, Closure $next)
|
||||
// {
|
||||
// return parent::handle($request, $next); // defer to the right stuff
|
||||
// }
|
||||
|
||||
/**
|
||||
* Store the current URL for the request if necessary.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Illuminate\Contracts\Session\Session $session
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function storeCurrentUrl(Request $request, $session)
|
||||
{
|
||||
$uri = $request->fullUrl();
|
||||
$strpos = strpos($uri, 'jscript');
|
||||
if ($request->method() === 'GET' && $request->route() && !$request->ajax() && $strpos === false) {
|
||||
$session->setPreviousUrl($uri);
|
||||
}
|
||||
}
|
||||
}
|
@ -165,6 +165,7 @@ class ImportAccount
|
||||
|
||||
/**
|
||||
* @return Account
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
||||
*/
|
||||
private function findExistingObject(): Account
|
||||
{
|
||||
|
@ -125,7 +125,7 @@ class AbnAmroDescription implements SpecificInterface
|
||||
|
||||
/**
|
||||
* Parses the current description in SEPA format
|
||||
*
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
||||
* @return bool true if the description is SEPA format, false otherwise
|
||||
*/
|
||||
protected function parseSepaDescription()
|
||||
|
49
app/Providers/SessionServiceProvider.php
Normal file
49
app/Providers/SessionServiceProvider.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* SessionServiceProvider.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\Providers;
|
||||
|
||||
use FireflyIII\Http\Middleware\StartFireflySession;
|
||||
use Illuminate\Session\SessionServiceProvider as BaseSessionServiceProvider;
|
||||
|
||||
/**
|
||||
* Class SessionServiceProvider
|
||||
*
|
||||
* @package FireflyIII\Providers
|
||||
*/
|
||||
class SessionServiceProvider extends BaseSessionServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->registerSessionManager();
|
||||
|
||||
$this->registerSessionDriver();
|
||||
|
||||
$this->app->singleton(StartFireflySession::class);
|
||||
}
|
||||
}
|
@ -221,8 +221,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
*/
|
||||
protected function openingBalanceTransaction(Account $account): TransactionJournal
|
||||
{
|
||||
$journal = TransactionJournal::sortCorrectly()
|
||||
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||
$journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||
->where('transactions.account_id', $account->id)
|
||||
->transactionTypes([TransactionType::OPENING_BALANCE])
|
||||
->first(['transaction_journals.*']);
|
||||
@ -288,6 +287,8 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* At this point strlen of amount > 0.
|
||||
*
|
||||
* @param Account $account
|
||||
* @param array $data
|
||||
*
|
||||
@ -296,6 +297,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
protected function storeInitialBalance(Account $account, array $data): TransactionJournal
|
||||
{
|
||||
$amount = strval($data['openingBalance']);
|
||||
Log::debug(sprintf('Submitted amount is %s',$amount));
|
||||
|
||||
if (bccomp($amount, '0') === 0) {
|
||||
return new TransactionJournal;
|
||||
@ -322,12 +324,15 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
$secondAccount = $opposing;
|
||||
$firstAmount = $amount;
|
||||
$secondAmount = bcmul($amount, '-1');
|
||||
Log::debug(sprintf('First amount is %s, second amount is %s', $firstAmount, $secondAmount));
|
||||
|
||||
if ($data['openingBalance'] < 0) {
|
||||
if (bccomp($amount,'0') === -1) {
|
||||
Log::debug(sprintf('%s is a negative number.', $amount));
|
||||
$firstAccount = $opposing;
|
||||
$secondAccount = $account;
|
||||
$firstAmount = bcmul($amount, '-1');
|
||||
$secondAmount = $amount;
|
||||
Log::debug(sprintf('First amount is %s, second amount is %s', $firstAmount, $secondAmount));
|
||||
}
|
||||
|
||||
$one = new Transaction(
|
||||
@ -374,6 +379,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param Account $account
|
||||
* @param array $data
|
||||
*
|
||||
@ -381,6 +387,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
*/
|
||||
protected function updateInitialBalance(Account $account, array $data): bool
|
||||
{
|
||||
Log::debug(sprintf('updateInitialBalance() for account #%d', $account->id));
|
||||
$openingBalance = $this->openingBalanceTransaction($account);
|
||||
|
||||
// no opening balance journal? create it:
|
||||
@ -457,6 +464,8 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
$amount = strval($data['openingBalance']);
|
||||
$currencyId = intval($data['currency_id']);
|
||||
|
||||
Log::debug(sprintf('Submitted amount for opening balance to update is %s', $amount));
|
||||
|
||||
if (bccomp($amount, '0') === 0) {
|
||||
$journal->delete();
|
||||
|
||||
@ -471,12 +480,15 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
/** @var Transaction $transaction */
|
||||
foreach ($journal->transactions()->get() as $transaction) {
|
||||
if ($account->id === $transaction->account_id) {
|
||||
Log::debug(sprintf('Will change transaction #%d amount from %s to %s', $transaction->id, $transaction->amount, $amount));
|
||||
$transaction->amount = $amount;
|
||||
$transaction->transaction_currency_id = $currencyId;
|
||||
$transaction->save();
|
||||
}
|
||||
if ($account->id !== $transaction->account_id) {
|
||||
$transaction->amount = bcmul($amount, '-1');
|
||||
$negativeAmount = bcmul($amount, '-1');
|
||||
Log::debug(sprintf('Will change transaction #%d amount from %s to %s', $transaction->id, $transaction->amount, $negativeAmount));
|
||||
$transaction->amount = $negativeAmount;
|
||||
$transaction->transaction_currency_id = $currencyId;
|
||||
$transaction->save();
|
||||
}
|
||||
@ -495,7 +507,9 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
*/
|
||||
protected function validOpeningBalanceData(array $data): bool
|
||||
{
|
||||
if (isset($data['openingBalance']) && isset($data['openingBalanceDate'])) {
|
||||
$data['openingBalance'] = strval($data['openingBalance'] ?? '');
|
||||
if (isset($data['openingBalance']) && !is_null($data['openingBalance']) && strlen($data['openingBalance']) > 0 &&
|
||||
isset($data['openingBalanceDate'])) {
|
||||
Log::debug('Array has valid opening balance data.');
|
||||
|
||||
return true;
|
||||
|
@ -111,7 +111,6 @@ class CurrencyRepository implements CurrencyRepositoryInterface
|
||||
$currency = TransactionCurrency::find($currencyId);
|
||||
if (is_null($currency)) {
|
||||
$currency = new TransactionCurrency;
|
||||
|
||||
}
|
||||
|
||||
return $currency;
|
||||
|
@ -396,7 +396,7 @@ class RuleRepository implements RuleRepositoryInterface
|
||||
|
||||
$this->storeTrigger($rule, $triggerValues);
|
||||
foreach ($data['rule-triggers'] as $index => $trigger) {
|
||||
$value = $data['rule-trigger-values'][$index];
|
||||
$value = $data['rule-trigger-values'][$index] ?? '';
|
||||
$stopProcessing = isset($data['rule-trigger-stop'][$index]) ? true : false;
|
||||
|
||||
$triggerValues = [
|
||||
|
@ -394,6 +394,21 @@ abstract class BunqRequest
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $headers
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function joinHeaders(array $headers): string
|
||||
{
|
||||
$string = '';
|
||||
foreach ($headers as $header => $value) {
|
||||
$string .= $header . ': ' . trim($value) . "\n";
|
||||
}
|
||||
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $response
|
||||
*
|
||||
@ -447,10 +462,7 @@ abstract class BunqRequest
|
||||
ksort($verifyHeaders);
|
||||
|
||||
// add them to data to sign:
|
||||
foreach ($verifyHeaders as $header => $value) {
|
||||
$dataToVerify .= $header . ': ' . trim($value) . "\n";
|
||||
}
|
||||
|
||||
$dataToVerify .= $this->joinHeaders($verifyHeaders);
|
||||
$signature = $headers['x-bunq-server-signature'][0];
|
||||
$dataToVerify .= "\n" . $body;
|
||||
$result = openssl_verify($dataToVerify, base64_decode($signature), $this->serverPublicKey->getPublicKey(), OPENSSL_ALGO_SHA256);
|
||||
@ -462,6 +474,8 @@ abstract class BunqRequest
|
||||
}
|
||||
if (!is_int($result)) {
|
||||
Log::error(sprintf('Result of verification is a boolean (%d), return false.', $result));
|
||||
|
||||
return false;
|
||||
}
|
||||
Log::info('Signature is a match, return true.');
|
||||
|
||||
|
@ -190,7 +190,7 @@ class Amount
|
||||
}
|
||||
$cache->store(config('firefly.default_currency', 'EUR'));
|
||||
|
||||
return config('firefly.default_currency', 'EUR');
|
||||
return strval(config('firefly.default_currency', 'EUR'));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -300,7 +300,6 @@ class ExpandedForm
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param null $value
|
||||
@ -331,6 +330,27 @@ class ExpandedForm
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param null $value
|
||||
* @param array $options
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function number(string $name, $value = null, array $options = []): string
|
||||
{
|
||||
$label = $this->label($name, $options);
|
||||
$options = $this->expandOptionArray($name, $label, $options);
|
||||
$classes = $this->getHolderClasses($name);
|
||||
$value = $this->fillFieldValue($name, $value);
|
||||
$options['step'] = 'any';
|
||||
unset($options['placeholder']);
|
||||
|
||||
$html = view('form.number', compact( 'classes', 'name', 'label', 'value', 'options'))->render();
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $type
|
||||
* @param $name
|
||||
|
@ -233,7 +233,7 @@ class Navigation
|
||||
*/
|
||||
public function periodShow(Carbon $theDate, string $repeatFrequency): string
|
||||
{
|
||||
$date = clone $theDate;
|
||||
$date = clone $theDate;
|
||||
$formatMap = [
|
||||
'1D' => trans('config.specific_day'),
|
||||
'daily' => trans('config.specific_day'),
|
||||
@ -241,8 +241,8 @@ class Navigation
|
||||
'1W' => trans('config.week_in_year'),
|
||||
'week' => trans('config.week_in_year'),
|
||||
'weekly' => trans('config.week_in_year'),
|
||||
'3M' => trans('config.quarter_of_year'),
|
||||
'quarter' => trans('config.quarter_of_year'),
|
||||
//'3M' => trans('config.quarter_of_year'),
|
||||
//'quarter' => trans('config.quarter_of_year'),
|
||||
'1M' => trans('config.month'),
|
||||
'month' => trans('config.month'),
|
||||
'monthly' => trans('config.month'),
|
||||
@ -253,10 +253,16 @@ class Navigation
|
||||
|
||||
];
|
||||
|
||||
|
||||
if (isset($formatMap[$repeatFrequency])) {
|
||||
return $date->formatLocalized(strval($formatMap[$repeatFrequency]));
|
||||
}
|
||||
if ($repeatFrequency === '3M' || $repeatFrequency === 'quarter') {
|
||||
$quarter = ceil($theDate->month / 3);
|
||||
|
||||
return sprintf('Q%d %d', $quarter, $theDate->year);
|
||||
}
|
||||
|
||||
// special formatter for quarter of year
|
||||
throw new FireflyException(sprintf('No date formats for frequency "%s"!', $repeatFrequency));
|
||||
}
|
||||
|
||||
|
@ -176,7 +176,7 @@ class Preferences
|
||||
|
||||
/**
|
||||
* @param $name
|
||||
* @param string $value
|
||||
* @param $value
|
||||
*
|
||||
* @return Preference
|
||||
*/
|
||||
|
@ -28,6 +28,7 @@ use Carbon\Carbon;
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use Illuminate\Support\Str;
|
||||
use Log;
|
||||
use Steam;
|
||||
|
||||
@ -51,65 +52,41 @@ class Modifier
|
||||
return $compare === $expected;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $modifier
|
||||
* @param Transaction $transaction
|
||||
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
||||
*
|
||||
* @return bool
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public static function apply(array $modifier, Transaction $transaction): bool
|
||||
{
|
||||
$res = true;
|
||||
switch ($modifier['type']) {
|
||||
default:
|
||||
throw new FireflyException(sprintf('Search modifier "%s" is not (yet) supported. Sorry!', $modifier['type']));
|
||||
case 'amount':
|
||||
case 'amount_is':
|
||||
$res = self::amountCompare($transaction, $modifier['value'], 0);
|
||||
Log::debug(sprintf('Amount is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'amount_min':
|
||||
case 'amount_less':
|
||||
$res = self::amountCompare($transaction, $modifier['value'], 1);
|
||||
Log::debug(sprintf('Amount less than %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'amount_max':
|
||||
case 'amount_more':
|
||||
$res = self::amountCompare($transaction, $modifier['value'], -1);
|
||||
Log::debug(sprintf('Amount more than %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'source':
|
||||
$res = self::stringCompare($transaction->account_name, $modifier['value']);
|
||||
$name = Steam::tryDecrypt($transaction->account_name);
|
||||
$res = self::stringCompare($name, $modifier['value']);
|
||||
Log::debug(sprintf('Source is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'destination':
|
||||
$res = self::stringCompare($transaction->opposing_account_name, $modifier['value']);
|
||||
$name = Steam::tryDecrypt($transaction->opposing_account_name);
|
||||
$res = self::stringCompare($name, $modifier['value']);
|
||||
Log::debug(sprintf('Destination is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'category':
|
||||
$res = self::category($transaction, $modifier['value']);
|
||||
$res = self::category($transaction, $modifier['value']);
|
||||
Log::debug(sprintf('Category is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'budget':
|
||||
$res = self::budget($transaction, $modifier['value']);
|
||||
$res = self::budget($transaction, $modifier['value']);
|
||||
Log::debug(sprintf('Budget is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'bill':
|
||||
$res = self::stringCompare(strval($transaction->bill_name), $modifier['value']);
|
||||
$name = Steam::tryDecrypt($transaction->bill_name);
|
||||
$res = self::stringCompare($name, $modifier['value']);
|
||||
Log::debug(sprintf('Bill is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'type':
|
||||
$res = self::stringCompare($transaction->transaction_type_type, $modifier['value']);
|
||||
Log::debug(sprintf('Transaction type is %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'date':
|
||||
case 'on':
|
||||
$res = self::sameDate($transaction->date, $modifier['value']);
|
||||
Log::debug(sprintf('Date same as %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'date_before':
|
||||
case 'before':
|
||||
$res = self::dateBefore($transaction->date, $modifier['value']);
|
||||
Log::debug(sprintf('Date before %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
case 'date_after':
|
||||
case 'after':
|
||||
$res = self::dateAfter($transaction->date, $modifier['value']);
|
||||
Log::debug(sprintf('Date before %s? %s', $modifier['value'], var_export($res, true)));
|
||||
break;
|
||||
}
|
||||
|
||||
return $res;
|
||||
|
@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Support\Search;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Helpers\Collector\JournalCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
@ -121,6 +122,10 @@ class Search implements SearchInterface
|
||||
if ($this->hasModifiers()) {
|
||||
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
|
||||
}
|
||||
|
||||
// some modifiers can be applied to the collector directly.
|
||||
$collector = $this->applyModifiers($collector);
|
||||
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
$set = $collector->getPaginatedJournals()->getCollection();
|
||||
|
||||
@ -186,6 +191,57 @@ class Search implements SearchInterface
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
private function applyModifiers(JournalCollectorInterface $collector): JournalCollectorInterface
|
||||
{
|
||||
foreach ($this->modifiers as $modifier) {
|
||||
switch ($modifier['type']) {
|
||||
case 'amount_is':
|
||||
case 'amount':
|
||||
$amount = app('steam')->positive(strval($modifier['value']));
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $amount));
|
||||
$collector->amountIs($amount);
|
||||
break;
|
||||
case 'amount_max':
|
||||
case 'amount_less':
|
||||
$amount = app('steam')->positive(strval($modifier['value']));
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $amount));
|
||||
$collector->amountLess($amount);
|
||||
break;
|
||||
case 'amount_min':
|
||||
case 'amount_more':
|
||||
$amount = app('steam')->positive(strval($modifier['value']));
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $amount));
|
||||
$collector->amountMore($amount);
|
||||
break;
|
||||
case 'type':
|
||||
$collector->setTypes([ucfirst($modifier['value'])]);
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $modifier['value']));
|
||||
break;
|
||||
case 'date':
|
||||
case 'on':
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $modifier['value']));
|
||||
$start = new Carbon($modifier['value']);
|
||||
$collector->setRange($start, $start);
|
||||
break;
|
||||
case 'date_before':
|
||||
case 'before':
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $modifier['value']));
|
||||
$before = new Carbon($modifier['value']);
|
||||
$collector->setBefore($before);
|
||||
break;
|
||||
case 'date_after':
|
||||
case 'after':
|
||||
Log::debug(sprintf('Set "%s" using collector with value "%s"', $modifier['type'], $modifier['value']));
|
||||
$after = new Carbon($modifier['value']);
|
||||
$collector->setBefore($after);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $collector;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
*/
|
||||
|
@ -248,7 +248,7 @@ class Journal extends Twig_Extension
|
||||
$txt = sprintf('<i class="fa fa-fw fa-exchange" title="%s"></i>', trans('firefly.transfer'));
|
||||
break;
|
||||
case $journal->isOpeningBalance():
|
||||
$txt = sprintf('<i class="fa-fw fa fa-ban" title="%s"></i>', trans('firefly.openingBalance'));
|
||||
$txt = sprintf('<i class="fa-fw fa fa-star-o" title="%s"></i>', trans('firefly.openingBalance'));
|
||||
break;
|
||||
default:
|
||||
$txt = '';
|
||||
|
@ -24,8 +24,11 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\Support\Twig;
|
||||
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\Attachment;
|
||||
use FireflyIII\Models\Transaction as TransactionModel;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\Support\CacheProperties;
|
||||
use Lang;
|
||||
use Steam;
|
||||
use Twig_Extension;
|
||||
use Twig_SimpleFilter;
|
||||
@ -38,6 +41,41 @@ use Twig_SimpleFunction;
|
||||
*/
|
||||
class Transaction extends Twig_Extension
|
||||
{
|
||||
/**
|
||||
* @return Twig_SimpleFunction
|
||||
*/
|
||||
public function attachmentIndicator(): Twig_SimpleFunction
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'attachmentIndicator', function (int $journalId) {
|
||||
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty('attachments_journal');
|
||||
$cache->addProperty($journalId);
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
$count = Attachment::whereNull('deleted_at')
|
||||
->where('attachable_type', 'FireflyIII\Models\TransactionJournal')
|
||||
->where('attachable_id', $journalId)
|
||||
->count();
|
||||
if ($count > 0) {
|
||||
$res = sprintf('<i class="fa fa-paperclip" title="%s"></i>', Lang::choice('firefly.nr_of_attachments', $count, ['count' => $count]));
|
||||
$cache->store($res);
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
$res = '';
|
||||
$cache->store($res);
|
||||
|
||||
return $res;
|
||||
|
||||
|
||||
}, ['is_safe' => ['html']]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
@ -63,6 +101,7 @@ class Transaction extends Twig_Extension
|
||||
$this->transactionCategories(),
|
||||
$this->transactionIdCategories(),
|
||||
$this->splitJournalIndicator(),
|
||||
$this->attachmentIndicator(),
|
||||
];
|
||||
|
||||
return $functions;
|
||||
@ -85,12 +124,25 @@ class Transaction extends Twig_Extension
|
||||
{
|
||||
return new Twig_SimpleFunction(
|
||||
'splitJournalIndicator', function (int $journalId) {
|
||||
|
||||
$cache = new CacheProperties;
|
||||
$cache->addProperty('is_split_journal');
|
||||
$cache->addProperty($journalId);
|
||||
if ($cache->has()) {
|
||||
return $cache->get();
|
||||
}
|
||||
$count = TransactionModel::where('transaction_journal_id', $journalId)->whereNull('deleted_at')->count();
|
||||
if ($count > 2) {
|
||||
return '<i class="fa fa-fw fa-share-alt" aria-hidden="true"></i>';
|
||||
$res = '<i class="fa fa-fw fa-share-alt" aria-hidden="true"></i>';
|
||||
$cache->store($res);
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
return '';
|
||||
$res = '';
|
||||
$cache->store($res);
|
||||
|
||||
return $res;
|
||||
|
||||
|
||||
}, ['is_safe' => ['html']]
|
||||
@ -261,7 +313,7 @@ class Transaction extends Twig_Extension
|
||||
$txt = sprintf('<i class="fa fa-fw fa-exchange" title="%s"></i>', trans('firefly.transfer'));
|
||||
break;
|
||||
case TransactionType::OPENING_BALANCE:
|
||||
$txt = sprintf('<i class="fa-fw fa fa-ban" title="%s"></i>', trans('firefly.openingBalance'));
|
||||
$txt = sprintf('<i class="fa-fw fa fa-star-o" title="%s"></i>', trans('firefly.openingBalance'));
|
||||
break;
|
||||
default:
|
||||
$txt = '';
|
||||
|
22
composer.lock
generated
22
composer.lock
generated
@ -788,16 +788,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v5.5.18",
|
||||
"version": "v5.5.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "1cc21baac11551377734b8c17ead17db4c34fe21"
|
||||
"reference": "c678100e84934ec85c9f8bc26bd0a60222682719"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/1cc21baac11551377734b8c17ead17db4c34fe21",
|
||||
"reference": "1cc21baac11551377734b8c17ead17db4c34fe21",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/c678100e84934ec85c9f8bc26bd0a60222682719",
|
||||
"reference": "c678100e84934ec85c9f8bc26bd0a60222682719",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -915,7 +915,7 @@
|
||||
"framework",
|
||||
"laravel"
|
||||
],
|
||||
"time": "2017-10-19T12:50:26+00:00"
|
||||
"time": "2017-10-25T19:10:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravelcollective/html",
|
||||
@ -984,16 +984,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/commonmark",
|
||||
"version": "0.15.6",
|
||||
"version": "0.15.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/commonmark.git",
|
||||
"reference": "91742543c25fecedc84a4883d2919213e04a73b7"
|
||||
"reference": "36d82f166e441dfa28643f8d01dd8bdd3a579adf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91742543c25fecedc84a4883d2919213e04a73b7",
|
||||
"reference": "91742543c25fecedc84a4883d2919213e04a73b7",
|
||||
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/36d82f166e441dfa28643f8d01dd8bdd3a579adf",
|
||||
"reference": "36d82f166e441dfa28643f8d01dd8bdd3a579adf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1049,7 +1049,7 @@
|
||||
"markdown",
|
||||
"parser"
|
||||
],
|
||||
"time": "2017-08-08T11:47:33+00:00"
|
||||
"time": "2017-10-26T15:41:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/csv",
|
||||
@ -1271,7 +1271,7 @@
|
||||
},
|
||||
{
|
||||
"name": "mtdowling/cron-expression",
|
||||
"version": "v1.2.0",
|
||||
"version": "v1.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mtdowling/cron-expression.git",
|
||||
|
@ -57,7 +57,7 @@ return [
|
||||
Illuminate\Queue\QueueServiceProvider::class,
|
||||
Illuminate\Redis\RedisServiceProvider::class,
|
||||
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
|
||||
Illuminate\Session\SessionServiceProvider::class,
|
||||
FireflyIII\Providers\SessionServiceProvider::class,
|
||||
Illuminate\Translation\TranslationServiceProvider::class,
|
||||
Illuminate\Validation\ValidationServiceProvider::class,
|
||||
Illuminate\View\ViewServiceProvider::class,
|
||||
|
@ -33,7 +33,7 @@ return [
|
||||
'is_demo_site' => false,
|
||||
],
|
||||
'encryption' => (is_null(env('USE_ENCRYPTION')) || env('USE_ENCRYPTION') === true),
|
||||
'version' => '4.6.9',
|
||||
'version' => '4.6.10',
|
||||
'maxUploadSize' => 15242880,
|
||||
'allowedMimes' => ['image/png', 'image/jpeg', 'application/pdf'],
|
||||
'list_length' => 10,
|
||||
@ -126,15 +126,15 @@ return [
|
||||
],
|
||||
'languages' => [
|
||||
'de_DE' => ['name_locale' => 'Deutsch', 'name_english' => 'German', 'complete' => true],
|
||||
'es_ES' => ['name_locale' => 'Spanish', 'name_english' => 'Spanish', 'complete' => false],
|
||||
'en_US' => ['name_locale' => 'English', 'name_english' => 'English', 'complete' => true],
|
||||
'fr_FR' => ['name_locale' => 'Français', 'name_english' => 'French', 'complete' => true],
|
||||
'id_ID' => ['name_locale' => 'Indonesian', 'name_english' => 'Indonesian', 'complete' => false],
|
||||
'nl_NL' => ['name_locale' => 'Nederlands', 'name_english' => 'Dutch', 'complete' => true],
|
||||
'pl_PL' => ['name_locale' => 'Polski', 'name_english' => 'Polish ', 'complete' => false],
|
||||
'pl_PL' => ['name_locale' => 'Polski', 'name_english' => 'Polish ', 'complete' => true],
|
||||
'pt_BR' => ['name_locale' => 'Português do Brasil', 'name_english' => 'Portuguese (Brazil)', 'complete' => true],
|
||||
'ru_RU' => ['name_locale' => 'Русский', 'name_english' => 'Russian', 'complete' => false],
|
||||
'sl_SI' => ['name_locale' => 'Slovenščina', 'name_english' => 'Slovenian', 'complete' => false],
|
||||
'zh-TW' => ['name_locale' => '正體中文', 'name_english' => 'Chinese Traditional', 'complete' => false],
|
||||
],
|
||||
'transactionTypesByWhat' => [
|
||||
'expenses' => ['Withdrawal'],
|
||||
|
@ -176,6 +176,7 @@ return [
|
||||
'is_safe' => [
|
||||
'date', 'text', 'select', 'balance', 'optionsList', 'checkbox', 'amount', 'tags', 'integer', 'textarea', 'location',
|
||||
'multiRadio', 'file', 'multiCheckbox', 'staticText', 'amountSmall', 'password', 'nonSelectableBalance', 'nonSelectableAmount',
|
||||
'number'
|
||||
],
|
||||
],
|
||||
'Form' => [
|
||||
|
33
docker-compose.dockerhub.yml
Normal file
33
docker-compose.dockerhub.yml
Normal file
@ -0,0 +1,33 @@
|
||||
version: '2'
|
||||
services:
|
||||
firefly-db:
|
||||
image: 'mysql:8'
|
||||
environment:
|
||||
- MYSQL_DATABASE=firefly_db
|
||||
- MYSQL_USER=firefly_db
|
||||
- MYSQL_PASSWORD=firefly_db_secret
|
||||
- MYSQL_RANDOM_ROOT_PASSWORD=yes
|
||||
volumes:
|
||||
- firefly-storage:/var/lib/mysql
|
||||
|
||||
firefly-app:
|
||||
image: 'jc5x/firefly-iii'
|
||||
environment:
|
||||
- FF_DB_HOST=firefly-db
|
||||
- FF_DB_NAME=firefly_db
|
||||
- FF_DB_USER=firefly_db
|
||||
- FF_DB_PASSWORD=firefly_db_secret
|
||||
- FF_APP_KEY=SomeRandomStringOf32CharsExactly
|
||||
- FF_APP_ENV=local
|
||||
ports:
|
||||
- "9001:80"
|
||||
links:
|
||||
- firefly-db
|
||||
volumes:
|
||||
- firefly-app-storage:/var/www/firefly-iii/storage
|
||||
|
||||
volumes:
|
||||
firefly-storage:
|
||||
driver: local
|
||||
firefly-app-storage:
|
||||
driver: local
|
412
public/css/google-fonts.css
vendored
Normal file
412
public/css/google-fonts.css
vendored
Normal file
@ -0,0 +1,412 @@
|
||||
/*
|
||||
* google-fonts.css
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light Italic'), local('SourceSansPro-LightItalic'), url('../fonts/SourceSansPro-LightItalic-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Italic'), local('SourceSansPro-Italic'), url('../fonts/SourceSansPro-Italic-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold Italic'), local('SourceSansPro-SemiBoldItalic'), url('../fonts/SourceSansPro-SemiBoldItalic-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/SourceSansPro-Light-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url('../fonts/SourceSansPro-Regular-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'), url('../fonts/SourceSansPro-SemiBold-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-cyrillic-ext.woff2') format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-cyrillic.woff2') format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-greek-ext.woff2') format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-greek.woff2') format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-vietnamese.woff2') format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-latin-ext.woff2') format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/SourceSansPro-Bold-latin.woff2') format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
BIN
public/fonts/SourceSansPro-Bold-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Bold-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-Bold-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Italic-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-Italic-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Light-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-Light-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-LightItalic-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-LightItalic-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-Regular-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-Regular-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBold-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBold-vietnamese.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-cyrillic-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-cyrillic.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-greek-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-greek.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-greek.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-latin-ext.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-latin.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-latin.woff2
Normal file
Binary file not shown.
BIN
public/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2
Normal file
BIN
public/fonts/SourceSansPro-SemiBoldItalic-vietnamese.woff2
Normal file
Binary file not shown.
5
public/js/ff/firefly.js
vendored
5
public/js/ff/firefly.js
vendored
@ -26,7 +26,7 @@ $(function () {
|
||||
configAccounting(currencySymbol);
|
||||
|
||||
// on submit of form, disable any button in form:
|
||||
$('form.form-horizontal').on('submit', function () {
|
||||
$('form.form-horizontal:not(.nodisablebutton)').on('submit', function () {
|
||||
$('button[type="submit"]').prop('disabled', true);
|
||||
});
|
||||
|
||||
@ -65,7 +65,8 @@ $(function () {
|
||||
$.post(dateRangeMeta.uri, {
|
||||
start: start.format('YYYY-MM-DD'),
|
||||
end: end.format('YYYY-MM-DD'),
|
||||
label: label
|
||||
label: label,
|
||||
_token: token
|
||||
}).done(function () {
|
||||
window.location.reload(true);
|
||||
}).fail(function () {
|
||||
|
43
public/js/ff/index.js
vendored
43
public/js/ff/index.js
vendored
@ -43,13 +43,25 @@ function drawChart() {
|
||||
getBillsBox();
|
||||
getAvailableBox();
|
||||
getNetWorthBox();
|
||||
getPiggyBanks();
|
||||
|
||||
//getBoxAmounts();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function getPiggyBanks() {
|
||||
$.getJSON(piggyInfoUri).done(function (data) {
|
||||
if (data.html.length > 0) {
|
||||
$('#piggy_bank_overview').html(data.html);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getNetWorthBox() {
|
||||
// box-net-worth
|
||||
$.getJSON('json/box/net-worth').done(function(data) {
|
||||
$.getJSON('json/box/net-worth').done(function (data) {
|
||||
$('#box-net-worth').html(data.net_worth);
|
||||
});
|
||||
}
|
||||
@ -60,7 +72,7 @@ function getNetWorthBox() {
|
||||
function getAvailableBox() {
|
||||
// box-left-to-spend
|
||||
// box-left-per-day
|
||||
$.getJSON('json/box/available').done(function(data) {
|
||||
$.getJSON('json/box/available').done(function (data) {
|
||||
$('#box-left-to-spend').html(data.left);
|
||||
$('#box-left-per-day').html(data.perDay);
|
||||
});
|
||||
@ -72,7 +84,7 @@ function getAvailableBox() {
|
||||
function getBillsBox() {
|
||||
// box-bills-unpaid
|
||||
// box-bills-paid
|
||||
$.getJSON('json/box/bills').done(function(data) {
|
||||
$.getJSON('json/box/bills').done(function (data) {
|
||||
$('#box-bills-paid').html(data.paid);
|
||||
$('#box-bills-unpaid').html(data.unpaid);
|
||||
});
|
||||
@ -85,32 +97,9 @@ function getBalanceBox() {
|
||||
// box-balance-total
|
||||
// box-balance-out
|
||||
// box-balance-in
|
||||
$.getJSON('json/box/balance').done(function(data) {
|
||||
$.getJSON('json/box/balance').done(function (data) {
|
||||
$('#box-balance-total').html(data.combined);
|
||||
$('#box-balance-in').html(data.income);
|
||||
$('#box-balance-out').html(data.expense);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getBoxAmounts() {
|
||||
"use strict";
|
||||
var boxes = ['in', 'out', 'bills-unpaid', 'bills-paid'];
|
||||
for (var x in boxes) {
|
||||
if (!boxes.hasOwnProperty(x)) {
|
||||
continue;
|
||||
}
|
||||
var box = boxes[x];
|
||||
$.getJSON('json/box/' + box).done(putData).fail(failData);
|
||||
}
|
||||
}
|
||||
|
||||
function putData(data) {
|
||||
"use strict";
|
||||
$('#box-' + data.box).html(data.amount);
|
||||
}
|
||||
|
||||
function failData() {
|
||||
"use strict";
|
||||
}
|
2
public/js/ff/intro/intro.js
vendored
2
public/js/ff/intro/intro.js
vendored
@ -42,5 +42,5 @@ function setupIntro(steps) {
|
||||
}
|
||||
|
||||
function reportIntroFinished() {
|
||||
$.getJSON(routeForFinishedTour);
|
||||
$.post(routeForFinishedTour, {_token:token});
|
||||
}
|
5
public/js/ff/search/index.js
vendored
5
public/js/ff/search/index.js
vendored
@ -29,7 +29,6 @@ $(function () {
|
||||
});
|
||||
|
||||
function startSearch(query) {
|
||||
|
||||
$.post(searchUri, {query: query}).done(presentSearchResults).fail(searchFailure);
|
||||
}
|
||||
|
||||
@ -44,4 +43,8 @@ function presentSearchResults(data) {
|
||||
$('span.search_count').text(data.count);
|
||||
$('.search_box').find('.overlay').remove();
|
||||
$('.search_results').html(data.html).show();
|
||||
|
||||
$('.select_all_single').unbind('change').change(function () {
|
||||
countChecked();
|
||||
});
|
||||
}
|
3
public/js/ff/transactions/list.js
vendored
3
public/js/ff/transactions/list.js
vendored
@ -36,7 +36,7 @@ $(document).ready(function () {
|
||||
countChecked();
|
||||
}
|
||||
});
|
||||
$('.select_all_single').change(function () {
|
||||
$('.select_all_single').unbind('change').change(function () {
|
||||
countChecked();
|
||||
});
|
||||
|
||||
@ -147,7 +147,6 @@ function stopMassSelect() {
|
||||
|
||||
function startMassSelect() {
|
||||
"use strict";
|
||||
|
||||
// show "select all" box in table header.
|
||||
$('.select_boxes').show();
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user