/** * Handle logout. * * @return bool True if the action was performed. */ protected function taskLogout() { $language = $this->grav['user']->authenticated ? $this->grav['user']->language : ($this->grav['language']->getLanguage() ?: 'en'); $this->admin->session()->invalidate()->start(); $this->setRedirect('/logout/lang:' . $language); return true; }
/** * Used by the filepicker field to get a list of files in a folder. */ 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; }