0
0
Fork 0
mirror of https://github.com/verdigado/organization_folders.git synced 2024-11-24 05:30:27 +01:00

implemented proper resource deletion: remove folder resources in filesystem; remove child resources first

This commit is contained in:
Jonathan Treffler 2024-11-05 13:45:14 +01:00
parent 6252ca26dc
commit fe50f71d6b

View file

@ -271,14 +271,51 @@ class ResourceService {
public function getFolderResourceFilesystemNode(FolderResource $resource) { public function getFolderResourceFilesystemNode(FolderResource $resource) {
return $this->pathManager->getOrganizationFolderByIdSubfolder($resource->getOrganizationFolderId(), $this->getResourcePath($resource)); return $this->pathManager->getOrganizationFolderByIdSubfolder($resource->getOrganizationFolderId(), $this->getResourcePath($resource));
} }
/**
* get all direct sub-resources
*/
public function getSubResources(Resource $resource) {
return $this->findAll($resource->getOrganizationFolderId(), $resource->getId());
}
public function delete(int $id): Resource { /**
* get all sub-resources recursively
*/
public function getAllSubResources(Resource $resource) {
$subResources = $this->getSubResources($resource);
foreach($subResources as $subResource) {
$subResources = array_merge($subResources, $this->getAllSubResources($subResource));
}
return $subResources;
}
public function deleteById(int $id): Resource {
try { try {
$resource = $this->mapper->find($id); $resource = $this->mapper->find($id);
$this->mapper->delete($resource); return $this->delete($resource);
return $resource;
} catch (Exception $e) { } catch (Exception $e) {
$this->handleException($e, $id); $this->handleException($e, $resource->getId());
} }
} }
public function delete(Resource $resource): Resource {
// first delete all subresources recursively
$subResources = $this->getSubResources($resource);
foreach($subResources as $subResource) {
$this->delete($subResource);
}
// delete in filesystem if type folder
if($resource->getType() === "folder") {
$this->getFolderResourceFilesystemNode($resource)->delete();
}
// delete in database
$this->mapper->delete($resource);
return $resource;
}
} }