MDL-36963 Improve mdeploy worker::remove_directory() method
authorDavid Mudrák <david@moodle.com>
Thu, 6 Dec 2012 01:31:36 +0000 (02:31 +0100)
committerDan Poltawski <dan@moodle.com>
Thu, 6 Dec 2012 03:03:35 +0000 (11:03 +0800)
The additional parameter allows to use this method without actual
removing the root of the path. That is, it is now possible to remove
the content of a folder only.

mdeploy.php

index 9e986b0..c16bc0f 100644 (file)
@@ -1207,11 +1207,15 @@ class worker extends singleton_pattern {
      * Deletes the given directory recursively
      *
      * @param string $path full path to the directory
      * Deletes the given directory recursively
      *
      * @param string $path full path to the directory
+     * @param bool $keeppathroot should the root of the $path be kept (i.e. remove the content only) or removed too
+     * @return bool
      */
      */
-    protected function remove_directory($path) {
+    protected function remove_directory($path, $keeppathroot = false) {
+
+        $result = true;
 
         if (!file_exists($path)) {
 
         if (!file_exists($path)) {
-            return;
+            return $result;
         }
 
         if (is_dir($path)) {
         }
 
         if (is_dir($path)) {
@@ -1228,15 +1232,22 @@ class worker extends singleton_pattern {
             }
 
             if (is_dir($filepath)) {
             }
 
             if (is_dir($filepath)) {
-                $this->remove_directory($filepath);
+                $result = $result && $this->remove_directory($filepath, false);
 
             } else {
 
             } else {
-                unlink($filepath);
+                $result = $result && unlink($filepath);
             }
         }
 
         closedir($handle);
             }
         }
 
         closedir($handle);
-        return rmdir($path);
+
+        if (!$keeppathroot) {
+            $result = $result && rmdir($path);
+        }
+
+        clearstatcache();
+
+        return $result;
     }
 
     /**
     }
 
     /**