/**
  * Permanently delete given folders and associated files from db and disk.
  *
  * @param array|Collection $folders
  * @return int
  */
 public function deleteFolders($folders)
 {
     if (!count($folders)) {
         return 0;
     }
     foreach ($folders as $folder) {
         //if folder is array it's a model instance, otherwise we will need to fetch it from db
         if (is_array($folder)) {
             $folder = Folder::with('files', 'folders')->withTrashed()->findOrFail($folder['id']);
         }
         if ($folder->user_id === Auth::user()->id || Auth::user()->isAdmin) {
             //delete all files
             foreach ($folder->files as $file) {
                 Storage::deleteDirectory($file->getRelativePath(true));
             }
             //delete all file models from db
             File::whereIn('id', $folder->files->lists('id'))->forceDelete();
             //delete sub-folders and files recursively
             if (!$folder->folders->isEmpty()) {
                 $this->deleteFolders($folder->folders);
             }
             //delete folder model from db
             $folder->forceDelete();
         }
     }
     return count($folders);
 }