88use App \Models \Document ;
99use App \Models \Domain ;
1010use App \Models \Measure ;
11- use App \Models \User ;
1211use Carbon \Carbon ;
1312use Illuminate \Http \Request ;
1413use Illuminate \Http \Response ;
@@ -333,20 +332,32 @@ public function create()
333332 sort ($ values );
334333 $ values = array_unique ($ values );
335334
336- $ users = User::orderBy ('name ' )->get ();
335+ // get users
336+ $ users = DB ::table ('users ' )
337+ ->select ('id ' , 'name ' )
338+ ->orderBy ('name ' )
339+ ->get ();
337340
338341 // get all groups
339- $ all_groups = DB ::table ('user_groups ' )
342+ $ groups = DB ::table ('user_groups ' )
340343 ->select ('id ' , 'name ' )
341344 ->orderBy ('name ' )
342345 ->get ();
343346
347+ // Owners list
348+ $ owners = collect ();
349+ foreach ($ users as $ user ) {
350+ $ owners ->put ('USR_ ' . $ user ->id , $ user ->name );
351+ }
352+ foreach ($ groups as $ group ) {
353+ $ owners ->put ('GRP_ ' . $ group ->id , $ group ->name );
354+ }
355+
344356 return view ('controls.create ' )
345357 ->with ('scopes ' , $ scopes )
346358 ->with ('all_measures ' , $ all_measures )
347- ->with ('all_groups ' , $ all_groups )
348359 ->with ('attributes ' , $ values )
349- ->with ('users ' , $ users );
360+ ->with ('owners ' , $ owners );
350361 }
351362
352363 /**
@@ -394,8 +405,23 @@ public function store(Request $request)
394405 // Save it
395406 $ control ->save ();
396407
397- // Sync onwers
398- $ control ->owners ()->sync ($ request ->input ('owners ' , []));
408+ // Sync users
409+ $ users = collect ();
410+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
411+ if (str_starts_with ($ owner , 'USR_ ' )) {
412+ $ users ->push (intval (substr ($ owner , 4 )));
413+ }
414+ }
415+ $ control ->users ()->sync ($ users );
416+
417+ // Sync groups
418+ $ groups = collect ();
419+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
420+ if (str_starts_with ($ owner , 'GRP_ ' )) {
421+ $ groups ->push (intval (substr ($ owner , 4 )));
422+ }
423+ }
424+ $ control ->groups ()->sync ($ groups );
399425
400426 // Sync measures
401427 $ control ->measures ()->sync ($ request ->input ('measures ' , []));
@@ -514,15 +540,27 @@ public function edit(int $id)
514540 ->orderBy ('id ' )
515541 ->get ();
516542
517- // Get all users
518- $ users = User::orderBy ('name ' )->get ();
543+ // get users
544+ $ users = DB ::table ('users ' )
545+ ->select ('id ' , 'name ' )
546+ ->orderBy ('name ' )
547+ ->get ();
519548
520- // Get all groups
521- $ all_groups = DB ::table ('user_groups ' )
549+ // get all groups
550+ $ groups = DB ::table ('user_groups ' )
522551 ->select ('id ' , 'name ' )
523552 ->orderBy ('name ' )
524553 ->get ();
525554
555+ // Owners list
556+ $ owners = collect ();
557+ foreach ($ users as $ user ) {
558+ $ owners ->put ('USR_ ' . $ user ->id , $ user ->name );
559+ }
560+ foreach ($ groups as $ group ) {
561+ $ owners ->put ('GRP_ ' . $ group ->id , $ group ->name );
562+ }
563+
526564 // get measures
527565 $ measures = DB ::table ('control_measure ' )
528566 ->select ('measure_id ' )
@@ -559,11 +597,10 @@ public function edit(int $id)
559597 ->with ('documents ' , $ documents )
560598 ->with ('scopes ' , $ scopes )
561599 ->with ('all_measures ' , $ all_measures )
562- ->with ('all_groups ' , $ all_groups )
563600 ->with ('measures ' , $ measures )
564601 ->with ('ids ' , $ ids )
565602 ->with ('attributes ' , $ values )
566- ->with ('users ' , $ users );
603+ ->with ('owners ' , $ owners );
567604 }
568605
569606 /**
@@ -610,14 +647,27 @@ public function clone(Request $request)
610647 sort ($ values );
611648 $ values = array_unique ($ values );
612649
613- $ users = User::orderBy ('name ' )->get ();
650+ // get users
651+ $ users = DB ::table ('users ' )
652+ ->select ('id ' , 'name ' )
653+ ->orderBy ('name ' )
654+ ->get ();
614655
615656 // get all groups
616- $ all_groups = DB ::table ('user_groups ' )
657+ $ groups = DB ::table ('user_groups ' )
617658 ->select ('id ' , 'name ' )
618659 ->orderBy ('name ' )
619660 ->get ();
620661
662+ // Owners list
663+ $ owners = collect ();
664+ foreach ($ users as $ user ) {
665+ $ owners ->put ('USR_ ' . $ user ->id , $ user ->name );
666+ }
667+ foreach ($ groups as $ group ) {
668+ $ owners ->put ('GRP_ ' . $ group ->id , $ group ->name );
669+ }
670+
621671 // Get Control
622672 $ control = Control::find ($ request ->id );
623673
@@ -635,15 +685,24 @@ public function clone(Request $request)
635685 );
636686 $ request ->merge (['measures ' => $ control ->measures ()->pluck ('id ' )->toArray ()]);
637687 $ request ->merge (['attributes ' => explode (' ' , $ control ->attributes )]);
638- $ request ->merge (['owners ' => $ control ->owners ()->pluck ('id ' )->toArray ()]);
688+
689+ // Construct owners copy
690+ $ items = [];
691+ foreach ($ control ->users as $ user ) {
692+ array_push ($ items , 'USR_ ' . $ user ->id );
693+ }
694+ foreach ($ control ->groups as $ group ) {
695+ array_push ($ items , 'GRP_ ' . $ group ->id );
696+ }
697+ $ request ->merge (['owners ' => $ items ]);
698+
639699 $ request ->flash ();
640700
641701 return view ('controls.create ' )
642702 ->with ('scopes ' , $ scopes )
643703 ->with ('all_measures ' , $ all_measures )
644- ->with ('all_groups ' , $ all_groups )
645704 ->with ('attributes ' , $ values )
646- ->with ('users ' , $ users );
705+ ->with ('owners ' , $ owners );
647706 }
648707
649708 /**
@@ -1098,7 +1157,26 @@ public function plan(int $id)
10981157 $ months [$ month ] = $ month ;
10991158 }
11001159
1101- $ users = User::orderBy ('name ' )->get ();
1160+ // get users
1161+ $ users = DB ::table ('users ' )
1162+ ->select ('id ' , 'name ' )
1163+ ->orderBy ('name ' )
1164+ ->get ();
1165+
1166+ // get all groups
1167+ $ groups = DB ::table ('user_groups ' )
1168+ ->select ('id ' , 'name ' )
1169+ ->orderBy ('name ' )
1170+ ->get ();
1171+
1172+ // Owners list
1173+ $ owners = collect ();
1174+ foreach ($ users as $ user ) {
1175+ $ owners ->put ('USR_ ' . $ user ->id , $ user ->name );
1176+ }
1177+ foreach ($ groups as $ group ) {
1178+ $ owners ->put ('GRP_ ' . $ group ->id , $ group ->name );
1179+ }
11021180
11031181 // get all measures
11041182 $ all_measures = DB ::table ('measures ' )
@@ -1130,7 +1208,7 @@ public function plan(int $id)
11301208 ->with ('all_measures ' , $ all_measures )
11311209 ->with ('measures ' , $ measures )
11321210 ->with ('scopes ' , $ scopes )
1133- ->with ('users ' , $ users );
1211+ ->with ('owners ' , $ owners );
11341212 }
11351213
11361214 /**
@@ -1215,9 +1293,26 @@ public function doPlan(Request $request)
12151293 // Update fields
12161294 $ control ->plan_date = $ request ->plan_date ;
12171295 $ control ->periodicity = $ request ->periodicity ;
1218- $ control ->owners ()->sync ($ request ->input ('owners ' , []));
12191296 $ control ->save ();
12201297
1298+ // Sync users
1299+ $ users = collect ();
1300+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
1301+ if (str_starts_with ($ owner , 'USR_ ' )) {
1302+ $ users ->push (intval (substr ($ owner , 4 )));
1303+ }
1304+ }
1305+ $ control ->users ()->sync ($ users );
1306+
1307+ // Sync groups
1308+ $ groups = collect ();
1309+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
1310+ if (str_starts_with ($ owner , 'GRP_ ' )) {
1311+ $ groups ->push (intval (substr ($ owner , 4 )));
1312+ }
1313+ }
1314+ $ control ->groups ()->sync ($ groups );
1315+
12211316 // Redirect
12221317 return redirect ('/bob/show/ ' . $ request ->id );
12231318 }
@@ -1363,18 +1458,16 @@ public function doMake(Request $request)
13631458 )
13641459 );
13651460 }
1366-
13671461 $ new_control ->save ();
13681462
13691463 // Set owners
1370- $ new_control
1371- ->owners ()
1372- ->sync ($ control ->owners ->pluck ('id ' ));
1464+ $ new_control ->users ()->sync ($ control ->users ->pluck ('id ' ));
1465+
1466+ // Set groups
1467+ $ new_control ->groups ()->sync ($ control ->groups ->pluck ('id ' ));
13731468
13741469 // Set measures
1375- $ new_control
1376- ->measures ()
1377- ->sync ($ control ->measures ->pluck ('id ' ));
1470+ $ new_control ->measures ()->sync ($ control ->measures ->pluck ('id ' ));
13781471
13791472 // make link
13801473 $ control ->next_id = $ new_control ->id ;
@@ -1409,6 +1502,17 @@ public function save(Request $request)
14091502 // Control not found
14101503 abort_if ($ control === null , Response::HTTP_NOT_FOUND , '404 Not Found ' );
14111504
1505+ $ this ->validate (
1506+ $ request ,
1507+ [
1508+ 'name ' => 'required|min:3|max:255 ' ,
1509+ 'scope ' => 'max:32 ' ,
1510+ 'objective ' => 'required ' ,
1511+ 'plan_date ' => 'required ' ,
1512+ 'periodicity ' => 'required|integer ' ,
1513+ ]
1514+ );
1515+
14121516 $ control ->name = request ('name ' );
14131517 $ control ->scope = request ('scope ' );
14141518 $ control ->objective = request ('objective ' );
@@ -1427,9 +1531,26 @@ public function save(Request $request)
14271531 $ control ->periodicity = request ('periodicity ' );
14281532 $ control ->status = request ('status ' );
14291533 $ control ->next_id = request ('next_id ' );
1430- // Sync
1431- $ control ->owners ()->sync ($ request ->input ('owners ' , []));
1432- $ control ->groups ()->sync ($ request ->input ('groups ' , []));
1534+
1535+ // Sync users
1536+ $ users = collect ();
1537+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
1538+ if (str_starts_with ($ owner , 'USR_ ' )) {
1539+ $ users ->push (intval (substr ($ owner , 4 )));
1540+ }
1541+ }
1542+ $ control ->users ()->sync ($ users );
1543+
1544+ // Sync groups
1545+ $ groups = collect ();
1546+ foreach ($ request ->input ('owners ' , []) as $ owner ) {
1547+ if (str_starts_with ($ owner , 'GRP_ ' )) {
1548+ $ groups ->push (intval (substr ($ owner , 4 )));
1549+ }
1550+ }
1551+ $ control ->groups ()->sync ($ groups );
1552+
1553+ // Sync Measures
14331554 $ control ->measures ()->sync ($ request ->input ('measures ' , []));
14341555
14351556 $ control ->save ();
0 commit comments