findById($book_id); if (!$book || $book['user_id'] != $user_id) { $_SESSION['error'] = "Книга не найдена или у вас нет доступа"; redirect('books.php'); } $is_edit = true; } // Обработка формы $cover_error = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!verify_csrf_token($_POST['csrf_token'] ?? '')) { $_SESSION['error'] = "Ошибка безопасности"; redirect($is_edit ? "book_edit.php?id=$book_id" : 'book_edit.php'); } $title = trim($_POST['title'] ?? ''); $description = trim($_POST['description'] ?? ''); $genre = trim($_POST['genre'] ?? ''); $editor_type = $_POST['editor_type'] ?? 'markdown'; if (empty($title)) { $_SESSION['error'] = "Название книги обязательно"; } else { $series_id = !empty($_POST['series_id']) ? (int)$_POST['series_id'] : null; $sort_order_in_series = !empty($_POST['sort_order_in_series']) ? (int)$_POST['sort_order_in_series'] : null; if ($series_id && !$sort_order_in_series) { $seriesModel = new Series($pdo); $sort_order_in_series = $seriesModel->getNextSortOrder($series_id); } $data = [ 'title' => $title, 'description' => $description, 'genre' => $genre, 'user_id' => $user_id, 'series_id' => $series_id, 'sort_order_in_series' => $sort_order_in_series, 'editor_type' => $editor_type ]; $data['published'] = isset($_POST['published']) ? 1 : 0; // Проверяем, изменился ли тип редактора $editor_changed = false; $old_editor_type = null; if ($is_edit && $book['editor_type'] !== $editor_type) { $editor_changed = true; $old_editor_type = $book['editor_type']; } // Обработка загрузки обложки if (isset($_FILES['cover_image']) && $_FILES['cover_image']['error'] === UPLOAD_ERR_OK) { $cover_result = handleCoverUpload($_FILES['cover_image'], $book_id); if ($cover_result['success']) { $bookModel->updateCover($book_id, $cover_result['filename']); // Обновляем данные книги $book = $bookModel->findById($book_id); } else { $cover_error = $cover_result['error']; } } // Обработка удаления обложки if (isset($_POST['delete_cover']) && $_POST['delete_cover'] == '1') { $bookModel->deleteCover($book_id); $book = $bookModel->findById($book_id); } if ($is_edit) { $success = $bookModel->update($book_id, $data); // Конвертируем контент глав, если изменился редактор if ($success && $editor_changed) { $conversion_success = $bookModel->convertChaptersContent($book_id, $old_editor_type, $editor_type); if (!$conversion_success) { $_SESSION['warning'] = "Книга обновлена, но возникли ошибки при конвертации содержания глав"; } else { $_SESSION['info'] = "Книга обновлена. Содержание глав сконвертировано в новый формат редактора."; } } $message = $success ? "Книга успешно обновлена" : "Ошибка при обновлении книги"; } else { $success = $bookModel->create($data); $message = $success ? "Книга успешно создана" : "Ошибка при создании книги"; if ($success) { $new_book_id = $pdo->lastInsertId(); redirect("book_edit.php?id=$new_book_id"); } } if ($success) { $_SESSION['success'] = $message; redirect('books.php'); } else { $_SESSION['error'] = $message; } } } $page_title = $is_edit ? "Редактирование книги" : "Создание новой книги"; include 'views/header.php'; ?>
Примечание: В публичном просмотре отображаются только главы со статусом "Опубликована"
Экспортируйте книгу в различные форматы:
Примечание: Экспортируются все главы книги (включая черновики)
| Название | Статус | Слов | Действия |
|---|---|---|---|
| = e($chapter['title']) ?> | = $chapter['status'] == 'published' ? 'Опубликована' : 'Черновик' ?> | = $chapter['word_count'] ?> | Редактировать |
В этой книге пока нет глав.
✏️ Добавить первую главу