127 lines
3.8 KiB
PHP
127 lines
3.8 KiB
PHP
<?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['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
|
||
{
|
||
}
|
||
}
|