]> BookStack Code Mirror - bookstack/commitdiff
Fixed image folder deletion. Fixes #22.
authorDan Brown <redacted>
Sun, 23 Aug 2015 13:05:09 +0000 (14:05 +0100)
committerDan Brown <redacted>
Sun, 23 Aug 2015 13:05:09 +0000 (14:05 +0100)
app/Http/Controllers/ImageController.php
app/Http/routes.php

index 9fcd5c304acbdfba3ec2bd2e1cb1daeada9fed1b..aa8cc9ee899572bb99c1dce291a5a7736e51572d 100644 (file)
@@ -177,14 +177,30 @@ class ImageController extends Controller
 
         // Delete files
         $folder = public_path() . dirname($image->url);
-        $pattern = '/' . preg_quote(basename($image->url)). '/';
-        $dir = new RecursiveDirectoryIterator($folder);
-        $ite = new RecursiveIteratorIterator($dir);
-        $files = new RegexIterator($ite, $pattern, RegexIterator::ALL_MATCHES);
-        foreach($files as $path => $file) {
-            unlink($path);
+        $fileName = basename($image->url);
+
+        // Delete thumbnails
+        foreach(glob($folder . '/*') as $file) {
+            if(is_dir($file)) {
+                $thumbName = $file . '/' . $fileName;
+                if(file_exists($file)) {
+                    unlink($thumbName);
+                }
+                // Remove thumb folder if empty
+                if(count(glob($file . '/*')) === 0) {
+                    rmdir($file);
+                }
+            }
         }
+        
+        // Delete file and database entry
+        unlink($folder . '/' . $fileName);
         $image->delete();
+
+        // Delete parent folder if empty
+        if(count(glob($folder . '/*')) === 0) {
+            rmdir($folder);
+        }
         return response()->json('Image Deleted');
     }
 
index a6cda78e6dbc0d4cbbd872c227d57b907defb041..a3db08a0de85a9b9688ed79dfa42437b3f98fc13 100644 (file)
@@ -70,6 +70,7 @@ Route::group(['middleware' => 'auth'], function() {
     Route::get('/images/all', 'ImageController@getAll');
     Route::put('/images/update/{imageId}', 'ImageController@update');
     Route::delete('/images/{imageId}', 'ImageController@destroy');
+    Route::get('/images/{imageId}/delete', 'ImageController@destroy');
     Route::get('/images/all/{page}', 'ImageController@getAll');
     Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');