*/ final class books_controller extends core { /** * Страница с библеотекой * * @param array $vars */ public function index(array $vars = []): ?string { // Проверка аутентифицированности $vars['account'] = accounts::account($vars); if (!empty($vars['id'])) { // Определённая книга // Чтение книги $vars['book'] = books::read(['id' => $vars['id']])[0] ?? null; if (empty($vars['book'])) { // Не найдена книга return null; } // Генерация представления 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 * * @return string|null Файл, если найден */ public function cover(array $vars = []): ?string { // Проверка входных параметров if (empty($vars['id'])) return null; // Инициализация пути до файла $file = \STORAGE . DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . $vars['id'] . DIRECTORY_SEPARATOR . '0.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 Параметры * @param array $files Файлы * * @return string|null HTML-документ */ public function write(array $vars = [], array $files = []): ?string { // ПЕРЕНЕСТИ В МОДЕЛЬ // Инициализация буфера сохранённых книг $books = []; for ($i = -1; count($files['books']['name']) > ++$i;) { // Перебор загруженных книг // Генерация хеша файла $hash = hash_file('md5', $files['books']['tmp_name'][$i]) ?? 0; if (move_uploaded_file($files['books']['tmp_name'][$i], \STORAGE . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR . $hash . '_' . $files['books']['name'][$i])) { // Загружен и перемещён из временной папки файл с книгой // Запись в буфер сохранённых книг $books[] = $hash . '_' . $files['books']['name'][$i]; } } foreach ($books as $book) { // Перебор сохранённых книг // Запись в базу данных // Инициализация пути до хранилища $storage = \STORAGE . DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . 'id' . DIRECTORY_SEPARATOR; // Извлечение изображений из PDF-документа exec("cd $storage && pdfimages -j $book"); } // Перенаправление header('Location: /books', response_code: 303); return null; } /** * Чтение * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function read(array $vars = []): ?string { if (accounts::deauthentication($vars)) { // Удалось деаутентифицироваться } // Генерация представления return $this->view->render(DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR . 'index.html', $vars); } /** * Удаление * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function delete(array $vars = []): ?string { if (accounts::deauthentication($vars)) { // Удалось деаутентифицироваться } // Генерация представления return $this->view->render(DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR . 'index.html', $vars); } }