View file zip0.ru/header.php

File size: 13.3Kb
<?php
// ВАЖНО: никаких пробелов/строк до этого блока
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

$user_id = $_SESSION['user_id'] ?? null;

$is_admin        = false;
$unread_messages = 0;
$unread_matches  = 0;
$unread_gifts    = 0;
$friend_requests = 0;

if ($user_id && isset($mysqli) && $mysqli instanceof mysqli) {
    // админ
    if ($stmt = $mysqli->prepare("SELECT is_admin FROM users WHERE id = ? LIMIT 1")) {
        $stmt->bind_param('i', $user_id);
        $stmt->execute();
        $stmt->bind_result($is_admin_flag);
        if ($stmt->fetch()) {
            $is_admin = (bool)$is_admin_flag;
        }
        $stmt->close();
    }

    // непрочитанные сообщения
    if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM messages WHERE to_user_id = ? AND is_read = 0")) {
        $stmt->bind_param('i', $user_id);
        $stmt->execute();
        $stmt->bind_result($cnt);
        if ($stmt->fetch()) $unread_messages = (int)$cnt;
        $stmt->close();
    }

    // новые совпадения
    if ($stmt = $mysqli->prepare("SELECT COUNT(*) 
        FROM matches 
        WHERE (user1_id = ? OR user2_id = ?) AND is_new_for_user = 1")) {
        $stmt->bind_param('ii', $user_id, $user_id);
        $stmt->execute();
        $stmt->bind_result($cnt);
        if ($stmt->fetch()) $unread_matches = (int)$cnt;
        $stmt->close();
    }

    // подарки
    if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM gifts WHERE to_user_id = ? AND is_viewed = 0")) {
        $stmt->bind_param('i', $user_id);
        $stmt->execute();
        $stmt->bind_result($cnt);
        if ($stmt->fetch()) $unread_gifts = (int)$cnt;
        $stmt->close();
    }

    // заявки в друзья
    if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM friends WHERE friend_id = ? AND status = 'pending'")) {
        $stmt->bind_param('i', $user_id);
        $stmt->execute();
        $stmt->bind_result($cnt);
        if ($stmt->fetch()) $friend_requests = (int)$cnt;
        $stmt->close();
    }
}

function softlove_badge($count) {
    if ($count <= 0) return '';
    if ($count > 99) $count = '99+';
    return '<span class="sl-badge">'.$count.'</span>';
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>SoftLove</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/assets/style.css?v=2">
    <style>
        body {
            margin:0;
            font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
            background:#fff5fa;
            color:#222;
        }
        .sl-header {
            position:sticky;
            top:0;
            z-index:100;
            background:#ffffff;
            box-shadow:0 2px 10px rgba(0,0,0,0.04);
        }
        .sl-header-inner {
            max-width:900px;
            margin:0 auto;
            padding:10px 16px;
            display:flex;
            align-items:center;
            justify-content:space-between;
            gap:10px;
        }
        .sl-logo {
            display:flex;
            align-items:center;
            gap:8px;
            font-weight:600;
            font-size:20px;
            text-decoration:none;
            color:#222;
        }
        .sl-logo-heart {
            width:18px;
            height:18px;
            border-radius:50%;
            background:linear-gradient(135deg,#ff5f8b,#ff8f5f);
            display:flex;
            align-items:center;
            justify-content:center;
            color:#fff;
            font-size:13px;
        }
        .sl-header-nav {
            display:flex;
            align-items:center;
            gap:10px;
            font-size:14px;
            flex-wrap:nowrap;
        }
        .sl-header-link {
            text-decoration:none;
            color:#444;
            position:relative;
            white-space:nowrap;
        }
        .sl-header-link:hover {
            color:#ff4f8b;
        }
        .sl-header-btn {
            padding:6px 12px;
            border-radius:18px;
            border:none;
            cursor:pointer;
            font-size:14px;
            white-space:nowrap;
        }
        .sl-header-btn-primary {
            background:linear-gradient(135deg,#ff5f8b,#ff8f5f);
            color:#fff;
        }
        .sl-header-btn-outline {
            background:transparent;
            border:1px solid rgba(0,0,0,0.1);
            color:#444;
        }

        .sl-badge {
            position:absolute;
            top:-6px;
            right:-10px;
            min-width:18px;
            height:18px;
            border-radius:999px;
            background:#ff3b68;
            color:#fff;
            font-size:11px;
            line-height:18px;
            text-align:center;
            padding:0 5px;
        }

        .sl-burger {
            width:22px;
            height:22px;
            display:none;
            flex-direction:column;
            justify-content:space-between;
            cursor:pointer;
        }
        .sl-burger span {
            display:block;
            height:2px;
            border-radius:999px;
            background:#444;
        }

        /* боковое меню */
        .sl-side {
            position:fixed;
            top:0;
            left:0;
            bottom:0;
            width:270px;
            background:linear-gradient(180deg,#ffffff,#ffeaf5);
            box-shadow:4px 0 30px rgba(0,0,0,0.15);
            transform:translateX(-100%);
            transition:transform .25s ease;
            z-index:150;
            padding:20px 18px 26px;
            display:flex;
            flex-direction:column;
            gap:18px;
        }
        .sl-side.open { transform:translateX(0); }
        .sl-side-header {
            display:flex;
            justify-content:space-between;
            align-items:center;
        }
        .sl-side-close {
            cursor:pointer;
            font-size:24px;
            line-height:1;
        }
        .sl-side-nav {
            margin-top:10px;
            display:flex;
            flex-direction:column;
            gap:6px;
        }
        .sl-side-link {
            display:flex;
            align-items:center;
            gap:10px;
            padding:10px 12px;
            border-radius:14px;
            text-decoration:none;
            color:#333;
            font-size:15px;
            background:transparent;
            transition:background .18s ease, transform .12s ease;
            position:relative;
        }
        .sl-side-link-icon {
            width:26px;
            height:26px;
            border-radius:999px;
            background:#fff;
            display:flex;
            align-items:center;
            justify-content:center;
            box-shadow:0 4px 10px rgba(0,0,0,0.08);
            font-size:16px;
        }
        .sl-side-link:hover {
            background:rgba(255,255,255,0.8);
            transform:translateX(2px);
        }
        .sl-side-section-title {
            margin-top:4px;
            margin-bottom:2px;
            font-size:12px;
            text-transform:uppercase;
            letter-spacing:0.05em;
            color:#9b8ca5;
        }

        .sl-badge-side {
            position:absolute;
            right:10px;
            top:50%;
            transform:translateY(-50%);
            min-width:18px;
            height:18px;
            border-radius:999px;
            background:#ff3b68;
            color:#fff;
            font-size:11px;
            line-height:18px;
            text-align:center;
            padding:0 5px;
        }

        /* для авторизованных на мобилке прячем навигацию в шапке (есть бургер) */
        @media (max-width:768px){
            .sl-header-nav-auth { display:none; }
            .sl-burger { display:flex; }
        }
        /* гостевая навигация видна всегда */
        .sl-header-nav-guest { display:flex; }

        main.sl-main {
            max-width:900px;
            margin:0 auto;
            padding:16px;
            padding-bottom:80px;
        }
    </style>
</head>
<body>

<header class="sl-header">
    <div class="sl-header-inner">
        <div style="display:flex;align-items:center;gap:12px;">
            <?php if ($user_id): ?>
                <div class="sl-burger" id="sl-burger">
                    <span></span><span></span><span></span>
                </div>
            <?php endif; ?>
            <a href="/index.php" class="sl-logo">
                <div class="sl-logo-heart">♥</div>
                <span>SoftLove</span>
            </a>
        </div>

        <nav class="sl-header-nav <?php echo $user_id ? 'sl-header-nav-auth' : 'sl-header-nav-guest'; ?>">
            <?php if ($user_id): ?>
                <a href="/browse.php" class="sl-header-link">Анкеты</a>
                <a href="/matches.php" class="sl-header-link">
                    Совпадения <?= softlove_badge($unread_matches) ?>
                </a>
                <a href="/dialogs.php" class="sl-header-link">
                    Сообщения <?= softlove_badge($unread_messages) ?>
                </a>
                <a href="/friends.php" class="sl-header-link">
                    Друзья <?= softlove_badge($friend_requests) ?>
                </a>
                <a href="/gifts_inbox.php" class="sl-header-link">
                    Подарки <?= softlove_badge($unread_gifts) ?>
                </a>
                <a href="/profile.php" class="sl-header-link">Профиль</a>
                <?php if ($is_admin): ?>
                    <a href="/admin/index.php" class="sl-header-link">Админка</a>
                <?php endif; ?>
                <a href="/logout.php" class="sl-header-link">Выход</a>
            <?php else: ?>
                <a href="/browse.php" class="sl-header-link">Анкеты</a>
                <a href="/login.php" class="sl-header-link">
                    <button class="sl-header-btn sl-header-btn-outline">Войти</button>
                </a>
                <a href="/register.php" class="sl-header-link">
                    <button class="sl-header-btn sl-header-btn-primary">Регистрация</button>
                </a>
            <?php endif; ?>
        </nav>
    </div>
</header>

<?php if ($user_id): ?>
<aside class="sl-side" id="sl-side">
    <div class="sl-side-header">
        <div class="sl-logo">
            <div class="sl-logo-heart">♥</div>
            <span>SoftLove</span>
        </div>
        <div class="sl-side-close" id="sl-side-close">&times;</div>
    </div>

    <div class="sl-side-section-title">Навигация</div>
    <nav class="sl-side-nav">
        <a href="/browse.php" class="sl-side-link">
            <div class="sl-side-link-icon">📡</div>
            <span>Анкеты</span>
        </a>
        <a href="/matches.php" class="sl-side-link">
            <div class="sl-side-link-icon">👥</div>
            <span>Совпадения</span>
            <?php if ($unread_matches > 0): ?>
                <span class="sl-badge-side"><?= $unread_matches > 99 ? '99+' : $unread_matches ?></span>
            <?php endif; ?>
        </a>
        <a href="/dialogs.php" class="sl-side-link">
            <div class="sl-side-link-icon">✉️</div>
            <span>Сообщения</span>
            <?php if ($unread_messages > 0): ?>
                <span class="sl-badge-side"><?= $unread_messages > 99 ? '99+' : $unread_messages ?></span>
            <?php endif; ?>
        </a>
        <a href="/friends.php" class="sl-side-link">
            <div class="sl-side-link-icon">🤝</div>
            <span>Друзья</span>
            <?php if ($friend_requests > 0): ?>
                <span class="sl-badge-side"><?= $friend_requests > 99 ? '99+' : $friend_requests ?></span>
            <?php endif; ?>
        </a>
        <a href="/gifts_inbox.php" class="sl-side-link">
            <div class="sl-side-link-icon">🎁</div>
            <span>Подарки</span>
            <?php if ($unread_gifts > 0): ?>
                <span class="sl-badge-side"><?= $unread_gifts > 99 ? '99+' : $unread_gifts ?></span>
            <?php endif; ?>
        </a>

        <div class="sl-side-section-title">Профиль</div>
        <a href="/profile.php" class="sl-side-link">
            <div class="sl-side-link-icon">👤</div>
            <span>Мой профиль</span>
        </a>
        <?php if ($is_admin): ?>
            <a href="/admin/index.php" class="sl-side-link">
                <div class="sl-side-link-icon">🛠</div>
                <span>Админка</span>
            </a>
        <?php endif; ?>
        <a href="/logout.php" class="sl-side-link">
            <div class="sl-side-link-icon">🚪</div>
            <span>Выход</span>
        </a>
    </nav>
</aside>
<script>
document.addEventListener('DOMContentLoaded',function(){
    const burger = document.getElementById('sl-burger');
    const side   = document.getElementById('sl-side');
    const close  = document.getElementById('sl-side-close');
    if (burger && side && close) {
        burger.addEventListener('click',()=>side.classList.add('open'));
        close.addEventListener('click',()=>side.classList.remove('open'));
    }
});
</script>
<?php endif; ?>

<main class="sl-main">