diff --git a/composer.lock b/composer.lock index 4ba19b9..bf1a931 100644 --- a/composer.lock +++ b/composer.lock @@ -961,16 +961,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.3", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "6af8dffde46a67f2a60906b6a28973e5a3670405" + "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/6af8dffde46a67f2a60906b6a28973e5a3670405", - "reference": "6af8dffde46a67f2a60906b6a28973e5a3670405", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/325b61e41d032f5f7d7e2d11cbefff656eadc9ab", + "reference": "325b61e41d032f5f7d7e2d11cbefff656eadc9ab", "shasum": "" }, "require": { @@ -990,7 +990,7 @@ "require-dev": { "doctrine/coding-standard": "^12", "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", "fig/log-test": "^1", @@ -1044,7 +1044,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.3" + "source": "https://github.com/doctrine/migrations/tree/3.9.0" }, "funding": [ { @@ -1060,7 +1060,7 @@ "type": "tidelift" } ], - "time": "2025-03-10T23:43:55+00:00" + "time": "2025-03-26T06:48:45+00:00" }, { "name": "doctrine/orm", @@ -2072,16 +2072,16 @@ }, { "name": "symfony/asset-mapper", - "version": "v6.4.18", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/asset-mapper.git", - "reference": "9ec7ea222381fa63aefde98d5076b99df2fba927" + "reference": "a499f1ccb647833ae68ddceba9a60da652e505eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/9ec7ea222381fa63aefde98d5076b99df2fba927", - "reference": "9ec7ea222381fa63aefde98d5076b99df2fba927", + "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/a499f1ccb647833ae68ddceba9a60da652e505eb", + "reference": "a499f1ccb647833ae68ddceba9a60da652e505eb", "shasum": "" }, "require": { @@ -2131,7 +2131,7 @@ "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset-mapper/tree/v6.4.18" + "source": "https://github.com/symfony/asset-mapper/tree/v6.4.20" }, "funding": [ { @@ -2147,20 +2147,20 @@ "type": "tidelift" } ], - "time": "2025-01-25T08:10:40+00:00" + "time": "2025-02-26T00:25:36+00:00" }, { "name": "symfony/cache", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "342e87b15ac02e4b4f0924ddc368e75d5262aab3" + "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/342e87b15ac02e4b4f0924ddc368e75d5262aab3", - "reference": "342e87b15ac02e4b4f0924ddc368e75d5262aab3", + "url": "https://api.github.com/repos/symfony/cache/zipball/95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", + "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", "shasum": "" }, "require": { @@ -2227,7 +2227,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.19" + "source": "https://github.com/symfony/cache/tree/v6.4.20" }, "funding": [ { @@ -2243,7 +2243,7 @@ "type": "tidelift" } ], - "time": "2025-02-26T09:12:57+00:00" + "time": "2025-03-08T15:51:34+00:00" }, { "name": "symfony/cache-contracts", @@ -2472,16 +2472,16 @@ }, { "name": "symfony/console", - "version": "v6.4.17", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04" + "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04", + "url": "https://api.github.com/repos/symfony/console/zipball/2e4af9c952617cc3f9559ff706aee420a8464c36", + "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36", "shasum": "" }, "require": { @@ -2546,7 +2546,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.17" + "source": "https://github.com/symfony/console/tree/v6.4.20" }, "funding": [ { @@ -2562,20 +2562,20 @@ "type": "tidelift" } ], - "time": "2024-12-07T12:07:30+00:00" + "time": "2025-03-03T17:16:38+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842" + "reference": "c49796a9184a532843e78e50df9e55708b92543a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b343c3b2f1539fe41331657b37d5c96c1d1ea842", - "reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c49796a9184a532843e78e50df9e55708b92543a", + "reference": "c49796a9184a532843e78e50df9e55708b92543a", "shasum": "" }, "require": { @@ -2583,7 +2583,7 @@ "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10|^7.0" + "symfony/var-exporter": "^6.4.20|^7.2.5" }, "conflict": { "ext-psr": "<1.1|>=2", @@ -2627,7 +2627,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.19" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.20" }, "funding": [ { @@ -2643,7 +2643,7 @@ "type": "tidelift" } ], - "time": "2025-02-20T10:02:49+00:00" + "time": "2025-03-13T09:55:08+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2714,16 +2714,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "22df1e858b8b00647c67fc201dfbea65c0fdab15" + "reference": "7205dbc642bac2ecbf108fadbf9a04aa08290a2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/22df1e858b8b00647c67fc201dfbea65c0fdab15", - "reference": "22df1e858b8b00647c67fc201dfbea65c0fdab15", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7205dbc642bac2ecbf108fadbf9a04aa08290a2a", + "reference": "7205dbc642bac2ecbf108fadbf9a04aa08290a2a", "shasum": "" }, "require": { @@ -2802,7 +2802,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.19" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.20" }, "funding": [ { @@ -2818,7 +2818,7 @@ "type": "tidelift" } ], - "time": "2025-02-18T08:43:25+00:00" + "time": "2025-02-28T20:55:44+00:00" }, { "name": "symfony/doctrine-messenger", @@ -2968,16 +2968,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71" + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/3d4e55cd2b8f1979a65eba9ab749d6466c316f71", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031", + "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031", "shasum": "" }, "require": { @@ -3023,7 +3023,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.19" + "source": "https://github.com/symfony/error-handler/tree/v6.4.20" }, "funding": [ { @@ -3039,7 +3039,7 @@ "type": "tidelift" } ], - "time": "2025-02-02T20:16:33+00:00" + "time": "2025-03-01T13:00:38+00:00" }, { "name": "symfony/event-dispatcher", @@ -3461,16 +3461,16 @@ }, { "name": "symfony/form", - "version": "v6.4.13", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046" + "reference": "3929e2a60a828f39df6765fb49d224cc629fa529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0fe17f90af23908ddc11dc23507db98e66572046", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046", + "url": "https://api.github.com/repos/symfony/form/zipball/3929e2a60a828f39df6765fb49d224cc629fa529", + "reference": "3929e2a60a828f39df6765fb49d224cc629fa529", "shasum": "" }, "require": { @@ -3538,7 +3538,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.13" + "source": "https://github.com/symfony/form/tree/v6.4.20" }, "funding": [ { @@ -3554,20 +3554,20 @@ "type": "tidelift" } ], - "time": "2024-10-09T08:40:40+00:00" + "time": "2025-03-27T10:21:45+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "078a6f11cb34d208d6efc74003d77f66a09fa3c2" + "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/078a6f11cb34d208d6efc74003d77f66a09fa3c2", - "reference": "078a6f11cb34d208d6efc74003d77f66a09fa3c2", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", + "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", "shasum": "" }, "require": { @@ -3687,7 +3687,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.19" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.20" }, "funding": [ { @@ -3703,7 +3703,7 @@ "type": "tidelift" } ], - "time": "2025-02-26T07:27:07+00:00" + "time": "2025-03-23T16:46:24+00:00" }, { "name": "symfony/http-client", @@ -3955,16 +3955,16 @@ }, { "name": "symfony/http-kernel", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c" + "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6be6db31bc74693ce5516e1fd5e5ff1171005e37", + "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37", "shasum": "" }, "require": { @@ -4049,7 +4049,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.19" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.20" }, "funding": [ { @@ -4065,7 +4065,7 @@ "type": "tidelift" } ], - "time": "2025-02-26T10:51:37+00:00" + "time": "2025-03-28T13:27:10+00:00" }, { "name": "symfony/intl", @@ -5339,16 +5339,16 @@ }, { "name": "symfony/process", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3" + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", + "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", "shasum": "" }, "require": { @@ -5380,7 +5380,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.19" + "source": "https://github.com/symfony/process/tree/v6.4.20" }, "funding": [ { @@ -5396,7 +5396,7 @@ "type": "tidelift" } ], - "time": "2025-02-04T13:35:48+00:00" + "time": "2025-03-10T17:11:00+00:00" }, { "name": "symfony/property-access", @@ -6260,16 +6260,16 @@ }, { "name": "symfony/stimulus-bundle", - "version": "v2.23.0", + "version": "v2.24.0", "source": { "type": "git", "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "254f4e05cbaa349d4ae68b9b2e6a22995e0887f9" + "reference": "e09840304467cda3324cc116c7f4ee23c8ff227c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/254f4e05cbaa349d4ae68b9b2e6a22995e0887f9", - "reference": "254f4e05cbaa349d4ae68b9b2e6a22995e0887f9", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/e09840304467cda3324cc116c7f4ee23c8ff227c", + "reference": "e09840304467cda3324cc116c7f4ee23c8ff227c", "shasum": "" }, "require": { @@ -6309,7 +6309,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.23.0" + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.24.0" }, "funding": [ { @@ -6325,7 +6325,7 @@ "type": "tidelift" } ], - "time": "2025-01-16T21:55:09+00:00" + "time": "2025-03-09T21:10:04+00:00" }, { "name": "symfony/stopwatch", @@ -6650,16 +6650,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "d6aecb7196bf610e63ebb64f937c33878d5d03b1" + "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d6aecb7196bf610e63ebb64f937c33878d5d03b1", - "reference": "d6aecb7196bf610e63ebb64f937c33878d5d03b1", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bb423dfaa51b6d88b1d64197ae695a0c8ac73778", + "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778", "shasum": "" }, "require": { @@ -6690,7 +6690,7 @@ "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^6.4|^7.0", + "symfony/form": "^6.4.20|^7.2.5", "symfony/html-sanitizer": "^6.1|^7.0", "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -6739,7 +6739,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.19" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.20" }, "funding": [ { @@ -6755,7 +6755,7 @@ "type": "tidelift" } ], - "time": "2025-02-14T09:54:06+00:00" + "time": "2025-03-28T13:08:36+00:00" }, { "name": "symfony/twig-bundle", @@ -6843,16 +6843,16 @@ }, { "name": "symfony/ux-turbo", - "version": "v2.23.0", + "version": "v2.24.0", "source": { "type": "git", "url": "https://github.com/symfony/ux-turbo.git", - "reference": "db96cf04d70a8c820671ce55530e8bf641ada33f" + "reference": "22954300bd0b01ca46f17c7890ea15138d9cf67f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/db96cf04d70a8c820671ce55530e8bf641ada33f", - "reference": "db96cf04d70a8c820671ce55530e8bf641ada33f", + "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/22954300bd0b01ca46f17c7890ea15138d9cf67f", + "reference": "22954300bd0b01ca46f17c7890ea15138d9cf67f", "shasum": "" }, "require": { @@ -6921,7 +6921,7 @@ "turbo-stream" ], "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.23.0" + "source": "https://github.com/symfony/ux-turbo/tree/v2.24.0" }, "funding": [ { @@ -6937,20 +6937,20 @@ "type": "tidelift" } ], - "time": "2025-02-06T08:47:30+00:00" + "time": "2025-04-04T17:29:20+00:00" }, { "name": "symfony/validator", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "f3e853dffe7c5db675686b8216d6d890dad8c885" + "reference": "9314555aceb8d8ce8abda81e1e47e439258d9309" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/f3e853dffe7c5db675686b8216d6d890dad8c885", - "reference": "f3e853dffe7c5db675686b8216d6d890dad8c885", + "url": "https://api.github.com/repos/symfony/validator/zipball/9314555aceb8d8ce8abda81e1e47e439258d9309", + "reference": "9314555aceb8d8ce8abda81e1e47e439258d9309", "shasum": "" }, "require": { @@ -7018,7 +7018,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.19" + "source": "https://github.com/symfony/validator/tree/v6.4.20" }, "funding": [ { @@ -7034,7 +7034,7 @@ "type": "tidelift" } ], - "time": "2025-02-19T13:12:02+00:00" + "time": "2025-03-14T14:22:58+00:00" }, { "name": "symfony/var-dumper", @@ -7123,16 +7123,16 @@ }, { "name": "symfony/var-exporter", - "version": "v6.4.19", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "be6e71b0c257884c1107313de5d247741cfea172" + "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172", - "reference": "be6e71b0c257884c1107313de5d247741cfea172", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2", + "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2", "shasum": "" }, "require": { @@ -7180,7 +7180,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.19" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.20" }, "funding": [ { @@ -7196,7 +7196,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T09:33:32+00:00" + "time": "2025-03-13T09:55:08+00:00" }, { "name": "symfony/web-link", @@ -7283,16 +7283,16 @@ }, { "name": "symfony/yaml", - "version": "v6.4.18", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5" + "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/28ee818fce4a73ac1474346b94e4b966f665c53f", + "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f", "shasum": "" }, "require": { @@ -7335,7 +7335,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.18" + "source": "https://github.com/symfony/yaml/tree/v6.4.20" }, "funding": [ { @@ -7351,7 +7351,7 @@ "type": "tidelift" } ], - "time": "2025-01-07T09:44:41+00:00" + "time": "2025-02-27T20:15:30+00:00" }, { "name": "twig/extra-bundle", diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index d42c52d..900582d 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -8,6 +8,8 @@ doctrine: profiling_collect_backtrace: '%kernel.debug%' use_savepoints: true + mapping_types: + enum: string orm: auto_generate_proxy_classes: true enable_lazy_ghost_objects: true diff --git a/db.sql b/db.sql new file mode 100644 index 0000000..5910e7c --- /dev/null +++ b/db.sql @@ -0,0 +1,718 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.1 +-- https://www.phpmyadmin.net/ +-- +-- Hôte : 127.0.0.1 +-- Généré le : lun. 07 avr. 2025 à 11:53 +-- Version du serveur : 10.4.32-MariaDB +-- Version de PHP : 8.2.12 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de données : `hrconnect` +-- + +-- -------------------------------------------------------- + +-- +-- Structure de la table `absence` +-- + +CREATE TABLE `absence` ( + `id` int(11) NOT NULL, + `employe_id` int(11) NOT NULL, + `motif` enum('MALADIE','CONGE','AUTRE') NOT NULL, + `justificatif` text DEFAULT NULL, + `remarque` text DEFAULT NULL, + `date_enregistrement` timestamp NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `absence` +-- + +INSERT INTO `absence` (`id`, `employe_id`, `motif`, `justificatif`, `remarque`, `date_enregistrement`) VALUES +(2, 2, 'AUTRE', 'C:\\Users\\Haythem\\Downloads\\Certificat medical.pdf', ' b bhvghvg', '2025-03-05 08:45:52'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `admin` +-- + +CREATE TABLE `admin` ( + `id` int(11) NOT NULL, + `first_name` varchar(255) NOT NULL, + `last_name` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `candidat` +-- + +CREATE TABLE `candidat` ( + `id` int(11) NOT NULL, + `last_name` varchar(100) NOT NULL, + `first_name` varchar(100) NOT NULL, + `email` varchar(150) NOT NULL, + `phone` varchar(20) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `candidat` +-- + +INSERT INTO `candidat` (`id`, `last_name`, `first_name`, `email`, `phone`) VALUES +(4, 'Aymen', 'Falten', 'aymen@gmail.com', '20123123'), +(5, 'Salim', 'Mejri', 'Salim@gmail.com', '20123124'), +(6, 'Salah', 'Mejri', 'salah@gmail.com', '20123125'), +(7, 'amine', 'raissi', 'aminraissi43@gmail.com', '96200228'), +(8, 'test', 'test', 'haithemdridiweb@gmail.com', '29647262'), +(9, 'testuser', 'testuser', 'testuser@gmail.com', '29175235'), +(11, 'azanzhanh', 'zahazha', 'azaza@gmail.com', '29647261'), +(12, 'ANZA', 'JZAKJZAJ', 'AZNAZ@aaz.aza', '29647241'), +(13, 'amine', 'amine', 'aminraissi54@gmail.com', '29647263'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `candidature` +-- + +CREATE TABLE `candidature` ( + `id` int(11) NOT NULL, + `candidat_id` int(11) NOT NULL, + `offre_emploi_id` int(11) NOT NULL, + `cv` varchar(255) NOT NULL, + `reference` varchar(8) DEFAULT NULL, + `status` varchar(50) DEFAULT 'En cours' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `demande_conge` +-- + +CREATE TABLE `demande_conge` ( + `id` int(11) NOT NULL, + `employe_id` int(11) NOT NULL, + `typeConge` enum('MALADIE','ANNUEL','MATERNITE','PATERNITE','FORMATION') NOT NULL, + `dateDebut` date NOT NULL, + `dateFin` date NOT NULL, + `statut` enum('EN_ATTENTE','ACCEPTEE','REFUSEE') DEFAULT 'EN_ATTENTE' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `demande_conge` +-- + +INSERT INTO `demande_conge` (`id`, `employe_id`, `typeConge`, `dateDebut`, `dateFin`, `statut`) VALUES +(2, 18, 'ANNUEL', '2025-03-14', '2025-03-15', 'EN_ATTENTE'), +(3, 18, 'ANNUEL', '2025-03-14', '2025-03-15', 'ACCEPTEE'), +(4, 18, 'MALADIE', '2025-03-14', '2025-03-21', 'EN_ATTENTE'), +(6, 1, 'MALADIE', '2025-03-04', '2025-03-04', 'ACCEPTEE'), +(7, 1, 'MALADIE', '2025-03-05', '2025-03-05', 'ACCEPTEE'), +(9, 2, 'MALADIE', '2025-03-05', '2025-03-13', 'REFUSEE'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `employe` +-- + +CREATE TABLE `employe` ( + `id` int(11) NOT NULL, + `cin` int(8) DEFAULT NULL, + `nom` varchar(255) NOT NULL, + `prenom` varchar(255) NOT NULL, + `email` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `hiring_date` date DEFAULT NULL, + `soldeConges` int(11) DEFAULT 0, + `solde_conges` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `employe` +-- + +INSERT INTO `employe` (`id`, `cin`, `nom`, `prenom`, `email`, `password`, `hiring_date`, `soldeConges`, `solde_conges`) VALUES +(1, 0, 'haythem', 'dridi', 'haithemdridiweb@gmail.com', 'haithemdridiweb@gmail.com', '0000-00-00', 0, NULL), +(2, 23456789, 'Mohamed', 'Ali', 'mohamed.ali@gmail.com', 'hashed_password2', '2024-06-10', 10, NULL), +(3, 34567890, 'Sana', 'Ben Ammar', 'sana.benammar@gmail.com', 'hashed_password3', '2023-09-25', 15, NULL), +(4, 45678901, 'Khaled', 'Trabelsi', 'khaled.trabelsi@gmail.com', 'hashed_password4', '2022-04-15', 20, NULL), +(5, 56789012, 'Nour', 'Mejri', 'nour.mejri@gmail.com', 'hashed_password5', '2021-12-05', 30, NULL), +(18, 0, 'Haythem', 'Haythem', 'haithemdridiweb@gmail.com', 'haithemdridiweb@gmail.com', '2025-02-18', 0, NULL); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `formateurs` +-- + +CREATE TABLE `formateurs` ( + `id` int(11) NOT NULL, + `first_name` varchar(255) NOT NULL, + `last_name` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `formateurs` +-- + +INSERT INTO `formateurs` (`id`, `first_name`, `last_name`, `email`, `password`) VALUES +(2, 'Haythem', 'Dridi', 'haithemdridiweb@gmail.com', 'haithemdridiweb@gmail.com'), +(3, 'Amine', 'Raisi', 'amine@gmail.com', 'amine@gmail.com'), +(4, 'Ala', 'Ben Terdayt', 'ala@gmail.com', 'ala'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `formations` +-- + +CREATE TABLE `formations` ( + `id` int(11) NOT NULL, + `formateur_id` int(11) NOT NULL, + `title` varchar(255) NOT NULL, + `image` varchar(255) NOT NULL, + `description` varchar(255) NOT NULL, + `is_online` tinyint(1) NOT NULL, + `place` varchar(255) DEFAULT NULL, + `lat` double DEFAULT NULL, + `lng` double DEFAULT NULL, + `available_for_employee` tinyint(1) NOT NULL, + `available_for_intern` tinyint(1) NOT NULL, + `start_date` datetime NOT NULL, + `end_date` datetime DEFAULT NULL, + `price` double DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `formations` +-- + +INSERT INTO `formations` (`id`, `formateur_id`, `title`, `image`, `description`, `is_online`, `place`, `lat`, `lng`, `available_for_employee`, `available_for_intern`, `start_date`, `end_date`, `price`) VALUES +(31, 2, 'Formation JavaFx', 'https://i.ibb.co/DfZDzwss/9ad51a8f934a.png', 'Formation JavaFx', 1, '', 0, 0, 1, 1, '2025-02-20 22:54:37', '2025-02-21 22:54:37', 59), +(41, 2, 'Test formation payante', 'https://i.ibb.co/Zzqw2Dk3/59d345242af9.png', 'Test formation payante', 0, 'Esprit bloc I,J,K, Cebalat, Tunisia', 36.9010594, 10.190243, 1, 1, '2025-03-05 07:53:48', '2025-03-06 06:53:48', 9.99), +(47, 2, 'formation php', 'https://i.ibb.co/wFCSSvrh/d150e2216999.png', 'php', 0, 'Esprit School of Business, Cebalat, Tunisia', 36.89923520000001, 10.189445, 1, 1, '2025-03-06 09:02:49', '2025-03-06 09:02:49', 12), +(48, 2, 'tesssst', 'https://i.ibb.co/wFCSSvrh/d150e2216999.png', 'jdj', 0, 'Esprit School of Business, Cebalat, Tunisia', 36.89923520000001, 10.189445, 1, 1, '2025-03-06 09:17:19', NULL, 10), +(49, 2, 'eyyey&yz', 'https://i.ibb.co/DfZDzwss/9ad51a8f934a.png', 'zyzyzy', 0, 'Bardo, Tunisia', 36.80840260000001, 10.1283163, 1, 1, '2025-03-06 09:21:19', NULL, 0), +(51, 2, 'aa', 'aa', 'aaa', 1, '1', 1, 1, 0, 0, '2025-04-07 00:00:00', '2025-04-07 00:00:00', 5); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `formation_participation` +-- + +CREATE TABLE `formation_participation` ( + `formation_id` int(11) NOT NULL, + `employe_id` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `formation_participation` +-- + +INSERT INTO `formation_participation` (`formation_id`, `employe_id`) VALUES +(31, 18), +(51, 3); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `historique_candidatures` +-- + +CREATE TABLE `historique_candidatures` ( + `reference` varchar(8) NOT NULL, + `status` varchar(50) DEFAULT NULL, + `date_modification` timestamp NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `historique_candidatures` +-- + +INSERT INTO `historique_candidatures` (`reference`, `status`, `date_modification`) VALUES +('CAN16236', 'acceptée', '2025-02-26 10:15:39'), +('CAN19892', 'accepted', '2025-03-04 21:08:55'), +('CAN29810', 'En cours', '2025-03-04 23:04:57'), +('CAN47108', 'En cours', '2025-03-04 23:22:28'), +('CAN90879', 'accepted', '2025-03-05 08:31:31'), +('CAN90990', 'accepted', '2025-03-04 23:01:54'); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `hr` +-- + +CREATE TABLE `hr` ( + `id` int(11) NOT NULL, + `first_name` varchar(255) NOT NULL, + `last_name` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `offre_emploi` +-- + +CREATE TABLE `offre_emploi` ( + `id` int(11) NOT NULL, + `title` varchar(200) NOT NULL, + `description` text NOT NULL, + `location` varchar(100) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `offre_emploi` +-- + +INSERT INTO `offre_emploi` (`id`, `title`, `description`, `location`) VALUES +(7, 'azbahzbahbhbh', 'bzhabzhab', 'hbzahbz'), +(8, 'bonjir', '', ''); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `quiz` +-- + +CREATE TABLE `quiz` ( + `id` int(11) NOT NULL, + `formation_id` int(11) NOT NULL, + `question` varchar(255) NOT NULL, + `reponse1` varchar(255) NOT NULL, + `reponse2` varchar(255) DEFAULT NULL, + `reponse3` varchar(255) DEFAULT NULL, + `num_reponse_correct` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `quiz` +-- + +INSERT INTO `quiz` (`id`, `formation_id`, `question`, `reponse1`, `reponse2`, `reponse3`, `num_reponse_correct`) VALUES +(16, 31, 'Quelle classe est utilisée pour créer une fenêtre en JavaFX ?', 'JFrame', 'Stage', 'Window', 2), +(17, 31, 'Quel est le langage utilisé pour styliser une interface JavaFX ?', 'CSS', 'XML', 'JavaScript', 1), +(18, 31, 'Quelle méthode est utilisée pour lancer une application JavaFX ?', 'launch', 'start', 'run', 1), +(19, 31, 'Quel conteneur est utilisé pour organiser les éléments en colonne dans JavaFX ?', 'VBox ', 'HBox', 'GridPane', 1), +(20, 31, 'Quel événement est utilisé pour détecter un clic sur un bouton JavaFX ?', 'setOnAction', 'setOnClick', 'setOnPress', 1); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `quiz_reponses` +-- + +CREATE TABLE `quiz_reponses` ( + `employe_id` int(11) NOT NULL, + `quiz_id` int(11) NOT NULL, + `num_reponse` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `quiz_reponses` +-- + +INSERT INTO `quiz_reponses` (`employe_id`, `quiz_id`, `num_reponse`) VALUES +(18, 16, 2), +(18, 17, 1), +(18, 18, 2), +(18, 19, 2), +(18, 20, 1); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `reclamation` +-- + +CREATE TABLE `reclamation` ( + `id` int(11) NOT NULL, + `employee_name` varchar(100) NOT NULL, + `type` enum('Workplace Harassment','Salary Issue','Working Conditions','Other') NOT NULL, + `description` text NOT NULL, + `date_of_submission` timestamp NOT NULL DEFAULT current_timestamp(), + `status` enum('Pending','In Progress','Resolved','Rejected') DEFAULT 'Pending', + `priority` enum('Low','Medium','High') NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `reset_password_request` +-- + +CREATE TABLE `reset_password_request` ( + `id` int(11) NOT NULL, + `user_id` int(11) NOT NULL, + `selector` varchar(255) NOT NULL, + `hashed_token` varchar(255) NOT NULL, + `requested_at` datetime NOT NULL, + `expires_at` datetime NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `stagaires` +-- + +CREATE TABLE `stagaires` ( + `id` int(11) NOT NULL, + `first_name` varchar(255) NOT NULL, + `last_name` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `debut_stage` date NOT NULL, + `fin_stage` date NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `ticket_reclamation` +-- + +CREATE TABLE `ticket_reclamation` ( + `id` int(11) NOT NULL, + `reclamation_id` int(11) NOT NULL, + `hr_staff_name` varchar(100) NOT NULL, + `response_message` text DEFAULT NULL, + `date_of_response` timestamp NOT NULL DEFAULT current_timestamp(), + `action_taken` text DEFAULT NULL, + `resolution_status` enum('Resolved','Escalated','Closed') DEFAULT 'Escalated' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `user` +-- + +CREATE TABLE `user` ( + `cin` int(11) NOT NULL, + `tel` int(11) NOT NULL, + `nom` varchar(255) NOT NULL, + `prenom` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `roles` longtext NOT NULL COMMENT '(DC2Type:json) ', + `id` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `user` +-- + +INSERT INTO `user` (`cin`, `tel`, `nom`, `prenom`, `email`, `password`, `roles`, `id`) VALUES +(15284603, 34236572, 'aak', 'bba', 'aa@aa1.com', '4c3b6c7517e9f780744f6582f2d36fb6', 'EMPLOYE', 34), +(12345678, 43456543, 'Manager', 'Guest', 'manager@esprit.tn', '4c3b6c7517e9f780744f6582f2d36fb6', 'MANAGER', 35), +(9876543, 21232123, 'admin', 'admin', 'admin@admin.com', '4c3b6c7517e9f780744f6582f2d36fb6', 'ADMIN', 36), +(17656765, 32376709, 'mariem', 'tr', 'mariem@ma.ma', '4c3b6c7517e9f780744f6582f2d36fb6', 'USER', 37), +(15098076, 23434532, 'sa3ida', 'tt', 'vipertn3@gmail.com', '9e5cb471a7451a6ad061ecdc3b12802b', 'RH', 38); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `valider_conge` +-- + +CREATE TABLE `valider_conge` ( + `id` int(11) NOT NULL, + `demande_id` int(11) NOT NULL, + `statut` enum('EN_ATTENTE','ACCEPTEE','REFUSEE') NOT NULL, + `commentaire` text DEFAULT NULL, + `dateValidation` date NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Déchargement des données de la table `valider_conge` +-- + +INSERT INTO `valider_conge` (`id`, `demande_id`, `statut`, `commentaire`, `dateValidation`) VALUES +(1, 3, 'ACCEPTEE', 'accepter', '2025-03-04'), +(2, 2, 'ACCEPTEE', NULL, '2025-03-04'), +(3, 2, 'EN_ATTENTE', '100', '2025-03-04'), +(4, 4, 'EN_ATTENTE', 'test', '2025-03-04'), +(5, 7, 'ACCEPTEE', '1', '2025-03-05'), +(6, 6, 'ACCEPTEE', 'pl', '2025-03-05'), +(7, 7, 'EN_ATTENTE', '1', '2025-03-05'), +(8, 7, 'ACCEPTEE', '1', '2025-03-05'), +(9, 9, 'REFUSEE', 'hjhjg', '2025-03-05'); + +-- +-- Index pour les tables déchargées +-- + +-- +-- Index pour la table `absence` +-- +ALTER TABLE `absence` + ADD PRIMARY KEY (`id`), + ADD KEY `employe_id` (`employe_id`); + +-- +-- Index pour la table `admin` +-- +ALTER TABLE `admin` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `candidat` +-- +ALTER TABLE `candidat` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `email` (`email`), + ADD UNIQUE KEY `phone` (`phone`); + +-- +-- Index pour la table `candidature` +-- +ALTER TABLE `candidature` + ADD PRIMARY KEY (`id`), + ADD KEY `candidat_id` (`candidat_id`), + ADD KEY `offre_emploi_id` (`offre_emploi_id`); + +-- +-- Index pour la table `demande_conge` +-- +ALTER TABLE `demande_conge` + ADD PRIMARY KEY (`id`), + ADD KEY `employe_id` (`employe_id`); + +-- +-- Index pour la table `employe` +-- +ALTER TABLE `employe` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `formateurs` +-- +ALTER TABLE `formateurs` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `formations` +-- +ALTER TABLE `formations` + ADD PRIMARY KEY (`id`), + ADD KEY `fk_formateur` (`formateur_id`); + +-- +-- Index pour la table `formation_participation` +-- +ALTER TABLE `formation_participation` + ADD KEY `fk_formation` (`formation_id`), + ADD KEY `fk_employe` (`employe_id`); + +-- +-- Index pour la table `historique_candidatures` +-- +ALTER TABLE `historique_candidatures` + ADD PRIMARY KEY (`reference`); + +-- +-- Index pour la table `hr` +-- +ALTER TABLE `hr` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `offre_emploi` +-- +ALTER TABLE `offre_emploi` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `quiz` +-- +ALTER TABLE `quiz` + ADD PRIMARY KEY (`id`), + ADD KEY `fk_quiz_formation` (`formation_id`); + +-- +-- Index pour la table `quiz_reponses` +-- +ALTER TABLE `quiz_reponses` + ADD KEY `fk_quiz_reponses_employe` (`employe_id`), + ADD KEY `fk_quiz_reponses_quiz` (`quiz_id`); + +-- +-- Index pour la table `stagaires` +-- +ALTER TABLE `stagaires` + ADD PRIMARY KEY (`id`); + +-- +-- Index pour la table `valider_conge` +-- +ALTER TABLE `valider_conge` + ADD PRIMARY KEY (`id`), + ADD KEY `demande_id` (`demande_id`); + +-- +-- AUTO_INCREMENT pour les tables déchargées +-- + +-- +-- AUTO_INCREMENT pour la table `absence` +-- +ALTER TABLE `absence` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- AUTO_INCREMENT pour la table `admin` +-- +ALTER TABLE `admin` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `candidat` +-- +ALTER TABLE `candidat` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14; + +-- +-- AUTO_INCREMENT pour la table `candidature` +-- +ALTER TABLE `candidature` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11; + +-- +-- AUTO_INCREMENT pour la table `demande_conge` +-- +ALTER TABLE `demande_conge` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; + +-- +-- AUTO_INCREMENT pour la table `employe` +-- +ALTER TABLE `employe` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=20; + +-- +-- AUTO_INCREMENT pour la table `formateurs` +-- +ALTER TABLE `formateurs` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; + +-- +-- AUTO_INCREMENT pour la table `formations` +-- +ALTER TABLE `formations` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=52; + +-- +-- AUTO_INCREMENT pour la table `hr` +-- +ALTER TABLE `hr` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `offre_emploi` +-- +ALTER TABLE `offre_emploi` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + +-- +-- AUTO_INCREMENT pour la table `quiz` +-- +ALTER TABLE `quiz` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23; + +-- +-- AUTO_INCREMENT pour la table `stagaires` +-- +ALTER TABLE `stagaires` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT pour la table `valider_conge` +-- +ALTER TABLE `valider_conge` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; + +-- +-- Contraintes pour les tables déchargées +-- + +-- +-- Contraintes pour la table `absence` +-- +ALTER TABLE `absence` + ADD CONSTRAINT `absence_ibfk_1` FOREIGN KEY (`employe_id`) REFERENCES `employe` (`id`) ON DELETE CASCADE; + +-- +-- Contraintes pour la table `candidature` +-- +ALTER TABLE `candidature` + ADD CONSTRAINT `candidature_ibfk_1` FOREIGN KEY (`candidat_id`) REFERENCES `candidat` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `candidature_ibfk_2` FOREIGN KEY (`offre_emploi_id`) REFERENCES `offre_emploi` (`id`) ON DELETE CASCADE; + +-- +-- Contraintes pour la table `demande_conge` +-- +ALTER TABLE `demande_conge` + ADD CONSTRAINT `demande_conge_ibfk_1` FOREIGN KEY (`employe_id`) REFERENCES `employe` (`id`); + +-- +-- Contraintes pour la table `formations` +-- +ALTER TABLE `formations` + ADD CONSTRAINT `fk_formateur` FOREIGN KEY (`formateur_id`) REFERENCES `formateurs` (`id`) ON DELETE CASCADE; + +-- +-- Contraintes pour la table `formation_participation` +-- +ALTER TABLE `formation_participation` + ADD CONSTRAINT `fk_employe` FOREIGN KEY (`employe_id`) REFERENCES `employe` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `fk_formation` FOREIGN KEY (`formation_id`) REFERENCES `formations` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Contraintes pour la table `quiz` +-- +ALTER TABLE `quiz` + ADD CONSTRAINT `fk_quiz_formation` FOREIGN KEY (`formation_id`) REFERENCES `formations` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Contraintes pour la table `quiz_reponses` +-- +ALTER TABLE `quiz_reponses` + ADD CONSTRAINT `fk_quiz_reponses_employe` FOREIGN KEY (`employe_id`) REFERENCES `employe` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `fk_quiz_reponses_quiz` FOREIGN KEY (`quiz_id`) REFERENCES `quiz` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Contraintes pour la table `valider_conge` +-- +ALTER TABLE `valider_conge` + ADD CONSTRAINT `valider_conge_ibfk_1` FOREIGN KEY (`demande_id`) REFERENCES `demande_conge` (`id`); +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/src/Controller/FormationControllerV2Controller.php b/src/Controller/FormationControllerV2Controller.php new file mode 100644 index 0000000..35a2105 --- /dev/null +++ b/src/Controller/FormationControllerV2Controller.php @@ -0,0 +1,80 @@ +render('formation_controller_v2/index.html.twig', [ + 'formations' => $formationRepository->findAll(), + ]); + } + + #[Route('/new', name: 'app_formation_controller_v2_new', methods: ['GET', 'POST'])] + public function new (Request $request, EntityManagerInterface $entityManager): Response + { + $formation = new Formation(); + $form = $this->createForm(FormationType::class, $formation); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->persist($formation); + $entityManager->flush(); + + return $this->redirectToRoute('app_formation_controller_v2_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('formation_controller_v2/new.html.twig', [ + 'formation' => $formation, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_formation_controller_v2_show', methods: ['GET'])] + public function show(Formation $formation): Response + { + return $this->render('formation_controller_v2/show.html.twig', [ + 'formation' => $formation, + ]); + } + + #[Route('/{id}/edit', name: 'app_formation_controller_v2_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, Formation $formation, EntityManagerInterface $entityManager): Response + { + $form = $this->createForm(FormationType::class, $formation); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + + return $this->redirectToRoute('app_formation_controller_v2_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('formation_controller_v2/edit.html.twig', [ + 'formation' => $formation, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_formation_controller_v2_delete', methods: ['POST'])] + public function delete(Request $request, Formation $formation, EntityManagerInterface $entityManager): Response + { + if ($this->isCsrfTokenValid('delete' . $formation->getId(), $request->getPayload()->getString('_token'))) { + $entityManager->remove($formation); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_formation_controller_v2_index', [], Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Entity/Formation.php b/src/Entity/Formation.php index 4a84702..097ee05 100644 --- a/src/Entity/Formation.php +++ b/src/Entity/Formation.php @@ -1,13 +1,11 @@ start_date; } - public function setStart_date(\DateTimeInterface $start_date): self + public function setStart_date(\DateTimeInterface $start_date) : self { $this->start_date = $start_date; return $this; } #[ORM\Column(type: 'datetime', nullable: true)] + #[Assert\NotNull(message: 'End date is required.')] + #[Assert\Type(\DateTimeInterface::class, message: 'End date must be a valid datetime.')] + #[Assert\Expression( + "this.getEndDate() >= this.getStartDate()", + message: "End date must be after start date." + )] private ?\DateTimeInterface $end_date = null; public function getEnd_date(): ?\DateTimeInterface @@ -192,13 +206,16 @@ public function getEnd_date(): ?\DateTimeInterface return $this->end_date; } - public function setEnd_date(?\DateTimeInterface $end_date): self + public function setEnd_date( ? \DateTimeInterface $end_date) : self { $this->end_date = $end_date; return $this; } - #[ORM\Column(type: 'decimal', nullable: true)] + #[ORM\Column(type : 'decimal', nullable: true)] + #[Assert\NotNull(message: 'Price is required.')] + #[Assert\Type(type: 'float', message: 'Price must be a decimal number.')] + #[Assert\GreaterThanOrEqual(value: 0, message: 'Price must be zero or positive.')] private ?float $price = null; public function getPrice(): ?float @@ -220,7 +237,7 @@ public function setPrice(?float $price): self */ public function getQuizs(): Collection { - if (!$this->quizs instanceof Collection) { + if (! $this->quizs instanceof Collection) { $this->quizs = new ArrayCollection(); } return $this->quizs; @@ -228,7 +245,7 @@ public function getQuizs(): Collection public function addQuiz(Quiz $quiz): self { - if (!$this->getQuizs()->contains($quiz)) { + if (! $this->getQuizs()->contains($quiz)) { $this->getQuizs()->add($quiz); } return $this; @@ -244,17 +261,17 @@ public function removeQuiz(Quiz $quiz): self #[ORM\JoinTable( name: 'formation_participation', joinColumns: [ - new ORM\JoinColumn(name: 'formation_id', referencedColumnName: 'id') + new ORM\JoinColumn(name: 'formation_id', referencedColumnName: 'id'), ], inverseJoinColumns: [ - new ORM\JoinColumn(name: 'employe_id', referencedColumnName: 'id') + new ORM\JoinColumn(name: 'employe_id', referencedColumnName: 'id'), ] )] private Collection $employes; public function __construct() { - $this->quizs = new ArrayCollection(); + $this->quizs = new ArrayCollection(); $this->employes = new ArrayCollection(); } @@ -263,7 +280,7 @@ public function __construct() */ public function getEmployes(): Collection { - if (!$this->employes instanceof Collection) { + if (! $this->employes instanceof Collection) { $this->employes = new ArrayCollection(); } return $this->employes; @@ -271,7 +288,7 @@ public function getEmployes(): Collection public function addEmploye(Employe $employe): self { - if (!$this->getEmployes()->contains($employe)) { + if (! $this->getEmployes()->contains($employe)) { $this->getEmployes()->add($employe); } return $this; @@ -324,7 +341,7 @@ public function getStartDate(): ?\DateTimeInterface return $this->start_date; } - public function setStartDate(\DateTimeInterface $start_date): static + public function setStartDate( ? \DateTimeInterface $start_date): static { $this->start_date = $start_date; @@ -336,7 +353,7 @@ public function getEndDate(): ?\DateTimeInterface return $this->end_date; } - public function setEndDate(?\DateTimeInterface $end_date): static + public function setEndDate( ? \DateTimeInterface $end_date): static { $this->end_date = $end_date; diff --git a/src/Entity/Reclamation.php b/src/Entity/Reclamation.php index ee70b31..1baaf96 100644 --- a/src/Entity/Reclamation.php +++ b/src/Entity/Reclamation.php @@ -13,7 +13,9 @@ #[ORM\Table(name: 'reclamation')] class Reclamation { - #[ORM\Column(type: 'integer', nullable: false)] + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: 'integer')] private ?int $id = null; public function getId(): ?int diff --git a/src/Entity/ResetPasswordRequest.php b/src/Entity/ResetPasswordRequest.php index 846019a..29e6ac5 100644 --- a/src/Entity/ResetPasswordRequest.php +++ b/src/Entity/ResetPasswordRequest.php @@ -1,18 +1,14 @@ requested_at; } - public function setRequested_at(\DateTimeInterface $requested_at): self + public function setRequested_at(\DateTimeInterface $requested_at) : self { $this->requested_at = $requested_at; return $this; @@ -91,7 +87,7 @@ public function getExpires_at(): ?\DateTimeInterface return $this->expires_at; } - public function setExpires_at(\DateTimeInterface $expires_at): self + public function setExpires_at(\DateTimeInterface $expires_at) : self { $this->expires_at = $expires_at; return $this; diff --git a/src/Entity/TicketReclamation.php b/src/Entity/TicketReclamation.php index 04e7875..e105720 100644 --- a/src/Entity/TicketReclamation.php +++ b/src/Entity/TicketReclamation.php @@ -1,18 +1,14 @@ date_of_response; } - public function setDate_of_response(\DateTimeInterface $date_of_response): self + public function setDate_of_response(\DateTimeInterface $date_of_response) : self { $this->date_of_response = $date_of_response; return $this; diff --git a/src/Entity/User.php b/src/Entity/User.php index c8d0ec0..bbc82d9 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -1,18 +1,14 @@ add('title') + ->add('image') + ->add('description') + ->add('is_online') + ->add('place') + ->add('lat', NumberType::class) + ->add('lng', NumberType::class) + ->add('available_for_employee') + ->add('available_for_intern') + ->add('start_date', null, [ + 'widget' => 'single_text', + 'empty_data' => '', + 'required' => true, + ]) + ->add('end_date', null, [ + 'widget' => 'single_text', + 'empty_data' => '', + ]) + ->add('price', NumberType::class) + ->add('formateur', EntityType::class, [ + 'class' => Formateur::class, + 'choice_label' => 'id', + ]) + ->add('employes', EntityType::class, [ + 'class' => Employe::class, + 'choice_label' => 'id', + 'multiple' => true, + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Formation::class, + ]); + } +} diff --git a/templates/formation_controller_v2/_delete_form.html.twig b/templates/formation_controller_v2/_delete_form.html.twig new file mode 100644 index 0000000..120043d --- /dev/null +++ b/templates/formation_controller_v2/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/formation_controller_v2/_form.html.twig b/templates/formation_controller_v2/_form.html.twig new file mode 100644 index 0000000..a3835d0 --- /dev/null +++ b/templates/formation_controller_v2/_form.html.twig @@ -0,0 +1,99 @@ +
+ {{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }} + + {# Display a general error alert if there are any errors in the form #} + {% if not form.vars.valid %} +
+ There were errors in the form. Please correct them before submitting. +
+ {% endif %} + +
+ {{ form_label(form.title, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.title, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.title) }}
+
+ +
+ {{ form_label(form.image, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.image, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.image) }}
+
+ +
+ {{ form_label(form.description, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.description, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.description) }}
+
+ +
+ {{ form_widget(form.is_online, {'attr': {'class': 'form-check-input'}}) }} + {{ form_label(form.is_online, null, {'label_attr': {'class': 'form-check-label'}}) }} +
{{ form_errors(form.is_online) }}
+
+ +
+ {{ form_label(form.place, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.place, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.place) }}
+
+ +
+
+ {{ form_label(form.lat, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.lat, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.lat) }}
+
+
+ {{ form_label(form.lng, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.lng, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.lng) }}
+
+
+ +
+ {{ form_widget(form.available_for_employee, {'attr': {'class': 'form-check-input'}}) }} + {{ form_label(form.available_for_employee, null, {'label_attr': {'class': 'form-check-label'}}) }} +
{{ form_errors(form.available_for_employee) }}
+
+ +
+ {{ form_widget(form.available_for_intern, {'attr': {'class': 'form-check-input'}}) }} + {{ form_label(form.available_for_intern, null, {'label_attr': {'class': 'form-check-label'}}) }} +
{{ form_errors(form.available_for_intern) }}
+
+ +
+
+ {{ form_label(form.start_date, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.start_date, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.start_date) }}
+
+
+ {{ form_label(form.end_date, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.end_date, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.end_date) }}
+
+
+ +
+ {{ form_label(form.price, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.price, {'attr': {'class': 'form-control'}}) }} +
{{ form_errors(form.price) }}
+
+ +
+ {{ form_label(form.formateur, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.formateur, {'attr': {'class': 'form-select'}}) }} +
{{ form_errors(form.formateur) }}
+
+ +
+ {{ form_label(form.employes, null, {'label_attr': {'class': 'form-label'}}) }} + {{ form_widget(form.employes, {'attr': {'class': 'form-select', 'multiple': 'multiple'}}) }} +
{{ form_errors(form.employes) }}
+
+ + + {{ form_end(form) }} +
diff --git a/templates/formation_controller_v2/edit.html.twig b/templates/formation_controller_v2/edit.html.twig new file mode 100644 index 0000000..0ae48f5 --- /dev/null +++ b/templates/formation_controller_v2/edit.html.twig @@ -0,0 +1,13 @@ +{% extends 'base.html.twig' %} + +{% block title %}Edit Formation{% endblock %} + +{% block body %} +

Edit Formation

+ + {{ include('formation_controller_v2/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('formation_controller_v2/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/formation_controller_v2/index.html.twig b/templates/formation_controller_v2/index.html.twig new file mode 100644 index 0000000..a7a2d02 --- /dev/null +++ b/templates/formation_controller_v2/index.html.twig @@ -0,0 +1,58 @@ +{% extends 'back_office.html.twig' %} + +{% block title %}Formation index +{% endblock %} + +{% block body %} +

Formation index

+ + + + + + + + + + + + + + + + + + + + + + {% for formation in formations %} + + + + + + + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
IdTitleImageDescriptionIs_onlinePlaceLatLngAvailable_for_employeeAvailable_for_internStart_dateEnd_datePriceactions
{{ formation.id }}{{ formation.title }}{{ formation.image }}{{ formation.description }}{{ formation.isOnline ? 'Yes' : 'No' }}{{ formation.place }}{{ formation.lat }}{{ formation.lng }}{{ formation.availableForEmployee ? 'Yes' : 'No' }}{{ formation.availableForIntern ? 'Yes' : 'No' }}{{ formation.startDate ? formation.startDate|date('Y-m-d H:i:s') : '' }}{{ formation.endDate ? formation.endDate|date('Y-m-d H:i:s') : '' }}{{ formation.price }} + show + edit +
no records found
+ + Create new +{% endblock %} diff --git a/templates/formation_controller_v2/new.html.twig b/templates/formation_controller_v2/new.html.twig new file mode 100644 index 0000000..1600ad3 --- /dev/null +++ b/templates/formation_controller_v2/new.html.twig @@ -0,0 +1,12 @@ +{% extends 'back_office.html.twig' %} + +{% block title %}New Formation +{% endblock %} + +{% block body %} +

Create new Formation

+ + {{ include('formation_controller_v2/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/formation_controller_v2/show.html.twig b/templates/formation_controller_v2/show.html.twig new file mode 100644 index 0000000..48fce63 --- /dev/null +++ b/templates/formation_controller_v2/show.html.twig @@ -0,0 +1,70 @@ +{% extends 'base.html.twig' %} + +{% block title %}Formation{% endblock %} + +{% block body %} +

Formation

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{{ formation.id }}
Title{{ formation.title }}
Image{{ formation.image }}
Description{{ formation.description }}
Is_online{{ formation.isOnline ? 'Yes' : 'No' }}
Place{{ formation.place }}
Lat{{ formation.lat }}
Lng{{ formation.lng }}
Available_for_employee{{ formation.availableForEmployee ? 'Yes' : 'No' }}
Available_for_intern{{ formation.availableForIntern ? 'Yes' : 'No' }}
Start_date{{ formation.startDate ? formation.startDate|date('Y-m-d H:i:s') : '' }}
End_date{{ formation.endDate ? formation.endDate|date('Y-m-d H:i:s') : '' }}
Price{{ formation.price }}
+ + back to list + + edit + + {{ include('formation_controller_v2/_delete_form.html.twig') }} +{% endblock %}