mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-29 22:47:42 +00:00 
			
		
		
		
	Compare commits
	
		
			40 Commits
		
	
	
		
			develop-20
			...
			develop-20
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | ec94f1bcf1 | ||
|  | ee3d18a8ea | ||
|  | a9cd8b6512 | ||
|  | 5bd87036b0 | ||
|  | 0e7d72023d | ||
|  | 314f91ff24 | ||
|  | ed54a5c9a4 | ||
|  | 5d35edb126 | ||
|  | 8bdfdc39cb | ||
|  | d465b51da8 | ||
|  | 3344d2e5f3 | ||
|  | 0521da124e | ||
|  | 7e9c5a668f | ||
|  | 08e2c1684f | ||
|  | 36ab188ad1 | ||
|  | 2e69e09808 | ||
|  | adba360466 | ||
|  | 5be6bb755d | ||
|  | 189a323f3c | ||
|  | b1258d0b43 | ||
|  | f33ec58e7c | ||
|  | 58bd818539 | ||
|  | b875e67fe0 | ||
|  | b9528c05a0 | ||
|  | bc98100401 | ||
|  | 26bbb21520 | ||
|  | 86a51b5caa | ||
|  | c3e039a757 | ||
|  | 7762f555c5 | ||
|  | e412e23c87 | ||
|  | 2cb14f6b72 | ||
|  | d8f512ca3a | ||
|  | c074fec0a7 | ||
|  | 7c04c4c2bc | ||
|  | df82252c95 | ||
|  | c747f4afd8 | ||
|  | bcd7db0256 | ||
|  | 469acce76d | ||
|  | 568f71ce63 | ||
|  | f6fbcf54aa | 
| @@ -53,6 +53,9 @@ return $config->setRules( | ||||
|         'statement_indentation'         => true, | ||||
|         'void_return'                   => true, | ||||
| 
 | ||||
|         // about importing statements
 | ||||
|         'global_namespace_import' => ['import_classes' => true, 'import_constants' => true, 'import_functions' => true], | ||||
| 
 | ||||
|         // disabled rules
 | ||||
|         'native_function_invocation'    => false, // annoying
 | ||||
|         'php_unit_data_provider_name'   => false, // bloody annoying long test names
 | ||||
|   | ||||
							
								
								
									
										83
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										83
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -1256,23 +1256,24 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/console", | ||||
|             "version": "v7.2.6", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/console.git", | ||||
|                 "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218" | ||||
|                 "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/console/zipball/0e2e3f38c192e93e622e41ec37f4ca70cfedf218", | ||||
|                 "reference": "0e2e3f38c192e93e622e41ec37f4ca70cfedf218", | ||||
|                 "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44", | ||||
|                 "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=8.2", | ||||
|                 "symfony/deprecation-contracts": "^2.5|^3", | ||||
|                 "symfony/polyfill-mbstring": "~1.0", | ||||
|                 "symfony/service-contracts": "^2.5|^3", | ||||
|                 "symfony/string": "^6.4|^7.0" | ||||
|                 "symfony/string": "^7.2" | ||||
|             }, | ||||
|             "conflict": { | ||||
|                 "symfony/dependency-injection": "<6.4", | ||||
| @@ -1329,7 +1330,7 @@ | ||||
|                 "terminal" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/console/tree/v7.2.6" | ||||
|                 "source": "https://github.com/symfony/console/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1345,7 +1346,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-04-07T19:09:28+00:00" | ||||
|             "time": "2025-05-24T10:34:04+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/deprecation-contracts", | ||||
| @@ -1416,16 +1417,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/event-dispatcher", | ||||
|             "version": "v7.2.0", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/event-dispatcher.git", | ||||
|                 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" | ||||
|                 "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", | ||||
|                 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", | ||||
|                 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", | ||||
|                 "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1476,7 +1477,7 @@ | ||||
|             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" | ||||
|                 "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1492,7 +1493,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2024-09-25T14:21:43+00:00" | ||||
|             "time": "2025-04-22T09:11:45+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/event-dispatcher-contracts", | ||||
| @@ -1572,7 +1573,7 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/filesystem", | ||||
|             "version": "v7.2.0", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/filesystem.git", | ||||
| @@ -1618,7 +1619,7 @@ | ||||
|             "description": "Provides basic utilities for the filesystem", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/filesystem/tree/v7.2.0" | ||||
|                 "source": "https://github.com/symfony/filesystem/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1638,16 +1639,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/finder", | ||||
|             "version": "v7.2.2", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/finder.git", | ||||
|                 "reference": "87a71856f2f56e4100373e92529eed3171695cfb" | ||||
|                 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", | ||||
|                 "reference": "87a71856f2f56e4100373e92529eed3171695cfb", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", | ||||
|                 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1682,7 +1683,7 @@ | ||||
|             "description": "Finds files and directories via an intuitive fluent interface", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/finder/tree/v7.2.2" | ||||
|                 "source": "https://github.com/symfony/finder/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1698,20 +1699,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2024-12-30T19:00:17+00:00" | ||||
|             "time": "2024-12-30T19:00:26+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/options-resolver", | ||||
|             "version": "v7.2.0", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/options-resolver.git", | ||||
|                 "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" | ||||
|                 "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", | ||||
|                 "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", | ||||
|                 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca", | ||||
|                 "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1749,7 +1750,7 @@ | ||||
|                 "options" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" | ||||
|                 "source": "https://github.com/symfony/options-resolver/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1765,7 +1766,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2024-11-20T11:17:29+00:00" | ||||
|             "time": "2025-04-04T13:12:05+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/polyfill-ctype", | ||||
| @@ -2244,16 +2245,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/process", | ||||
|             "version": "v7.2.5", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/process.git", | ||||
|                 "reference": "87b7c93e57df9d8e39a093d32587702380ff045d" | ||||
|                 "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/process/zipball/87b7c93e57df9d8e39a093d32587702380ff045d", | ||||
|                 "reference": "87b7c93e57df9d8e39a093d32587702380ff045d", | ||||
|                 "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", | ||||
|                 "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -2285,7 +2286,7 @@ | ||||
|             "description": "Executes commands in sub-processes", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/process/tree/v7.2.5" | ||||
|                 "source": "https://github.com/symfony/process/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -2301,7 +2302,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-03-13T12:21:46+00:00" | ||||
|             "time": "2025-04-17T09:11:12+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/service-contracts", | ||||
| @@ -2388,7 +2389,7 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/stopwatch", | ||||
|             "version": "v7.2.4", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/stopwatch.git", | ||||
| @@ -2430,7 +2431,7 @@ | ||||
|             "description": "Provides a way to profile code", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/stopwatch/tree/v7.2.4" | ||||
|                 "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -2450,16 +2451,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/string", | ||||
|             "version": "v7.2.6", | ||||
|             "version": "v7.3.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/string.git", | ||||
|                 "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931" | ||||
|                 "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931", | ||||
|                 "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931", | ||||
|                 "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", | ||||
|                 "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -2517,7 +2518,7 @@ | ||||
|                 "utf8" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/string/tree/v7.2.6" | ||||
|                 "source": "https://github.com/symfony/string/tree/v7.3.0" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -2533,7 +2534,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-04-20T20:18:16+00:00" | ||||
|             "time": "2025-04-20T20:19:01+00:00" | ||||
|         } | ||||
|     ], | ||||
|     "packages-dev": [], | ||||
|   | ||||
| @@ -25,46 +25,56 @@ declare(strict_types=1); | ||||
| 
 | ||||
| use Rector\Config\RectorConfig; | ||||
| use Rector\EarlyReturn\Rector\If_\ChangeOrIfContinueToMultiContinueRector; | ||||
| use Rector\Transform\Rector\String_\StringToClassConstantRector; | ||||
| use RectorLaravel\Set\LaravelLevelSetList; | ||||
| 
 | ||||
| 
 | ||||
| return RectorConfig::configure() | ||||
|     ->withSkip([ | ||||
|                    ChangeOrIfContinueToMultiContinueRector::class, | ||||
|                ]) | ||||
|                    ->withPaths([ | ||||
| //                                   __DIR__ . '/../app',
 | ||||
| __DIR__ . '/../app/Api', | ||||
| __DIR__ . '/../app/Http', | ||||
| //                                   __DIR__ . '/../bootstrap',
 | ||||
| //                                   __DIR__ . '/../config',
 | ||||
| //                                   __DIR__ . '/../public',
 | ||||
| //                                   __DIR__ . '/../resources',
 | ||||
| //                                   __DIR__ . '/../routes',
 | ||||
| // __DIR__ . '/../tests',
 | ||||
|                                ]) | ||||
|                                                    // uncomment to reach your current PHP version
 | ||||
|                    ->withPhpSets() | ||||
|                    ->withPreparedSets( | ||||
|                        codingStyle        : false, // leave false
 | ||||
|                        privatization: false, // leave false.
 | ||||
|                        naming             : false, // leave false
 | ||||
|                        instanceOf         : true, | ||||
|                        earlyReturn        : true, | ||||
|                        strictBooleans     : true, | ||||
|                        carbon             : true, | ||||
|                        rectorPreset       : true, | ||||
|                        phpunitCodeQuality : true, | ||||
|                        doctrineCodeQuality: true, | ||||
|                        symfonyCodeQuality : true, | ||||
|                        symfonyConfigs     : true | ||||
|         ChangeOrIfContinueToMultiContinueRector::class, | ||||
|         StringToClassConstantRector::class => [ | ||||
|             __DIR__ . '/../app/Http/Controllers/Auth/LoginController.php', | ||||
|         ], | ||||
|         __DIR__.'/../bootstrap/cache/*' | ||||
|     ]) | ||||
|     ->withPaths([ | ||||
|         __DIR__ . '/../app', | ||||
|         __DIR__ . '/../bootstrap', | ||||
|         __DIR__ . '/../config', | ||||
|         __DIR__ . '/../public', | ||||
|         __DIR__ . '/../resources/lang/en_US', | ||||
|         __DIR__ . '/../routes', | ||||
|         __DIR__ . '/../tests', | ||||
|     ]) | ||||
|     ->withSets([ | ||||
|         LaravelLevelSetList::UP_TO_LARAVEL_120, | ||||
|     ]) | ||||
| //    ->withConfiguredRule(ReplaceServiceContainerCallArgRector::class, [
 | ||||
| //        new ReplaceServiceContainerCallArg('log', new ClassConstFetch(new Name('Illuminate\Support\Facades\Log'), 'class')),
 | ||||
| //    ])
 | ||||
|     // uncomment to reach your current PHP version
 | ||||
|     ->withPhpSets() | ||||
|     ->withPreparedSets( | ||||
|         codingStyle: false, // leave false
 | ||||
|         privatization: false, // leave false.
 | ||||
|         naming: false, // leave false
 | ||||
|         instanceOf: true, | ||||
|         earlyReturn: true, | ||||
|         strictBooleans: true, | ||||
|         carbon: true, | ||||
|         rectorPreset: true, | ||||
|         phpunitCodeQuality: true, | ||||
|         doctrineCodeQuality: true, | ||||
|         symfonyCodeQuality: true, | ||||
|         symfonyConfigs: true | ||||
| 
 | ||||
|                    ) | ||||
|                    ->withComposerBased( | ||||
|                        twig: true, | ||||
|                        doctrine: true, | ||||
|                        phpunit: true, | ||||
|                        symfony: true) | ||||
|                    ->withTypeCoverageLevel(0) | ||||
|                    ->withDeadCodeLevel(0) | ||||
|                    ->withCodeQualityLevel(0) | ||||
| 
 | ||||
|                    ->withImportNames(removeUnusedImports: true);// import statements instead of full classes.
 | ||||
|     ) | ||||
|     ->withComposerBased( | ||||
|         twig: true, | ||||
|         doctrine: true, | ||||
|         phpunit: true, | ||||
|         symfony: true) | ||||
|     ->withTypeCoverageLevel(0) | ||||
|     ->withDeadCodeLevel(0) | ||||
|     ->withCodeQualityLevel(0) | ||||
|     ->withImportNames(removeUnusedImports: true);// import statements instead of full classes.
 | ||||
|   | ||||
| @@ -25,4 +25,12 @@ | ||||
|  | ||||
| SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" | ||||
|  | ||||
| echo $1 | ||||
|  | ||||
| if [ "$1" == "--dry-run" ]; then | ||||
|     echo "Running rector in dry run." | ||||
|     $SCRIPT_DIR/../vendor/bin/rector --config $SCRIPT_DIR/rector.php --dry-run | ||||
|     exit $? | ||||
| fi | ||||
|  | ||||
| $SCRIPT_DIR/../vendor/bin/rector --config $SCRIPT_DIR/rector.php | ||||
|   | ||||
							
								
								
									
										1
									
								
								.github/workflows/sonarcloud.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/sonarcloud.yml
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,6 @@ on: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|       - develop | ||||
| env: | ||||
|   DB_CONNECTION: sqlite | ||||
|   APP_KEY: TestTestTestTestTestTestTestTest | ||||
|   | ||||
| @@ -40,6 +40,7 @@ use Illuminate\Foundation\Bus\DispatchesJobs; | ||||
| use Illuminate\Foundation\Validation\ValidatesRequests; | ||||
| use Illuminate\Pagination\LengthAwarePaginator; | ||||
| use Illuminate\Routing\Controller as BaseController; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use League\Fractal\Manager; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use League\Fractal\Resource\Collection as FractalCollection; | ||||
| @@ -123,9 +124,9 @@ abstract class Controller extends BaseController | ||||
|             try { | ||||
|                 $date = request()->query->get($field); | ||||
|             } catch (BadRequestException $e) { | ||||
|                 app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); | ||||
|                 app('log')->error($e->getMessage()); | ||||
|                 app('log')->error($e->getTraceAsString()); | ||||
|                 Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $field)); | ||||
|                 Log::error($e->getMessage()); | ||||
|                 Log::error($e->getTraceAsString()); | ||||
|                 $value = null; | ||||
|             } | ||||
|             $obj  = null; | ||||
| @@ -134,7 +135,7 @@ abstract class Controller extends BaseController | ||||
|                     $obj = Carbon::parse((string) $date); | ||||
|                 } catch (InvalidFormatException $e) { | ||||
|                     // don't care
 | ||||
|                     app('log')->warning( | ||||
|                     Log::warning( | ||||
|                         sprintf( | ||||
|                             'Ignored invalid date "%s" in API controller parameter check: %s', | ||||
|                             substr((string) $date, 0, 20), | ||||
| @@ -152,9 +153,9 @@ abstract class Controller extends BaseController | ||||
|             try { | ||||
|                 $value = request()->query->get($integer); | ||||
|             } catch (BadRequestException $e) { | ||||
|                 app('log')->error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); | ||||
|                 app('log')->error($e->getMessage()); | ||||
|                 app('log')->error($e->getTraceAsString()); | ||||
|                 Log::error(sprintf('Request field "%s" contains a non-scalar value. Value set to NULL.', $integer)); | ||||
|                 Log::error($e->getMessage()); | ||||
|                 Log::error($e->getTraceAsString()); | ||||
|                 $value = null; | ||||
|             } | ||||
|             if (null !== $value) { | ||||
| @@ -192,9 +193,9 @@ abstract class Controller extends BaseController | ||||
|         try { | ||||
|             $param = (string) request()->query->get('sort'); | ||||
|         } catch (BadRequestException $e) { | ||||
|             app('log')->error('Request field "sort" contains a non-scalar value. Value set to NULL.'); | ||||
|             app('log')->error($e->getMessage()); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             Log::error('Request field "sort" contains a non-scalar value. Value set to NULL.'); | ||||
|             Log::error($e->getMessage()); | ||||
|             Log::error($e->getTraceAsString()); | ||||
|             $param = ''; | ||||
|         } | ||||
|         if ('' === $param) { | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup; | ||||
| 
 | ||||
| use Exception; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Models\RuleGroup\TestRequest; | ||||
| use FireflyIII\Api\V1\Requests\Models\RuleGroup\TriggerRequest; | ||||
| @@ -128,7 +129,7 @@ class TriggerController extends Controller | ||||
|      * | ||||
|      * Execute the given rule group on a set of existing transactions. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function triggerGroup(TriggerRequest $request, RuleGroup $group): JsonResponse | ||||
|     { | ||||
|   | ||||
| @@ -72,21 +72,24 @@ class UpdateController extends Controller | ||||
|     public function update(UpdateRequest $request, TransactionGroup $transactionGroup): JsonResponse | ||||
|     { | ||||
|         app('log')->debug('Now in update routine for transaction group'); | ||||
|         $data             = $request->getAll(); | ||||
|         $transactionGroup = $this->groupRepository->update($transactionGroup, $data); | ||||
|         $manager          = $this->getManager(); | ||||
|         $data              = $request->getAll(); | ||||
|         $oldHash           = $this->groupRepository->getCompareHash($transactionGroup); | ||||
|         $transactionGroup  = $this->groupRepository->update($transactionGroup, $data); | ||||
|         $newHash           = $this->groupRepository->getCompareHash($transactionGroup); | ||||
|         $manager           = $this->getManager(); | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         $applyRules       = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks     = $data['fire_webhooks'] ?? true; | ||||
|         event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); | ||||
|         $applyRules        = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks      = $data['fire_webhooks'] ?? true; | ||||
|         $runRecalculations = $oldHash !== $newHash; | ||||
|         event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks, $runRecalculations)); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin            = auth()->user(); | ||||
|         $admin             = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector        = app(GroupCollectorInterface::class); | ||||
|         $collector         = app(GroupCollectorInterface::class); | ||||
|         $collector | ||||
|             ->setUser($admin) | ||||
|             // filter on transaction group.
 | ||||
| @@ -95,20 +98,20 @@ class UpdateController extends Controller | ||||
|             ->withAPIInformation() | ||||
|         ; | ||||
| 
 | ||||
|         $selectedGroup    = $collector->getGroups()->first(); | ||||
|         $selectedGroup     = $collector->getGroups()->first(); | ||||
|         if (null === $selectedGroup) { | ||||
|             throw new NotFoundHttpException(); | ||||
|         } | ||||
| 
 | ||||
|         // enrich
 | ||||
|         $enrichment       = new TransactionGroupEnrichment(); | ||||
|         $enrichment        = new TransactionGroupEnrichment(); | ||||
|         $enrichment->setUser($admin); | ||||
|         $selectedGroup    = $enrichment->enrichSingle($selectedGroup); | ||||
|         $selectedGroup     = $enrichment->enrichSingle($selectedGroup); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer      = app(TransactionGroupTransformer::class); | ||||
|         $transformer       = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         $resource         = new Item($selectedGroup, $transformer, 'transactions'); | ||||
|         $resource          = new Item($selectedGroup, $transformer, 'transactions'); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Controllers\Summary; | ||||
| 
 | ||||
| use Exception; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Data\DateRequest; | ||||
| @@ -91,7 +92,7 @@ class BasicController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/summary/getBasicSummary
 | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function basic(DateRequest $request): JsonResponse | ||||
|     { | ||||
| @@ -467,7 +468,7 @@ class BasicController extends Controller | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function getLeftToSpendInfo(Carbon $start, Carbon $end): array | ||||
|     { | ||||
|   | ||||
| @@ -23,6 +23,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Middleware; | ||||
| 
 | ||||
| use Closure; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\Request; | ||||
| 
 | ||||
| @@ -36,7 +37,7 @@ class ApiDemoUser | ||||
|      * | ||||
|      * @return mixed | ||||
|      */ | ||||
|     public function handle(Request $request, \Closure $next) | ||||
|     public function handle(Request $request, Closure $next) | ||||
|     { | ||||
|         /** @var null|User $user */ | ||||
|         $user = $request->user(); | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Chart; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class ChartRequest | ||||
|   | ||||
| @@ -24,12 +24,12 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Data\Bulk; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class MoveTransactionsRequest | ||||
|   | ||||
| @@ -24,6 +24,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Data\Bulk; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use JsonException; | ||||
| use FireflyIII\Enums\ClauseType; | ||||
| use FireflyIII\Rules\IsValidBulkClause; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| @@ -31,7 +33,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Validation\Api\Data\Bulk\ValidatesBulkTransactionQuery; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| use function Safe\json_decode; | ||||
| 
 | ||||
| @@ -52,7 +53,7 @@ class TransactionRequest extends FormRequest | ||||
|             $data = [ | ||||
|                 'query' => json_decode($this->get('query'), true, 8, JSON_THROW_ON_ERROR), | ||||
|             ]; | ||||
|         } catch (\JsonException $e) { | ||||
|         } catch (JsonException $e) { | ||||
|             // dont really care. the validation should catch invalid json.
 | ||||
|             app('log')->error($e->getMessage()); | ||||
|         } | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Account; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Models\Location; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| @@ -35,7 +36,6 @@ use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\AvailableBudget; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class Request | ||||
|   | ||||
| @@ -24,13 +24,15 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Bill; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use ValueError; | ||||
| use TypeError; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
| @@ -109,7 +111,7 @@ class StoreRequest extends FormRequest | ||||
| 
 | ||||
|                 try { | ||||
|                     $result = bccomp($min, $max); | ||||
|                 } catch (\ValueError $e) { | ||||
|                 } catch (ValueError $e) { | ||||
|                     Log::error($e->getMessage()); | ||||
|                     $validator->errors()->add('amount_min', (string) trans('validation.generic_invalid')); | ||||
|                     $validator->errors()->add('amount_max', (string) trans('validation.generic_invalid')); | ||||
| @@ -124,7 +126,7 @@ class StoreRequest extends FormRequest | ||||
| 
 | ||||
|         try { | ||||
|             $failed = $validator->fails(); | ||||
|         } catch (\TypeError $e) { | ||||
|         } catch (TypeError $e) { | ||||
|             Log::error($e->getMessage()); | ||||
|             $failed = false; | ||||
|         } | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Bill; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Bill; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| @@ -31,7 +32,6 @@ use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Budget; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| @@ -31,7 +32,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Budget; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| @@ -32,7 +33,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\PiggyBank; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| @@ -32,7 +33,6 @@ use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Recurrence; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Rules\BelongsUser; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidPositiveAmount; | ||||
| @@ -35,7 +36,6 @@ use FireflyIII\Validation\RecurrenceValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Recurrence; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Recurrence; | ||||
| use FireflyIII\Rules\BelongsUser; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| @@ -36,7 +37,6 @@ use FireflyIII\Validation\RecurrenceValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Rule; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidActionExpression; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| @@ -31,7 +32,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Support\Request\GetRuleConfiguration; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Rule; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Rule; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Rules\IsValidActionExpression; | ||||
| @@ -32,7 +33,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Support\Request\GetRuleConfiguration; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Transaction; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\Location; | ||||
| use FireflyIII\Rules\BelongsUser; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| @@ -39,7 +40,6 @@ use FireflyIII\Validation\GroupValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\Transaction; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\TransactionGroup; | ||||
| use FireflyIII\Rules\BelongsUser; | ||||
| @@ -37,7 +38,6 @@ use FireflyIII\Validation\GroupValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\TransactionLink; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| @@ -31,7 +32,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\Models\TransactionLink; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Models\TransactionJournalLink; | ||||
| use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; | ||||
| @@ -31,7 +32,6 @@ use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V1\Requests\System; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Rules\IsBoolean; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UserUpdateRequest | ||||
|   | ||||
| @@ -65,28 +65,29 @@ class UpdateController extends Controller | ||||
|     public function update(UpdateRequest $request, TransactionGroup $transactionGroup): JsonResponse | ||||
|     { | ||||
|         app('log')->debug('Now in update routine for transaction group [v2]!'); | ||||
|         $data             = $request->getAll(); | ||||
|         $transactionGroup = $this->groupRepository->update($transactionGroup, $data); | ||||
|         $applyRules       = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks     = $data['fire_webhooks'] ?? true; | ||||
|         $data              = $request->getAll(); | ||||
|         $transactionGroup  = $this->groupRepository->update($transactionGroup, $data); | ||||
|         $applyRules        = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks      = $data['fire_webhooks'] ?? true; | ||||
|         $runRecalculations = true; | ||||
| 
 | ||||
|         event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); | ||||
|         event(new UpdatedTransactionGroup($transactionGroup, $applyRules, $fireWebhooks, $runRecalculations)); | ||||
|         app('preferences')->mark(); | ||||
| 
 | ||||
|         /** @var User $admin */ | ||||
|         $admin            = auth()->user(); | ||||
|         $admin             = auth()->user(); | ||||
| 
 | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector        = app(GroupCollectorInterface::class); | ||||
|         $collector         = app(GroupCollectorInterface::class); | ||||
|         $collector->setUser($admin)->setTransactionGroup($transactionGroup); | ||||
| 
 | ||||
|         $selectedGroup    = $collector->getGroups()->first(); | ||||
|         $selectedGroup     = $collector->getGroups()->first(); | ||||
|         if (null === $selectedGroup) { | ||||
|             throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.'); | ||||
|         } | ||||
| 
 | ||||
|         $transformer      = new TransactionGroupTransformer(); | ||||
|         $transformer       = new TransactionGroupTransformer(); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         return response()->api($this->jsonApiObject('transactions', $selectedGroup, $transformer))->header('Content-Type', self::CONTENT_TYPE); | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Controllers\Summary; | ||||
| 
 | ||||
| use Exception; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Api\V2\Controllers\Controller; | ||||
| use FireflyIII\Api\V2\Request\Generic\DateRequest; | ||||
| @@ -92,7 +93,7 @@ class BasicController extends Controller | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v2)#/summary/getBasicSummary
 | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      * | ||||
|      * @SuppressWarnings("PHPMD.UnusedFormalParameter") | ||||
|      */ | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Chart; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class BalanceChartRequest | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Chart; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class ChartRequest | ||||
|   | ||||
| @@ -24,13 +24,13 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Chart; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class DashboardChartRequest | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Model\Transaction; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\UserGroup; | ||||
| use FireflyIII\Rules\BelongsUserGroup; | ||||
| @@ -40,7 +41,6 @@ use FireflyIII\Validation\GroupValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class StoreRequest | ||||
|   | ||||
| @@ -24,6 +24,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Model\Transaction; | ||||
| 
 | ||||
| use Illuminate\Contracts\Validation\Validator; | ||||
| use Override; | ||||
| use FireflyIII\Api\V1\Requests\Models\AvailableBudget\Request; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\TransactionGroup; | ||||
| @@ -37,7 +39,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use FireflyIII\Validation\GroupValidation; | ||||
| use FireflyIII\Validation\TransactionValidation; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Validation\Validator; | ||||
| 
 | ||||
| /** | ||||
|  * Class UpdateRequest | ||||
| @@ -64,7 +65,7 @@ class UpdateRequest extends Request | ||||
|      * | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     public function getAll(): array | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in %s', __METHOD__)); | ||||
| @@ -248,7 +249,7 @@ class UpdateRequest extends Request | ||||
|     /** | ||||
|      * The rules that the incoming request must be matched against. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     public function rules(): array | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in %s', __METHOD__)); | ||||
| @@ -332,7 +333,7 @@ class UpdateRequest extends Request | ||||
|     /** | ||||
|      * Configure the validator instance. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     public function withValidator(Validator $validator): void | ||||
|     { | ||||
|         app('log')->debug('Now in withValidator'); | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Response\Sum; | ||||
| 
 | ||||
| use Closure; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| @@ -39,7 +40,7 @@ class AutoSum | ||||
|     /** | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function autoSum(Collection $objects, \Closure $getCurrency, \Closure $getSum): array | ||||
|     public function autoSum(Collection $objects, Closure $getCurrency, Closure $getSum): array | ||||
|     { | ||||
|         $return = []; | ||||
| 
 | ||||
|   | ||||
| @@ -42,6 +42,7 @@ use FireflyIII\Support\Facades\Amount; | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use ValueError; | ||||
| 
 | ||||
| class CorrectsAmounts extends Command | ||||
| { | ||||
| @@ -234,7 +235,7 @@ class CorrectsAmounts extends Command | ||||
|     { | ||||
|         try { | ||||
|             $check = bccomp((string) $item->trigger_value, '0'); | ||||
|         } catch (\ValueError) { | ||||
|         } catch (ValueError) { | ||||
|             $this->friendlyError(sprintf('Rule #%d contained invalid %s-trigger "%s". The trigger has been removed, and the rule is disabled.', $item->rule_id, $item->trigger_type, $item->trigger_value)); | ||||
|             $item->rule->active = false; | ||||
|             $item->rule->save(); | ||||
|   | ||||
| @@ -58,7 +58,8 @@ class CorrectsGroupAccounts extends Command | ||||
|         $handler = new UpdatedGroupEventHandler(); | ||||
|         foreach ($groups as $groupId) { | ||||
|             $group = TransactionGroup::find($groupId); | ||||
|             $event = new UpdatedTransactionGroup($group, true, true); | ||||
|             // TODO in theory the "unifyAccounts" method could lead to the need for run recalculations.
 | ||||
|             $event = new UpdatedTransactionGroup($group, true, true, false); | ||||
|             $handler->unifyAccounts($event); | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -43,7 +43,7 @@ class CorrectsIbans extends Command | ||||
|      */ | ||||
|     public function handle(): int | ||||
|     { | ||||
|         $accounts = Account::whereNotNull('iban')->get(); | ||||
|         $accounts = Account::with('accountMeta')->get(); | ||||
|         $this->filterIbans($accounts); | ||||
|         $this->countAndCorrectIbans($accounts); | ||||
| 
 | ||||
| @@ -54,14 +54,26 @@ class CorrectsIbans extends Command | ||||
|     { | ||||
|         /** @var Account $account */ | ||||
|         foreach ($accounts as $account) { | ||||
|             $iban    = (string) $account->iban; | ||||
|             $newIban = app('steam')->filterSpaces($iban); | ||||
|             $iban          = (string) $account->iban; | ||||
|             $newIban       = app('steam')->filterSpaces($iban); | ||||
|             if ('' !== $iban && $iban !== $newIban) { | ||||
|                 $account->iban = $newIban; | ||||
|                 $account->save(); | ||||
|                 $this->friendlyInfo(sprintf('Removed spaces from IBAN of account #%d', $account->id)); | ||||
|                 ++$this->count; | ||||
|             } | ||||
|             // same for account number:
 | ||||
|             $accountNumber = $account->accountMeta->where('name', 'account_number')->first(); | ||||
|             if (null !== $accountNumber) { | ||||
|                 $number    = (string) $accountNumber->value; | ||||
|                 $newNumber = app('steam')->filterSpaces($number); | ||||
|                 if ('' !== $number && $number !== $newNumber) { | ||||
|                     $accountNumber->value = $newNumber; | ||||
|                     $accountNumber->save(); | ||||
|                     $this->friendlyInfo(sprintf('Removed spaces from account number of account #%d', $account->id)); | ||||
|                     ++$this->count; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class CorrectsOpeningBalanceCurrencies extends Command | ||||
|     { | ||||
|         // get the asset account for this opening balance:
 | ||||
|         $account = $this->getAccount($journal); | ||||
|         if (null === $account) { | ||||
|         if (!$account instanceof Account) { | ||||
|             $message = sprintf('Transaction journal #%d has no valid account. Can\'t fix this line.', $journal->id); | ||||
|             app('log')->warning($message); | ||||
|             $this->friendlyError($message); | ||||
|   | ||||
| @@ -34,6 +34,8 @@ use FireflyIII\Support\Models\AccountBalanceCalculator; | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use ValueError; | ||||
| use stdClass; | ||||
| 
 | ||||
| class CorrectsUnevenAmount extends Command | ||||
| { | ||||
| @@ -135,7 +137,7 @@ class CorrectsUnevenAmount extends Command | ||||
|             ->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($journals as $entry) { | ||||
|             $sum = (string) $entry->the_sum; | ||||
|             if (!is_numeric($sum) | ||||
| @@ -157,7 +159,7 @@ class CorrectsUnevenAmount extends Command | ||||
| 
 | ||||
|             try { | ||||
|                 $res = bccomp($sum, '0'); | ||||
|             } catch (\ValueError $e) { | ||||
|             } catch (ValueError $e) { | ||||
|                 $this->friendlyError(sprintf('Could not bccomp("%s", "0").', $sum)); | ||||
|                 Log::error($e->getMessage()); | ||||
|                 Log::error($e->getTraceAsString()); | ||||
| @@ -385,7 +387,7 @@ class CorrectsUnevenAmount extends Command | ||||
| 
 | ||||
|                 continue; | ||||
|             } | ||||
|             if (0 === bccomp($source->amount, $source->foreign_amount) && 0 === bccomp($source->foreign_amount, $source->amount)) { | ||||
|             if (0 === bccomp((string) $source->amount, (string) $source->foreign_amount) && 0 === bccomp((string) $source->foreign_amount, (string) $source->amount)) { | ||||
|                 Log::debug('Already fixed, continue.'); | ||||
| 
 | ||||
|                 continue; | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Repositories\User\UserRepositoryInterface; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Console\Command; | ||||
| use Exception; | ||||
| 
 | ||||
| class CreatesAccessTokens extends Command | ||||
| { | ||||
| @@ -40,7 +41,7 @@ class CreatesAccessTokens extends Command | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function handle(): int | ||||
|     { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Console\Commands\Correction; | ||||
| use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Models\TransactionGroup; | ||||
| use Illuminate\Console\Command; | ||||
| use Exception; | ||||
| 
 | ||||
| class RemovesEmptyGroups extends Command | ||||
| { | ||||
| @@ -38,7 +39,7 @@ class RemovesEmptyGroups extends Command | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function handle(): int | ||||
|     { | ||||
|   | ||||
| @@ -28,6 +28,8 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Models\Transaction; | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use Illuminate\Console\Command; | ||||
| use Exception; | ||||
| use stdClass; | ||||
| 
 | ||||
| /** | ||||
|  * Deletes transactions where the journal has been deleted. | ||||
| @@ -43,7 +45,7 @@ class RemovesOrphanedTransactions extends Command | ||||
|     /** | ||||
|      * Execute the console command. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function handle(): int | ||||
|     { | ||||
| @@ -85,7 +87,7 @@ class RemovesOrphanedTransactions extends Command | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function deleteOrphanedTransactions(): void | ||||
|     { | ||||
| @@ -102,7 +104,7 @@ class RemovesOrphanedTransactions extends Command | ||||
|             ) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $transaction = Transaction::find((int) $entry->transaction_id); | ||||
|             if (null !== $transaction) { | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Console\Commands\Export; | ||||
| 
 | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Console\Commands\VerifiesAccessToken; | ||||
| @@ -35,6 +36,10 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Support\Export\ExportDataGenerator; | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Collection; | ||||
| use Exception; | ||||
| use InvalidArgumentException; | ||||
| 
 | ||||
| use function Safe\file_put_contents; | ||||
| 
 | ||||
| class ExportsData extends Command | ||||
| { | ||||
| @@ -139,7 +144,7 @@ class ExportsData extends Command | ||||
| 
 | ||||
|     /** | ||||
|      * @throws FireflyException | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function parseOptions(): array | ||||
|     { | ||||
| @@ -169,7 +174,7 @@ class ExportsData extends Command | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function getDateParameter(string $field): Carbon | ||||
|     { | ||||
| @@ -183,7 +188,7 @@ class ExportsData extends Command | ||||
|         if (is_string($this->option($field))) { | ||||
|             try { | ||||
|                 $date = Carbon::createFromFormat('!Y-m-d', $this->option($field)); | ||||
|             } catch (\InvalidArgumentException $e) { | ||||
|             } catch (InvalidArgumentException $e) { | ||||
|                 app('log')->error($e->getMessage()); | ||||
|                 $this->friendlyError(sprintf('%s date "%s" must be formatted YYYY-MM-DD. Field will be ignored.', $field, $this->option('start'))); | ||||
|                 $error = true; | ||||
| @@ -201,7 +206,7 @@ class ExportsData extends Command | ||||
| 
 | ||||
|         if (true === $error && 'start' === $field) { | ||||
|             $journal = $this->journalRepository->firstNull(); | ||||
|             $date    = null === $journal ? today(config('app.timezone'))->subYear() : $journal->date; | ||||
|             $date    = $journal instanceof TransactionJournal ? $journal->date : today(config('app.timezone'))->subYear(); | ||||
|             $date->startOfDay(); | ||||
| 
 | ||||
|             return $date; | ||||
| @@ -273,7 +278,7 @@ class ExportsData extends Command | ||||
|      */ | ||||
|     private function exportData(array $options, array $data): void | ||||
|     { | ||||
|         $date = date('Y_m_d'); | ||||
|         $date = Carbon::now()->format('Y_m_d'); | ||||
|         foreach ($data as $key => $content) { | ||||
|             $file = sprintf('%s%s_%s.csv', $options['directory'], $date, $key); | ||||
|             if (false === $options['force'] && file_exists($file)) { | ||||
| @@ -283,7 +288,7 @@ class ExportsData extends Command | ||||
|                 $this->friendlyWarning(sprintf('File "%s" exists already but will be replaced.', $file)); | ||||
|             } | ||||
|             // continue to write to file.
 | ||||
|             \Safe\file_put_contents($file, $content); | ||||
|             file_put_contents($file, $content); | ||||
|             $this->friendlyPositive(sprintf('Wrote %s-export to file "%s".', $key, $file)); | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -30,6 +30,7 @@ use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Models\Category; | ||||
| use FireflyIII\Models\Tag; | ||||
| use Illuminate\Console\Command; | ||||
| use stdClass; | ||||
| 
 | ||||
| class ReportsEmptyObjects extends Command | ||||
| { | ||||
| @@ -66,7 +67,7 @@ class ReportsEmptyObjects extends Command | ||||
|             ->get(['budgets.id', 'budgets.name', 'budgets.user_id', 'users.email']) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $line = sprintf( | ||||
|                 'User #%d (%s) has budget #%d ("%s") which has no transaction journals.', | ||||
| @@ -92,7 +93,7 @@ class ReportsEmptyObjects extends Command | ||||
|             ->get(['categories.id', 'categories.name', 'categories.user_id', 'users.email']) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $line = sprintf( | ||||
|                 'User #%d (%s) has category #%d ("%s") which has no transaction journals.', | ||||
| @@ -115,7 +116,7 @@ class ReportsEmptyObjects extends Command | ||||
|             ->get(['tags.id', 'tags.tag', 'tags.user_id', 'users.email']) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $line = sprintf( | ||||
|                 'User #%d (%s) has tag #%d ("%s") which has no transaction journals.', | ||||
| @@ -142,7 +143,7 @@ class ReportsEmptyObjects extends Command | ||||
|             ) | ||||
|         ; | ||||
| 
 | ||||
|         /** @var \stdClass $entry */ | ||||
|         /** @var stdClass $entry */ | ||||
|         foreach ($set as $entry) { | ||||
|             $line = 'User #%d (%s) has account #%d ("%s") which has no transactions.'; | ||||
|             $line = sprintf($line, $entry->user_id, $entry->email, $entry->id, $entry->name); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Console\Commands\System; | ||||
| use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use Illuminate\Console\Command; | ||||
| use PDO; | ||||
| use PDOException; | ||||
| 
 | ||||
| class CreatesDatabase extends Command | ||||
| { | ||||
| @@ -53,15 +54,15 @@ class CreatesDatabase extends Command | ||||
|         $this->friendlyLine(sprintf('DSN is %s', $dsn)); | ||||
| 
 | ||||
|         $options = [ | ||||
|             \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION, | ||||
|             \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, | ||||
|             \PDO::ATTR_EMULATE_PREPARES   => false, | ||||
|             PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, | ||||
|             PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, | ||||
|             PDO::ATTR_EMULATE_PREPARES   => false, | ||||
|         ]; | ||||
| 
 | ||||
|         // when it fails, display error
 | ||||
|         try { | ||||
|             $pdo = new \PDO($dsn, (string) env('DB_USERNAME'), (string) env('DB_PASSWORD'), $options); | ||||
|         } catch (\PDOException $e) { | ||||
|             $pdo = new PDO($dsn, (string) env('DB_USERNAME'), (string) env('DB_PASSWORD'), $options); | ||||
|         } catch (PDOException $e) { | ||||
|             $this->friendlyError(sprintf('Error when connecting to DB: %s', $e->getMessage())); | ||||
| 
 | ||||
|             return 1; | ||||
|   | ||||
| @@ -43,6 +43,9 @@ use Illuminate\Database\Eloquent\Model; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| 
 | ||||
| use function Safe\mb_regex_encoding; | ||||
| use function Safe\json_encode; | ||||
| 
 | ||||
| /** | ||||
|  * This command was inspired by https://github.com/elliot-gh. It will check all amount fields | ||||
|  * and their values and correct them to the correct number of decimal places. This fixes issues where | ||||
| @@ -130,7 +133,7 @@ class ForcesDecimalSize extends Command | ||||
|         // if sqlite, add function?
 | ||||
|         if ('sqlite' === (string) config('database.default')) { | ||||
|             DB::connection()->getPdo()->sqliteCreateFunction('REGEXP', static function ($pattern, $value) { | ||||
|                 \Safe\mb_regex_encoding('UTF-8'); | ||||
|                 mb_regex_encoding('UTF-8'); | ||||
|                 $pattern = trim($pattern, '"'); | ||||
| 
 | ||||
|                 return (false !== mb_ereg($pattern, (string) $value)) ? 1 : 0; | ||||
| @@ -234,7 +237,7 @@ class ForcesDecimalSize extends Command | ||||
|         /** @var Builder $query */ | ||||
|         $query             = Account::leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') | ||||
|             ->where('account_meta.name', 'currency_id') | ||||
|             ->where('account_meta.data', \Safe\json_encode((string) $currency->id)) | ||||
|             ->where('account_meta.data', json_encode((string) $currency->id)) | ||||
|         ; | ||||
|         $query->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { | ||||
|             foreach ($fields as $field) { | ||||
| @@ -338,7 +341,7 @@ class ForcesDecimalSize extends Command | ||||
|             ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') | ||||
|             ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') | ||||
|             ->where('account_meta.name', 'currency_id') | ||||
|             ->where('account_meta.data', \Safe\json_encode((string) $currency->id)) | ||||
|             ->where('account_meta.data', json_encode((string) $currency->id)) | ||||
|             ->where(static function (Builder $q) use ($fields, $currency, $cast, $operator, $regularExpression): void { | ||||
|                 foreach ($fields as $field) { | ||||
|                     $q->orWhere( | ||||
| @@ -394,7 +397,7 @@ class ForcesDecimalSize extends Command | ||||
|             ->leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') | ||||
|             ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') | ||||
|             ->where('account_meta.name', 'currency_id') | ||||
|             ->where('account_meta.data', \Safe\json_encode((string) $currency->id)) | ||||
|             ->where('account_meta.data', json_encode((string) $currency->id)) | ||||
|             ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { | ||||
|                 foreach ($fields as $field) { | ||||
|                     $q->orWhere( | ||||
| @@ -448,7 +451,7 @@ class ForcesDecimalSize extends Command | ||||
|         $query             = PiggyBank::leftJoin('accounts', 'piggy_banks.account_id', '=', 'accounts.id') | ||||
|             ->leftJoin('account_meta', 'accounts.id', '=', 'account_meta.account_id') | ||||
|             ->where('account_meta.name', 'currency_id') | ||||
|             ->where('account_meta.data', \Safe\json_encode((string) $currency->id)) | ||||
|             ->where('account_meta.data', json_encode((string) $currency->id)) | ||||
|             ->where(static function (Builder $q) use ($fields, $currency, $operator, $cast, $regularExpression): void { | ||||
|                 foreach ($fields as $field) { | ||||
|                     $q->orWhere( | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Console\Commands\System; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Support\System\GeneratesInstallationId; | ||||
| use Illuminate\Console\Command; | ||||
| 
 | ||||
| @@ -111,8 +112,8 @@ class OutputsInstructions extends Command | ||||
|      */ | ||||
|     private function showLogo(): void | ||||
|     { | ||||
|         $today  = date('m-d'); | ||||
|         $month  = date('m'); | ||||
|         $today  = Carbon::now()->format('m-d'); | ||||
|         $month  = Carbon::now()->format('m'); | ||||
|         // variation in colors and effects just because I can!
 | ||||
|         // default is Ukraine flag:
 | ||||
|         $colors = ['blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow', 'default', 'default']; | ||||
|   | ||||
| @@ -31,6 +31,11 @@ use Illuminate\Contracts\Encryption\DecryptException; | ||||
| use Illuminate\Support\Facades\Crypt; | ||||
| use Illuminate\Support\Facades\Storage; | ||||
| 
 | ||||
| use function Safe\tempnam; | ||||
| use function Safe\file_put_contents; | ||||
| use function Safe\md5_file; | ||||
| use function Safe\mime_content_type; | ||||
| 
 | ||||
| class ScansAttachments extends Command | ||||
| { | ||||
|     use ShowsFriendlyMessages; | ||||
| @@ -63,15 +68,15 @@ class ScansAttachments extends Command | ||||
|                 app('log')->error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage())); | ||||
|                 $decryptedContent = $encryptedContent; | ||||
|             } | ||||
|             $tempFileName     = \Safe\tempnam(sys_get_temp_dir(), 'FireflyIII'); | ||||
|             $tempFileName     = tempnam(sys_get_temp_dir(), 'FireflyIII'); | ||||
|             if (false === $tempFileName) { | ||||
|                 app('log')->error(sprintf('Could not create temporary file for attachment #%d', $attachment->id)); | ||||
| 
 | ||||
|                 exit(1); | ||||
|             } | ||||
|             \Safe\file_put_contents($tempFileName, $decryptedContent); | ||||
|             $attachment->md5  = (string) \Safe\md5_file($tempFileName); | ||||
|             $attachment->mime = (string) \Safe\mime_content_type($tempFileName); | ||||
|             file_put_contents($tempFileName, $decryptedContent); | ||||
|             $attachment->md5  = (string) md5_file($tempFileName); | ||||
|             $attachment->mime = (string) mime_content_type($tempFileName); | ||||
|             $attachment->save(); | ||||
|             $this->friendlyInfo(sprintf('Fixed attachment #%d', $attachment->id)); | ||||
|         } | ||||
|   | ||||
| @@ -30,6 +30,8 @@ use Illuminate\Database\QueryException; | ||||
| use Illuminate\Support\Facades\Storage; | ||||
| use League\Flysystem\FilesystemException; | ||||
| 
 | ||||
| use function Safe\json_decode; | ||||
| 
 | ||||
| class VerifySecurityAlerts extends Command | ||||
| { | ||||
|     use ShowsFriendlyMessages; | ||||
| @@ -57,7 +59,7 @@ class VerifySecurityAlerts extends Command | ||||
|             return 0; | ||||
|         } | ||||
|         $content = $disk->get('alerts.json'); | ||||
|         $json    = \Safe\json_decode($content, true, 10); | ||||
|         $json    = json_decode((string) $content, true, 10); | ||||
| 
 | ||||
|         /** @var array $array */ | ||||
|         foreach ($json as $array) { | ||||
|   | ||||
| @@ -248,7 +248,7 @@ class ApplyRules extends Command | ||||
| 
 | ||||
|         foreach ($ruleList as $ruleId) { | ||||
|             $rule = $this->ruleRepository->find((int) $ruleId); | ||||
|             if (null !== $rule && true === $rule->active) { | ||||
|             if ($rule instanceof Rule && true === $rule->active) { | ||||
|                 $this->ruleSelection[] = $rule->id; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -34,6 +34,7 @@ use FireflyIII\Support\Cronjobs\RecurringCronjob; | ||||
| use FireflyIII\Support\Cronjobs\UpdateCheckCronjob; | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use InvalidArgumentException; | ||||
| 
 | ||||
| class Cron extends Command | ||||
| { | ||||
| @@ -62,7 +63,7 @@ class Cron extends Command | ||||
| 
 | ||||
|         try { | ||||
|             $date = new Carbon($this->option('date')); | ||||
|         } catch (\InvalidArgumentException $e) { | ||||
|         } catch (InvalidArgumentException $e) { | ||||
|             $this->friendlyError(sprintf('"%s" is not a valid date', $this->option('date'))); | ||||
|         } | ||||
|         $force = (bool) $this->option('force'); // @phpstan-ignore-line
 | ||||
| @@ -133,7 +134,7 @@ class Cron extends Command | ||||
|         $exchangeRates = new ExchangeRatesCronjob(); | ||||
|         $exchangeRates->setForce($force); | ||||
|         // set date in cron job:
 | ||||
|         if (null !== $date) { | ||||
|         if ($date instanceof Carbon) { | ||||
|             $exchangeRates->setDate($date); | ||||
|         } | ||||
| 
 | ||||
| @@ -176,7 +177,7 @@ class Cron extends Command | ||||
|         $recurring->setForce($force); | ||||
| 
 | ||||
|         // set date in cron job:
 | ||||
|         if (null !== $date) { | ||||
|         if ($date instanceof Carbon) { | ||||
|             $recurring->setDate($date); | ||||
|         } | ||||
| 
 | ||||
| @@ -197,7 +198,7 @@ class Cron extends Command | ||||
|         $autoBudget = new AutoBudgetCronjob(); | ||||
|         $autoBudget->setForce($force); | ||||
|         // set date in cron job:
 | ||||
|         if (null !== $date) { | ||||
|         if ($date instanceof Carbon) { | ||||
|             $autoBudget->setDate($date); | ||||
|         } | ||||
| 
 | ||||
| @@ -222,7 +223,7 @@ class Cron extends Command | ||||
|         $autoBudget = new BillWarningCronjob(); | ||||
|         $autoBudget->setForce($force); | ||||
|         // set date in cron job:
 | ||||
|         if (null !== $date) { | ||||
|         if ($date instanceof Carbon) { | ||||
|             $autoBudget->setDate($date); | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -120,7 +120,7 @@ class AddsTransactionIdentifiers extends Command | ||||
|         /** @var Transaction $transaction */ | ||||
|         foreach ($transactions as $transaction) { | ||||
|             $opposing = $this->findOpposing($transaction, $exclude); | ||||
|             if (null !== $opposing) { | ||||
|             if ($opposing instanceof Transaction) { | ||||
|                 // give both a new identifier:
 | ||||
|                 $transaction->identifier = $identifier; | ||||
|                 $opposing->identifier    = $identifier; | ||||
|   | ||||
| @@ -31,6 +31,10 @@ use Illuminate\Console\Command; | ||||
| use Illuminate\Contracts\Encryption\DecryptException; | ||||
| use Illuminate\Support\Facades\Crypt; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| use JsonException; | ||||
| use stdClass; | ||||
| 
 | ||||
| use function Safe\json_decode; | ||||
| 
 | ||||
| class RemovesDatabaseDecryption extends Command | ||||
| { | ||||
| @@ -105,13 +109,13 @@ class RemovesDatabaseDecryption extends Command | ||||
|     { | ||||
|         $rows = DB::table($table)->get(['id', $field]); | ||||
| 
 | ||||
|         /** @var \stdClass $row */ | ||||
|         /** @var stdClass $row */ | ||||
|         foreach ($rows as $row) { | ||||
|             $this->decryptRow($table, $field, $row); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private function decryptRow(string $table, string $field, \stdClass $row): void | ||||
|     private function decryptRow(string $table, string $field, stdClass $row): void | ||||
|     { | ||||
|         $original = $row->{$field}; | ||||
|         if (null === $original) { | ||||
| @@ -167,8 +171,8 @@ class RemovesDatabaseDecryption extends Command | ||||
|     { | ||||
|         // try to json_decrypt the value.
 | ||||
|         try { | ||||
|             $newValue = \Safe\json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value; | ||||
|         } catch (\JsonException $e) { | ||||
|             $newValue = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value; | ||||
|         } catch (JsonException $e) { | ||||
|             $message = sprintf('Could not JSON decode preference row #%d: %s. This does not have to be a problem.', $id, $e->getMessage()); | ||||
|             $this->friendlyError($message); | ||||
|             app('log')->warning($message); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <?php | ||||
| 
 | ||||
| /* | ||||
|  * FixPostgresSequences.php | ||||
|  * RepairsPostgresSequences.php | ||||
|  * Copyright (c) 2023 james@firefly-iii.org | ||||
|  * | ||||
|  * This file is part of Firefly III (https://github.com/firefly-iii). | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Console\Commands\Upgrade; | ||||
| 
 | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Enums\AccountTypeEnum; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| @@ -141,7 +142,7 @@ class UpgradesAccountCurrencies extends Command | ||||
|             return; | ||||
|         } | ||||
|         // do not match and opening balance id is not null.
 | ||||
|         if ($accountCurrency !== $obCurrency && null !== $openingBalance) { | ||||
|         if ($accountCurrency !== $obCurrency && $openingBalance instanceof TransactionJournal) { | ||||
|             // update opening balance:
 | ||||
|             $openingBalance->transaction_currency_id = $accountCurrency; | ||||
|             $openingBalance->save(); | ||||
|   | ||||
| @@ -123,7 +123,7 @@ class UpgradesBillsToRules extends Command | ||||
|         $groupTitle = (string) trans('firefly.rulegroup_for_bills_title', [], $language); | ||||
|         $ruleGroup  = $this->ruleGroupRepository->findByTitle($groupTitle); | ||||
| 
 | ||||
|         if (null === $ruleGroup) { | ||||
|         if (!$ruleGroup instanceof RuleGroup) { | ||||
|             $ruleGroup = $this->ruleGroupRepository->store( | ||||
|                 [ | ||||
|                     'title'       => (string) trans('firefly.rulegroup_for_bills_title', [], $language), | ||||
|   | ||||
| @@ -27,8 +27,10 @@ namespace FireflyIII\Console\Commands\Upgrade; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Safe\Exceptions\InfoException; | ||||
| 
 | ||||
| use function Safe\set_time_limit; | ||||
| 
 | ||||
| try { | ||||
|     \Safe\set_time_limit(0); | ||||
|     set_time_limit(0); | ||||
| } catch (InfoException) { | ||||
|     Log::warning('set_time_limit returned false. This could be an issue, unless you also run XDebug.'); | ||||
| } | ||||
|   | ||||
| @@ -122,7 +122,7 @@ class UpgradesLiabilities extends Command | ||||
|     { | ||||
|         $source      = $this->getSourceTransaction($openingBalance); | ||||
|         $destination = $this->getDestinationTransaction($openingBalance); | ||||
|         if (null === $source || null === $destination) { | ||||
|         if (!$source instanceof Transaction || !$destination instanceof Transaction) { | ||||
|             return; | ||||
|         } | ||||
|         // source MUST be the liability.
 | ||||
|   | ||||
| @@ -30,6 +30,8 @@ use FireflyIII\Models\RecurrenceMeta; | ||||
| use FireflyIII\Models\RecurrenceTransactionMeta; | ||||
| use Illuminate\Console\Command; | ||||
| 
 | ||||
| use function Safe\json_encode; | ||||
| 
 | ||||
| class UpgradesRecurrenceMetaData extends Command | ||||
| { | ||||
|     use ShowsFriendlyMessages; | ||||
| @@ -100,7 +102,7 @@ class UpgradesRecurrenceMetaData extends Command | ||||
| 
 | ||||
|         if ('tags' === $meta->name) { | ||||
|             $array = explode(',', $meta->value); | ||||
|             $value = \Safe\json_encode($array, JSON_THROW_ON_ERROR); | ||||
|             $value = json_encode($array, JSON_THROW_ON_ERROR); | ||||
|         } | ||||
| 
 | ||||
|         RecurrenceTransactionMeta::create( | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Console\Commands\Upgrade; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Console\Commands\ShowsFriendlyMessages; | ||||
| use FireflyIII\Factory\TransactionGroupFactory; | ||||
| use FireflyIII\Models\Budget; | ||||
| @@ -36,6 +37,7 @@ use FireflyIII\Services\Internal\Destroy\JournalDestroyService; | ||||
| use Illuminate\Console\Command; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\DB; | ||||
| use Exception; | ||||
| 
 | ||||
| class UpgradesToGroups extends Command | ||||
| { | ||||
| @@ -103,7 +105,7 @@ class UpgradesToGroups extends Command | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function makeGroupsFromSplitJournals(): void | ||||
|     { | ||||
| @@ -119,7 +121,7 @@ class UpgradesToGroups extends Command | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     private function makeMultiGroup(TransactionJournal $journal): void | ||||
|     { | ||||
| @@ -191,7 +193,7 @@ class UpgradesToGroups extends Command | ||||
|         app('log')->debug(sprintf('Now going to add transaction #%d to the array.', $transaction->id)); | ||||
|         $opposingTr     = $this->findOpposingTransaction($journal, $transaction); | ||||
| 
 | ||||
|         if (null === $opposingTr) { | ||||
|         if (!$opposingTr instanceof Transaction) { | ||||
|             $this->friendlyError( | ||||
|                 sprintf( | ||||
|                     'Journal #%d has no opposing transaction for transaction #%d. Cannot upgrade this entry.', | ||||
| @@ -366,8 +368,8 @@ class UpgradesToGroups extends Command | ||||
|     { | ||||
|         $groupId = DB::table('transaction_groups')->insertGetId( | ||||
|             [ | ||||
|                 'created_at' => date('Y-m-d H:i:s'), | ||||
|                 'updated_at' => date('Y-m-d H:i:s'), | ||||
|                 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), | ||||
|                 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), | ||||
|                 'title'      => null, | ||||
|                 'user_id'    => $array['user_id'], | ||||
|             ] | ||||
|   | ||||
| @@ -202,7 +202,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|     { | ||||
|         $this->sourceTransaction = $this->getSourceTransaction($journal); | ||||
|         $this->sourceAccount     = $this->sourceTransaction?->account; | ||||
|         $this->sourceCurrency    = null === $this->sourceAccount ? null : $this->getCurrency($this->sourceAccount); | ||||
|         $this->sourceCurrency    = $this->sourceAccount instanceof Account ? $this->getCurrency($this->sourceAccount) : null; | ||||
|     } | ||||
| 
 | ||||
|     private function getSourceTransaction(TransactionJournal $transfer): ?Transaction | ||||
| @@ -221,7 +221,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|             return $this->accountCurrencies[$accountId]; | ||||
|         } | ||||
|         $currency                            = $this->accountRepos->getAccountCurrency($account); | ||||
|         if (null === $currency) { | ||||
|         if (!$currency instanceof TransactionCurrency) { | ||||
|             $this->accountCurrencies[$accountId] = 0; | ||||
| 
 | ||||
|             return null; | ||||
| @@ -238,7 +238,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|     { | ||||
|         $this->destinationTransaction = $this->getDestinationTransaction($journal); | ||||
|         $this->destinationAccount     = $this->destinationTransaction?->account; | ||||
|         $this->destinationCurrency    = null === $this->destinationAccount ? null : $this->getCurrency($this->destinationAccount); | ||||
|         $this->destinationCurrency    = $this->destinationAccount instanceof Account ? $this->getCurrency($this->destinationAccount) : null; | ||||
|     } | ||||
| 
 | ||||
|     private function getDestinationTransaction(TransactionJournal $transfer): ?Transaction | ||||
| @@ -252,15 +252,15 @@ class UpgradesTransferCurrencies extends Command | ||||
|      */ | ||||
|     private function isEmptyTransactions(): bool | ||||
|     { | ||||
|         return null === $this->sourceTransaction || null === $this->destinationTransaction | ||||
|                || null === $this->sourceAccount | ||||
|                || null === $this->destinationAccount; | ||||
|         return !$this->sourceTransaction instanceof Transaction || !$this->destinationTransaction instanceof Transaction | ||||
|                || !$this->sourceAccount instanceof Account | ||||
|                || !$this->destinationAccount instanceof Account; | ||||
|     } | ||||
| 
 | ||||
|     private function isNoCurrencyPresent(): bool | ||||
|     { | ||||
|         // source account must have a currency preference.
 | ||||
|         if (null === $this->sourceCurrency) { | ||||
|         if (!$this->sourceCurrency instanceof TransactionCurrency) { | ||||
|             $message = sprintf('Account #%d ("%s") must have currency preference but has none.', $this->sourceAccount->id, $this->sourceAccount->name); | ||||
|             app('log')->error($message); | ||||
|             $this->friendlyError($message); | ||||
| @@ -269,7 +269,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|         } | ||||
| 
 | ||||
|         // destination account must have a currency preference.
 | ||||
|         if (null === $this->destinationCurrency) { | ||||
|         if (!$this->destinationCurrency instanceof TransactionCurrency) { | ||||
|             $message = sprintf( | ||||
|                 'Account #%d ("%s") must have currency preference but has none.', | ||||
|                 $this->destinationAccount->id, | ||||
| @@ -290,7 +290,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|      */ | ||||
|     private function fixSourceNoCurrency(): void | ||||
|     { | ||||
|         if (null === $this->sourceTransaction->transaction_currency_id && null !== $this->sourceCurrency) { | ||||
|         if (null === $this->sourceTransaction->transaction_currency_id && $this->sourceCurrency instanceof TransactionCurrency) { | ||||
|             $this->sourceTransaction | ||||
|                 ->transaction_currency_id | ||||
|                      = $this->sourceCurrency->id | ||||
| @@ -312,7 +312,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|      */ | ||||
|     private function fixSourceUnmatchedCurrency(): void | ||||
|     { | ||||
|         if (null !== $this->sourceCurrency | ||||
|         if ($this->sourceCurrency instanceof TransactionCurrency | ||||
|             && null === $this->sourceTransaction->foreign_amount | ||||
|             && (int) $this->sourceTransaction->transaction_currency_id !== $this->sourceCurrency->id | ||||
|         ) { | ||||
| @@ -336,7 +336,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|      */ | ||||
|     private function fixDestNoCurrency(): void | ||||
|     { | ||||
|         if (null === $this->destinationTransaction->transaction_currency_id && null !== $this->destinationCurrency) { | ||||
|         if (null === $this->destinationTransaction->transaction_currency_id && $this->destinationCurrency instanceof TransactionCurrency) { | ||||
|             $this->destinationTransaction | ||||
|                 ->transaction_currency_id | ||||
|                      = $this->destinationCurrency->id | ||||
| @@ -358,7 +358,7 @@ class UpgradesTransferCurrencies extends Command | ||||
|      */ | ||||
|     private function fixDestinationUnmatchedCurrency(): void | ||||
|     { | ||||
|         if (null !== $this->destinationCurrency | ||||
|         if ($this->destinationCurrency instanceof TransactionCurrency | ||||
|             && null === $this->destinationTransaction->foreign_amount | ||||
|             && (int) $this->destinationTransaction->transaction_currency_id !== $this->destinationCurrency->id | ||||
|         ) { | ||||
|   | ||||
| @@ -120,7 +120,7 @@ class UpgradesVariousCurrencyInformation extends Command | ||||
| 
 | ||||
|         $leadTransaction = $this->getLeadTransaction($journal); | ||||
| 
 | ||||
|         if (null === $leadTransaction) { | ||||
|         if (!$leadTransaction instanceof Transaction) { | ||||
|             $this->friendlyError(sprintf('Could not reliably determine which transaction is in the lead for transaction journal #%d.', $journal->id)); | ||||
| 
 | ||||
|             return; | ||||
| @@ -129,7 +129,7 @@ class UpgradesVariousCurrencyInformation extends Command | ||||
|         $account         = $leadTransaction->account; | ||||
|         $currency        = $this->getCurrency($account); | ||||
|         $isMultiCurrency = $this->isMultiCurrency($account); | ||||
|         if (null === $currency) { | ||||
|         if (!$currency instanceof TransactionCurrency) { | ||||
|             $this->friendlyError( | ||||
|                 sprintf( | ||||
|                     'Account #%d ("%s") has no currency preference, so transaction journal #%d can\'t be corrected', | ||||
| @@ -227,7 +227,7 @@ class UpgradesVariousCurrencyInformation extends Command | ||||
|             return $this->accountCurrencies[$accountId]; | ||||
|         } | ||||
|         $currency                            = $this->accountRepos->getAccountCurrency($account); | ||||
|         if (null === $currency) { | ||||
|         if (!$currency instanceof TransactionCurrency) { | ||||
|             $this->accountCurrencies[$accountId] = 0; | ||||
| 
 | ||||
|             return null; | ||||
|   | ||||
| @@ -26,6 +26,7 @@ namespace FireflyIII\Console; | ||||
| 
 | ||||
| use Illuminate\Console\Scheduling\Schedule; | ||||
| use Illuminate\Foundation\Console\Kernel as ConsoleKernel; | ||||
| use Override; | ||||
| 
 | ||||
| /** | ||||
|  * File to make sure commands work. | ||||
| @@ -35,7 +36,7 @@ class Kernel extends ConsoleKernel | ||||
|     /** | ||||
|      * Register the commands for the application. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     protected function commands(): void | ||||
|     { | ||||
|         $this->load(__DIR__.'/Commands'); | ||||
| @@ -46,7 +47,7 @@ class Kernel extends ConsoleKernel | ||||
|     /** | ||||
|      * Define the application's command schedule. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     protected function schedule(Schedule $schedule): void | ||||
|     { | ||||
|         $schedule->call( | ||||
|   | ||||
| @@ -37,5 +37,5 @@ class UpdatedTransactionGroup extends Event | ||||
|     /** | ||||
|      * Create a new event instance. | ||||
|      */ | ||||
|     public function __construct(public TransactionGroup $transactionGroup, public bool $applyRules, public bool $fireWebhooks) {} | ||||
|     public function __construct(public TransactionGroup $transactionGroup, public bool $applyRules, public bool $fireWebhooks, public bool $runRecalculations) {} | ||||
| } | ||||
|   | ||||
| @@ -24,7 +24,9 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| class BadHttpHeaderException extends \Exception | ||||
| use Exception; | ||||
| 
 | ||||
| class BadHttpHeaderException extends Exception | ||||
| { | ||||
|     public int $statusCode = 406; | ||||
| } | ||||
|   | ||||
| @@ -24,7 +24,9 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class DuplicateTransactionException | ||||
|  */ | ||||
| class DuplicateTransactionException extends \Exception {} | ||||
| class DuplicateTransactionException extends Exception {} | ||||
|   | ||||
| @@ -24,7 +24,9 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class FireflyException. | ||||
|  */ | ||||
| class FireflyException extends \Exception {} | ||||
| class FireflyException extends Exception {} | ||||
|   | ||||
| @@ -34,6 +34,8 @@ use FireflyIII\User; | ||||
| use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; | ||||
| use Illuminate\Http\Request; | ||||
| use Symfony\Component\HttpFoundation\Response; | ||||
| use Override; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class GracefulNotFoundHandler | ||||
| @@ -45,12 +47,12 @@ class GracefulNotFoundHandler extends ExceptionHandler | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      * | ||||
|      * @SuppressWarnings("PHPMD.CyclomaticComplexity") | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     public function render($request, \Throwable $e): Response | ||||
|     #[Override]
 | ||||
|     public function render($request, Throwable $e): Response | ||||
|     { | ||||
|         $route = $request->route(); | ||||
|         if (null === $route) { | ||||
| @@ -149,9 +151,9 @@ class GracefulNotFoundHandler extends ExceptionHandler | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      */ | ||||
|     private function handleAccount(Request $request, \Throwable $exception): Response | ||||
|     private function handleAccount(Request $request, Throwable $exception): Response | ||||
|     { | ||||
|         app('log')->debug('404 page is probably a deleted account. Redirect to overview of account types.'); | ||||
| 
 | ||||
| @@ -184,9 +186,9 @@ class GracefulNotFoundHandler extends ExceptionHandler | ||||
|     /** | ||||
|      * @return Response | ||||
|      * | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      */ | ||||
|     private function handleGroup(Request $request, \Throwable $exception) | ||||
|     private function handleGroup(Request $request, Throwable $exception) | ||||
|     { | ||||
|         app('log')->debug('404 page is probably a deleted group. Redirect to overview of group types.'); | ||||
| 
 | ||||
| @@ -224,9 +226,9 @@ class GracefulNotFoundHandler extends ExceptionHandler | ||||
|     /** | ||||
|      * @return Response | ||||
|      * | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      */ | ||||
|     private function handleAttachment(Request $request, \Throwable $exception) | ||||
|     private function handleAttachment(Request $request, Throwable $exception) | ||||
|     { | ||||
|         app('log')->debug('404 page is probably a deleted attachment. Redirect to parent object.'); | ||||
| 
 | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use Brick\Math\Exception\NumberFormatException; | ||||
| use FireflyIII\Jobs\MailError; | ||||
| use Illuminate\Auth\Access\AuthorizationException; | ||||
| @@ -44,6 +45,12 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; | ||||
| use Symfony\Component\HttpKernel\Exception\HttpException; | ||||
| use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; | ||||
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| use ErrorException; | ||||
| use Override; | ||||
| use Throwable; | ||||
| 
 | ||||
| use function Safe\json_encode; | ||||
| use function Safe\parse_url; | ||||
| 
 | ||||
| // temp
 | ||||
| /** | ||||
| @@ -52,7 +59,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | ||||
| class Handler extends ExceptionHandler | ||||
| { | ||||
|     /** | ||||
|      * @var array<int, class-string<\Throwable>> | ||||
|      * @var array<int, class-string<Throwable>> | ||||
|      */ | ||||
|     protected $dontReport | ||||
|         = [ | ||||
| @@ -70,7 +77,7 @@ class Handler extends ExceptionHandler | ||||
|     /** | ||||
|      * Register the exception handling callbacks for the application. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     public function register(): void {} | ||||
| 
 | ||||
|     /** | ||||
| @@ -79,13 +86,13 @@ class Handler extends ExceptionHandler | ||||
|      * | ||||
|      * @param Request $request | ||||
|      * | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      * | ||||
|      * @SuppressWarnings("PHPMD.NPathComplexity") | ||||
|      * @SuppressWarnings("PHPMD.CyclomaticComplexity") | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     public function render($request, \Throwable $e): Response | ||||
|     #[Override]
 | ||||
|     public function render($request, Throwable $e): Response | ||||
|     { | ||||
|         $expectsJson = $request->expectsJson(); | ||||
| 
 | ||||
| @@ -188,7 +195,7 @@ class Handler extends ExceptionHandler | ||||
|             return response()->view('errors.DatabaseException', ['exception' => $e, 'debug' => $isDebug], 500); | ||||
|         } | ||||
| 
 | ||||
|         if ($e instanceof FireflyException || $e instanceof \ErrorException || $e instanceof OAuthServerException) { | ||||
|         if ($e instanceof FireflyException || $e instanceof ErrorException || $e instanceof OAuthServerException) { | ||||
|             app('log')->debug('Return Firefly III error view.'); | ||||
|             $isDebug = config('app.debug'); | ||||
| 
 | ||||
| @@ -203,10 +210,10 @@ class Handler extends ExceptionHandler | ||||
|     /** | ||||
|      * Report or log an exception. | ||||
|      * | ||||
|      * @throws \Throwable | ||||
|      * @throws Throwable | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     public function report(\Throwable $e): void | ||||
|     #[Override]
 | ||||
|     public function report(Throwable $e): void | ||||
|     { | ||||
|         $doMailError = (bool) config('firefly.send_error_message'); | ||||
|         if ($this->shouldntReportLocal($e) || !$doMailError) { | ||||
| @@ -228,7 +235,7 @@ class Handler extends ExceptionHandler | ||||
|         $data        = [ | ||||
|             'class'        => $e::class, | ||||
|             'errorMessage' => $e->getMessage(), | ||||
|             'time'         => date('r'), | ||||
|             'time'         => Carbon::now()->format('r'), | ||||
|             'stackTrace'   => $e->getTraceAsString(), | ||||
|             'file'         => $e->getFile(), | ||||
|             'line'         => $e->getLine(), | ||||
| @@ -239,7 +246,7 @@ class Handler extends ExceptionHandler | ||||
|             'json'         => request()->acceptsJson(), | ||||
|             'method'       => request()->method(), | ||||
|             'headers'      => $headers, | ||||
|             'post'         => 'POST' === request()->method() ? \Safe\json_encode(request()->all()) : '', | ||||
|             'post'         => 'POST' === request()->method() ? json_encode(request()->all()) : '', | ||||
|         ]; | ||||
| 
 | ||||
|         // create job that will mail.
 | ||||
| @@ -250,7 +257,7 @@ class Handler extends ExceptionHandler | ||||
|         parent::report($e); | ||||
|     } | ||||
| 
 | ||||
|     private function shouldntReportLocal(\Throwable $e): bool | ||||
|     private function shouldntReportLocal(Throwable $e): bool | ||||
|     { | ||||
|         return null !== Arr::first( | ||||
|             $this->dontReport, | ||||
| @@ -263,7 +270,7 @@ class Handler extends ExceptionHandler | ||||
|      * | ||||
|      * @param Request $request | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response|JsonResponse|RedirectResponse | ||||
|     { | ||||
|         // protect against open redirect when submitting invalid forms.
 | ||||
| @@ -286,8 +293,8 @@ class Handler extends ExceptionHandler | ||||
|         } | ||||
|         $safe         = route('index'); | ||||
|         $previous     = $exception->redirectTo; | ||||
|         $previousHost = \Safe\parse_url($previous, PHP_URL_HOST); | ||||
|         $safeHost     = \Safe\parse_url($safe, PHP_URL_HOST); | ||||
|         $previousHost = parse_url($previous, PHP_URL_HOST); | ||||
|         $safeHost     = parse_url($safe, PHP_URL_HOST); | ||||
| 
 | ||||
|         return null !== $previousHost && $previousHost === $safeHost ? $previous : $safe; | ||||
|     } | ||||
|   | ||||
| @@ -25,11 +25,13 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use FireflyIII\Support\Calendar\Periodicity; | ||||
| use Exception; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class IntervalException | ||||
|  */ | ||||
| final class IntervalException extends \Exception | ||||
| final class IntervalException extends Exception | ||||
| { | ||||
|     public array       $availableIntervals; | ||||
|     public Periodicity $periodicity; | ||||
| @@ -37,7 +39,7 @@ final class IntervalException extends \Exception | ||||
|     /** @var mixed */ | ||||
|     protected $message = 'The periodicity %s is unknown. Choose one of available periodicity: %s'; | ||||
| 
 | ||||
|     public function __construct(string $message = '', int $code = 0, ?\Throwable $previous = null) | ||||
|     public function __construct(string $message = '', int $code = 0, ?Throwable $previous = null) | ||||
|     { | ||||
|         parent::__construct($message, $code, $previous); | ||||
|         $this->availableIntervals = []; | ||||
| @@ -48,7 +50,7 @@ final class IntervalException extends \Exception | ||||
|         Periodicity $periodicity, | ||||
|         array       $intervals, | ||||
|         int         $code = 0, | ||||
|         ?\Throwable $previous = null | ||||
|         ?Throwable $previous = null | ||||
|     ): self { | ||||
|         $message                       = sprintf( | ||||
|             'The periodicity %s is unknown. Choose one of available periodicity: %s', | ||||
|   | ||||
| @@ -24,7 +24,9 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class NotImplementedException. | ||||
|  */ | ||||
| class NotImplementedException extends \Exception {} | ||||
| class NotImplementedException extends Exception {} | ||||
|   | ||||
| @@ -24,7 +24,9 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Exceptions; | ||||
| 
 | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class ValidationExceptions. | ||||
|  */ | ||||
| class ValidationException extends \Exception {} | ||||
| class ValidationException extends Exception {} | ||||
|   | ||||
| @@ -75,7 +75,7 @@ class AccountFactory | ||||
|         app('log')->debug(sprintf('findOrCreate("%s", "%s")', $accountName, $accountType)); | ||||
| 
 | ||||
|         $type   = $this->accountRepository->getAccountTypeByType($accountType); | ||||
|         if (null === $type) { | ||||
|         if (!$type instanceof AccountType) { | ||||
|             throw new FireflyException(sprintf('Cannot find account type "%s"', $accountType)); | ||||
|         } | ||||
|         $return = $this->user->accounts->where('account_type_id', $type->id)->where('name', $accountName)->first(); | ||||
| @@ -111,7 +111,7 @@ class AccountFactory | ||||
|         // account may exist already:
 | ||||
|         $return       = $this->find($data['name'], $type->type); | ||||
| 
 | ||||
|         if (null !== $return) { | ||||
|         if ($return instanceof Account) { | ||||
|             return $return; | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -26,6 +26,7 @@ namespace FireflyIII\Factory; | ||||
| 
 | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Models\AccountMeta; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| 
 | ||||
| /** | ||||
|  * Class AccountMetaFactory | ||||
| @@ -41,11 +42,16 @@ class AccountMetaFactory | ||||
|         $entry = $account->accountMeta()->where('name', $field)->first(); | ||||
|         // must not be an empty string:
 | ||||
|         if ('' !== $value) { | ||||
|             if ('account_number' === $field) { | ||||
|                 $value = Steam::filterSpaces($value); | ||||
|                 $value = trim(str_replace([' ', "\t", "\n", "\r"], '', $value)); | ||||
|             } | ||||
|             // if $data has field and $entry is null, create new one:
 | ||||
|             if (null === $entry) { | ||||
|                 return $this->create(['account_id' => $account->id, 'name' => $field, 'data' => $value]); | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|             // if $data has field and $entry is not null, update $entry:
 | ||||
|             $entry->data = $value; | ||||
|             $entry->save(); | ||||
|   | ||||
| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Factory; | ||||
| 
 | ||||
| use FireflyIII\Models\ObjectGroup; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\Bill; | ||||
| use FireflyIII\Repositories\ObjectGroup\CreatesObjectGroups; | ||||
| @@ -93,7 +94,7 @@ class BillFactory | ||||
|         $objectGroupTitle = $data['object_group_title'] ?? ''; | ||||
|         if ('' !== $objectGroupTitle) { | ||||
|             $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); | ||||
|             if (null !== $objectGroup) { | ||||
|             if ($objectGroup instanceof ObjectGroup) { | ||||
|                 $bill->objectGroups()->sync([$objectGroup->id]); | ||||
|                 $bill->save(); | ||||
|             } | ||||
| @@ -102,7 +103,7 @@ class BillFactory | ||||
|         $objectGroupId    = (int) ($data['object_group_id'] ?? 0); | ||||
|         if (0 !== $objectGroupId) { | ||||
|             $objectGroup = $this->findObjectGroupById($objectGroupId); | ||||
|             if (null !== $objectGroup) { | ||||
|             if ($objectGroup instanceof ObjectGroup) { | ||||
|                 $bill->objectGroups()->sync([$objectGroup->id]); | ||||
|                 $bill->save(); | ||||
|             } | ||||
| @@ -124,7 +125,7 @@ class BillFactory | ||||
| 
 | ||||
|         // then find by name:
 | ||||
|         if (null === $bill && '' !== $billName) { | ||||
|             $bill = $this->findByName($billName); | ||||
|             return $this->findByName($billName); | ||||
|         } | ||||
| 
 | ||||
|         return $bill; | ||||
|   | ||||
| @@ -53,7 +53,7 @@ class BudgetFactory | ||||
| 
 | ||||
|         if ('' !== $budgetName) { | ||||
|             $budget = $this->findByName($budgetName); | ||||
|             if (null !== $budget) { | ||||
|             if ($budget instanceof Budget) { | ||||
|                 return $budget; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -59,7 +59,7 @@ class CategoryFactory | ||||
| 
 | ||||
|         if ('' !== $categoryName) { | ||||
|             $category = $this->findByName($categoryName); | ||||
|             if (null !== $category) { | ||||
|             if ($category instanceof Category) { | ||||
|                 return $category; | ||||
|             } | ||||
| 
 | ||||
|   | ||||
| @@ -37,7 +37,7 @@ class PiggyBankEventFactory | ||||
|     public function create(TransactionJournal $journal, ?PiggyBank $piggyBank): void | ||||
|     { | ||||
|         app('log')->debug(sprintf('Now in PiggyBankEventCreate for a %s', $journal->transactionType->type)); | ||||
|         if (null === $piggyBank) { | ||||
|         if (!$piggyBank instanceof PiggyBank) { | ||||
|             app('log')->debug('Piggy bank is null'); | ||||
| 
 | ||||
|             return; | ||||
|   | ||||
| @@ -23,6 +23,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Factory; | ||||
| 
 | ||||
| use FireflyIII\Models\ObjectGroup; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Events\Model\PiggyBank\ChangedAmount; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\PiggyBank; | ||||
| @@ -35,6 +37,8 @@ use FireflyIII\User; | ||||
| use Illuminate\Database\QueryException; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| 
 | ||||
| use function Safe\json_encode; | ||||
| 
 | ||||
| /** | ||||
|  * Class PiggyBankFactory | ||||
|  */ | ||||
| @@ -99,7 +103,7 @@ class PiggyBankFactory | ||||
|         $objectGroupTitle                         = $data['object_group_title'] ?? ''; | ||||
|         if ('' !== $objectGroupTitle) { | ||||
|             $objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle); | ||||
|             if (null !== $objectGroup) { | ||||
|             if ($objectGroup instanceof ObjectGroup) { | ||||
|                 $piggyBank->objectGroups()->sync([$objectGroup->id]); | ||||
|             } | ||||
|         } | ||||
| @@ -107,7 +111,7 @@ class PiggyBankFactory | ||||
|         $objectGroupId                            = (int) ($data['object_group_id'] ?? 0); | ||||
|         if (0 !== $objectGroupId) { | ||||
|             $objectGroup = $this->findObjectGroupById($objectGroupId); | ||||
|             if (null !== $objectGroup) { | ||||
|             if ($objectGroup instanceof ObjectGroup) { | ||||
|                 $piggyBank->objectGroups()->sync([$objectGroup->id]); | ||||
|             } | ||||
|         } | ||||
| @@ -241,7 +245,7 @@ class PiggyBankFactory | ||||
|         /** @var array $info */ | ||||
|         foreach ($accounts as $info) { | ||||
|             $account = $this->accountRepository->find((int) ($info['account_id'] ?? 0)); | ||||
|             if (null === $account) { | ||||
|             if (!$account instanceof Account) { | ||||
|                 Log::debug(sprintf('Account #%d not found, skipping.', (int) ($info['account_id'] ?? 0))); | ||||
| 
 | ||||
|                 continue; | ||||
| @@ -284,7 +288,7 @@ class PiggyBankFactory | ||||
|                 Log::debug(sprintf('Will link account #%d with info: ', $account->id), $toBeLinked[$account->id]); | ||||
|             } | ||||
|         } | ||||
|         Log::debug(sprintf('Link information: %s', \Safe\json_encode($toBeLinked))); | ||||
|         Log::debug(sprintf('Link information: %s', json_encode($toBeLinked))); | ||||
|         if (0 !== count($toBeLinked)) { | ||||
|             $piggyBank->accounts()->sync($toBeLinked); | ||||
|         } | ||||
|   | ||||
| @@ -59,7 +59,7 @@ class TagFactory | ||||
|                 'zoom_level'  => null, | ||||
|             ] | ||||
|         ); | ||||
|         if (null === $newTag) { | ||||
|         if (!$newTag instanceof Tag) { | ||||
|             app('log')->error(sprintf('TagFactory::findOrCreate("%s") but tag is unexpectedly NULL!', $tag)); | ||||
| 
 | ||||
|             return null; | ||||
|   | ||||
| @@ -118,7 +118,7 @@ class TransactionFactory | ||||
|         ); | ||||
| 
 | ||||
|         // do foreign currency thing: add foreign currency info to $one and $two if necessary.
 | ||||
|         if (null !== $this->foreignCurrency | ||||
|         if ($this->foreignCurrency instanceof TransactionCurrency | ||||
|             && null !== $foreignAmount | ||||
|             && $this->foreignCurrency->id !== $this->currency->id) { | ||||
|             $result->foreign_currency_id = $this->foreignCurrency->id; | ||||
|   | ||||
| @@ -24,6 +24,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Factory; | ||||
| 
 | ||||
| use FireflyIII\Models\Bill; | ||||
| use FireflyIII\Models\PiggyBank; | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Enums\AccountTypeEnum; | ||||
| use FireflyIII\Enums\TransactionTypeEnum; | ||||
| @@ -51,6 +53,10 @@ use FireflyIII\User; | ||||
| use FireflyIII\Validation\AccountValidator; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Exception; | ||||
| use JsonException; | ||||
| 
 | ||||
| use function Safe\json_encode; | ||||
| 
 | ||||
| /** | ||||
|  * Class TransactionJournalFactory | ||||
| @@ -76,7 +82,7 @@ class TransactionJournalFactory | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
|      * @throws \Exception | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
| @@ -120,10 +126,10 @@ class TransactionJournalFactory | ||||
|             foreach ($transactions as $index => $row) { | ||||
|                 Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions))); | ||||
|                 $journal = $this->createJournal(new NullArrayObject($row)); | ||||
|                 if (null !== $journal) { | ||||
|                 if ($journal instanceof TransactionJournal) { | ||||
|                     $collection->push($journal); | ||||
|                 } | ||||
|                 if (null === $journal) { | ||||
|                 if (!$journal instanceof TransactionJournal) { | ||||
|                     Log::error('The createJournal() method returned NULL. This may indicate an error.'); | ||||
|                 } | ||||
|             } | ||||
| @@ -173,7 +179,7 @@ class TransactionJournalFactory | ||||
| 
 | ||||
|         $foreignCurrency       = $this->currencyRepository->findCurrencyNull($row['foreign_currency_id'], $row['foreign_currency_code']); | ||||
|         $bill                  = $this->billRepository->findBill((int) $row['bill_id'], $row['bill_name']); | ||||
|         $billId                = TransactionTypeEnum::WITHDRAWAL->value === $type->type && null !== $bill ? $bill->id : null; | ||||
|         $billId                = TransactionTypeEnum::WITHDRAWAL->value === $type->type && $bill instanceof Bill ? $bill->id : null; | ||||
|         $description           = (string) $row['description']; | ||||
| 
 | ||||
|         // Manipulate basic fields
 | ||||
| @@ -284,7 +290,7 @@ class TransactionJournalFactory | ||||
|         // see the currency they expect to see.
 | ||||
|         $amount                = (string) $row['amount']; | ||||
|         $foreignAmount         = (string) $row['foreign_amount']; | ||||
|         if (null !== $foreignCurrency && $foreignCurrency->id !== $currency->id | ||||
|         if ($foreignCurrency instanceof TransactionCurrency && $foreignCurrency->id !== $currency->id | ||||
|             && (TransactionTypeEnum::TRANSFER->value === $type->type || $this->isBetweenAssetAndLiability($sourceAccount, $destinationAccount)) | ||||
|         ) { | ||||
|             $transactionFactory->setCurrency($foreignCurrency); | ||||
| @@ -323,8 +329,8 @@ class TransactionJournalFactory | ||||
|         unset($dataRow['import_hash_v2'], $dataRow['original_source']); | ||||
| 
 | ||||
|         try { | ||||
|             $json = \Safe\json_encode($dataRow, JSON_THROW_ON_ERROR); | ||||
|         } catch (\JsonException $e) { | ||||
|             $json = json_encode($dataRow, JSON_THROW_ON_ERROR); | ||||
|         } catch (JsonException $e) { | ||||
|             Log::error(sprintf('Could not encode dataRow: %s', $e->getMessage())); | ||||
|             $json = microtime(); | ||||
|         } | ||||
| @@ -352,7 +358,7 @@ class TransactionJournalFactory | ||||
|             ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'journal_meta.transaction_journal_id') | ||||
|             ->whereNotNull('transaction_journals.id') | ||||
|             ->where('transaction_journals.user_id', $this->user->id) | ||||
|             ->where('data', \Safe\json_encode($hash, JSON_THROW_ON_ERROR)) | ||||
|             ->where('data', json_encode($hash, JSON_THROW_ON_ERROR)) | ||||
|             ->with(['transactionJournal', 'transactionJournal.transactionGroup']) | ||||
|             ->first(['journal_meta.*']) | ||||
|         ; | ||||
| @@ -425,12 +431,12 @@ class TransactionJournalFactory | ||||
|     private function reconciliationSanityCheck(?Account $sourceAccount, ?Account $destinationAccount): array | ||||
|     { | ||||
|         Log::debug(sprintf('Now in %s', __METHOD__)); | ||||
|         if (null !== $sourceAccount && null !== $destinationAccount) { | ||||
|         if ($sourceAccount instanceof Account && $destinationAccount instanceof Account) { | ||||
|             Log::debug('Both accounts exist, simply return them.'); | ||||
| 
 | ||||
|             return [$sourceAccount, $destinationAccount]; | ||||
|         } | ||||
|         if (null === $destinationAccount) { | ||||
|         if (!$destinationAccount instanceof Account) { | ||||
|             Log::debug('Destination account is NULL, source account is not.'); | ||||
|             $account = $this->accountRepository->getReconciliation($sourceAccount); | ||||
|             Log::debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); | ||||
| @@ -438,7 +444,7 @@ class TransactionJournalFactory | ||||
|             return [$sourceAccount, $account]; | ||||
|         } | ||||
| 
 | ||||
|         if (null === $sourceAccount) { // @phpstan-ignore-line
 | ||||
|         if (!$sourceAccount instanceof Account) { // @phpstan-ignore-line
 | ||||
|             Log::debug('Source account is NULL, destination account is not.'); | ||||
|             $account = $this->accountRepository->getReconciliation($destinationAccount); | ||||
|             Log::debug(sprintf('Will return account #%d ("%s") of type "%s"', $account->id, $account->name, $account->accountType->type)); | ||||
| @@ -480,7 +486,7 @@ class TransactionJournalFactory | ||||
| 
 | ||||
|         /** @var null|TransactionCurrency $preference */ | ||||
|         $preference = $this->accountRepository->getAccountCurrency($account); | ||||
|         if (null === $preference && null === $currency) { | ||||
|         if (null === $preference && !$currency instanceof TransactionCurrency) { | ||||
|             // return user's default:
 | ||||
|             return app('amount')->getNativeCurrencyByUserGroup($this->user->userGroup); | ||||
|         } | ||||
| @@ -496,10 +502,10 @@ class TransactionJournalFactory | ||||
|     private function compareCurrencies(?TransactionCurrency $currency, ?TransactionCurrency $foreignCurrency): ?TransactionCurrency | ||||
|     { | ||||
|         Log::debug(sprintf('Now in compareCurrencies("%s", "%s")', $currency?->code, $foreignCurrency?->code)); | ||||
|         if (null === $currency) { | ||||
|         if (!$currency instanceof TransactionCurrency) { | ||||
|             return null; | ||||
|         } | ||||
|         if (null !== $foreignCurrency && $foreignCurrency->id === $currency->id) { | ||||
|         if ($foreignCurrency instanceof TransactionCurrency && $foreignCurrency->id === $currency->id) { | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
| @@ -556,7 +562,7 @@ class TransactionJournalFactory | ||||
| 
 | ||||
|         $piggyBank = $this->piggyRepository->findPiggyBank((int) $data['piggy_bank_id'], $data['piggy_bank_name']); | ||||
| 
 | ||||
|         if (null !== $piggyBank) { | ||||
|         if ($piggyBank instanceof PiggyBank) { | ||||
|             $this->piggyEventFactory->create($journal, $piggyBank); | ||||
|             Log::debug('Create piggy event.'); | ||||
| 
 | ||||
|   | ||||
| @@ -27,6 +27,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -56,7 +57,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
|                 ->with('doubles', $this->expense) | ||||
|                 ->render() | ||||
|             ; | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.double.report: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -23,6 +23,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Generator\Report\Account; | ||||
| 
 | ||||
| use Override; | ||||
| 
 | ||||
| /** | ||||
|  * Class MultiYearReportGenerator. | ||||
|  */ | ||||
| @@ -31,7 +33,7 @@ class MultiYearReportGenerator extends MonthReportGenerator | ||||
|     /** | ||||
|      * Returns the preferred period. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     protected function preferredPeriod(): string | ||||
|     { | ||||
|         return 'year'; | ||||
|   | ||||
| @@ -23,6 +23,8 @@ declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Generator\Report\Account; | ||||
| 
 | ||||
| use Override; | ||||
| 
 | ||||
| /** | ||||
|  * Class YearReportGenerator. | ||||
|  */ | ||||
| @@ -31,7 +33,7 @@ class YearReportGenerator extends MonthReportGenerator | ||||
|     /** | ||||
|      * Returns the preferred period. | ||||
|      */ | ||||
|     #[\Override]
 | ||||
|     #[Override]
 | ||||
|     protected function preferredPeriod(): string | ||||
|     { | ||||
|         return 'month'; | ||||
|   | ||||
| @@ -34,6 +34,7 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -103,7 +104,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
|                 ->with('start', $this->start)->with('end', $this->end)->with('accounts', $this->accounts) | ||||
|                 ->render() | ||||
|             ; | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.audit.report: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -70,7 +71,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
|                 ->with('accounts', $this->accounts) | ||||
|                 ->render() | ||||
|             ; | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -71,7 +72,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
|                 ->with('accounts', $this->accounts) | ||||
|                 ->render() | ||||
|             ; | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.category.month: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -54,7 +55,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
| 
 | ||||
|         try { | ||||
|             return view('reports.default.month', compact('accountIds', 'reportType'))->with('start', $this->start)->with('end', $this->end)->render(); | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.default.month: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = 'Could not render report view.'; | ||||
|   | ||||
| @@ -27,6 +27,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -58,7 +59,7 @@ class MultiYearReportGenerator implements ReportGeneratorInterface | ||||
|                 'reports.default.multi-year', | ||||
|                 compact('accountIds', 'reportType') | ||||
|             )->with('start', $this->start)->with('end', $this->end)->render(); | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.default.multi-year: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -58,7 +59,7 @@ class YearReportGenerator implements ReportGeneratorInterface | ||||
|                 'reports.default.year', | ||||
|                 compact('accountIds', 'reportType') | ||||
|             )->with('start', $this->start)->with('end', $this->end)->render(); | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.account.report: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = 'Could not render report view.'; | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Generator\Report\ReportGeneratorInterface; | ||||
| use Illuminate\Support\Collection; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class MonthReportGenerator. | ||||
| @@ -65,7 +66,7 @@ class MonthReportGenerator implements ReportGeneratorInterface | ||||
|                 'reports.tag.month', | ||||
|                 compact('accountIds', 'reportType', 'tagIds') | ||||
|             )->with('start', $this->start)->with('end', $this->end)->with('tags', $this->tags)->with('accounts', $this->accounts)->render(); | ||||
|         } catch (\Throwable $e) { | ||||
|         } catch (Throwable $e) { | ||||
|             app('log')->error(sprintf('Cannot render reports.tag.month: %s', $e->getMessage())); | ||||
|             app('log')->error($e->getTraceAsString()); | ||||
|             $result = sprintf('Could not render report view: %s', $e->getMessage()); | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Notifications\User\NewAccessToken; | ||||
| use FireflyIII\Repositories\User\UserRepositoryInterface; | ||||
| use Illuminate\Support\Facades\Notification; | ||||
| use Laravel\Passport\Events\AccessTokenCreated; | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class APIEventHandler | ||||
| @@ -48,7 +49,7 @@ class APIEventHandler | ||||
|         if (null !== $user) { | ||||
|             try { | ||||
|                 Notification::send($user, new NewAccessToken()); | ||||
|             } catch (\Exception $e) { | ||||
|             } catch (Exception $e) { | ||||
|                 $message = $e->getMessage(); | ||||
|                 if (str_contains($message, 'Bcc')) { | ||||
|                     app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
|   | ||||
| @@ -37,6 +37,7 @@ use FireflyIII\Notifications\Test\OwnerTestNotificationPushover; | ||||
| use FireflyIII\Notifications\Test\OwnerTestNotificationSlack; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use Illuminate\Support\Facades\Notification; | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class AdminEventHandler. | ||||
| @@ -52,7 +53,7 @@ class AdminEventHandler | ||||
| 
 | ||||
|         try { | ||||
|             Notification::send(new OwnerNotifiable(), new UserInvitation($event->invitee)); | ||||
|         } catch (\Exception $e) { | ||||
|         } catch (Exception $e) { | ||||
|             $message = $e->getMessage(); | ||||
|             if (str_contains($message, 'Bcc')) { | ||||
|                 app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
| @@ -74,7 +75,7 @@ class AdminEventHandler | ||||
|         try { | ||||
|             $owner = new OwnerNotifiable(); | ||||
|             Notification::send($owner, new UnknownUserLoginAttempt($event->address)); | ||||
|         } catch (\Exception $e) { | ||||
|         } catch (Exception $e) { | ||||
|             $message = $e->getMessage(); | ||||
|             if (str_contains($message, 'Bcc')) { | ||||
|                 app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
| @@ -104,7 +105,7 @@ class AdminEventHandler | ||||
|         try { | ||||
|             $owner = new OwnerNotifiable(); | ||||
|             Notification::send($owner, new VersionCheckResult($event->message)); | ||||
|         } catch (\Exception $e) { | ||||
|         } catch (Exception $e) { | ||||
|             $message = $e->getMessage(); | ||||
|             if (str_contains($message, 'Bcc')) { | ||||
|                 app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
| @@ -158,7 +159,7 @@ class AdminEventHandler | ||||
| 
 | ||||
|         try { | ||||
|             Notification::send($event->owner, new $class()); | ||||
|         } catch (\Exception $e) { | ||||
|         } catch (Exception $e) { | ||||
|             $message = $e->getMessage(); | ||||
|             if (str_contains($message, 'Bcc')) { | ||||
|                 app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
|   | ||||
| @@ -31,6 +31,7 @@ use FireflyIII\Notifications\User\TransactionCreation; | ||||
| use FireflyIII\Repositories\User\UserRepositoryInterface; | ||||
| use FireflyIII\Transformers\TransactionGroupTransformer; | ||||
| use Illuminate\Support\Facades\Notification; | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class AutomationHandler | ||||
| @@ -78,7 +79,7 @@ class AutomationHandler | ||||
| 
 | ||||
|         try { | ||||
|             Notification::send($user, new TransactionCreation($groups)); | ||||
|         } catch (\Exception $e) { | ||||
|         } catch (Exception $e) { | ||||
|             $message = $e->getMessage(); | ||||
|             if (str_contains($message, 'Bcc')) { | ||||
|                 app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Handlers\Events; | ||||
| use FireflyIII\Events\WarnUserAboutBill; | ||||
| use FireflyIII\Notifications\User\BillReminder; | ||||
| use Illuminate\Support\Facades\Notification; | ||||
| use Exception; | ||||
| 
 | ||||
| /** | ||||
|  * Class BillEventHandler | ||||
| @@ -47,7 +48,7 @@ class BillEventHandler | ||||
| 
 | ||||
|             try { | ||||
|                 Notification::send($bill->user, new BillReminder($bill, $event->field, $event->diff)); | ||||
|             } catch (\Exception $e) { | ||||
|             } catch (Exception $e) { | ||||
|                 $message = $e->getMessage(); | ||||
|                 if (str_contains($message, 'Bcc')) { | ||||
|                     app('log')->warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user