diff options
author | Frédéric Guillot <fred@kanboard.net> | 2018-04-27 14:32:58 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2018-04-27 14:32:58 -0700 |
commit | 2d2b50d5dca7afa8523685a682a2dcc78b602ce2 (patch) | |
tree | a77d5a9c819b754bde645256898ebf4a546da3f6 | |
parent | bb406d57b1c1ad2736774be18b2f7b4d31abcf63 (diff) |
Remove all attachments when removing a project
-rw-r--r-- | app/Core/ObjectStorage/FileStorage.php | 13 | ||||
-rw-r--r-- | app/Model/ProjectModel.php | 22 |
2 files changed, 28 insertions, 7 deletions
diff --git a/app/Core/ObjectStorage/FileStorage.php b/app/Core/ObjectStorage/FileStorage.php index 18453890..410951fb 100644 --- a/app/Core/ObjectStorage/FileStorage.php +++ b/app/Core/ObjectStorage/FileStorage.php @@ -128,12 +128,21 @@ class FileStorage implements ObjectStorageInterface public function remove($key) { $filename = $this->path.DIRECTORY_SEPARATOR.$key; + $result = false; if (file_exists($filename)) { - return unlink($filename); + $result = unlink($filename); + + // Remove parent folder if empty + $parentFolder = dirname($filename); + $files = glob($parentFolder.DIRECTORY_SEPARATOR.'*'); + + if ($files !== false && is_dir($parentFolder) && count($files) === 0) { + rmdir($parentFolder); + } } - return false; + return $result; } /** diff --git a/app/Model/ProjectModel.php b/app/Model/ProjectModel.php index 097806d8..40e92de6 100644 --- a/app/Model/ProjectModel.php +++ b/app/Model/ProjectModel.php @@ -5,6 +5,8 @@ namespace Kanboard\Model; use Kanboard\Core\Base; use Kanboard\Core\Security\Token; use Kanboard\Core\Security\Role; +use Kanboard\Model\TaskModel; +use Kanboard\Model\TaskFileModel; /** * Project model @@ -470,13 +472,23 @@ class ProjectModel extends Base */ public function remove($project_id) { - $this->db->startTransaction(); + // Remove all project attachments + $this->projectFileModel->removeAll($project_id); + + // Remove all task attachments + $file_ids = $this->db + ->table(TaskFileModel::TABLE) + ->eq(TaskModel::TABLE.'.project_id', $project_id) + ->join(TaskModel::TABLE, 'id', 'task_id', TaskFileModel::TABLE) + ->findAllByColumn(TaskFileModel::TABLE.'.id'); + + foreach ($file_ids as $file_id) { + $this->taskFileModel->remove($file_id); + } + // Remove project $this->db->table(TagModel::TABLE)->eq('project_id', $project_id)->remove(); - $result = $this->db->table(self::TABLE)->eq('id', $project_id)->remove(); - - $this->db->closeTransaction(); - return $result; + return $this->db->table(self::TABLE)->eq('id', $project_id)->remove(); } /** |