web_writer/views/user/view_public.php

140 lines
8.0 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// views/user/view_public.php
include 'views/layouts/header.php';
?>
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-lg-10">
<article class="card border-0 shadow-sm">
<div class="card-body p-4">
<header class="text-center mb-5">
<!-- Аватарка автора -->
<div class="mb-4">
<?php if (!empty($user['avatar'])): ?>
<img src="<?= AVATARS_URL . e($user['avatar']) ?>"
alt="<?= e($user['display_name'] ?: $user['username']) ?>"
class="rounded-circle border border-4 border-primary"
style="width: 150px; height: 150px; object-fit: cover;"
onerror="this.style.display='none'">
<?php else: ?>
<div class="rounded-circle bg-primary bg-gradient d-flex align-items-center justify-content-center mx-auto"
style="width: 150px; height: 150px;">
<span class="text-white fw-bold display-6">
<?= mb_substr(e($user['display_name'] ?: $user['username']), 0, 1) ?>
</span>
</div>
<?php endif; ?>
</div>
<h1 class="display-5 mb-2"><?= e($user['display_name'] ?: $user['username']) ?></h1>
<!-- Биография автора -->
<?php if (!empty($user['bio'])): ?>
<div class="bg-light p-4 rounded mb-4">
<?= e($user['bio']) ?>
</div>
<?php endif; ?>
<!-- Статистика автора -->
<div class="d-flex justify-content-center gap-4 flex-wrap">
<div class="text-center">
<div class="h3 text-primary mb-0"><?= $total_books ?></div>
<small class="text-muted">Книг</small>
</div>
<div class="text-center">
<div class="h3 text-success mb-0"><?= $total_chapters ?></div>
<small class="text-muted">Глав</small>
</div>
<div class="text-center">
<div class="h3 text-warning mb-0"><?= $total_words ?></div>
<small class="text-muted">Слов</small>
</div>
</div>
</header>
<h2 class="h3 text-center mb-4">Публикации автора</h2>
<?php if (empty($books)): ?>
<div class="text-center py-5">
<i class="bi bi-journal-bookmark fs-1 text-muted"></i>
<h3 class="h4 text-muted mt-3">У этого автора пока нет опубликованных книг</h3>
<p class="text-muted">Следите за обновлениями, скоро здесь появятся новые произведения!</p>
</div>
<?php else: ?>
<div class="row g-4">
<?php foreach ($books as $book): ?>
<div class="col-md-6">
<div class="card h-100">
<div class="card-body">
<div class="d-flex align-items-start mb-3">
<?php if ($book['cover_image']): ?>
<img src="<?= COVERS_URL . e($book['cover_image']) ?>"
alt="<?= e($book['title']) ?>"
class="rounded me-3"
style="width: 60px; height: 80px; object-fit: cover;"
onerror="this.style.display='none'">
<?php else: ?>
<div class="bg-primary bg-gradient rounded d-flex align-items-center justify-content-center me-3"
style="width: 60px; height: 80px;">
<i class="bi bi-book text-white"></i>
</div>
<?php endif; ?>
<div class="flex-grow-1">
<h5 class="card-title"><?= e($book['title']) ?></h5>
<?php if ($book['genre']): ?>
<p class="text-muted small mb-1"><em><?= e($book['genre']) ?></em></p>
<?php endif; ?>
</div>
</div>
<?php if ($book['description']): ?>
<p class="card-text text-muted small mb-3">
<?= nl2br(e($book['description'])) ?>
</p>
<?php endif; ?>
<?php
$book_stats = $book_model->getBookStats($book['id'], true);
$chapter_count = $book_stats['chapter_count'] ?? 0;
$word_count = $book_stats['total_words'] ?? 0;
?>
<div class="d-flex justify-content-between align-items-center">
<a href="<?= SITE_URL ?>/book/<?= e($book['share_token']) ?>" class="btn btn-primary btn-sm">
<i class="bi bi-book"></i> Читать книгу
</a>
<small class="text-muted">
Глав: <?= $chapter_count ?> | Слов: <?= $word_count ?>
</small>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<footer class="text-center mt-5 pt-4 border-top">
<p class="text-muted">
Страница автора создана в <?= e(APP_NAME) ?> • <?= date('Y') ?>
</p>
</footer>
</div>
</article>
</div>
</div>
</div>
<style>
.card {
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1) !important;
}
</style>
<?php include 'views/layouts/footer.php'; ?>