Files
surikov/mirzaev/surikovlib/system/controllers/books_controller.php
2022-10-13 07:07:04 +03:00

192 lines
6.1 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['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']
]);
}
}