Grav\Plugin\Admin\AdminBaseController::taskGetFilesInFolder PHP Method

taskGetFilesInFolder() protected method

Used by the filepicker field to get a list of files in a folder.
protected taskGetFilesInFolder ( )
    protected function taskGetFilesInFolder()
    {
        if (!$this->authorizeTask('save', $this->dataPermissions())) {
            return false;
        }
        $data = $this->view == 'pages' ? $this->admin->page(true) : $this->prepareData([]);
        $settings = $data->blueprints()->schema()->getProperty($this->post['name']);
        if (isset($settings['folder'])) {
            $folder = $settings['folder'];
        } else {
            $folder = '@self';
        }
        // Do not use self@ outside of pages
        if ($this->view != 'pages' && in_array($folder, ['@self', 'self@'])) {
            $this->admin->json_response = ['status' => 'error', 'message' => sprintf($this->admin->translate('PLUGIN_ADMIN.FILEUPLOAD_PREVENT_SELF', null), $folder)];
            return false;
        }
        // Set destination
        $folder = Folder::getRelativePath(rtrim($folder, '/'));
        $folder = $this->admin->getPagePathFromToken($folder);
        $media = new Media($folder);
        $available_files = [];
        foreach ($media->all() as $name => $medium) {
            $available_files[] = $name;
        }
        // Peak in the flashObject for optimistic filepicker updates
        $pending_files = [];
        $sessionField = base64_encode($this->grav['uri']->url());
        $flash = $this->admin->session()->getFlashObject('files-upload');
        if ($flash && isset($flash[$sessionField])) {
            foreach ($flash[$sessionField] as $field => $data) {
                foreach ($data as $file) {
                    if (dirname($file['path']) === $folder) {
                        $pending_files[] = $file['name'];
                    }
                }
            }
        }
        $this->admin->session()->setFlashObject('files-upload', $flash);
        // Handle Accepted file types
        // Accept can only be file extensions (.pdf|.jpg)
        if (isset($settings['accept'])) {
            $available_files = array_filter($available_files, function ($file) use($settings) {
                return $this->filterAcceptedFiles($file, $settings);
            });
            $pending_files = array_filter($pending_files, function ($file) use($settings) {
                return $this->filterAcceptedFiles($file, $settings);
            });
        }
        $this->admin->json_response = ['status' => 'success', 'files' => array_values($available_files), 'pending' => array_values($pending_files), 'folder' => $folder];
        return true;
    }