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.
+