Browse Source

Fix issue with base user upload subdir not existing - refs BT#9901 #TMI

Yannick Warnier 9 years ago
parent
commit
94897227f2
1 changed files with 15 additions and 0 deletions
  1. 15 0
      main/inc/lib/usermanager.lib.php

+ 15 - 0
main/inc/lib/usermanager.lib.php

@@ -1383,6 +1383,9 @@ class UserManager
     /**
      * Get user path from user ID (returns an array).
      * The return format is a complete path to a folder ending with "/"
+     * In case the first level of subdirectory of users/ does not exist, the
+     * function will attempt to create it. Probably not the right place to do it
+     * but at least it avoids headaches in many other places.
      * @param   integer $id User ID
      * @param   string  $type Type of path to return (can be 'system', 'web', 'rel', 'last')
      * @return  string  User folder path (i.e. /var/www/chamilo/app/upload/users/1/1/)
@@ -1397,6 +1400,18 @@ class UserManager
         $userPath = "users/$id/";
         if (api_get_setting('split_users_upload_directory') === 'true') {
             $userPath = 'users/'.substr((string) $id, 0, 1).'/'.$id.'/';
+            // In exceptional cases, on some portals, the intermediate base user
+            // directory might not have been created. Make sure it is before
+            // going further.
+            $rootPath = api_get_path(SYS_UPLOAD_PATH) . 'users/' . substr((string) $id, 0, 1);
+            if (!is_dir($rootPath)) {
+                $perm = api_get_permissions_for_new_directories();
+                try {
+                    mkdir($rootPath, $perm);
+                } catch (Exception $e) {
+                    //
+                }
+            }
         }
         switch ($type) {
             case 'system': // Base: absolute system path.