*/ 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 (accounts::init(errors: $vars['errors'])->access('books')) { // Найден и авторизован аккаунт 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 { // Инициализация журнала ошибок $vars['errors'] = []; if (accounts::init(errors: $vars['errors'])->access('books')) { // Найден и авторизован аккаунт if (isset($vars['id'])) { // Найдены обязательные входные параметры if (books::delete((int) $vars['id'], $vars['errors'])) { // Удалена книга из базы данных // Инициализация пути до книги $book = \STORAGE . DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . $vars['id']; if (file_exists($book)) { // Найдена книга // Удаление книги exec('rm -rf ' . escapeshellarg($book)); // Запись статуса выполнения в буфер вывода $status = true; } } } } return json_encode([ 'status' => $status ?? false, 'errors' => $vars['errors'] ]); } /** * Поворот * * @param array $vars * * @return string|null JSON */ public function rotate(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = []; if (accounts::init(errors: $vars['errors'])->access('books')) { // Найден и авторизован аккаунт if (isset($vars['id'], $vars['page'])) { // Найдены обязательные входные параметры // Поворот страницы $status = books::rotate((int) $vars['id'], (int) $vars['page'], $vars['errors']); } } return json_encode([ 'status' => $status ?? false, 'errors' => $vars['errors'] ]); } }