Skip to content

Commit af52eda

Browse files
committed
feat: add ability to sync sites with team resources from api calls
Calling create or delete for team-resources with the syncSites flag will now also remove or add that team resource from the team's sites, as appropriate.
1 parent 4971d5e commit af52eda

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

src/Api/Adapter/TeamResourceAdapter.php

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,7 @@ public function create(Request $request)
308308
$resourceEntity = $this->getEntityManager()->getRepository('Omeka\Entity\Resource')->findOneBy(['id'=>$resource]);
309309
$teamResource = new TeamResource($teamEntity, $resourceEntity);
310310
if ($request->getOption('recursive')){
311-
$logger = $this->getServiceLocator()->get('Omeka\Logger');
312-
$logger->err('recursive in the adapter');
311+
$syncSites = (bool)$request->getOption('syncSites');
313312
$mappedEntity = $this->findMappedEntity($request->getValue('resource'));
314313
//item sets => contain items
315314
if ($mappedEntity->getResourceName() === 'item_sets') {
@@ -334,7 +333,10 @@ public function create(Request $request)
334333
'resource' => $resourceId
335334
],
336335
[],
337-
['recursive'=>true]
336+
[
337+
'recursive'=>true,
338+
'syncSites' => $syncSites
339+
]
338340
);
339341
}
340342
}
@@ -374,6 +376,22 @@ public function create(Request $request)
374376
}
375377

376378

379+
if ($request->getOption('syncSites')){
380+
$sites = $this->getServiceLocator()->get('Omeka\ApiManager')
381+
->search('team-site', ['team' => $team], ['returnScalar' => 'site'])
382+
->getContent();
383+
384+
if (method_exists($resourceEntity, 'getSites')) {
385+
$siteAdapter = $this->getServiceLocator()->get('Omeka\ApiAdapterManager')->get('sites');
386+
$item_sites = $resourceEntity->getSites();
387+
foreach ($sites as $site) {
388+
$add_site = $siteAdapter->findEntity($site);
389+
$item_sites->set($add_site->getId(), $add_site);
390+
}
391+
}
392+
393+
}
394+
377395
$this->getEntityManager()->persist($teamResource);
378396
if ($request->getOption('flushEntityManager', true)) {
379397
$this->getEntityManager()->flush();
@@ -403,8 +421,8 @@ public function batchUpdate(Request $request)
403421

404422
public function delete(Request $request)
405423
{
406-
407424
if ($request->getOption('recursive')){
425+
$syncSites = (bool)($request->getOption('syncSites'));
408426
$mappedEntity = $this->findMappedEntity($request->getValue('resource'));
409427
//item sets => contain items
410428
if ($mappedEntity->getResourceName() === 'item_sets') {
@@ -425,7 +443,10 @@ public function delete(Request $request)
425443
'team' => $request->getValue('team'),
426444
'resource' => $resourceId
427445
],
428-
['recursive'=>true]);
446+
[
447+
'recursive' => true,
448+
'syncSites' => $syncSites,
449+
]);
429450
}
430451
}
431452
}
@@ -465,6 +486,26 @@ public function delete(Request $request)
465486
if (count($exists) > 0) {
466487
$entity = $this->deleteEntity($request);
467488
}
489+
490+
if ($request->getOption('syncSites')){
491+
$sites = $this->getServiceLocator()->get('Omeka\ApiManager')
492+
->search('team-site', ['team' => $request->getValue('team')], ['returnScalar' => 'site'])
493+
->getContent();
494+
$resourceEntity = $this->getEntityManager()
495+
->getRepository('Omeka\Entity\Resource')
496+
->findOneBy(['id'=>$request->getValue('resource')]);
497+
498+
if (method_exists($resourceEntity, 'getSites')) {
499+
$item_sites = $resourceEntity->getSites();
500+
foreach ($sites as $site) {
501+
$target_site = $item_sites->get($site);
502+
$item_sites->removeElement($target_site);
503+
}
504+
}
505+
506+
}
507+
508+
468509
if ($request->getOption('flushEntityManager', true)) {
469510
$this->getEntityManager()->flush();
470511
}

0 commit comments

Comments
 (0)