попа
This commit is contained in:
@@ -17,12 +17,62 @@ use exception;
|
||||
*/
|
||||
final class books_model extends core
|
||||
{
|
||||
/**
|
||||
* Запись в базу данных
|
||||
*
|
||||
* @param string $title Название
|
||||
* @param string|null $description Описание
|
||||
* @param int|null $account Аккаунт (идентификатор)
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return int|null Идентификатор записанной книги
|
||||
*/
|
||||
public static function write(string $title, ?string $description = null, ?int $account = null, array &$errors = []): ?int
|
||||
{
|
||||
// Инициализация журнала ошибок
|
||||
$errors['books'] ?? $errors['books'] = [];
|
||||
|
||||
try {
|
||||
// Инициализация аккаунта
|
||||
$account = accounts::init($account, $errors);
|
||||
|
||||
// Инициализация запроса
|
||||
$request = static::$db->prepare("INSERT INTO `books` (`account`, `title`, `description`) VALUES (:account, :title, :description)");
|
||||
|
||||
// Инициализация параметров
|
||||
$params = [
|
||||
':account' => $account->id,
|
||||
':title' => $title,
|
||||
':description' => $description
|
||||
];
|
||||
|
||||
// Отправка запроса
|
||||
$request->execute($params);
|
||||
|
||||
if ($id = static::$db->lastInsertId()) {
|
||||
// Получен идентификатор загруженной книги (подразумевается)
|
||||
|
||||
return (int) $id;
|
||||
}
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors['books'][] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение
|
||||
*
|
||||
* @param array $expression Выражение поиска
|
||||
* @param int $limit Ограничение по количеству
|
||||
* @param int $page Страница (сдвиг)
|
||||
* @param int $page Страница (для списка книг)
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return array Книги
|
||||
@@ -76,48 +126,26 @@ final class books_model extends core
|
||||
}
|
||||
|
||||
/**
|
||||
* Запись в базу данных
|
||||
* Удаление из базы данных
|
||||
*
|
||||
* @param string $title Название
|
||||
* @param string|null $description Описание
|
||||
* @param int|null $account Аккаунт (идентификатор)
|
||||
* @param int $id Идентификатор
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return int|null Идентификатор записанной книги
|
||||
* @return bool Статус выполнения
|
||||
*/
|
||||
public static function write(string $title, ?string $description = null, ?int $account = null, array &$errors = []): ?int
|
||||
public static function delete(int $id, array &$errors = []): bool
|
||||
{
|
||||
// Инициализация журнала ошибок
|
||||
$errors['books'] ?? $errors['books'] = [];
|
||||
|
||||
try {
|
||||
// Инициализация аккаунта
|
||||
$account = accounts::init($account, $errors);
|
||||
|
||||
if (empty($account) || !accounts::access('books', $account->id)) {
|
||||
// Не удалось найти аккаунт или разрешение на управление книгами не выдано
|
||||
|
||||
throw new exception('У вас нет разрешения на управление книгами');
|
||||
}
|
||||
|
||||
// Инициализация запроса
|
||||
$request = static::$db->prepare("INSERT INTO `books` (`account`, `title`, `description`) VALUES (:account, :title, :description)");
|
||||
|
||||
// Инициализация параметров
|
||||
$params = [
|
||||
':account' => $account->id,
|
||||
':title' => $title,
|
||||
':description' => $description
|
||||
];
|
||||
$request = static::$db->prepare("DELETE FROM `books` WHERE `id` = :id LIMIT 1");
|
||||
|
||||
// Отправка запроса
|
||||
$request->execute($params);
|
||||
$request->execute([':id' => $id]);
|
||||
|
||||
if ($id = static::$db->lastInsertId()) {
|
||||
// Получен идентификатор загруженной книги (подразумевается)
|
||||
|
||||
return (int) $id;
|
||||
}
|
||||
return true;
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors['books'][] = [
|
||||
@@ -128,7 +156,7 @@ final class books_model extends core
|
||||
];
|
||||
}
|
||||
|
||||
return null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,12 +183,6 @@ final class books_model extends core
|
||||
// Инициализация аккаунта
|
||||
$account = accounts::init($account, $errors);
|
||||
|
||||
if (empty($account) || !accounts::access('books', $account->id)) {
|
||||
// Не найден аккаунт или разрешение на управление книгами не выдано
|
||||
|
||||
throw new exception('У вас нет разрешения на управление книгами');
|
||||
}
|
||||
|
||||
// Инициализация буфера инициализированных книг
|
||||
$initialized = [];
|
||||
|
||||
@@ -238,6 +260,66 @@ final class books_model extends core
|
||||
return $writed ?? [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение
|
||||
*
|
||||
* @param int $id Идентификатор
|
||||
* @param int $page Страница (сдвиг)
|
||||
* @param array &$errors Журнал ошибок
|
||||
*
|
||||
* @return bool Статус выполнения
|
||||
*/
|
||||
public static function rotate(int $id, int $page = 1, array &$errors = []): bool
|
||||
{
|
||||
// Инициализация журнала ошибок
|
||||
$errors['books'] ?? $errors['books'] = [];
|
||||
|
||||
try {
|
||||
// Инициализация запроса
|
||||
$request = static::$db->prepare("SELECT EXISTS (SELECT * FROM `books` WHERE `id` = :id LIMIT 1)");
|
||||
|
||||
// Отправка запроса
|
||||
$request->execute([':id' => $id]);
|
||||
|
||||
if ($request->fetch(pdo::FETCH_NUM)[0] === 1) {
|
||||
// Найдена книга
|
||||
|
||||
// Инициализация пути книги
|
||||
$book = \STORAGE . DIRECTORY_SEPARATOR . 'books' . DIRECTORY_SEPARATOR . $id;
|
||||
|
||||
// Инициализация пути до файла
|
||||
$file = $book . DIRECTORY_SEPARATOR . "$page.jpg";
|
||||
|
||||
// Инициализация пути до нового местоположения файла
|
||||
$old = $book . DIRECTORY_SEPARATOR . 'old' . DIRECTORY_SEPARATOR . "$page.jpg";
|
||||
|
||||
// Инициализация директории
|
||||
if (!file_exists($book)) throw new exception('Не удалось найти директорию книги');
|
||||
|
||||
// Инициализация директории оригинальных изображений
|
||||
if (!file_exists($book . DIRECTORY_SEPARATOR . 'old')) if (!mkdir($book . DIRECTORY_SEPARATOR . 'old', 0755, true)) throw new exception('Не удалось записать директорию для оригинальных страниц книги');
|
||||
|
||||
// Перемещение страницы в директорию оригинальных страниц
|
||||
exec("mv $file $old");
|
||||
|
||||
// Переворачивание файла и возвращение на нужное местоположение
|
||||
exec("jpegtran -rotate 90 $old > $file");
|
||||
|
||||
return true;
|
||||
}
|
||||
} catch (exception $e) {
|
||||
// Запись в журнал ошибок
|
||||
$errors['books'][] = [
|
||||
'text' => $e->getMessage(),
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'stack' => $e->getTrace()
|
||||
];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Подсчёт количества страниц
|
||||
*
|
||||
|
Reference in New Issue
Block a user