Files
surikov/mirzaev/surikovlib/system/controllers/books_controller.php
Arsen Mirzaev Tatyano-Muradovich ab752bf34f Инициализация
2022-03-06 05:21:24 +10:00

171 lines
5.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace mirzaev\surikovlib\controllers;
use mirzaev\surikovlib\controllers\core;
use mirzaev\surikovlib\models\accounts_model as accounts;
use mirzaev\surikovlib\models\books_model as books;
/**
* Контроллер пользователей
*
* @package mirzaev\surikovlib\controllers
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
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);
}
}