diff --git a/assets/css/style.css b/assets/css/style.css index 923e124..32377e2 100755 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1,5 +1,3 @@ -/* style.css - оптимизированная версия */ - /* Базовые стили */ h1, h2, h3, h4, h5, h6 { margin-bottom: 1rem; diff --git a/assets/js/autosave.js b/assets/js/autosave.js index a72733a..1c74600 100755 --- a/assets/js/autosave.js +++ b/assets/js/autosave.js @@ -5,7 +5,6 @@ document.addEventListener('DOMContentLoaded', function() { const statusSelect = document.getElementById('status'); // Проверяем, что это редактирование существующей главы - // Если в URL есть параметр 'id', значит это редактирование const urlParams = new URLSearchParams(window.location.search); const isEditMode = urlParams.has('id'); @@ -95,5 +94,5 @@ document.addEventListener('DOMContentLoaded', function() { } }); - console.log('Автосохранение включено для редактирования главы'); + //console.log('Автосохранение включено для редактирования главы'); }); \ No newline at end of file diff --git a/assets/js/markdown-editor.js b/assets/js/markdown-editor.js index 58ef366..4828775 100755 --- a/assets/js/markdown-editor.js +++ b/assets/js/markdown-editor.js @@ -149,7 +149,7 @@ document.addEventListener('DOMContentLoaded', function() { const controlsContainer = document.createElement('div'); controlsContainer.className = 'editor-controls'; - const fullscreenBtn = createButton('⛶', 'Полноэкранный режим', toggleFullscreen); + const fullscreenBtn = createButton('🔲', 'Полноэкранный режим', toggleFullscreen); const helpBtn = createButton('❓', 'Справка по Markdown', showHelp); controlsContainer.appendChild(fullscreenBtn); diff --git a/includes/functions.php b/includes/functions.php index 56f3548..b08f3ac 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -53,7 +53,7 @@ function transliterate($text) { return str_replace($cyr, $lat, $text); } -// Функция для очистки имени файла с транслитерацией +// Функция для очистки имени файла function cleanFilename($filename) { // Сначала транслитерируем $filename = transliterate($filename); @@ -130,7 +130,6 @@ function handleCoverUpload($file, $book_id) { } function optimizeImage($file_path) { - // Простая оптимизация - ресайз до максимальных размеров list($width, $height, $type) = getimagesize($file_path); $max_width = 800; @@ -190,8 +189,6 @@ function optimizeImage($file_path) { } } -// В includes/functions.php, после функции handleCoverUpload - function handleAvatarUpload($file, $user_id) { global $pdo; diff --git a/includes/parsedown/ParsedownExtra.php b/includes/parsedown/ParsedownExtra.php index 2f88ed6..6ffae81 100755 --- a/includes/parsedown/ParsedownExtra.php +++ b/includes/parsedown/ParsedownExtra.php @@ -3,13 +3,12 @@ require_once 'Parsedown.php'; class ParsedownExtra extends Parsedown { protected function blockQuote($Line) { - // - if (preg_match('/^\s+/', $Line['text'])) { + if (preg_match('/^�\s+/', $Line['text'])) { return array( 'element' => array( 'name' => 'div', 'attributes' => array('class' => 'dialogue'), - 'text' => ltrim($Line['text'], ' ') + 'text' => ltrim($Line['text'], '� ') ) ); } diff --git a/logout.php b/logout.php index ecc82d0..bd5123d 100755 --- a/logout.php +++ b/logout.php @@ -4,7 +4,7 @@ require_once 'config/config.php'; // Очищаем все данные сессии $_SESSION = []; -// Если нужно полностью уничтожить сессию + if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, @@ -13,7 +13,6 @@ if (ini_get("session.use_cookies")) { ); } -// Уничтожаем сессию session_destroy(); // Редирект на страницу входа diff --git a/models/Book.php b/models/Book.php index 57800ca..f15324f 100755 --- a/models/Book.php +++ b/models/Book.php @@ -82,7 +82,7 @@ class Book { try { $this->pdo->beginTransaction(); - // Удаляем главы книги (сработает CASCADE, но лучше явно) + // Удаляем главы книги $stmt = $this->pdo->prepare("DELETE FROM chapters WHERE book_id = ?"); $stmt->execute([$id]); @@ -127,7 +127,7 @@ class Book { } public function deleteCover($book_id) { - // Сначала получаем текущее имя файла + $book = $this->findById($book_id); $old_filename = $book['cover_image']; diff --git a/models/Chapter.php b/models/Chapter.php index 8767989..61ab3cc 100755 --- a/models/Chapter.php +++ b/models/Chapter.php @@ -30,13 +30,11 @@ class Chapter { } public function create($data) { - // Сначала получаем максимальный sort_order для этой книги $stmt = $this->pdo->prepare("SELECT MAX(sort_order) as max_order FROM chapters WHERE book_id = ?"); $stmt->execute([$data['book_id']]); $result = $stmt->fetch(); $next_order = ($result['max_order'] ?? 0) + 1; - // Подсчитываем количество слов $word_count = $this->countWords($data['content']); $stmt = $this->pdo->prepare(" @@ -81,7 +79,6 @@ class Chapter { } private function countWords($text) { - // Простой подсчет слов (можно улучшить) $text = strip_tags($text); $text = preg_replace('/[^\p{L}\p{N}\s]/u', ' ', $text); $words = preg_split('/\s+/', $text); diff --git a/models/Series.php b/models/Series.php index db9df2a..6385abd 100755 --- a/models/Series.php +++ b/models/Series.php @@ -85,11 +85,9 @@ class Series { try { $this->pdo->beginTransaction(); - // Убираем серию у всех книг $stmt = $this->pdo->prepare("UPDATE books SET series_id = NULL, sort_order_in_series = NULL WHERE series_id = ? AND user_id = ?"); $stmt->execute([$id, $user_id]); - // Удаляем саму серию $stmt = $this->pdo->prepare("DELETE FROM series WHERE id = ? AND user_id = ?"); $result = $stmt->execute([$id, $user_id]); @@ -126,7 +124,6 @@ class Series { return ($result['max_order'] ?? 0) + 1; } - // Новый метод для получения статистики по серии public function getSeriesStats($series_id, $user_id = null) { $sql = " SELECT diff --git a/models/User.php b/models/User.php index e09636f..046aeca 100755 --- a/models/User.php +++ b/models/User.php @@ -35,7 +35,6 @@ class User { public function create($data) { $password_hash = password_hash($data['password'], PASSWORD_DEFAULT); - // Определяем статус активности: по умолчанию неактивен, если не указано иное $is_active = $data['is_active'] ?? 0; $stmt = $this->pdo->prepare(" diff --git a/register.php b/register.php index a1933a4..25a69d9 100755 --- a/register.php +++ b/register.php @@ -49,7 +49,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { ]; // Если пользователя создает администратор - сразу активный - // Если пользователь регистрируется сам - неактивный (требует активации) + // Если пользователь регистрируется сам - требует активации if ($is_admin) { $user_data['is_active'] = 1; } else { diff --git a/series.php b/series.php index 799c229..bb02401 100755 --- a/series.php +++ b/series.php @@ -12,7 +12,7 @@ foreach ($series as &$ser) { $ser['book_count'] = $stats['book_count'] ?? 0; $ser['total_words'] = $stats['total_words'] ?? 0; } -unset($ser); // разрываем ссылку +unset($ser); $page_title = "Мои серии книг"; include 'views/header.php'; diff --git a/view_book.php b/view_book.php index 2f7ffc3..a96959f 100755 --- a/view_book.php +++ b/view_book.php @@ -61,7 +61,6 @@ include 'views/header.php';

- prepare("SELECT id, title FROM series WHERE id = ?"); @@ -240,7 +239,6 @@ include 'views/header.php'; background: #f5f5f5; } -/* Адаптивность для оглавления */ @media (max-width: 768px) { .book-content { font-size: 16px; @@ -262,8 +260,7 @@ include 'views/header.php'; .book-content pre { font-size: 14px; } - - /* Оглавление в одну колонку на мобильных */ + div[style*="columns: 2"] { columns: 1 !important; } diff --git a/views/header.php b/views/header.php index 0554659..7bc23dd 100755 --- a/views/header.php +++ b/views/header.php @@ -21,10 +21,6 @@
  • 📊 Панель
  • 📚 Мои серии
  • 📚 Мои книги
  • - - -
  • 👥 Пользователи
  • -
  • @@ -39,6 +35,9 @@