diff --git a/book_delete.php b/book_delete.php index 5015a9b..6047d86 100755 --- a/book_delete.php +++ b/book_delete.php @@ -28,7 +28,7 @@ if (!$bookModel->userOwnsBook($book_id, $user_id)) { redirect('books.php'); } -// Получаем информацию о книге перед удалением (для сообщения) +// Получаем информацию о книге перед удалением $book = $bookModel->findById($book_id); if (!empty($book['cover_image'])) { $cover_path = COVERS_PATH . $book['cover_image']; diff --git a/book_edit.php b/book_edit.php index 0341863..787fb2a 100755 --- a/book_edit.php +++ b/book_edit.php @@ -2,8 +2,6 @@ require_once 'config/config.php'; require_login(); -// Подключаем функции для обложек - $user_id = $_SESSION['user_id']; $bookModel = new Book($pdo); @@ -99,8 +97,6 @@ $page_title = $is_edit ? "Редактирование книги" : "Созда include 'views/header.php'; ?> - -
@@ -147,7 +143,7 @@ include 'views/header.php'; placeholder="Номер по порядку в серии" min="1" style="width: 100%; margin-bottom: 1.5rem;"> - +
- +

Удалить все книги?

Это действие удалит все ваши книги и все связанные с ними главы. Это действие нельзя отменить.

diff --git a/chapter_delete.php b/chapter_delete.php index fa0b79d..dfe5e03 100755 --- a/chapter_delete.php +++ b/chapter_delete.php @@ -28,7 +28,7 @@ if (!$chapterModel->userOwnsChapter($chapter_id, $user_id)) { redirect('books.php'); } -// Получаем информацию о главе перед удалением (для редиректа) + $chapter = $chapterModel->findById($chapter_id); $book_id = $chapter['book_id']; @@ -39,6 +39,5 @@ if ($chapterModel->delete($chapter_id)) { $_SESSION['error'] = "Ошибка при удалении главы"; } -// Редирект обратно к списку глав книги redirect("chapters.php?book_id=$book_id"); ?> \ No newline at end of file diff --git a/chapter_edit.php b/chapter_edit.php index 9dec2b8..dc1c22d 100755 --- a/chapter_edit.php +++ b/chapter_edit.php @@ -23,7 +23,6 @@ if ($chapter_id) { $is_edit = true; } -// Проверяем, что book_id указан и пользователь имеет доступ к книге if (!$book_id) { $_SESSION['error'] = "Не указана книга"; redirect('books.php'); @@ -47,8 +46,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Обработка автосохранения if (isset($_POST['autosave']) && $_POST['autosave'] === 'true') { // Автосохранение работает только для существующих глав + // Если это не редактирование, игнорируем автосохранение if (!$is_edit) { - // Если это не редактирование, игнорируем автосохранение + header('Content-Type: application/json'); echo json_encode(['success' => false, 'message' => 'Автосохранение недоступно для новых глав']); exit; @@ -200,7 +200,6 @@ include 'views/header.php'; -
- + -
diff --git a/chapters.php b/chapters.php index a2ecbc9..95416ff 100755 --- a/chapters.php +++ b/chapters.php @@ -13,7 +13,7 @@ if (!$book_id) { $bookModel = new Book($pdo); $chapterModel = new Chapter($pdo); -// Проверяем права доступа к книге + if (!$bookModel->userOwnsBook($book_id, $user_id)) { $_SESSION['error'] = "У вас нет доступа к этой книге"; redirect('books.php'); diff --git a/export_book.php b/export_book.php index b53d298..59ea564 100755 --- a/export_book.php +++ b/export_book.php @@ -55,10 +55,7 @@ if ($book) { } $author_name = $author_info['display_name'] ?? $author_info['username'] ?? 'Неизвестный автор'; -// Функция для очистки имени файла -// function cleanFilename($filename) { -// return preg_replace('/[^a-zA-Z0-9_\-]/', '_', $filename); -// } + // Функция для преобразования Markdown в чистый текст с форматированием абзацев function markdownToPlainText($markdown) { @@ -98,7 +95,7 @@ function markdownToPlainText($markdown) { return $text; } -// Улучшенная функция для разбивки Markdown на абзацы с сохранением структуры +// Функция для разбивки Markdown на абзацы с сохранением структуры function markdownToParagraphs($markdown) { // Нормализуем переносы строк $text = str_replace(["\r\n", "\r"], "\n", $markdown); @@ -239,9 +236,6 @@ switch ($format) { case 'docx': exportDOCX($book, $chapters, $is_public, $author_name); break; - case 'odt': - exportODT($book, $chapters, $is_public, $author_name); - break; case 'html': exportHTML($book, $chapters, $is_public, $author_name); break; @@ -317,7 +311,7 @@ function exportPDF($book, $chapters, $is_public, $author_name) { $pdf->Ln(10); } - // Интерактивное оглавление - СОЗДАЕМ ССЫЛКИ + // Интерактивное оглавление $chapterLinks = []; if (!empty($chapters)) { $pdf->SetFont('dejavusans', 'B', 14); @@ -433,7 +427,7 @@ function exportDOCX($book, $chapters, $is_public, $author_name) { foreach ($chapters as $index => $chapter) { $chapter_number = $index + 1; - // Создаем гиперссылку на заголовок главы - ИСПРАВЛЕННЫЙ СИНТАКСИС + // Создаем гиперссылку на заголовок главы $section->addLink("chapter_{$chapter['id']}", "{$chapter_number}. {$chapter['title']}", null, null, true); $section->addTextBreak(1); } @@ -443,9 +437,9 @@ function exportDOCX($book, $chapters, $is_public, $author_name) { // Разделитель $section->addPageBreak(); - // Главы с закладками - ДОБАВЛЯЕМ ПРАВИЛЬНЫЕ ЗАКЛАДКИ + // Главы с закладками foreach ($chapters as $index => $chapter) { - // Добавляем закладку для главы ПЕРЕД заголовком + // Добавляем закладку для главы $section->addBookmark("chapter_{$chapter['id']}"); // Заголовок главы @@ -588,7 +582,7 @@ function exportHTML($book, $chapters, $is_public, $author_name) { font-size: 12px; color: #666; } - /* Улучшаем отображение абзацев */ + /* Отображение абзацев */ .chapter-content p { margin-bottom: 1em; text-align: justify; @@ -720,7 +714,7 @@ function exportTXT($book, $chapters, $is_public, $author_name) { if (!empty($book['description'])) { $content .= "ОПИСАНИЕ:\n"; - // Увеличиваем ширину до 144 символов (80 * 1.8) + // Ширина до 144 символов $content .= wordwrap($book['description'], 144) . "\n\n"; }