diff --git a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php index 20fcbe3db4..5fa224642c 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php @@ -189,6 +189,9 @@ class RecordController extends Controller $deleted = []; + /** @var \collection[] $trashCollectionsBySbasId */ + $trashCollectionsBySbasId = []; + $manager = $this->getEntityManager(); foreach ($records as $record) { try { @@ -205,10 +208,30 @@ class RecordController extends Controller $manager->remove($attachedStory); } + $sbasId = $record->getDatabox()->get_sbas_id(); + if(!array_key_exists($sbasId, $trashCollectionsBySbasId)) { + $trashCollectionsBySbasId[$sbasId] = $record->getDatabox()->getTrashCollection(); + } $deleted[] = $record->getId(); - $record->delete(); + if($trashCollectionsBySbasId[$sbasId] !== null) { + if($record->getCollection()->get_coll_id() == $trashCollectionsBySbasId[$sbasId]->get_coll_id()) { + // record is already in trash so delete it + $record->delete(); + } else { + // move to trash collection + $record->move_to_collection($trashCollectionsBySbasId[$sbasId], $this->getApplicationBox()); + // disable permalinks + foreach($record->get_subdefs() as $subdef) { + if( ($pl = $subdef->get_permalink()) ) { + $pl->set_is_activated(false); + } + } + } + } else { + // no trash collection, delete + $record->delete(); + } } catch (\Exception $e) { - } } diff --git a/lib/classes/databox.php b/lib/classes/databox.php index d216acdd7f..537990ae66 100644 --- a/lib/classes/databox.php +++ b/lib/classes/databox.php @@ -601,6 +601,19 @@ class databox extends base implements ThumbnailedElement }); } + /** + * @return collection|null + */ + public function getTrashCollection() + { + foreach($this->get_collections() as $collection) { + if($collection->get_name() === '_TRASH_') { + return $collection; + } + } + return null; + } + /** * * @param int $record_id