33namespace App \Controller ;
44
55use App \Entity \Member ;
6+ use App \Entity \Preference ;
67use App \Form \PreferencesType ;
78use App \Model \PreferenceModel ;
89use App \Utilities \ChangeProfilePictureGlobals ;
910use App \Utilities \ProfileSubmenu ;
1011use Doctrine \ORM \EntityManagerInterface ;
1112use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
13+ use Symfony \Component \Form \Extension \Core \Type \TextType ;
1214use Symfony \Component \HttpFoundation \RedirectResponse ;
1315use Symfony \Component \HttpFoundation \Request ;
1416use Symfony \Component \HttpFoundation \Response ;
1517use Symfony \Component \Routing \Attribute \Route ;
1618
1719class PreferenceController extends AbstractController
1820{
21+ public function __construct (
22+ private readonly PreferenceModel $ preferenceModel ,
23+ private readonly EntityManagerInterface $ entityManager ,
24+ ) {
25+ }
26+
1927 #[Route(path: '/mypreferences ' , name: 'mypreferences_redirect ' )]
2028 public function redirectMyPreferences (): RedirectResponse
2129 {
@@ -27,9 +35,7 @@ public function preferences(
2735 Request $ request ,
2836 Member $ member ,
2937 ProfileSubmenu $ profileSubmenu ,
30- PreferenceModel $ preferenceModel ,
3138 ChangeProfilePictureGlobals $ globals ,
32- EntityManagerInterface $ entityManager ,
3339 ): Response {
3440 /** Member must be the logged in member to be able to access this page.
3541 * @var Member $loggedInMember
@@ -39,8 +45,8 @@ public function preferences(
3945 return $ this ->redirectToRoute ('preferences ' , ['username ' => $ loggedInMember ->getUsername ()]);
4046 }
4147
42- $ preferences = $ preferenceModel ->getPreferences ();
43- $ memberPreferences = $ preferenceModel ->getMemberPreferences ($ loggedInMember , $ preferences );
48+ $ preferences = $ this -> preferenceModel ->getPreferences ();
49+ $ memberPreferences = $ this -> preferenceModel ->getMemberPreferences ($ loggedInMember , $ preferences );
4450 $ data = [];
4551 foreach ($ memberPreferences as $ memberPreference ) {
4652 $ preference = $ memberPreference ->getPreference ();
@@ -50,30 +56,55 @@ public function preferences(
5056 $ preferenceForm = $ this ->createForm (PreferencesType::class, $ data , [
5157 'preferences ' => $ preferences ,
5258 ]);
53- $ preferenceForm ->handleRequest ($ request );
54-
55- if ($ preferenceForm ->isSubmitted () && $ preferenceForm ->isValid ()) {
56- $ data = $ preferenceForm ->getData ();
57-
58- foreach ($ memberPreferences as $ memberPreference ) {
59- $ preference = $ memberPreference ->getPreference ();
60-
61- $ memberPreference ->setValue ($ data [$ preference ->getCodename ()]);
62- $ entityManager ->persist ($ memberPreference );
63- }
64- $ entityManager ->flush ();
65-
66- return $ this ->redirectToRoute ('members_profile ' , ['username ' => $ loggedInMember ->getUsername ()]);
67- }
6859
6960 return $ this ->render ('preference/preference.html.twig ' , [
7061 'member ' => $ loggedInMember ,
71- 'form ' => $ preferenceForm-> createView () ,
62+ 'form ' => $ preferenceForm ,
7263 'preferences ' => $ preferences ,
7364 'globals_js_json ' => $ globals ->getGlobalsJsAsJson ($ loggedInMember , $ member ),
7465 'submenu ' => $ profileSubmenu ->getSubmenu ($ loggedInMember , $ member , [
7566 'active ' => 'preferences ' ,
7667 ]),
7768 ]);
7869 }
70+
71+ #[Route(path: '/members/update/preference ' , name: 'profile_update_preference ' , methods: ['POST ' ], priority: 20 )]
72+ public function updatePreference (Request $ request ): Response
73+ {
74+ $ form = $ this ->createFormBuilder (options: ['csrf_protection ' => false ])
75+ ->add ('member ' , TextType::class)
76+ ->add ('preference ' , TextType::class)
77+ ->add ('value ' , TextType::class)
78+ ->getForm ();
79+
80+ $ form ->submit ($ request ->request ->all ());
81+ if ($ form ->isSubmitted () && $ form ->isValid ()) {
82+ $ loggedInMember = $ this ->getUser ();
83+ $ data = $ form ->getData ();
84+ $ memberRepository = $ this ->entityManager ->getRepository (Member::class);
85+ $ member = $ memberRepository ->findOneBy (['username ' => $ data ['member ' ]]);
86+
87+ // Check if user exists and if logged in member is either same or privileged
88+ if ($ member === $ loggedInMember ) {
89+ $ preference = $ this ->entityManager
90+ ->getRepository (Preference::class)
91+ ->findOneBy (['codename ' => $ data ['preference ' ]])
92+ ;
93+ $ memberPreference = $ member ->getMemberPreference ($ preference );
94+
95+ $ value = $ data ['value ' ];
96+ if ('false ' === $ data ['value ' ] || 'true ' === $ data ['value ' ]) {
97+ $ values = $ preference ->getPossibleValues ();
98+ $ value = 'false ' === $ data ['value ' ] ? $ values [0 ] : $ values [1 ];
99+ }
100+
101+ $ memberPreference ->setValue ($ value );
102+
103+ $ this ->entityManager ->persist ($ memberPreference );
104+ $ this ->entityManager ->flush ();
105+ }
106+ }
107+
108+ return new Response ();
109+ }
79110}
0 commit comments