@@ -1362,72 +1362,90 @@ public function siteUpdate(Event $event)
13621362 $ operation = $ request ->getOperation ();
13631363 $ error_store = $ event ->getParam ('errorStore ' );
13641364
1365- if ($ operation ==='update ' && array_key_exists ('team ' , $ request ->getContent ())){
13661365
1367- //Add and remove TeamSites
1368- //From each of those teams,
1369- // update TeamReasource=>Item->ItemSite,
1370- // update TeamUser=>User->DefaultSites, update
1366+ //entity not validated till after this event, so to avoid flushing them with invalid changes, validate here
1367+ $ site_entity = new SiteAdapter ();
13711368
1369+ //point to service locator
1370+ $ site_entity ->setServiceLocator ($ this ->getServiceLocator ());
13721371
1373- //teams from the form
1374- $ form_teams = $ request ->getContent ()['team ' ];
1375- $ site_id = $ request ->getId ();
1372+ //validate hydrated entity
1373+ $ site_entity ->validateEntity ($ entity , $ error_store );
1374+ if ($ error_store ->hasErrors ()) {
1375+ $ validationException = new Exception \ValidationException ;
1376+ $ validationException ->setErrorStore ($ error_store );
1377+ throw $ validationException ;
1378+ } else {
13761379
1377- //teams that site is a member of
1378- $ team_sites = $ em ->getRepository ('Teams\Entity\TeamSite ' )->findBy (['site ' =>$ site_id ]);
1380+ if ($ operation === 'update ' && array_key_exists ('team ' , $ request ->getContent ())) {
13791381
1380- //array of existing teams ids
1381- $ existing_teams = array_map (function ($ team_site ) {return $ team_site ->getTeam ()->getId ();}, $ team_sites );
1382+ //Add and remove TeamSites
1383+ //From each of those teams,
1384+ // update TeamReasource=>Item->ItemSite,
1385+ // update TeamUser=>User->DefaultSites, update
13821386
1383- $ added_teams = array_diff ($ form_teams , $ existing_teams );
1384- $ removed_teams = array_diff ($ existing_teams , $ form_teams );
13851387
1386- foreach ($ team_sites as $ team_site ):
1387- if (in_array ($ team_site ->getTeam ()->getId (), $ removed_teams )){
1388- $ em ->remove ($ team_site );
1389- }
1390- endforeach ;
1391- $ em ->flush ();
1388+ //teams from the form
1389+ $ form_teams = $ request ->getContent ()['team ' ];
1390+ $ site_id = $ request ->getId ();
13921391
1393- //add teams to the site for each new team listed in the form
1394- foreach ($ added_teams as $ team ):
1395- $ team_site = new TeamSite (
1396- $ em ->getRepository ('Teams\Entity\Team ' )->findOneBy (['id ' => $ team ]),
1397- $ em ->getRepository ('Omeka\Entity\Site ' )->findOneBy (['id ' => $ site_id ])
1398- );
1399- $ em ->persist ($ team_site );
1400- endforeach ;
1401- $ em ->flush ();
1392+ //teams that site is a member of
1393+ $ team_sites = $ em ->getRepository ('Teams\Entity\TeamSite ' )->findBy (['site ' => $ site_id ]);
14021394
1403- //get any items or users that need to be updated
1404- //by either removing or adding item-sits or user default site
1405- $ delta_item_site = [];
1406- $ delta_user_site = [];
1407- foreach (array_merge ($ added_teams , $ removed_teams ) as $ team_id ){
1408- $ delta_item_site [] = $ em ->getRepository ('Teams\Entity\Team ' )
1409- ->findOneBy (['id ' =>$ team_id ])
1410- ->getTeamResources ();
1411- $ delta_user_site [] = $ em ->getRepository ('Teams\Entity\Team ' )
1412- ->findOneBy (['id ' =>$ team_id ])
1413- ->getTeamUsers ();
1414- }
1395+ //array of existing teams ids
1396+ $ existing_teams = array_map (function ($ team_site ) {
1397+ return $ team_site ->getTeam ()->getId ();
1398+ }, $ team_sites );
1399+
1400+ $ added_teams = array_diff ($ form_teams , $ existing_teams );
1401+ $ removed_teams = array_diff ($ existing_teams , $ form_teams );
14151402
1416- $ logger = $ this ->getServiceLocator ()->get ('Omeka\Logger ' );
1403+ foreach ($ team_sites as $ team_site ):
1404+ if (in_array ($ team_site ->getTeam ()->getId (), $ removed_teams )) {
1405+ $ em ->remove ($ team_site );
1406+ }
1407+ endforeach ;
1408+ $ em ->flush ();
14171409
1418- foreach ($ delta_item_site as $ team_item_collection ){
1419- foreach ($ team_item_collection as $ team_item ){
1420- $ this ->updateItemSites ($ team_item ->getResource ()->getId ());
1410+ //add teams to the site for each new team listed in the form
1411+ foreach ($ added_teams as $ team ):
1412+ $ team_site = new TeamSite (
1413+ $ em ->getRepository ('Teams\Entity\Team ' )->findOneBy (['id ' => $ team ]),
1414+ $ em ->getRepository ('Omeka\Entity\Site ' )->findOneBy (['id ' => $ site_id ])
1415+ );
1416+ $ em ->persist ($ team_site );
1417+ endforeach ;
1418+ $ em ->flush ();
1419+
1420+ //get any items or users that need to be updated
1421+ //by either removing or adding item-sits or user default site
1422+ $ delta_item_site = [];
1423+ $ delta_user_site = [];
1424+ foreach (array_merge ($ added_teams , $ removed_teams ) as $ team_id ) {
1425+ $ delta_item_site [] = $ em ->getRepository ('Teams\Entity\Team ' )
1426+ ->findOneBy (['id ' => $ team_id ])
1427+ ->getTeamResources ();
1428+ $ delta_user_site [] = $ em ->getRepository ('Teams\Entity\Team ' )
1429+ ->findOneBy (['id ' => $ team_id ])
1430+ ->getTeamUsers ();
14211431 }
1422- }
14231432
1424- //update current team users to include new site in their default sites
1425- foreach ($ delta_user_site as $ team_users ):
1426- foreach ($ team_users as $ team_user ):
1433+ $ logger = $ this ->getServiceLocator ()->get ('Omeka\Logger ' );
1434+
1435+ foreach ($ delta_item_site as $ team_item_collection ) {
1436+ foreach ($ team_item_collection as $ team_item ) {
1437+ $ this ->updateItemSites ($ team_item ->getResource ()->getId ());
1438+ }
1439+ }
1440+
1441+ //update current team users to include new site in their default sites
1442+ foreach ($ delta_user_site as $ team_users ):
1443+ foreach ($ team_users as $ team_user ):
14271444 $ user_id = $ team_user ->getUser ()->getId ();
14281445 $ this ->updateUserSites ($ user_id );
1446+ endforeach ;
14291447 endforeach ;
1430- endforeach ;
1448+ }
14311449 }
14321450 }
14331451
0 commit comments