helper = resolve(HelperService::class); } /** * Search public files * * @param Request $request * @param $token * @return Collection */ public function search_public(Request $request, $token) { // Get shared $shared = get_shared($token); // Abort if folder is protected if ((int)$shared->is_protected) { abort(403, "Sorry, you don't have permission"); } // Search files id db $searched_files = File::search($request->input('query')) ->where('user_id', $shared->user_id) ->get(); $searched_folders = Folder::search($request->input('query')) ->where('user_id', $shared->user_id) ->get(); // Get all children content $foldersIds = Folder::with('folders:id,parent_id,unique_id,name') ->where('user_id', $shared->user_id) ->where('parent_id', $shared->item_id) ->get(); // Get accessible folders $accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]); // Filter files $files = $searched_files->filter(function ($file) use ($accessible_folder_ids, $token) { // Set public urls $file->setPublicUrl($token); // check if item is in accessible folders return in_array($file->folder_id, $accessible_folder_ids); }); // Filter folders $folders = $searched_folders->filter(function ($folder) use ($accessible_folder_ids) { // check if item is in accessible folders return in_array($folder->unique_id, $accessible_folder_ids); }); // Collect folders and files to single array return collect([$folders, $files])->collapse(); } /** * Get navigation tree * * @return array */ public function get_public_navigation_tree($token) { // Get sharing record $shared = get_shared($token); // Check if user can get directory $this->helper->check_item_access($shared->item_id, $shared); // Get folders $folders = Folder::with('folders:id,parent_id,name') ->where('parent_id', $shared->item_id) ->where('user_id', $shared->user_id) ->sortable() ->get(['id', 'parent_id', 'id', 'name']); return [ [ 'id' => $shared->item_id, 'name' => __('vuefilemanager.home'), 'location' => 'public', 'folders' => $folders, ] ]; } /** * Browse public folders * * @param $id * @param $token * @return Collection */ public function get_public_folders($id, $token) { $shared = get_shared($token); // Abort if folder is protected if ((int)$shared->is_protected) { abort(403, "Sorry, you don't have permission"); } // Check if user can get directory $this->helper->check_item_access($id, $shared); // Get files and folders list($folders, $files) = $this->helper->get_items_under_shared_by_folder_id($id, $shared); // Set thumbnail links for public files $files->map(function ($file) use ($token) { $file->setPublicUrl($token); }); // Collect folders and files to single array return collect([$folders, $files])->collapse(); } }