Compare commits

...

6 Commits

57 changed files with 5759 additions and 3350 deletions

5
.gitignore vendored
View File

@ -9,3 +9,8 @@
/phpunit.xml /phpunit.xml
.phpunit.result.cache .phpunit.result.cache
###< phpunit/phpunit ### ###< phpunit/phpunit ###
# PHP CS Fixer
tools/vendor/
/.php-cs-fixer.php
/.php-cs-fixer.cache

545
.php-cs-fixer.dist.php Normal file
View File

@ -0,0 +1,545 @@
<?php declare(strict_types=1);
use Nexus\CsConfig\Factory;
use PhpCsFixer\{Config, Finder};
$finder = Finder::create()
->in(__DIR__)
->exclude('var')
->exclude('vendor');
return (new Config())
->setRiskyAllowed(TRUE)
->setFinder($finder)
->setRules([
'align_multiline_comment' => false,
'array_indentation' => true,
'array_push' => true,
'array_syntax' => ['syntax' => 'short'],
'assign_null_coalescing_to_coalesce_equal' => true,
'backtick_to_shell_exec' => true,
'binary_operator_spaces' => [
'default' => 'single_space',
'operators' => [
'=' => 'align_single_space_minimal',
'=>' => 'align_single_space_minimal',
'||' => 'align_single_space_minimal',
'.=' => 'align_single_space_minimal',
],
],
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => false,
'blank_line_before_statement' => [
'statements' => [
'case',
'continue',
'declare',
'default',
'do',
'exit',
'for',
'foreach',
'goto',
'return',
'switch',
'throw',
'try',
'while',
'yield',
'yield_from',
],
],
'braces' => [
'allow_single_line_anonymous_class_with_empty_body' => true,
'allow_single_line_closure' => true,
'position_after_anonymous_constructs' => 'same',
'position_after_control_structures' => 'same',
'position_after_functions_and_oop_constructs' => 'next',
],
'cast_spaces' => ['space' => 'single'],
'class_attributes_separation' => [
'elements' => [
'const' => 'none',
'property' => 'none',
'method' => 'one',
'trait_import' => 'none',
],
],
'class_definition' => [
'multi_line_extends_each_single_line' => true,
'single_item_single_line' => true,
'single_line' => true,
'space_before_parenthesis' => true,
],
'class_reference_name_casing' => true,
'clean_namespace' => true,
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'combine_nested_dirname' => true,
'comment_to_phpdoc' => [
'ignored_tags' => [
'todo',
'codeCoverageIgnore',
'codeCoverageIgnoreStart',
'codeCoverageIgnoreEnd',
'phpstan-ignore-line',
'phpstan-ignore-next-line',
],
],
'compact_nullable_typehint' => true,
'concat_space' => ['spacing' => 'one'],
'constant_case' => ['case' => 'upper'],
'control_structure_continuation_position' => ['position' => 'same_line'],
'date_time_immutable' => false,
'declare_equal_normalize' => ['space' => 'none'],
'declare_parentheses' => true,
'declare_strict_types' => true,
'dir_constant' => true,
'doctrine_annotation_array_assignment' => false,
'doctrine_annotation_braces' => false,
'doctrine_annotation_indentation' => false,
'doctrine_annotation_spaces' => false,
'echo_tag_syntax' => [
'format' => 'short',
'long_function' => 'echo',
'shorten_simple_statements_only' => false,
],
'elseif' => false,
'empty_loop_body' => ['style' => 'braces'],
'empty_loop_condition' => ['style' => 'while'],
'encoding' => true,
'ereg_to_preg' => true,
'error_suppression' => [
'mute_deprecation_error' => true,
'noise_remaining_usages' => false,
'noise_remaining_usages_exclude' => [],
],
'escape_implicit_backslashes' => [
'double_quoted' => true,
'heredoc_syntax' => true,
'single_quoted' => false,
],
'explicit_indirect_variable' => true,
'explicit_string_variable' => true,
'final_class' => false,
'final_internal_class' => [
'annotation_exclude' => ['@no-final'],
'annotation_include' => ['@internal'],
'consider_absent_docblock_as_internal_class' => false,
],
'final_public_method_for_abstract_class' => false,
'fopen_flag_order' => true,
'fopen_flags' => ['b_mode' => true],
'full_opening_tag' => true,
'fully_qualified_strict_types' => true,
'function_declaration' => ['closure_function_spacing' => 'one'],
'function_to_constant' => [
'functions' => [
'get_called_class',
'get_class',
'get_class_this',
'php_sapi_name',
'phpversion',
'pi',
],
],
'function_typehint_space' => true,
'general_phpdoc_annotation_remove' => [
'annotations' => [
'author',
'package',
'subpackage',
],
],
'general_phpdoc_tag_rename' => [
'case_sensitive' => false,
'fix_annotation' => true,
'fix_inline' => true,
'replacements' => ['inheritDocs' => 'inheritDoc'],
],
'get_class_to_class_keyword' => false,
'global_namespace_import' => [
'import_constants' => false,
'import_functions' => false,
'import_classes' => true,
],
'group_import' => true,
'header_comment' => false, // false by default
'heredoc_indentation' => ['indentation' => 'start_plus_one'],
'heredoc_to_nowdoc' => true,
'implode_call' => true,
'include' => true,
'increment_style' => ['style' => 'post'],
'indentation_type' => true,
'integer_literal_case' => true,
'is_null' => true,
'lambda_not_used_import' => true,
'line_ending' => true,
'linebreak_after_opening_tag' => false,
'list_syntax' => ['syntax' => 'short'],
'logical_operators' => true,
'lowercase_cast' => true,
'lowercase_keywords' => true,
'lowercase_static_reference' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'mb_str_functions' => false,
'method_argument_space' => [
'after_heredoc' => false,
'keep_multiple_spaces_after_comma' => false,
'on_multiline' => 'ensure_fully_multiline',
],
'method_chaining_indentation' => true,
'modernize_strpos' => false, // requires 8.0+
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'multiline_whitespace_before_semicolons' => ['strategy' => 'no_multi_line'],
'native_constant_invocation' => false,
'native_function_casing' => true,
'native_function_invocation' => false,
'native_function_type_declaration_casing' => true,
'new_with_braces' => true,
'no_alias_functions' => ['sets' => ['@all']],
'no_alias_language_construct_call' => true,
'no_alternative_syntax' => ['fix_non_monolithic_code' => false],
'no_binary_string' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_blank_lines_before_namespace' => false, // conflicts with `single_blank_line_before_namespace`
'no_break_comment' => ['comment_text' => 'no break'],
'no_closing_tag' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => ['tokens' => ['extra']],
'no_homoglyph_names' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => ['use' => 'echo'],
'no_multiline_whitespace_around_double_arrow' => true,
'no_null_property_initialization' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_space_around_double_colon' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => ['positions' => ['inside', 'outside']],
'no_spaces_inside_parenthesis' => true,
'no_superfluous_elseif' => true,
'no_superfluous_phpdoc_tags' => [
'allow_mixed' => true,
'allow_unused_params' => true,
'remove_inheritdoc' => false,
],
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_trailing_whitespace_in_string' => true,
'no_unneeded_control_parentheses' => [
'statements' => [
'break',
'clone',
'continue',
'echo_print',
'return',
'switch_case',
'yield',
],
],
'no_unneeded_curly_braces' => ['namespaces' => true],
'no_unneeded_final_method' => ['private_methods' => true],
'no_unneeded_import_alias' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_cast' => true,
'no_unset_on_property' => false,
'no_unused_imports' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'no_useless_sprintf' => true,
'no_whitespace_before_comma_in_array' => ['after_heredoc' => true],
'no_whitespace_in_blank_line' => true,
'non_printable_character' => ['use_escape_sequences_in_strings' => true],
'normalize_index_brace' => true,
'not_operator_with_space' => false,
'not_operator_with_successor_space' => true,
'nullable_type_declaration_for_default_null_value' => ['use_nullable_type_declaration' => true],
'object_operator_without_whitespace' => true,
'octal_notation' => false, // requires 8.1+
'operator_linebreak' => ['only_booleans' => true, 'position' => 'beginning'],
'ordered_class_elements' => [
'order' => [
'use_trait',
'constant',
'property',
'method',
],
'sort_algorithm' => 'none',
],
'ordered_imports' => [
'sort_algorithm' => 'alpha',
'imports_order' => ['class', 'function', 'const'],
],
'ordered_interfaces' => false,
'ordered_traits' => false,
'php_unit_construct' => [
'assertions' => [
'assertSame',
'assertEquals',
'assertNotEquals',
'assertNotSame',
],
],
'php_unit_dedicate_assert' => ['target' => 'newest'],
'php_unit_dedicate_assert_internal_type' => ['target' => 'newest'],
'php_unit_expectation' => ['target' => 'newest'],
'php_unit_fqcn_annotation' => true,
'php_unit_internal_class' => ['types' => ['normal', 'final']],
'php_unit_method_casing' => ['case' => 'camel_case'],
'php_unit_mock' => ['target' => 'newest'],
'php_unit_mock_short_will_return' => true,
'php_unit_namespaced' => ['target' => 'newest'],
'php_unit_no_expectation_annotation' => [
'target' => 'newest',
'use_class_const' => true,
],
'php_unit_set_up_tear_down_visibility' => true,
'php_unit_size_class' => false,
'php_unit_strict' => [
'assertions' => [
'assertAttributeEquals',
'assertAttributeNotEquals',
'assertEquals',
'assertNotEquals',
],
],
'php_unit_test_annotation' => ['style' => 'prefix'],
'php_unit_test_case_static_method_calls' => [
'call_type' => 'this',
'methods' => [],
],
'php_unit_test_class_requires_covers' => false,
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],
'phpdoc_align' => [
'align' => 'vertical',
'tags' => [
'method',
'param',
'property',
'return',
'throws',
'type',
'var',
],
],
'phpdoc_annotation_without_dot' => false,
'phpdoc_indent' => true,
'phpdoc_inline_tag_normalizer' => [
'tags' => [
'example',
'id',
'internal',
'inheritdoc',
'inheritdocs',
'link',
'source',
'toc',
'tutorial',
],
],
'phpdoc_line_span' => [
'const' => 'multi',
'method' => 'multi',
'property' => 'multi',
],
'phpdoc_no_access' => true,
'phpdoc_no_alias_tag' => [
'replacements' => [
'property-read' => 'property',
'property-write' => 'property',
'type' => 'var',
'link' => 'see',
],
],
'phpdoc_no_empty_return' => false,
'phpdoc_no_package' => true,
'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_order' => true,
'phpdoc_order_by_value' => [
'annotations' => [
'author',
'covers',
'coversNothing',
'dataProvider',
'depends',
'group',
'internal',
'method',
'property',
'property-read',
'property-write',
'requires',
'throws',
'uses',
],
],
'phpdoc_return_self_reference' => [
'replacements' => [
'this' => '$this',
'@this' => '$this',
'$self' => 'self',
'@self' => 'self',
'$static' => 'static',
'@static' => 'static',
],
],
'phpdoc_scalar' => [
'types' => [
'boolean',
'callback',
'double',
'integer',
'real',
'str',
],
],
'phpdoc_separation' => true,
'phpdoc_single_line_var_spacing' => true,
'phpdoc_summary' => false,
'phpdoc_tag_casing' => ['tags' => ['inheritDoc']],
'phpdoc_tag_type' => ['tags' => ['inheritDoc' => 'inline']],
'phpdoc_to_comment' => false,
'phpdoc_to_param_type' => false,
'phpdoc_to_property_type' => false,
'phpdoc_to_return_type' => false,
'phpdoc_trim' => true,
'phpdoc_trim_consecutive_blank_line_separation' => true,
'phpdoc_types' => ['groups' => ['simple', 'alias', 'meta']],
'phpdoc_types_order' => [
'null_adjustment' => 'always_last',
'sort_algorithm' => 'alpha',
],
'phpdoc_var_annotation_correct_order' => true,
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
'protected_to_private' => true,
'psr_autoloading' => ['dir' => null],
'random_api_migration' => [
'replacements' => [
'getrandmax' => 'mt_getrandmax',
'rand' => 'mt_rand',
'srand' => 'mt_srand',
],
],
'regular_callable_call' => true,
'return_assignment' => true,
'return_type_declaration' => ['space_before' => 'none'],
'self_accessor' => false,
'self_static_accessor' => true,
'semicolon_after_instruction' => false,
'set_type_to_cast' => true,
'short_scalar_cast' => true,
'simple_to_complex_string_variable' => true,
'simplified_if_return' => true,
'simplified_null_return' => false,
'single_blank_line_at_eof' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => ['elements' => ['const', 'property']],
'single_import_per_statement' => false,
'single_line_after_imports' => true,
'single_line_comment_style' => ['comment_types' => ['asterisk', 'hash']],
'single_line_throw' => false,
'single_quote' => ['strings_containing_single_quote_chars' => false],
'single_space_after_construct' => [
'constructs' => [
'abstract',
'as',
'attribute',
'break',
'case',
'catch',
'class',
'clone',
'comment',
'const',
'const_import',
'continue',
'do',
'echo',
'else',
'elseif',
'extends',
'final',
'finally',
'for',
'foreach',
'function',
'function_import',
'global',
'goto',
'if',
'implements',
'include',
'include_once',
'instanceof',
'insteadof',
'interface',
'match',
'named_argument',
'new',
'open_tag_with_echo',
'php_doc',
'php_open',
'print',
'private',
'protected',
'public',
'require',
'require_once',
'return',
'static',
'throw',
'trait',
'try',
'use',
'use_lambda',
'use_trait',
'var',
'while',
'yield',
'yield_from',
],
],
'single_trait_insert_per_statement' => true,
'space_after_semicolon' => ['remove_in_empty_for_expressions' => true],
'standardize_increment' => true,
'standardize_not_equals' => true,
'static_lambda' => true,
'strict_comparison' => true,
'strict_param' => true,
'string_length_to_empty' => true,
'string_line_ending' => true,
'switch_case_semicolon_to_colon' => true,
'switch_case_space' => true,
'switch_continue_to_break' => true,
'ternary_operator_spaces' => true,
'ternary_to_elvis_operator' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline' => [
'after_heredoc' => true,
'elements' => ['arrays'],
],
'trim_array_spaces' => true,
'types_spaces' => ['space' => 'none'],
'unary_operator_spaces' => true,
'use_arrow_functions' => true,
'visibility_required' => ['elements' => ['const', 'method', 'property']],
'void_return' => false, // changes method signature
'whitespace_after_comma_in_array' => true,
'yoda_style' => [
'equal' => false,
'identical' => null,
'less_and_greater' => false,
'always_move_variable' => false,
],
]);

View File

@ -19,15 +19,11 @@
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^9.5", "phpunit/phpunit": "^9.5",
"rector/rector": "^0.12.16",
"roave/security-advisories": "dev-master", "roave/security-advisories": "dev-master",
"symfony/debug": "^4.4.9",
"symfony/debug-bundle": "^6.0",
"symfony/dotenv": "^6.0.3", "symfony/dotenv": "^6.0.3",
"symfony/flex": "^2.1.6", "symfony/flex": "^2.1.6",
"symfony/stopwatch": "^6.0.3", "symfony/stopwatch": "^6.0.3",
"symfony/web-profiler-bundle": "^6.0", "symfony/web-profiler-bundle": "^6.0"
"symplify/easy-coding-standard": "^10.0"
}, },
"config": { "config": {
"preferred-install": { "preferred-install": {

728
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,12 @@
<?php <?php declare(strict_types=1);
return [ return [
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => TRUE],
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => TRUE],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => TRUE],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => TRUE],
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => TRUE, 'test' => TRUE],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => TRUE],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => TRUE],
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => TRUE],
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
]; ];

View File

@ -1,4 +0,0 @@
debug:
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
# See the "server:dump" command to start a new server.
dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"

View File

@ -1,4 +1,4 @@
<?php <?php declare(strict_types=1);
if (file_exists(dirname(__DIR__) . '/var/cache/prod/App_KernelProdContainer.preload.php')) { if (file_exists(dirname(__DIR__) . '/var/cache/prod/App_KernelProdContainer.preload.php')) {
require dirname(__DIR__) . '/var/cache/prod/App_KernelProdContainer.preload.php'; require dirname(__DIR__) . '/var/cache/prod/App_KernelProdContainer.preload.php';

19
justfile Normal file
View File

@ -0,0 +1,19 @@
# Lists the available actions
default:
@just --list
# Runs rector, showing what changes will be make
rector-dry-run:
tools/vendor/bin/rector process --config=tools/rector.php --dry-run src
# Runs rector, and updates the files
rector:
tools/vendor/bin/rector process --config=tools/rector.php src
# Check code formatting
check-fmt:
tools/vendor/bin/php-cs-fixer fix --dry-run --verbose
# Fix code formatting
fmt:
tools/vendor/bin/php-cs-fixer fix --verbose

View File

@ -1,4 +1,6 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
use App\Kernel; use App\Kernel;
use Symfony\Component\Dotenv\Dotenv; use Symfony\Component\Dotenv\Dotenv;
@ -15,11 +17,11 @@ if ($_SERVER['APP_DEBUG']) {
Debug::enable(); Debug::enable();
} }
if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) { if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? FALSE) {
Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
} }
if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) { if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? FALSE) {
Request::setTrustedHosts([$trustedHosts]); Request::setTrustedHosts([$trustedHosts]);
} }

View File

@ -1,66 +0,0 @@
<?php
declare(strict_types=1);
use Rector\Core\Configuration\Option;
use Rector\Doctrine\Set\DoctrineSetList;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Symfony\Set\SymfonyLevelSetList;
use Rector\Symfony\Set\SymfonySetList;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::AUTO_IMPORT_NAMES, TRUE);
$parameters->set(Option::IMPORT_SHORT_CLASSES, TRUE);
$parameters->set(Option::SKIP, [
Rector\Php81\Rector\Property\ReadOnlyPropertyRector::class,
]);
$containerConfigurator->import(DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES);
$containerConfigurator->import(SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES);
$containerConfigurator->import(LevelSetList::UP_TO_PHP_81);
$containerConfigurator->import(SymfonyLevelSetList::UP_TO_SYMFONY_60);
// get services (needed for register a single rule)
$services = $containerConfigurator->services();
foreach ([
Rector\CodeQuality\Rector\BooleanNot\SimplifyDeMorganBinaryRector::class,
Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector::class,
Rector\CodeQuality\Rector\For_\ForRepeatedCountToOwnVariableRector::class,
Rector\CodeQuality\Rector\For_\ForToForeachRector::class,
Rector\CodeQuality\Rector\If_\ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class,
Rector\CodeQuality\Rector\If_\SimplifyIfElseToTernaryRector::class,
Rector\CodeQuality\Rector\If_\SimplifyIfReturnBoolRector::class,
Rector\CodeQuality\Rector\Ternary\SimplifyDuplicatedTernaryRector::class,
Rector\CodeQuality\Rector\Ternary\SimplifyTautologyTernaryRector::class,
Rector\CodeQuality\Rector\Ternary\SwitchNegatedTernaryRector::class,
Rector\CodingStyle\Rector\Class_\AddArrayDefaultToArrayPropertyRector::class,
Rector\CodingStyle\Rector\ClassConst\RemoveFinalFromConstRector::class,
Rector\CodingStyle\Rector\ClassMethod\NewlineBeforeNewAssignSetRector::class,
Rector\CodingStyle\Rector\Encapsed\WrapEncapsedVariableInCurlyBracesRector::class,
Rector\CodingStyle\Rector\FuncCall\CallUserFuncArrayToVariadicRector::class,
Rector\CodingStyle\Rector\FuncCall\CallUserFuncToMethodCallRector::class,
Rector\CodingStyle\Rector\FuncCall\CountArrayToEmptyArrayComparisonRector::class,
Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector::class,
Rector\DeadCode\Rector\ClassMethod\RemoveUselessParamTagRector::class,
Rector\DeadCode\Rector\ClassMethod\RemoveUselessReturnTagRector::class,
Rector\DeadCode\Rector\Foreach_\RemoveUnusedForeachKeyRector::class,
Rector\DeadCode\Rector\Property\RemoveUselessVarTagRector::class,
Rector\DeadCode\Rector\Switch_\RemoveDuplicatedCaseInSwitchRector::class,
Rector\EarlyReturn\Rector\Foreach_\ChangeNestedForeachIfsToEarlyContinueRector::class,
Rector\EarlyReturn\Rector\If_\ChangeIfElseValueAssignToEarlyReturnRector::class,
Rector\EarlyReturn\Rector\If_\RemoveAlwaysElseRector::class,
Rector\Restoration\Rector\Property\MakeTypedPropertyNullableIfCheckedRector::class,
Rector\TypeDeclaration\Rector\ClassMethod\AddArrayParamDocTypeRector::class,
Rector\TypeDeclaration\Rector\ClassMethod\AddArrayReturnDocTypeRector::class,
Rector\TypeDeclaration\Rector\ClassMethod\AddMethodCallBasedStrictParamTypeRector::class,
Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByMethodCallTypeRector::class,
Rector\TypeDeclaration\Rector\ClassMethod\ParamTypeByParentCallTypeRector::class,
Rector\TypeDeclaration\Rector\Closure\AddClosureReturnTypeRector::class,
Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector::class,
] as $rule) {
$services->set($rule);
}
};

View File

@ -2,17 +2,15 @@
namespace App\Controller; namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry;
use LogicException;
use App\Entity\Camera; use App\Entity\Camera;
use App\Form\CameraType; use App\Form\CameraType;
use Doctrine\ORM\ORMInvalidArgumentException; use Doctrine\ORM\ORMInvalidArgumentException;
use Doctrine\Persistence\ManagerRegistry;
use LogicException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route;
/** /**
* Camera controller. * Camera controller.
@ -21,8 +19,8 @@ use Symfony\Component\HttpFoundation\Request;
class CameraController extends AbstractController class CameraController extends AbstractController
{ {
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = Camera::class;
protected const ENTITY = Camera::class;
protected const FORM = CameraType::class; protected const FORM = CameraType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)
@ -37,7 +35,7 @@ class CameraController extends AbstractController
{ {
$em = $this->managerRegistry->getManager(); $em = $this->managerRegistry->getManager();
$receivedItems = $em->getRepository(self::ENTITY)->findBy([ $receivedItems = $em->getRepository(self::ENTITY)->findBy([
'received' => true 'received' => TRUE,
], [ ], [
'isWorking' => 'ASC', 'isWorking' => 'ASC',
'brand' => 'ASC', 'brand' => 'ASC',
@ -45,7 +43,7 @@ class CameraController extends AbstractController
'model' => 'ASC', 'model' => 'ASC',
]); ]);
$newItems = $em->getRepository(self::ENTITY)->findBy([ $newItems = $em->getRepository(self::ENTITY)->findBy([
'received' => false 'received' => FALSE,
], [ ], [
'brand' => 'ASC', 'brand' => 'ASC',
'mount' => 'ASC', 'mount' => 'ASC',
@ -53,6 +51,7 @@ class CameraController extends AbstractController
]); ]);
$working = array_filter($receivedItems, [$this, 'isWorking']); $working = array_filter($receivedItems, [$this, 'isWorking']);
$notWorking = array_filter($receivedItems, [$this, 'isNotWorking']); $notWorking = array_filter($receivedItems, [$this, 'isNotWorking']);
return $this->render('camera/index.html.twig', [ return $this->render('camera/index.html.twig', [
'not_received' => $newItems, 'not_received' => $newItems,
'not_working' => $notWorking, 'not_working' => $notWorking,
@ -64,7 +63,7 @@ class CameraController extends AbstractController
* Creates a new camera entity. * Creates a new camera entity.
*/ */
#[Route(path: '/new', name: 'camera_new', methods: ['GET', 'POST'])] #[Route(path: '/new', name: 'camera_new', methods: ['GET', 'POST'])]
public function newAction(Request $request) public function newAction(Request $request): RedirectResponse|Response
{ {
return $this->itemCreate($request, 'camera/new.html.twig', 'camera', 'camera_show'); return $this->itemCreate($request, 'camera/new.html.twig', 'camera', 'camera_show');
} }
@ -73,7 +72,7 @@ class CameraController extends AbstractController
* Finds and displays a camera entity. * Finds and displays a camera entity.
*/ */
#[Route(path: '/{id}', name: 'camera_show', methods: ['GET'])] #[Route(path: '/{id}', name: 'camera_show', methods: ['GET'])]
public function showAction(Camera $camera) public function showAction(Camera $camera): Response
{ {
return $this->itemView($camera, 'camera/show.html.twig', 'camera'); return $this->itemView($camera, 'camera/show.html.twig', 'camera');
} }
@ -84,7 +83,7 @@ class CameraController extends AbstractController
* @throws LogicException * @throws LogicException
*/ */
#[Route(path: '/{id}/edit', name: 'camera_edit', methods: ['GET', 'POST'])] #[Route(path: '/{id}/edit', name: 'camera_edit', methods: ['GET', 'POST'])]
public function editAction(Request $request, Camera $camera) public function editAction(Request $request, Camera $camera): RedirectResponse|Response
{ {
return $this->itemUpdate($request, $camera, 'camera/edit.html.twig', 'camera', 'camera_show'); return $this->itemUpdate($request, $camera, 'camera/edit.html.twig', 'camera', 'camera_show');
} }

View File

@ -7,10 +7,8 @@ use App\Form\CameraTypeType;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
#[Route(path: 'camera-type')] #[Route(path: 'camera-type')]
class CameraTypeController extends AbstractController class CameraTypeController extends AbstractController
@ -18,7 +16,6 @@ class CameraTypeController extends AbstractController
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = CameraType::class; protected const ENTITY = CameraType::class;
protected const FORM = CameraTypeType::class; protected const FORM = CameraTypeType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)

View File

@ -3,9 +3,8 @@
namespace App\Controller; namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\{Request, Response};
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends AbstractController class DefaultController extends AbstractController
{ {

View File

@ -2,16 +2,15 @@
namespace App\Controller; namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry;
use LogicException;
use App\Entity\Film; use App\Entity\Film;
use App\Form\FilmType; use App\Form\FilmType;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Doctrine\Persistence\ManagerRegistry;
use LogicException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route;
/** /**
* Film controller. * Film controller.
@ -20,8 +19,8 @@ use Symfony\Component\HttpFoundation\Request;
class FilmController extends AbstractController class FilmController extends AbstractController
{ {
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = Film::class;
protected const ENTITY = Film::class;
protected const FORM = FilmType::class; protected const FORM = FilmType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)
@ -51,6 +50,7 @@ class FilmController extends AbstractController
'productLine' => 'ASC', 'productLine' => 'ASC',
'filmFormat' => 'ASC', 'filmFormat' => 'ASC',
]); ]);
return $this->render('film/index.html.twig', [ return $this->render('film/index.html.twig', [
'in_camera' => $inCamera, 'in_camera' => $inCamera,
'films' => $notInCamera, 'films' => $notInCamera,
@ -61,7 +61,7 @@ class FilmController extends AbstractController
* Creates a new film entity. * Creates a new film entity.
*/ */
#[Route(path: '/new', name: 'film_new', methods: ['GET', 'POST'])] #[Route(path: '/new', name: 'film_new', methods: ['GET', 'POST'])]
public function newAction(Request $request) public function newAction(Request $request): RedirectResponse|Response
{ {
return $this->itemCreate($request, 'film/new.html.twig', 'film', 'film_show'); return $this->itemCreate($request, 'film/new.html.twig', 'film', 'film_show');
} }
@ -70,7 +70,7 @@ class FilmController extends AbstractController
* Finds and displays a film entity. * Finds and displays a film entity.
*/ */
#[Route(path: '/{id}', name: 'film_show', methods: ['GET'])] #[Route(path: '/{id}', name: 'film_show', methods: ['GET'])]
public function showAction(Film $film) public function showAction(Film $film): Response
{ {
return $this->itemView($film, 'film/show.html.twig', 'film'); return $this->itemView($film, 'film/show.html.twig', 'film');
} }
@ -81,7 +81,7 @@ class FilmController extends AbstractController
* @throws LogicException * @throws LogicException
*/ */
#[Route(path: '/{id}/edit', name: 'film_edit', methods: ['GET', 'POST'])] #[Route(path: '/{id}/edit', name: 'film_edit', methods: ['GET', 'POST'])]
public function editAction(Request $request, Film $film) public function editAction(Request $request, Film $film): RedirectResponse|Response
{ {
return $this->itemUpdate($request, $film, 'film/edit.html.twig', 'film', 'film_show'); return $this->itemUpdate($request, $film, 'film/edit.html.twig', 'film', 'film_show');
} }
@ -92,7 +92,7 @@ class FilmController extends AbstractController
* @throws LogicException * @throws LogicException
*/ */
#[Route(path: '/{id}', name: 'film_delete', methods: ['DELETE'])] #[Route(path: '/{id}', name: 'film_delete', methods: ['DELETE'])]
public function deleteAction(Request $request, Film $film) public function deleteAction(Request $request, Film $film): RedirectResponse
{ {
return $this->itemDelete($request, $film, 'film_index'); return $this->itemDelete($request, $film, 'film_index');
} }

View File

@ -2,15 +2,13 @@
namespace App\Controller; namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Form\FormInterface;
use App\Entity\Flash; use App\Entity\Flash;
use App\Form\FlashType; use App\Form\FlashType;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
/** /**
* Flash controller. * Flash controller.
@ -21,7 +19,6 @@ class FlashController extends AbstractController
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = Flash::class; protected const ENTITY = Flash::class;
protected const FORM = FlashType::class; protected const FORM = FlashType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)

View File

@ -4,13 +4,16 @@ namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\{Request, Response, RedirectResponse}; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
trait FormControllerTrait { trait FormControllerTrait
{
private readonly ManagerRegistry $managerRegistry; private readonly ManagerRegistry $managerRegistry;
/** /**
* Create a form generator * Create a form generator
*
* @param mixed $item
*/ */
protected function buildForm($item, string $actionRoute, string $method = 'POST'): FormInterface protected function buildForm($item, string $actionRoute, string $method = 'POST'): FormInterface
{ {
@ -26,13 +29,12 @@ trait FormControllerTrait {
protected function itemCreate(Request $request, string $template, string $templateKey, string $redirectRoute) protected function itemCreate(Request $request, string $template, string $templateKey, string $redirectRoute)
{ {
$Entity = self::ENTITY; $Entity = self::ENTITY;
$item = new $Entity; $item = new $Entity();
$form = $this->createForm(self::FORM, $item); $form = $this->createForm(self::FORM, $item);
$form->handleRequest($request); $form->handleRequest($request);
// If creating the item // If creating the item
if ($form->isSubmitted() && $form->isValid()) if ($form->isSubmitted() && $form->isValid()) {
{
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$em->persist($item); $em->persist($item);
$em->flush(); $em->flush();
@ -63,6 +65,8 @@ trait FormControllerTrait {
/** /**
* View details for a specific item * View details for a specific item
*
* @param mixed $item
*/ */
protected function itemView($item, string $template, string $templateKey): Response protected function itemView($item, string $template, string $templateKey): Response
{ {
@ -80,6 +84,8 @@ trait FormControllerTrait {
/** /**
* Show edit form / update an item * Show edit form / update an item
*
* @param mixed $item
*/ */
protected function itemUpdate(Request $request, $item, string $template, string $templateKey, string $redirectRoute) protected function itemUpdate(Request $request, $item, string $template, string $templateKey, string $redirectRoute)
{ {
@ -87,8 +93,7 @@ trait FormControllerTrait {
$editForm->handleRequest($request); $editForm->handleRequest($request);
// If updating the item // If updating the item
if ($editForm->isSubmitted() && $editForm->isValid()) if ($editForm->isSubmitted() && $editForm->isValid()) {
{
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$em->persist($item); $em->persist($item);
$em->flush(); $em->flush();
@ -102,20 +107,17 @@ trait FormControllerTrait {
'edit_form' => $editForm->createView(), 'edit_form' => $editForm->createView(),
]; ];
if (method_exists($this, 'createDeleteForm')) if (method_exists($this, 'createDeleteForm')) {
{
$deleteForm = $this->createDeleteForm($item); $deleteForm = $this->createDeleteForm($item);
$templateData['delete_form'] = $deleteForm->createView(); $templateData['delete_form'] = $deleteForm->createView();
} }
if (method_exists($this, 'createDeacquireForm')) if (method_exists($this, 'createDeacquireForm')) {
{
$deacquireForm = $this->createDeacquireForm($item); $deacquireForm = $this->createDeacquireForm($item);
$templateData['deacquire_form'] = $deacquireForm->createView(); $templateData['deacquire_form'] = $deacquireForm->createView();
} }
if (method_exists($this, 'createReacquireForm')) if (method_exists($this, 'createReacquireForm')) {
{
$reacquireForm = $this->createReacquireForm($item); $reacquireForm = $this->createReacquireForm($item);
$templateData['reacquire_form'] = $reacquireForm->createView(); $templateData['reacquire_form'] = $reacquireForm->createView();
} }
@ -125,6 +127,8 @@ trait FormControllerTrait {
/** /**
* Move an item to a previously_owned table * Move an item to a previously_owned table
*
* @param mixed $item
*/ */
protected function itemDeacquire(Request $request, $item, string $redirectRoute): RedirectResponse protected function itemDeacquire(Request $request, $item, string $redirectRoute): RedirectResponse
{ {
@ -139,6 +143,8 @@ trait FormControllerTrait {
/** /**
* Move an item from a previously_owned table back to the original table * Move an item from a previously_owned table back to the original table
*
* @param mixed $item
*/ */
protected function itemReacquire(Request $request, $item, string $redirectRoute): RedirectResponse protected function itemReacquire(Request $request, $item, string $redirectRoute): RedirectResponse
{ {
@ -153,6 +159,8 @@ trait FormControllerTrait {
/** /**
* Actually delete an item * Actually delete an item
*
* @param mixed $item
*/ */
protected function itemDelete(Request $request, $item, string $redirectRoute): RedirectResponse protected function itemDelete(Request $request, $item, string $redirectRoute): RedirectResponse
{ {
@ -160,11 +168,10 @@ trait FormControllerTrait {
$form->handleRequest($request); $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) // if ($form->isSubmitted() && $form->isValid())
{
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$em->remove($item); $em->remove($item);
$em->flush(); $em->flush();
}
return $this->redirectToRoute($redirectRoute); return $this->redirectToRoute($redirectRoute);
} }

View File

@ -2,13 +2,13 @@
namespace App\Controller; namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Lenses; use App\Entity\Lenses;
use App\Form\LensesType; use App\Form\LensesType;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\{Request, RedirectResponse}; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route;
/** /**
* Lens controller. * Lens controller.
@ -17,8 +17,8 @@ use Symfony\Component\HttpFoundation\{Request, RedirectResponse};
class LensesController extends AbstractController class LensesController extends AbstractController
{ {
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = Lenses::class;
protected const ENTITY = Lenses::class;
protected const FORM = LensesType::class; protected const FORM = LensesType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)
@ -29,11 +29,11 @@ class LensesController extends AbstractController
* Lists all lens entities. * Lists all lens entities.
*/ */
#[Route(path: '/', name: 'lens_index', methods: ['GET'])] #[Route(path: '/', name: 'lens_index', methods: ['GET'])]
public function indexAction() public function indexAction(): Response
{ {
$em = $this->managerRegistry->getManager(); $em = $this->managerRegistry->getManager();
$receivedItems = $em->getRepository(self::ENTITY)->findBy([ $receivedItems = $em->getRepository(self::ENTITY)->findBy([
'received' => true 'received' => TRUE,
], [ ], [
'brand' => 'ASC', 'brand' => 'ASC',
'productLine' => 'ASC', 'productLine' => 'ASC',
@ -42,7 +42,7 @@ class LensesController extends AbstractController
'maxFStop' => 'ASC', 'maxFStop' => 'ASC',
]); ]);
$newItems = $em->getRepository(self::ENTITY)->findBy([ $newItems = $em->getRepository(self::ENTITY)->findBy([
'received' => false 'received' => FALSE,
], [ ], [
'brand' => 'ASC', 'brand' => 'ASC',
'productLine' => 'ASC', 'productLine' => 'ASC',
@ -50,6 +50,7 @@ class LensesController extends AbstractController
'minFocalLength' => 'ASC', 'minFocalLength' => 'ASC',
'maxFStop' => 'ASC', 'maxFStop' => 'ASC',
]); ]);
return $this->render('lenses/index.html.twig', [ return $this->render('lenses/index.html.twig', [
'not_received' => $newItems, 'not_received' => $newItems,
'lenses' => $receivedItems, 'lenses' => $receivedItems,
@ -60,7 +61,7 @@ class LensesController extends AbstractController
* Creates a new lens entity. * Creates a new lens entity.
*/ */
#[Route(path: '/new', name: 'lens_new', methods: ['GET', 'POST'])] #[Route(path: '/new', name: 'lens_new', methods: ['GET', 'POST'])]
public function newAction(Request $request) public function newAction(Request $request): RedirectResponse|Response
{ {
return $this->itemCreate($request, 'lenses/new.html.twig', 'lense', 'lens_show'); return $this->itemCreate($request, 'lenses/new.html.twig', 'lense', 'lens_show');
} }
@ -69,7 +70,7 @@ class LensesController extends AbstractController
* Finds and displays a lens entity. * Finds and displays a lens entity.
*/ */
#[Route(path: '/{id}', name: 'lens_show', methods: ['GET'])] #[Route(path: '/{id}', name: 'lens_show', methods: ['GET'])]
public function showAction(Lenses $lens) public function showAction(Lenses $lens): Response
{ {
return $this->itemView($lens, 'lenses/show.html.twig', 'lense'); return $this->itemView($lens, 'lenses/show.html.twig', 'lense');
} }
@ -78,7 +79,7 @@ class LensesController extends AbstractController
* Displays a form to edit an existing lens entity. * Displays a form to edit an existing lens entity.
*/ */
#[Route(path: '/{id}/edit', name: 'lens_edit', methods: ['GET', 'POST'])] #[Route(path: '/{id}/edit', name: 'lens_edit', methods: ['GET', 'POST'])]
public function editAction(Request $request, Lenses $lens) public function editAction(Request $request, Lenses $lens): RedirectResponse|Response
{ {
return $this->itemUpdate($request, $lens, 'lenses/edit.html.twig', 'lense', 'lens_show'); return $this->itemUpdate($request, $lens, 'lenses/edit.html.twig', 'lense', 'lens_show');
} }
@ -87,10 +88,11 @@ class LensesController extends AbstractController
* Moves a camera to the previouslyOwned table * Moves a camera to the previouslyOwned table
* *
* @param Request $request * @param Request $request
*
* @return RedirectResponse * @return RedirectResponse
*/ */
#[Route(path: '/{id}/deacquire', name: 'lens_deacquire', methods: ['POST'])] #[Route(path: '/{id}/deacquire', name: 'lens_deacquire', methods: ['POST'])]
public function deacquireAction(Request $request, Lenses $lens) public function deacquireAction(Request $request, Lenses $lens): RedirectResponse
{ {
return $this->itemDeacquire($request, $lens, 'previously-owned-lens_index'); return $this->itemDeacquire($request, $lens, 'previously-owned-lens_index');
} }
@ -99,7 +101,7 @@ class LensesController extends AbstractController
* Deletes a lens entity. * Deletes a lens entity.
*/ */
#[Route(path: '/{id}', name: 'lens_delete', methods: ['DELETE'])] #[Route(path: '/{id}', name: 'lens_delete', methods: ['DELETE'])]
public function deleteAction(Request $request, Lenses $lens) public function deleteAction(Request $request, Lenses $lens): RedirectResponse
{ {
return $this->itemDelete($request, $lens, 'lens_index'); return $this->itemDelete($request, $lens, 'lens_index');
} }

View File

@ -2,15 +2,16 @@
namespace App\Controller; namespace App\Controller;
use UnexpectedValueException;
use LogicException;
use Doctrine\ORM\ORMInvalidArgumentException;
use App\Entity\PreviouslyOwnedCamera; use App\Entity\PreviouslyOwnedCamera;
use App\Form\PreviouslyOwnedCameraType; use App\Form\PreviouslyOwnedCameraType;
use Doctrine\ORM\ORMInvalidArgumentException;
use Doctrine\Persistence\ManagerRegistry;
use LogicException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\{RedirectResponse, Request}; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route;
use UnexpectedValueException;
/** /**
* Previouslyownedcamera controller. * Previouslyownedcamera controller.
@ -19,17 +20,21 @@ use Symfony\Component\HttpFoundation\{RedirectResponse, Request};
class PreviouslyOwnedCameraController extends AbstractController class PreviouslyOwnedCameraController extends AbstractController
{ {
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = PreviouslyOwnedCamera::class;
protected const ENTITY = PreviouslyOwnedCamera::class;
protected const FORM = PreviouslyOwnedCameraType::class; protected const FORM = PreviouslyOwnedCameraType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry)
{
}
/** /**
* Lists all previouslyOwnedCamera entities. * Lists all previouslyOwnedCamera entities.
* *
* @throws UnexpectedValueException * @throws UnexpectedValueException
*/ */
#[Route(path: '/', name: 'previously-owned-camera_index', methods: ['GET'])] #[Route(path: '/', name: 'previously-owned-camera_index', methods: ['GET'])]
public function indexAction() public function indexAction(): Response
{ {
return $this->itemListView('previouslyownedcamera/index.html.twig', 'previouslyOwnedCameras', [ return $this->itemListView('previouslyownedcamera/index.html.twig', 'previouslyOwnedCameras', [
'brand' => 'ASC', 'brand' => 'ASC',
@ -42,7 +47,7 @@ class PreviouslyOwnedCameraController extends AbstractController
* Finds and displays a previouslyOwnedCamera entity. * Finds and displays a previouslyOwnedCamera entity.
*/ */
#[Route(path: '/{id}', name: 'previously-owned-camera_show', methods: ['GET'])] #[Route(path: '/{id}', name: 'previously-owned-camera_show', methods: ['GET'])]
public function showAction(PreviouslyOwnedCamera $previouslyOwnedCamera) public function showAction(PreviouslyOwnedCamera $previouslyOwnedCamera): Response
{ {
return $this->itemView($previouslyOwnedCamera, 'previouslyownedcamera/show.html.twig', 'previouslyOwnedCamera'); return $this->itemView($previouslyOwnedCamera, 'previouslyownedcamera/show.html.twig', 'previouslyOwnedCamera');
} }
@ -53,7 +58,7 @@ class PreviouslyOwnedCameraController extends AbstractController
* @throws LogicException * @throws LogicException
*/ */
#[Route(path: '/{id}/edit', name: 'previously-owned-camera_edit', methods: ['GET', 'POST'])] #[Route(path: '/{id}/edit', name: 'previously-owned-camera_edit', methods: ['GET', 'POST'])]
public function editAction(Request $request, PreviouslyOwnedCamera $previouslyOwnedCamera) public function editAction(Request $request, PreviouslyOwnedCamera $previouslyOwnedCamera): RedirectResponse|Response
{ {
return $this->itemUpdate($request, $previouslyOwnedCamera, 'previouslyownedcamera/edit.html.twig', 'previouslyOwnedCamera', 'previously-owned-camera_show'); return $this->itemUpdate($request, $previouslyOwnedCamera, 'previouslyownedcamera/edit.html.twig', 'previouslyOwnedCamera', 'previously-owned-camera_show');
} }
@ -62,8 +67,10 @@ class PreviouslyOwnedCameraController extends AbstractController
* Moves a camera to the previouslyOwned table * Moves a camera to the previouslyOwned table
* *
* @param Request $request * @param Request $request
*
* @throws LogicException * @throws LogicException
* @throws ORMInvalidArgumentException * @throws ORMInvalidArgumentException
*
* @return RedirectResponse * @return RedirectResponse
*/ */
#[Route(path: '/{id}/reacquire', name: 'previously-owned-camera_reacquire', methods: ['POST'])] #[Route(path: '/{id}/reacquire', name: 'previously-owned-camera_reacquire', methods: ['POST'])]

View File

@ -6,10 +6,8 @@ use App\Entity\PreviouslyOwnedFlash;
use App\Form\PreviouslyOwnedFlashType; use App\Form\PreviouslyOwnedFlashType;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
/** /**
* Previouslyownedflash controller. * Previouslyownedflash controller.
@ -20,7 +18,6 @@ class PreviouslyOwnedFlashController extends AbstractController
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = PreviouslyOwnedFlash::class; protected const ENTITY = PreviouslyOwnedFlash::class;
protected const FORM = PreviouslyOwnedFlashType::class; protected const FORM = PreviouslyOwnedFlashType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry) public function __construct(private readonly ManagerRegistry $managerRegistry)
@ -40,7 +37,7 @@ class PreviouslyOwnedFlashController extends AbstractController
* Creates a new previouslyOwnedFlash entity. * Creates a new previouslyOwnedFlash entity.
*/ */
#[Route(path: '/new', name: 'previously-owned-flash_new', methods: ['GET', 'POST'])] #[Route(path: '/new', name: 'previously-owned-flash_new', methods: ['GET', 'POST'])]
public function newAction(Request $request) public function newAction(Request $request): RedirectResponse|Response
{ {
return $this->itemCreate($request, 'previouslyownedflash/new.html.twig', 'previouslyOwnedFlash', 'previously-owned-flash_show'); return $this->itemCreate($request, 'previouslyownedflash/new.html.twig', 'previouslyOwnedFlash', 'previously-owned-flash_show');
} }

View File

@ -4,23 +4,28 @@ namespace App\Controller;
use App\Entity\PreviouslyOwnedLenses; use App\Entity\PreviouslyOwnedLenses;
use App\Form\PreviouslyOwnedLensesType; use App\Form\PreviouslyOwnedLensesType;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\{RedirectResponse, Request, Response};
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
#[Route(path: 'previously-owned-lens')] #[Route(path: 'previously-owned-lens')]
class PreviouslyOwnedLensesController extends AbstractController class PreviouslyOwnedLensesController extends AbstractController
{ {
use FormControllerTrait; use FormControllerTrait;
protected const ENTITY = PreviouslyOwnedLenses::class;
protected const ENTITY = PreviouslyOwnedLenses::class;
protected const FORM = PreviouslyOwnedLensesType::class; protected const FORM = PreviouslyOwnedLensesType::class;
public function __construct(private readonly ManagerRegistry $managerRegistry)
{
}
/** /**
* Lists all previouslyOwnedLense entities. * Lists all previouslyOwnedLense entities.
*/ */
#[Route(path: '/', name: 'previously-owned-lens_index', methods: ['GET'])] #[Route(path: '/', name: 'previously-owned-lens_index', methods: ['GET'])]
public function indexAction() public function indexAction(): Response
{ {
return $this->itemListView('previouslyownedlenses/index.html.twig', 'previouslyOwnedLenses', [ return $this->itemListView('previouslyownedlenses/index.html.twig', 'previouslyOwnedLenses', [
'brand' => 'ASC', 'brand' => 'ASC',
@ -35,7 +40,7 @@ class PreviouslyOwnedLensesController extends AbstractController
* Finds and displays a previouslyOwnedLense entity. * Finds and displays a previouslyOwnedLense entity.
*/ */
#[Route(path: '/{id}', name: 'previously-owned-lens_show', methods: ['GET'])] #[Route(path: '/{id}', name: 'previously-owned-lens_show', methods: ['GET'])]
public function showAction(PreviouslyOwnedLenses $previouslyOwnedLens) public function showAction(PreviouslyOwnedLenses $previouslyOwnedLens): Response
{ {
return $this->itemView($previouslyOwnedLens, 'previouslyownedlenses/show.html.twig', 'previouslyOwnedLense'); return $this->itemView($previouslyOwnedLens, 'previouslyownedlenses/show.html.twig', 'previouslyOwnedLense');
} }
@ -44,7 +49,7 @@ class PreviouslyOwnedLensesController extends AbstractController
* Displays a form to edit an existing previouslyOwnedLense entity. * Displays a form to edit an existing previouslyOwnedLense entity.
*/ */
#[Route(path: '/{id}/edit', name: 'previously-owned-lens_edit', methods: ['GET', 'POST'])] #[Route(path: '/{id}/edit', name: 'previously-owned-lens_edit', methods: ['GET', 'POST'])]
public function editAction(Request $request, PreviouslyOwnedLenses $previouslyOwnedLens) public function editAction(Request $request, PreviouslyOwnedLenses $previouslyOwnedLens): RedirectResponse|Response
{ {
return $this->itemUpdate($request, $previouslyOwnedLens, 'previouslyownedlenses/edit.html.twig', 'previouslyOwnedLense', 'previously-owned-lens_show'); return $this->itemUpdate($request, $previouslyOwnedLens, 'previouslyownedlenses/edit.html.twig', 'previouslyOwnedLense', 'previously-owned-lens_show');
} }

View File

@ -11,7 +11,7 @@ use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity] #[ORM\Entity]
class BatteryType class BatteryType
{ {
#[ORM\Column(name: 'id', type: 'integer', nullable: false)] #[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
private int $id; private int $id;

View File

@ -14,7 +14,8 @@ use Doctrine\ORM\Mapping as ORM;
class Camera class Camera
{ {
use CameraTrait; use CameraTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'camera__id_seq', allocationSize: 1, initialValue: 1)] #[ORM\SequenceGenerator(sequenceName: 'camera__id_seq', allocationSize: 1, initialValue: 1)]

View File

@ -8,51 +8,49 @@ use Doctrine\ORM\Mapping as ORM;
* Trait CameraTrait * Trait CameraTrait
* *
* Shared columns for camera, and previously_owned_camera tables * Shared columns for camera, and previously_owned_camera tables
*
* @package App\Entity
*/ */
trait CameraTrait trait CameraTrait
{ {
use PurchasePriceTrait; use PurchasePriceTrait;
#[ORM\ManyToOne(targetEntity: 'CameraType')] #[ORM\ManyToOne(targetEntity: 'CameraType')]
#[ORM\JoinColumn(name: 'type_id', referencedColumnName: 'id', nullable: false)] #[ORM\JoinColumn(name: 'type_id', referencedColumnName: 'id', nullable: FALSE)]
private readonly CameraType $type; private readonly CameraType $type;
#[ORM\Column(name: 'brand', type: 'string', length: 64, nullable: false)] #[ORM\Column(name: 'brand', type: 'string', length: 64, nullable: FALSE)]
private readonly string $brand; private readonly string $brand;
#[ORM\Column(name: 'mount', type: 'string', length: 32, nullable: false)] #[ORM\Column(name: 'mount', type: 'string', length: 32, nullable: FALSE)]
private readonly string $mount; private readonly string $mount;
#[ORM\Column(name: 'model', type: 'string', length: 255, nullable: false)] #[ORM\Column(name: 'model', type: 'string', length: 255, nullable: FALSE)]
private readonly string $model; private readonly string $model;
#[ORM\Column(name: 'is_digital', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_digital', type: 'boolean', nullable: FALSE)]
private readonly bool $isDigital; private readonly bool $isDigital;
#[ORM\Column(name: 'crop_factor', type: 'decimal', precision: 10, scale: 0, nullable: false)] #[ORM\Column(name: 'crop_factor', type: 'decimal', precision: 10, scale: 0, nullable: FALSE)]
private string $cropFactor = '1.0'; private string $cropFactor = '1.0';
#[ORM\Column(name: 'is_working', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_working', type: 'boolean', nullable: FALSE)]
private readonly bool $isWorking; private readonly bool $isWorking;
#[ORM\Column(name: 'notes', type: 'text', nullable: true)] #[ORM\Column(name: 'notes', type: 'text', nullable: TRUE)]
private readonly ?string $notes; private readonly ?string $notes;
#[ORM\Column(name: 'serial', type: 'string', length: 20, nullable: false)] #[ORM\Column(name: 'serial', type: 'string', length: 20, nullable: FALSE)]
private readonly string $serial; private readonly string $serial;
#[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: false)] #[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: FALSE)]
private bool $formerlyOwned = FALSE; private bool $formerlyOwned = FALSE;
#[ORM\Column(name: 'battery_type', type: 'string', nullable: true)] #[ORM\Column(name: 'battery_type', type: 'string', nullable: TRUE)]
private readonly ?string $batteryType; private readonly ?string $batteryType;
#[ORM\Column(name: 'film_format', type: 'string', nullable: true)] #[ORM\Column(name: 'film_format', type: 'string', nullable: TRUE)]
private ?string $filmFormat = '135'; private ?string $filmFormat = '135';
#[ORM\Column(name: 'received', type: 'boolean', nullable: true)] #[ORM\Column(name: 'received', type: 'boolean', nullable: TRUE)]
private ?bool $received = FALSE; private ?bool $received = FALSE;
public function getId(): int public function getId(): int
@ -60,7 +58,7 @@ trait CameraTrait
return $this->id; return $this->id;
} }
public function setType(CameraType $type = null): self public function setType(?CameraType $type = NULL): self
{ {
$this->type = $type; $this->type = $type;

View File

@ -2,8 +2,8 @@
namespace App\Entity; namespace App\Entity;
use Stringable;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Stringable;
/** /**
* CameraType * CameraType
@ -12,17 +12,17 @@ use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity] #[ORM\Entity]
class CameraType implements Stringable class CameraType implements Stringable
{ {
#[ORM\Column(name: 'id', type: 'integer', nullable: false)] #[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'camera.camera_type_id_seq', allocationSize: 1, initialValue: 1)] #[ORM\SequenceGenerator(sequenceName: 'camera.camera_type_id_seq', allocationSize: 1, initialValue: 1)]
private int $id; private int $id;
#[ORM\Column(name: 'type', type: 'string', length: 255, nullable: false)] #[ORM\Column(name: 'type', type: 'string', length: 255, nullable: FALSE)]
private string $type; private string $type;
#[ORM\Column(name: 'description', type: 'text', nullable: true)] #[ORM\Column(name: 'description', type: 'text', nullable: TRUE)]
private ?string $description = null; private ?string $description = NULL;
/** /**
* Value for serialization * Value for serialization
@ -42,8 +42,6 @@ class CameraType implements Stringable
/** /**
* Set type * Set type
*
*
*/ */
public function setType(string $type): self public function setType(string $type): self
{ {
@ -54,8 +52,6 @@ class CameraType implements Stringable
/** /**
* Set description * Set description
*
*
*/ */
public function setDescription(string $description): self public function setDescription(string $description): self
{ {

View File

@ -12,48 +12,48 @@ use Doctrine\ORM\Mapping as ORM;
class Film class Film
{ {
#[ORM\Id] #[ORM\Id]
#[ORM\Column(name: 'id', type: 'integer', nullable: false)] #[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
private int $id; private int $id;
#[ORM\Column(name: 'brand', type: 'string', nullable: false)] #[ORM\Column(name: 'brand', type: 'string', nullable: FALSE)]
private string $brand; private string $brand;
#[ORM\Column(name: 'product_line', type: 'string', nullable: true)] #[ORM\Column(name: 'product_line', type: 'string', nullable: TRUE)]
private ?string $productLine = null; private ?string $productLine = NULL;
#[ORM\Column(name: 'film_name', type: 'string', nullable: false)] #[ORM\Column(name: 'film_name', type: 'string', nullable: FALSE)]
private string $filmName; private string $filmName;
#[ORM\Column(name: 'film_alias', type: 'string', nullable: true)] #[ORM\Column(name: 'film_alias', type: 'string', nullable: TRUE)]
private ?string $filmAlias = null; private ?string $filmAlias = NULL;
#[ORM\Column(name: 'film_speed_asa', type: 'integer', nullable: false)] #[ORM\Column(name: 'film_speed_asa', type: 'integer', nullable: FALSE)]
private int $filmSpeedAsa; private int $filmSpeedAsa;
#[ORM\Column(name: 'film_speed_din', type: 'integer', nullable: false)] #[ORM\Column(name: 'film_speed_din', type: 'integer', nullable: FALSE)]
private int $filmSpeedDin; private int $filmSpeedDin;
#[ORM\Column(name: 'film_format', type: 'string', nullable: false)] #[ORM\Column(name: 'film_format', type: 'string', nullable: FALSE)]
private string $filmFormat; private string $filmFormat;
#[ORM\Column(name: 'film_base', type: 'string', nullable: false, options: ['default' => 'Cellulose Triacetate'])] #[ORM\Column(name: 'film_base', type: 'string', nullable: FALSE, options: ['default' => 'Cellulose Triacetate'])]
private string $filmBase = 'Cellulose Triacetate'; private string $filmBase = 'Cellulose Triacetate';
#[ORM\Column(name: 'unused_rolls', type: 'integer', nullable: false, options: ['default' => 0])] #[ORM\Column(name: 'unused_rolls', type: 'integer', nullable: FALSE, options: ['default' => 0])]
private int $unusedRolls = 0; private int $unusedRolls = 0;
#[ORM\Column(name: 'rolls_in_camera', type: 'integer', nullable: false, options: ['default' => 0])] #[ORM\Column(name: 'rolls_in_camera', type: 'integer', nullable: FALSE, options: ['default' => 0])]
private int $rollsInCamera = 0; private int $rollsInCamera = 0;
#[ORM\Column(name: 'developed_rolls', type: 'integer', nullable: false, options: ['default' => 0])] #[ORM\Column(name: 'developed_rolls', type: 'integer', nullable: FALSE, options: ['default' => 0])]
private int $developedRolls = 0; private int $developedRolls = 0;
#[ORM\Column(name: 'chemistry', type: 'string', nullable: false, options: ['default' => 'C-41'])] #[ORM\Column(name: 'chemistry', type: 'string', nullable: FALSE, options: ['default' => 'C-41'])]
private string $chemistry = 'C-41'; private string $chemistry = 'C-41';
#[ORM\Column(name: 'notes', type: 'text', nullable: true)] #[ORM\Column(name: 'notes', type: 'text', nullable: TRUE)]
private ?string $notes = null; private ?string $notes = NULL;
public function getId(): int public function getId(): int
{ {
@ -71,6 +71,7 @@ class Film
public function setBrand(string $brand): self public function setBrand(string $brand): self
{ {
$this->brand = $brand; $this->brand = $brand;
return $this; return $this;
} }
@ -88,6 +89,7 @@ class Film
public function setProductLine(?string $productLine): self public function setProductLine(?string $productLine): self
{ {
$this->productLine = $productLine; $this->productLine = $productLine;
return $this; return $this;
} }
@ -102,6 +104,7 @@ class Film
public function setFilmName(string $filmName): self public function setFilmName(string $filmName): self
{ {
$this->filmName = $filmName; $this->filmName = $filmName;
return $this; return $this;
} }
@ -116,6 +119,7 @@ class Film
public function setFilmAlias(string $filmAlias): self public function setFilmAlias(string $filmAlias): self
{ {
$this->filmAlias = $filmAlias; $this->filmAlias = $filmAlias;
return $this; return $this;
} }
@ -130,6 +134,7 @@ class Film
public function setFilmSpeedAsa(int $filmSpeedAsa): self public function setFilmSpeedAsa(int $filmSpeedAsa): self
{ {
$this->filmSpeedAsa = $filmSpeedAsa; $this->filmSpeedAsa = $filmSpeedAsa;
return $this; return $this;
} }
@ -144,6 +149,7 @@ class Film
public function setFilmSpeedDin(int $filmSpeedDin): self public function setFilmSpeedDin(int $filmSpeedDin): self
{ {
$this->filmSpeedDin = $filmSpeedDin; $this->filmSpeedDin = $filmSpeedDin;
return $this; return $this;
} }
@ -158,6 +164,7 @@ class Film
public function setFilmFormat(string $filmFormat): self public function setFilmFormat(string $filmFormat): self
{ {
$this->filmFormat = $filmFormat; $this->filmFormat = $filmFormat;
return $this; return $this;
} }
@ -172,6 +179,7 @@ class Film
public function setFilmBase(string $filmBase): self public function setFilmBase(string $filmBase): self
{ {
$this->filmBase = $filmBase; $this->filmBase = $filmBase;
return $this; return $this;
} }
@ -186,6 +194,7 @@ class Film
public function setUnusedRolls(int $unusedRolls): self public function setUnusedRolls(int $unusedRolls): self
{ {
$this->unusedRolls = $unusedRolls; $this->unusedRolls = $unusedRolls;
return $this; return $this;
} }
@ -200,6 +209,7 @@ class Film
public function setRollsInCamera(int $rollsInCamera): self public function setRollsInCamera(int $rollsInCamera): self
{ {
$this->rollsInCamera = $rollsInCamera; $this->rollsInCamera = $rollsInCamera;
return $this; return $this;
} }
@ -214,6 +224,7 @@ class Film
public function setDevelopedRolls(int $developedRolls): self public function setDevelopedRolls(int $developedRolls): self
{ {
$this->developedRolls = $developedRolls; $this->developedRolls = $developedRolls;
return $this; return $this;
} }
@ -228,6 +239,7 @@ class Film
public function setChemistry(string $chemistry): self public function setChemistry(string $chemistry): self
{ {
$this->chemistry = $chemistry; $this->chemistry = $chemistry;
return $this; return $this;
} }
@ -242,6 +254,7 @@ class Film
public function setNotes(string $notes): self public function setNotes(string $notes): self
{ {
$this->notes = $notes; $this->notes = $notes;
return $this; return $this;
} }
} }

View File

@ -38,6 +38,7 @@ class FilmFormat
public function setNumberId(int $numberId): self public function setNumberId(int $numberId): self
{ {
$this->numberId = $numberId; $this->numberId = $numberId;
return $this; return $this;
} }
@ -52,6 +53,7 @@ class FilmFormat
public function setName(string $name): self public function setName(string $name): self
{ {
$this->name = $name; $this->name = $name;
return $this; return $this;
} }
} }

View File

@ -12,15 +12,16 @@ use Doctrine\ORM\Mapping as ORM;
class Flash class Flash
{ {
use FlashTrait; use FlashTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'camera.flash_id_seq', allocationSize: 1, initialValue: 1)] #[ORM\SequenceGenerator(sequenceName: 'camera.flash_id_seq', allocationSize: 1, initialValue: 1)]
private int $id; private int $id;
#[ORM\Column(name: 'received', type: 'boolean', nullable: false, options: ['default' => false])] #[ORM\Column(name: 'received', type: 'boolean', nullable: FALSE, options: ['default' => FALSE])]
private bool $received = false; private bool $received = FALSE;
#[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: false, options: ['default' => false])] #[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: FALSE, options: ['default' => FALSE])]
private bool $formerlyOwned = false; private bool $formerlyOwned = FALSE;
} }

View File

@ -8,37 +8,37 @@ trait FlashTrait
{ {
use PurchasePriceTrait; use PurchasePriceTrait;
#[ORM\Column(name: 'brand', type: 'string', nullable: false)] #[ORM\Column(name: 'brand', type: 'string', nullable: FALSE)]
private readonly string $brand; private readonly string $brand;
#[ORM\Column(name: 'model', type: 'string', nullable: false)] #[ORM\Column(name: 'model', type: 'string', nullable: FALSE)]
private readonly string $model; private readonly string $model;
#[ORM\Column(name: 'is_auto_flash', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_auto_flash', type: 'boolean', nullable: FALSE)]
private bool $isAutoFlash = false; private bool $isAutoFlash = FALSE;
#[ORM\Column(name: 'is_ttl', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_ttl', type: 'boolean', nullable: FALSE)]
private bool $isTtl = false; private bool $isTtl = FALSE;
#[ORM\Column(name: 'ttl_type', type: 'string', nullable: false)] #[ORM\Column(name: 'ttl_type', type: 'string', nullable: FALSE)]
private string $ttlType = 'N / A'; private string $ttlType = 'N / A';
#[ORM\Column(name: 'is_p_ttl', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_p_ttl', type: 'boolean', nullable: FALSE)]
private bool $isPTtl = false; private bool $isPTtl = FALSE;
#[ORM\Column(name: 'p_ttl_type', type: 'string', nullable: false)] #[ORM\Column(name: 'p_ttl_type', type: 'string', nullable: FALSE)]
private string $pTtlType = 'N / A'; private string $pTtlType = 'N / A';
#[ORM\Column(name: 'guide_number', type: 'string', nullable: true)] #[ORM\Column(name: 'guide_number', type: 'string', nullable: TRUE)]
private ?string $guideNumber = ''; private ?string $guideNumber = '';
#[ORM\Column(name: 'batteries', type: 'string', nullable: false)] #[ORM\Column(name: 'batteries', type: 'string', nullable: FALSE)]
private string $batteries = '4x AA'; private string $batteries = '4x AA';
#[ORM\Column(name: 'notes', type: 'text', nullable: true)] #[ORM\Column(name: 'notes', type: 'text', nullable: TRUE)]
private readonly ?string $notes; private readonly ?string $notes;
#[ORM\Column(name: 'serial', type: 'string', nullable: true)] #[ORM\Column(name: 'serial', type: 'string', nullable: TRUE)]
private readonly ?string $serial; private readonly ?string $serial;
public function getId(): int public function getId(): int
@ -48,8 +48,6 @@ trait FlashTrait
/** /**
* Set brand * Set brand
*
*
*/ */
public function setBrand(string $brand): self public function setBrand(string $brand): self
{ {
@ -95,7 +93,7 @@ trait FlashTrait
/** /**
* Set isAutoFlash * Set isAutoFlash
* *
* @param boolean $isAutoFlash * @param bool $isAutoFlash
* *
* @return Flash * @return Flash
*/ */
@ -109,7 +107,7 @@ trait FlashTrait
/** /**
* Get isAutoFlash * Get isAutoFlash
* *
* @return boolean * @return bool
*/ */
public function getIsAutoFlash() public function getIsAutoFlash()
{ {
@ -119,7 +117,7 @@ trait FlashTrait
/** /**
* Set isTtl * Set isTtl
* *
* @param boolean $isTtl * @param bool $isTtl
* *
* @return Flash * @return Flash
*/ */
@ -133,7 +131,7 @@ trait FlashTrait
/** /**
* Get isTtl * Get isTtl
* *
* @return boolean * @return bool
*/ */
public function getIsTtl() public function getIsTtl()
{ {
@ -167,7 +165,7 @@ trait FlashTrait
/** /**
* Set isPTtl * Set isPTtl
* *
* @param boolean $isPTtl * @param bool $isPTtl
* *
* @return Flash * @return Flash
*/ */
@ -181,7 +179,7 @@ trait FlashTrait
/** /**
* Get isPTtl * Get isPTtl
* *
* @return boolean * @return bool
*/ */
public function getIsPTtl() public function getIsPTtl()
{ {
@ -309,7 +307,7 @@ trait FlashTrait
/** /**
* Set formerlyOwned * Set formerlyOwned
* *
* @param boolean $formerlyOwned * @param bool $formerlyOwned
* *
* @return Flash * @return Flash
*/ */
@ -323,7 +321,7 @@ trait FlashTrait
/** /**
* Get formerlyOwned * Get formerlyOwned
* *
* @return boolean * @return bool
*/ */
public function getFormerlyOwned() public function getFormerlyOwned()
{ {
@ -333,7 +331,7 @@ trait FlashTrait
/** /**
* Set received * Set received
* *
* @param boolean $received * @param bool $received
* *
* @return Flash * @return Flash
*/ */
@ -347,7 +345,7 @@ trait FlashTrait
/** /**
* Get received * Get received
* *
* @return boolean * @return bool
*/ */
public function getReceived() public function getReceived()
{ {

View File

@ -8,61 +8,60 @@ trait LensTrait
{ {
use PurchasePriceTrait; use PurchasePriceTrait;
#[ORM\Column(name: 'brand', type: 'string', length: 64, nullable: true)] #[ORM\Column(name: 'brand', type: 'string', length: 64, nullable: TRUE)]
private readonly ?string $brand; private readonly ?string $brand;
#[ORM\Column(name: 'coatings', type: 'string', length: 64, nullable: true)] #[ORM\Column(name: 'coatings', type: 'string', length: 64, nullable: TRUE)]
private readonly ?string $coatings; private readonly ?string $coatings;
#[ORM\Column(name: 'product_line', type: 'string', length: 64, nullable: true)] #[ORM\Column(name: 'product_line', type: 'string', length: 64, nullable: TRUE)]
private readonly ?string $productLine; private readonly ?string $productLine;
#[ORM\Column(name: 'model', type: 'string', length: 64, nullable: true)] #[ORM\Column(name: 'model', type: 'string', length: 64, nullable: TRUE)]
private readonly ?string $model; private readonly ?string $model;
#[ORM\Column(name: 'min_f_stop', type: 'string', length: 10, nullable: true)] #[ORM\Column(name: 'min_f_stop', type: 'string', length: 10, nullable: TRUE)]
private readonly ?string $minFStop; private readonly ?string $minFStop;
#[ORM\Column(name: 'max_f_stop', type: 'float', precision: 10, scale: 0, nullable: true)] #[ORM\Column(name: 'max_f_stop', type: 'float', precision: 10, scale: 0, nullable: TRUE)]
private readonly ?float $maxFStop; private readonly ?float $maxFStop;
#[ORM\Column(name: 'min_focal_length', type: 'integer', nullable: true)] #[ORM\Column(name: 'min_focal_length', type: 'integer', nullable: TRUE)]
private readonly ?int $minFocalLength; private readonly ?int $minFocalLength;
#[ORM\Column(name: 'max_focal_length', type: 'integer', nullable: true)] #[ORM\Column(name: 'max_focal_length', type: 'integer', nullable: TRUE)]
private readonly ?int $maxFocalLength; private readonly ?int $maxFocalLength;
#[ORM\Column(name: 'serial', type: 'string', length: 10, nullable: true)] #[ORM\Column(name: 'serial', type: 'string', length: 10, nullable: TRUE)]
private readonly ?string $serial; private readonly ?string $serial;
#[ORM\Column(name: 'notes', type: 'text', nullable: true)] #[ORM\Column(name: 'notes', type: 'text', nullable: TRUE)]
private readonly ?string $notes; private readonly ?string $notes;
#[ORM\Column(name: 'image_size', type: 'string', nullable: false, options: ['default' => '35mm'])] #[ORM\Column(name: 'image_size', type: 'string', nullable: FALSE, options: ['default' => '35mm'])]
private string $imageSize = '35mm'; private string $imageSize = '35mm';
#[ORM\Column(name: 'mount', type: 'string', length: 40, nullable: true)] #[ORM\Column(name: 'mount', type: 'string', length: 40, nullable: TRUE)]
private readonly ?string $mount; private readonly ?string $mount;
#[ORM\Column(name: 'front_filter_size', type: 'decimal', precision: 10, scale: 0, nullable: true)] #[ORM\Column(name: 'front_filter_size', type: 'decimal', precision: 10, scale: 0, nullable: TRUE)]
private readonly ?string $frontFilterSize; private readonly ?string $frontFilterSize;
#[ORM\Column(name: 'rear_filter_size', type: 'decimal', precision: 10, scale: 0, nullable: true)] #[ORM\Column(name: 'rear_filter_size', type: 'decimal', precision: 10, scale: 0, nullable: TRUE)]
private readonly ?string $rearFilterSize; private readonly ?string $rearFilterSize;
#[ORM\Column(name: 'is_teleconverter', type: 'boolean', nullable: false)] #[ORM\Column(name: 'is_teleconverter', type: 'boolean', nullable: FALSE)]
private bool $isTeleconverter = false; private bool $isTeleconverter = FALSE;
#[ORM\Column(name: 'design_elements', type: 'smallint', nullable: true)] #[ORM\Column(name: 'design_elements', type: 'smallint', nullable: TRUE)]
private readonly ?int $designElements; private readonly ?int $designElements;
#[ORM\Column(name: 'design_groups', type: 'smallint', nullable: true)] #[ORM\Column(name: 'design_groups', type: 'smallint', nullable: TRUE)]
private readonly ?int $designGroups; private readonly ?int $designGroups;
#[ORM\Column(name: 'aperture_blades', type: 'smallint', nullable: true)] #[ORM\Column(name: 'aperture_blades', type: 'smallint', nullable: TRUE)]
private readonly ?int $apertureBlades; private readonly ?int $apertureBlades;
/** /**
* Get id * Get id
*/ */
@ -206,7 +205,7 @@ trait LensTrait
/** /**
* Set minFocalLength * Set minFocalLength
* *
* @param integer $minFocalLength * @param int $minFocalLength
*/ */
public function setMinFocalLength($minFocalLength): self public function setMinFocalLength($minFocalLength): self
{ {
@ -218,7 +217,7 @@ trait LensTrait
/** /**
* Get minFocalLength * Get minFocalLength
* *
* @return integer * @return int
*/ */
public function getMinFocalLength() public function getMinFocalLength()
{ {
@ -228,7 +227,7 @@ trait LensTrait
/** /**
* Set maxFocalLength * Set maxFocalLength
* *
* @param integer $maxFocalLength * @param int $maxFocalLength
*/ */
public function setMaxFocalLength($maxFocalLength): self public function setMaxFocalLength($maxFocalLength): self
{ {
@ -240,7 +239,7 @@ trait LensTrait
/** /**
* Get maxFocalLength * Get maxFocalLength
* *
* @return integer * @return int
*/ */
public function getMaxFocalLength() public function getMaxFocalLength()
{ {
@ -301,6 +300,7 @@ trait LensTrait
public function setImageSize(string $imageSize): self public function setImageSize(string $imageSize): self
{ {
$this->imageSize = $imageSize; $this->imageSize = $imageSize;
return $this; return $this;
} }
@ -329,7 +329,7 @@ trait LensTrait
/** /**
* Set received * Set received
* *
* @param boolean $received * @param bool $received
*/ */
public function setReceived($received): self public function setReceived($received): self
{ {
@ -341,7 +341,7 @@ trait LensTrait
/** /**
* Get received * Get received
* *
* @return boolean * @return bool
*/ */
public function getReceived() public function getReceived()
{ {
@ -351,7 +351,7 @@ trait LensTrait
/** /**
* Set formerlyOwned * Set formerlyOwned
* *
* @param boolean $formerlyOwned * @param bool $formerlyOwned
*/ */
public function setFormerlyOwned($formerlyOwned): self public function setFormerlyOwned($formerlyOwned): self
{ {
@ -363,7 +363,7 @@ trait LensTrait
/** /**
* Get formerlyOwned * Get formerlyOwned
* *
* @return boolean * @return bool
*/ */
public function getFormerlyOwned() public function getFormerlyOwned()
{ {
@ -417,7 +417,7 @@ trait LensTrait
/** /**
* Set isTeleconverter * Set isTeleconverter
* *
* @param boolean $isTeleconverter * @param bool $isTeleconverter
*/ */
public function setIsTeleconverter($isTeleconverter): self public function setIsTeleconverter($isTeleconverter): self
{ {
@ -429,7 +429,7 @@ trait LensTrait
/** /**
* Get isTeleconverter * Get isTeleconverter
* *
* @return boolean * @return bool
*/ */
public function getIsTeleconverter() public function getIsTeleconverter()
{ {
@ -439,7 +439,7 @@ trait LensTrait
/** /**
* Set designElements * Set designElements
* *
* @param integer $designElements * @param int $designElements
*/ */
public function setDesignElements($designElements): self public function setDesignElements($designElements): self
{ {
@ -451,7 +451,7 @@ trait LensTrait
/** /**
* Get designElements * Get designElements
* *
* @return integer * @return int
*/ */
public function getDesignElements() public function getDesignElements()
{ {
@ -461,7 +461,7 @@ trait LensTrait
/** /**
* Set designGroups * Set designGroups
* *
* @param integer $designGroups * @param int $designGroups
*/ */
public function setDesignGroups($designGroups): self public function setDesignGroups($designGroups): self
{ {
@ -473,7 +473,7 @@ trait LensTrait
/** /**
* Get designGroups * Get designGroups
* *
* @return integer * @return int
*/ */
public function getDesignGroups() public function getDesignGroups()
{ {
@ -483,7 +483,7 @@ trait LensTrait
/** /**
* Set apertureBlades * Set apertureBlades
* *
* @param integer $apertureBlades * @param int $apertureBlades
*/ */
public function setApertureBlades($apertureBlades): self public function setApertureBlades($apertureBlades): self
{ {
@ -495,7 +495,7 @@ trait LensTrait
/** /**
* Get apertureBlades * Get apertureBlades
* *
* @return integer * @return int
*/ */
public function getApertureBlades(): ?int public function getApertureBlades(): ?int
{ {

View File

@ -13,15 +13,16 @@ use Doctrine\ORM\Mapping as ORM;
class Lenses class Lenses
{ {
use LensTrait; use LensTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'camera.lenses_id_seq', allocationSize: 1, initialValue: 1)] #[ORM\SequenceGenerator(sequenceName: 'camera.lenses_id_seq', allocationSize: 1, initialValue: 1)]
private int $id; private int $id;
#[ORM\Column(name: 'received', type: 'boolean', nullable: false)] #[ORM\Column(name: 'received', type: 'boolean', nullable: FALSE)]
private bool $received = false; private bool $received = FALSE;
#[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: false)] #[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: FALSE)]
private bool $formerlyOwned = false; private bool $formerlyOwned = FALSE;
} }

View File

@ -14,7 +14,8 @@ use Doctrine\ORM\Mapping as ORM;
class PreviouslyOwnedCamera class PreviouslyOwnedCamera
{ {
use CameraTrait; use CameraTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
#[ORM\SequenceGenerator(sequenceName: 'prevously_owned_camera_id_seq', allocationSize: 1, initialValue: 1)] #[ORM\SequenceGenerator(sequenceName: 'prevously_owned_camera_id_seq', allocationSize: 1, initialValue: 1)]

View File

@ -13,14 +13,14 @@ class PreviouslyOwnedFlash
{ {
use FlashTrait; use FlashTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)] #[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
private int $id; private int $id;
#[ORM\Column(name: 'received', type: 'boolean', nullable: false, options: ['default' => true])] #[ORM\Column(name: 'received', type: 'boolean', nullable: FALSE, options: ['default' => TRUE])]
private bool $received = true; private bool $received = TRUE;
#[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: false, options: ['default' => true])] #[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: FALSE, options: ['default' => TRUE])]
private bool $formerlyOwned = true; private bool $formerlyOwned = TRUE;
} }

View File

@ -13,14 +13,15 @@ use Doctrine\ORM\Mapping as ORM;
class PreviouslyOwnedLenses class PreviouslyOwnedLenses
{ {
use LensTrait; use LensTrait;
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Column(name: 'id', type: 'integer', nullable: FALSE)]
#[ORM\Id] #[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')] #[ORM\GeneratedValue(strategy: 'IDENTITY')]
private int $id; private int $id;
#[ORM\Column(name: 'received', type: 'boolean', nullable: false)] #[ORM\Column(name: 'received', type: 'boolean', nullable: FALSE)]
private bool $received = true; private bool $received = TRUE;
#[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: false)] #[ORM\Column(name: 'formerly_owned', type: 'boolean', nullable: FALSE)]
private bool $formerlyOwned = true; private bool $formerlyOwned = TRUE;
} }

View File

@ -6,8 +6,8 @@ use Doctrine\ORM\Mapping as ORM;
trait PurchasePriceTrait trait PurchasePriceTrait
{ {
#[ORM\Column(name: 'purchase_price', type: 'money', nullable: true)] #[ORM\Column(name: 'purchase_price', type: 'money', nullable: TRUE)]
private ?string $purchasePrice = null; private ?string $purchasePrice = NULL;
public function setPurchasePrice(?string $purchasePrice): self public function setPurchasePrice(?string $purchasePrice): self
{ {

View File

@ -2,19 +2,17 @@
namespace App\Form; namespace App\Form;
use Symfony\Component\Form\{
AbstractType, FormBuilderInterface
};
use Symfony\Component\Form\Extension\Core\Type\{ChoiceType, MoneyType};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\Camera; use App\Entity\Camera;
use Symfony\Component\Form\Extension\Core\Type\{ChoiceType, MoneyType};
use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CameraType extends AbstractType class CameraType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -34,7 +32,7 @@ class CameraType extends AbstractType
'127' => '127', '127' => '127',
'620' => '620', '620' => '620',
], ],
] ],
]) ])
->add('cropFactor') ->add('cropFactor')
->add('serial') ->add('serial')
@ -49,18 +47,19 @@ class CameraType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => Camera::class 'data_class' => Camera::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,18 +2,16 @@
namespace App\Form; namespace App\Form;
use Symfony\Component\Form\{ use App\Entity\CameraType;
AbstractType, FormBuilderInterface use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
};
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\Exception\AccessException; use Symfony\Component\OptionsResolver\Exception\AccessException;
use App\Entity\CameraType; use Symfony\Component\OptionsResolver\OptionsResolver;
class CameraTypeType extends AbstractType class CameraTypeType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -22,18 +20,19 @@ class CameraTypeType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => CameraType::class 'data_class' => CameraType::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -3,15 +3,14 @@
namespace App\Form; namespace App\Form;
use App\Entity\Film; use App\Entity\Film;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
class FilmType extends AbstractType class FilmType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -32,14 +31,14 @@ class FilmType extends AbstractType
'127' => '127', '127' => '127',
'620' => '620', '620' => '620',
], ],
] ],
]) ])
->add('filmBase', ChoiceType::class, [ ->add('filmBase', ChoiceType::class, [
'choices' => [ 'choices' => [
'Cellulose Triacetate' => 'Cellulose Triacetate', 'Cellulose Triacetate' => 'Cellulose Triacetate',
'Polyester' => 'Polyester', 'Polyester' => 'Polyester',
'Polyethylene Naphtalate' => 'Polyethylene Naphtalate', 'Polyethylene Naphtalate' => 'Polyethylene Naphtalate',
] ],
]) ])
->add('unusedRolls') ->add('unusedRolls')
->add('rollsInCamera') ->add('rollsInCamera')
@ -50,23 +49,23 @@ class FilmType extends AbstractType
'C-41' => 'C-41', 'C-41' => 'C-41',
'E-6' => 'E-6', 'E-6' => 'E-6',
'Other' => 'Other', 'Other' => 'Other',
] ],
]) ])
->add('notes'); ->add('notes');
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => Film::class 'data_class' => Film::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,18 +2,16 @@
namespace App\Form; namespace App\Form;
use Symfony\Component\Form\{
AbstractType, FormBuilderInterface
};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\Flash; use App\Entity\Flash;
use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
class FlashType extends AbstractType class FlashType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -34,18 +32,19 @@ class FlashType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => Flash::class 'data_class' => Flash::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,18 +2,17 @@
namespace App\Form; namespace App\Form;
use Symfony\Component\Form\{
AbstractType, Extension\Core\Type\ChoiceType, FormBuilderInterface
};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\Lenses; use App\Entity\Lenses;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
class LensesType extends AbstractType class LensesType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -33,8 +32,8 @@ class LensesType extends AbstractType
'6x6' => '6x6cm', '6x6' => '6x6cm',
'6x4.5' => '6x4.5cm', '6x4.5' => '6x4.5cm',
'4x4' => '4x4cm', '4x4' => '4x4cm',
] ],
] ],
]) ])
->add('minFStop') ->add('minFStop')
->add('maxFStop') ->add('maxFStop')
@ -54,18 +53,19 @@ class LensesType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => Lenses::class 'data_class' => Lenses::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,16 +2,16 @@
namespace App\Form; namespace App\Form;
use App\Entity\PreviouslyOwnedCamera;
use Symfony\Component\Form\{AbstractType, FormBuilderInterface}; use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException; use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\PreviouslyOwnedCamera; use Symfony\Component\OptionsResolver\OptionsResolver;
class PreviouslyOwnedCameraType extends AbstractType class PreviouslyOwnedCameraType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -32,18 +32,19 @@ class PreviouslyOwnedCameraType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => PreviouslyOwnedCamera::class 'data_class' => PreviouslyOwnedCamera::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,16 +2,16 @@
namespace App\Form; namespace App\Form;
use App\Entity\PreviouslyOwnedFlash;
use Symfony\Component\Form\{AbstractType, FormBuilderInterface}; use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException; use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\PreviouslyOwnedFlash; use Symfony\Component\OptionsResolver\OptionsResolver;
class PreviouslyOwnedFlashType extends AbstractType class PreviouslyOwnedFlashType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -33,18 +33,19 @@ class PreviouslyOwnedFlashType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => PreviouslyOwnedFlash::class 'data_class' => PreviouslyOwnedFlash::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -2,16 +2,16 @@
namespace App\Form; namespace App\Form;
use App\Entity\PreviouslyOwnedLenses;
use Symfony\Component\Form\{AbstractType, FormBuilderInterface}; use Symfony\Component\Form\{AbstractType, FormBuilderInterface};
use Symfony\Component\OptionsResolver\Exception\AccessException; use Symfony\Component\OptionsResolver\Exception\AccessException;
use Symfony\Component\OptionsResolver\OptionsResolver;
use App\Entity\PreviouslyOwnedLenses; use Symfony\Component\OptionsResolver\OptionsResolver;
class PreviouslyOwnedLensesType extends AbstractType class PreviouslyOwnedLensesType extends AbstractType
{ {
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
@ -39,18 +39,19 @@ class PreviouslyOwnedLensesType extends AbstractType
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*
* @throws AccessException * @throws AccessException
*/ */
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$resolver->setDefaults(array( $resolver->setDefaults([
'data_class' => PreviouslyOwnedLenses::class 'data_class' => PreviouslyOwnedLenses::class,
)); ]);
} }
/** /**
* {@inheritdoc} * {@inheritDoc}
*/ */
public function getBlockPrefix(): string public function getBlockPrefix(): string
{ {

View File

@ -4,8 +4,9 @@ namespace App\Repository;
use ReflectionObject; use ReflectionObject;
use Throwable; use Throwable;
trait AcquireTrait {
trait AcquireTrait
{
/** /**
* Move a record from the table represented by $currentRecord * Move a record from the table represented by $currentRecord
* into the table represented by $newRecord * into the table represented by $newRecord
@ -24,20 +25,17 @@ trait AcquireTrait {
$propertyName = $property->getName(); $propertyName = $property->getName();
if ($new->hasProperty($propertyName)) { if ($new->hasProperty($propertyName)) {
$newProperty = $new->getProperty($propertyName); $newProperty = $new->getProperty($propertyName);
$newProperty->setAccessible(true); $newProperty->setAccessible(TRUE);
$property->setAccessible(true); $property->setAccessible(TRUE);
$newProperty->setValue($newRecord, $property->getValue($currentRecord)); $newProperty->setValue($newRecord, $property->getValue($currentRecord));
} }
} }
try try {
{
$em->persist($newRecord); $em->persist($newRecord);
$em->remove($currentRecord); $em->remove($currentRecord);
$em->flush(); $em->flush();
} } catch (Throwable) {
catch (Throwable)
{
dump($newRecord); dump($newRecord);
} }
} }

View File

@ -3,33 +3,29 @@
namespace App\Repository; namespace App\Repository;
use App\Entity\{Camera, PreviouslyOwnedCamera}; use App\Entity\{Camera, PreviouslyOwnedCamera};
use Doctrine\ORM\{ use Doctrine\ORM\{EntityRepository, ORMInvalidArgumentException};
EntityRepository, ORMInvalidArgumentException
};
class CameraRepository extends EntityRepository {
class CameraRepository extends EntityRepository
{
use AcquireTrait; use AcquireTrait;
/** /**
* @param Camera $currentRecord
* @throws ORMInvalidArgumentException * @throws ORMInvalidArgumentException
*/ */
public function deacquire(Camera $currentRecord): void public function deacquire(Camera $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(true) $currentRecord->setFormerlyOwned(TRUE)
->setReceived(true); ->setReceived(TRUE);
$this->moveRecord($currentRecord, new PreviouslyOwnedCamera()); $this->moveRecord($currentRecord, new PreviouslyOwnedCamera());
} }
/** /**
* @param PreviouslyOwnedCamera $currentRecord
* @throws ORMInvalidArgumentException * @throws ORMInvalidArgumentException
*/ */
public function reacquire(PreviouslyOwnedCamera $currentRecord): void public function reacquire(PreviouslyOwnedCamera $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(false); $currentRecord->setFormerlyOwned(FALSE);
$this->moveRecord($currentRecord, new Camera()); $this->moveRecord($currentRecord, new Camera());
} }

View File

@ -3,33 +3,29 @@
namespace App\Repository; namespace App\Repository;
use App\Entity\{Flash, PreviouslyOwnedFlash}; use App\Entity\{Flash, PreviouslyOwnedFlash};
use Doctrine\ORM\{ use Doctrine\ORM\{EntityRepository, ORMInvalidArgumentException};
EntityRepository, ORMInvalidArgumentException
};
class FlashRepository extends EntityRepository {
class FlashRepository extends EntityRepository
{
use AcquireTrait; use AcquireTrait;
/** /**
* @param Flash $currentRecord
* @throws ORMInvalidArgumentException * @throws ORMInvalidArgumentException
*/ */
public function deacquire(Flash $currentRecord): void public function deacquire(Flash $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(true) $currentRecord->setFormerlyOwned(TRUE)
->setReceived(true); ->setReceived(TRUE);
$this->moveRecord($currentRecord, new PreviouslyOwnedFlash()); $this->moveRecord($currentRecord, new PreviouslyOwnedFlash());
} }
/** /**
* @param PreviouslyOwnedFlash $currentRecord
* @throws ORMInvalidArgumentException * @throws ORMInvalidArgumentException
*/ */
public function reacquire(PreviouslyOwnedFlash $currentRecord): void public function reacquire(PreviouslyOwnedFlash $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(false); $currentRecord->setFormerlyOwned(FALSE);
$this->moveRecord($currentRecord, new Flash()); $this->moveRecord($currentRecord, new Flash());
} }

View File

@ -9,23 +9,17 @@ class LensesRepository extends EntityRepository
{ {
use AcquireTrait; use AcquireTrait;
/**
* @param Lenses $currentRecord
*/
public function deacquire(Lenses $currentRecord): void public function deacquire(Lenses $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(true) $currentRecord->setFormerlyOwned(TRUE)
->setReceived(true); ->setReceived(TRUE);
$this->moveRecord($currentRecord, new PreviouslyOwnedLenses()); $this->moveRecord($currentRecord, new PreviouslyOwnedLenses());
} }
/**
* @param PreviouslyOwnedLenses $currentRecord
*/
public function reacquire(PreviouslyOwnedLenses $currentRecord): void public function reacquire(PreviouslyOwnedLenses $currentRecord): void
{ {
$currentRecord->setFormerlyOwned(false); $currentRecord->setFormerlyOwned(FALSE);
$this->moveRecord($currentRecord, new Lenses()); $this->moveRecord($currentRecord, new Lenses());
} }

View File

@ -2,13 +2,13 @@
namespace App\Types; namespace App\Types;
use Doctrine\DBAL\Types\Type; use App\ValueObject\Money;
use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Platforms\AbstractPlatform;
use App\ValueObject\Money; use Doctrine\DBAL\Types\Type;
class MoneyType extends Type {
class MoneyType extends Type
{
public function getSQLDeclaration(array $column, AbstractPlatform $platform): string public function getSQLDeclaration(array $column, AbstractPlatform $platform): string
{ {
return 'MONEY'; return 'MONEY';

View File

@ -1,9 +1,11 @@
<?php <?php declare(strict_types=1);
namespace App\ValueObject; namespace App\ValueObject;
use Stringable; use Stringable;
class Money implements Stringable {
class Money implements Stringable
{
private readonly float $value; private readonly float $value;
public function __construct($value) public function __construct($value)

View File

@ -114,9 +114,6 @@
"phpspec/prophecy": { "phpspec/prophecy": {
"version": "v1.15.0" "version": "v1.15.0"
}, },
"phpstan/phpstan": {
"version": "1.4.6"
},
"phpunit/php-code-coverage": { "phpunit/php-code-coverage": {
"version": "9.2.10" "version": "9.2.10"
}, },
@ -158,9 +155,6 @@
"psr/log": { "psr/log": {
"version": "1.1.3" "version": "1.1.3"
}, },
"rector/rector": {
"version": "0.12.16"
},
"roave/security-advisories": { "roave/security-advisories": {
"version": "dev-master" "version": "dev-master"
}, },
@ -245,21 +239,6 @@
"bin/console" "bin/console"
] ]
}, },
"symfony/debug": {
"version": "v4.4.19"
},
"symfony/debug-bundle": {
"version": "4.1",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "master",
"version": "4.1",
"ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea"
},
"files": [
"config/packages/dev/debug.yaml"
]
},
"symfony/dependency-injection": { "symfony/dependency-injection": {
"version": "v5.2.3" "version": "v5.2.3"
}, },
@ -480,9 +459,6 @@
"symfony/yaml": { "symfony/yaml": {
"version": "v5.2.3" "version": "v5.2.3"
}, },
"symplify/easy-coding-standard": {
"version": "10.0.21"
},
"theseer/tokenizer": { "theseer/tokenizer": {
"version": "1.2.1" "version": "1.2.1"
}, },

View File

@ -1,4 +1,4 @@
<?php <?php declare(strict_types=1);
use Symfony\Component\Dotenv\Dotenv; use Symfony\Component\Dotenv\Dotenv;

8
tools/common.inc.php Normal file
View File

@ -0,0 +1,8 @@
<?php declare(strict_types=1);
function walk_array(callable $method, array $items): void
{
foreach ($items as $item) {
$method($item);
}
}

6
tools/composer.json Normal file
View File

@ -0,0 +1,6 @@
{
"require": {
"friendsofphp/php-cs-fixer": "^3.6",
"rector/rector": "^0.12.16"
}
}

2149
tools/composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

85
tools/rector.php Normal file
View File

@ -0,0 +1,85 @@
<?php declare(strict_types=1);
use Rector\CodeQuality\Rector\BooleanNot\SimplifyDeMorganBinaryRector;
use Rector\CodeQuality\Rector\Class_\CompleteDynamicPropertiesRector;
use Rector\CodeQuality\Rector\For_\{ForRepeatedCountToOwnVariableRector, ForToForeachRector};
use Rector\CodeQuality\Rector\If_\{ConsecutiveNullCompareReturnsToNullCoalesceQueueRector, SimplifyIfElseToTernaryRector, SimplifyIfReturnBoolRector};
use Rector\CodeQuality\Rector\Ternary\{SimplifyDuplicatedTernaryRector, SimplifyTautologyTernaryRector, SwitchNegatedTernaryRector};
use Rector\CodingStyle\Rector\Class_\AddArrayDefaultToArrayPropertyRector;
use Rector\CodingStyle\Rector\ClassConst\RemoveFinalFromConstRector;
use Rector\CodingStyle\Rector\ClassMethod\NewlineBeforeNewAssignSetRector;
use Rector\CodingStyle\Rector\Encapsed\WrapEncapsedVariableInCurlyBracesRector;
use Rector\CodingStyle\Rector\FuncCall\{CallUserFuncArrayToVariadicRector, CallUserFuncToMethodCallRector, CountArrayToEmptyArrayComparisonRector};
use Rector\CodingStyle\Rector\Stmt\NewlineAfterStatementRector;
use Rector\Core\Configuration\Option;
use Rector\DeadCode\Rector\ClassMethod\{RemoveUselessParamTagRector, RemoveUselessReturnTagRector};
use Rector\DeadCode\Rector\Foreach_\RemoveUnusedForeachKeyRector;
use Rector\DeadCode\Rector\Property\RemoveUselessVarTagRector;
use Rector\DeadCode\Rector\Switch_\RemoveDuplicatedCaseInSwitchRector;
use Rector\Doctrine\Set\DoctrineSetList;
use Rector\EarlyReturn\Rector\Foreach_\ChangeNestedForeachIfsToEarlyContinueRector;
use Rector\EarlyReturn\Rector\If_\{ChangeIfElseValueAssignToEarlyReturnRector, RemoveAlwaysElseRector};
use Rector\Php81\Rector\Property\ReadOnlyPropertyRector;
use Rector\Restoration\Rector\Property\MakeTypedPropertyNullableIfCheckedRector;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Symfony\Set\{SymfonyLevelSetList, SymfonySetList};
use Rector\TypeDeclaration\Rector\ClassMethod\{AddArrayParamDocTypeRector, AddArrayReturnDocTypeRector, AddMethodCallBasedStrictParamTypeRector, ParamTypeByMethodCallTypeRector, ParamTypeByParentCallTypeRector};
use Rector\TypeDeclaration\Rector\Closure\AddClosureReturnTypeRector;
use Rector\TypeDeclaration\Rector\Property\TypedPropertyFromAssignsRector;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
require_once __DIR__ . '/common.inc.php';
return static function (ContainerConfigurator $config): void {
$parameters = $config->parameters();
$parameters->set(Option::AUTO_IMPORT_NAMES, TRUE);
$parameters->set(Option::IMPORT_SHORT_CLASSES, TRUE);
$parameters->set(Option::SKIP, [
ReadOnlyPropertyRector::class,
]);
walk_array([$config, 'import'], [
DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
LevelSetList::UP_TO_PHP_81,
SymfonyLevelSetList::UP_TO_SYMFONY_60,
SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES,
]);
$services = $config->services();
walk_array([$services, 'set'], [
SimplifyDeMorganBinaryRector::class,
CompleteDynamicPropertiesRector::class,
ForRepeatedCountToOwnVariableRector::class,
ForToForeachRector::class,
ConsecutiveNullCompareReturnsToNullCoalesceQueueRector::class,
SimplifyIfElseToTernaryRector::class,
SimplifyIfReturnBoolRector::class,
SimplifyDuplicatedTernaryRector::class,
SimplifyTautologyTernaryRector::class,
SwitchNegatedTernaryRector::class,
AddArrayDefaultToArrayPropertyRector::class,
RemoveFinalFromConstRector::class,
NewlineBeforeNewAssignSetRector::class,
WrapEncapsedVariableInCurlyBracesRector::class,
CallUserFuncArrayToVariadicRector::class,
CallUserFuncToMethodCallRector::class,
CountArrayToEmptyArrayComparisonRector::class,
NewlineAfterStatementRector::class,
RemoveUselessParamTagRector::class,
RemoveUselessReturnTagRector::class,
RemoveUnusedForeachKeyRector::class,
RemoveUselessVarTagRector::class,
RemoveDuplicatedCaseInSwitchRector::class,
ChangeNestedForeachIfsToEarlyContinueRector::class,
ChangeIfElseValueAssignToEarlyReturnRector::class,
RemoveAlwaysElseRector::class,
MakeTypedPropertyNullableIfCheckedRector::class,
AddArrayParamDocTypeRector::class,
AddArrayReturnDocTypeRector::class,
AddMethodCallBasedStrictParamTypeRector::class,
ParamTypeByMethodCallTypeRector::class,
ParamTypeByParentCallTypeRector::class,
AddClosureReturnTypeRector::class,
TypedPropertyFromAssignsRector::class,
]);
};

View File

@ -1,4 +1,4 @@
<?php <?php declare(strict_types=1);
return [ return [
'' => '', '' => '',

View File

@ -1,4 +1,4 @@
<?php <?php declare(strict_types=1);
return [ return [
'This value should be false.' => 'This value should be false.', 'This value should be false.' => 'This value should be false.',