*/ final class books_controller extends core { /** * Страница с книгами (или книгой) * * @param array $vars */ public function index(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = []; // Проверка аутентифицированности $vars['account'] = accounts::init(errors: $vars['errors']); if (isset($vars['id'])) { // Определённая книга // Чтение метаданных книги $vars['book'] = books::read(['id' => $vars['id']])[0] ?? null; // Инициализация страницы if (empty($vars['page']) || $vars['page'] < 0) $vars['page'] = 0; // Генерация представления return $this->view->render(DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . 'book.html', $vars); } else { // Все книги // Чтение книг $vars['books'] = books::read(limit: 30, page: isset($vars['page']) && $vars['page'] > 0 ? $vars['page'] : 1); // Генерация представления return $this->view->render(DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . 'index.html', $vars); } } /** * Запись * * @param array $vars Параметры * @param array $files Файлы * * @return string|null HTML-документ */ public function write(array $vars = [], array $files = []): ?string { // Инициализация журнала ошибок $vars['errors'] = []; if (count($books = books::import($files['books'] ?? [], errors: $vars['errors'])) > 0) { // Загружены книги } else { // Не загружены книги } // Перенаправление header('Location: /books', response_code: 303); return 'wtf'; } /** * Чтение * * @param array $vars * * @return string|null Файл, если найден */ public function read(array $vars = []): ?string { if (isset($vars['id'], $vars['file'])) { // Найдены обязательные входные параметры // Инициализация пути до файла $file = \STORAGE . DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . $vars['id'] . DIRECTORY_SEPARATOR . $vars['file'] . '.jpg'; if (file_exists($file)) { // Найден файл // Настройка заголовков header('Content-Description: File Transfer'); header('Content-Type: image/jpeg'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); // Очистить буфер вывода ob_end_clean(); return file_get_contents($file); } } return null; } /** * Удаление * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function delete(array $vars = []): ?string { } }