changes
This commit is contained in:
parent
76d33237b2
commit
2108ba1a36
|
|
@ -1,5 +1,3 @@
|
|||
/* style.css - оптимизированная версия */
|
||||
|
||||
/* Базовые стили */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-bottom: 1rem;
|
||||
|
|
|
|||
|
|
@ -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('Автосохранение включено для редактирования главы');
|
||||
});
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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('/^<5E>\s+/', $Line['text'])) {
|
||||
return array(
|
||||
'element' => array(
|
||||
'name' => 'div',
|
||||
'attributes' => array('class' => 'dialogue'),
|
||||
'text' => ltrim($Line['text'], '— ')
|
||||
'text' => ltrim($Line['text'], '<EFBFBD> ')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
// Редирект на страницу входа
|
||||
|
|
|
|||
|
|
@ -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'];
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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("
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||
];
|
||||
|
||||
// Если пользователя создает администратор - сразу активный
|
||||
// Если пользователь регистрируется сам - неактивный (требует активации)
|
||||
// Если пользователь регистрируется сам - требует активации
|
||||
if ($is_admin) {
|
||||
$user_data['is_active'] = 1;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ include 'views/header.php';
|
|||
<?php endif; ?>
|
||||
|
||||
<h1 style="margin-bottom: 0.5rem;"><?= e($book['title']) ?></h1>
|
||||
<!-- В view_book.php, после информации об авторе -->
|
||||
<?php if ($book['series_id']): ?>
|
||||
<?php
|
||||
$series_stmt = $pdo->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;
|
||||
|
|
@ -263,7 +261,6 @@ include 'views/header.php';
|
|||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* Оглавление в одну колонку на мобильных */
|
||||
div[style*="columns: 2"] {
|
||||
columns: 1 !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,10 +21,6 @@
|
|||
<li><a href="/dashboard.php">📊 Панель</a></li>
|
||||
<li><a href="/series.php">📚 Мои серии</a></li>
|
||||
<li><a href="/books.php">📚 Мои книги</a></li>
|
||||
|
||||
<?php if ($_SESSION['user_id'] == 1): ?>
|
||||
<li><a href="/admin/users.php">👥 Пользователи</a></li>
|
||||
<?php endif; ?>
|
||||
<li>
|
||||
<details role="list" dir="rtl">
|
||||
<summary aria-haspopup="listbox" role="link" style="display: flex; align-items: center; gap: 0.5rem;">
|
||||
|
|
@ -39,6 +35,9 @@
|
|||
<ul role="listbox">
|
||||
<li><a href="/profile.php">Настройки профиля</a></li>
|
||||
<li><a href="/author.php?id=<?= $_SESSION['user_id'] ?>" target="_blank">Моя публичная страница</a></li>
|
||||
<?php if ($_SESSION['user_id'] == 1): ?>
|
||||
<li><a href="/admin/users.php">👥 Пользователи</a></li>
|
||||
<?php endif; ?>
|
||||
<li><a href="/logout.php">Выйти</a></li>
|
||||
</ul>
|
||||
</details>
|
||||
|
|
|
|||
Loading…
Reference in New Issue