Вход Регистрация
Файл: profile.php
Строк: 293
<?php
session_start
();
require 
'config.php';

$user_id $_SESSION['user_id'] ?? null;
if (!
$user_id) {
    
header("Location: ?view=login");
    exit;
}

// Get target user ID
$target_id $_GET['id'] ?? $user_id;

// Fetch profile user
$stmt $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$target_id]);
$profile_user $stmt->fetch();

if (!
$profile_user) {
    die(
"User not found");
}

// Check if following
$stmt $pdo->prepare("SELECT * FROM follows WHERE follower_id = ? AND following_id = ?");
$stmt->execute([$user_id$target_id]);
$is_following $stmt->fetch() ? true false;

// Get stats
$stmt $pdo->prepare("SELECT COUNT(*) FROM posts WHERE user_id = ?");
$stmt->execute([$target_id]);
$posts_count $stmt->fetchColumn();

$stmt $pdo->prepare("SELECT COUNT(*) FROM follows WHERE following_id = ?");
$stmt->execute([$target_id]);
$followers_count $stmt->fetchColumn();

$stmt $pdo->prepare("SELECT COUNT(*) FROM follows WHERE follower_id = ?");
$stmt->execute([$target_id]);
$following_count $stmt->fetchColumn();

// Get posts
$stmt $pdo->prepare("SELECT * FROM posts WHERE user_id = ? AND type = 'post' ORDER BY created_at DESC");
$stmt->execute([$target_id]);
$profile_posts $stmt->fetchAll();

$is_own_profile = ($target_id == $user_id);
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo htmlspecialchars($profile_user['username']); ?> - RU100gram</title>
    <link rel="stylesheet" href="assets/style.css">
</head>
<body>
    <div class="profile-container" style="max-width: 935px; margin: 0 auto; padding: 30px 20px;">
        <!-- Profile Header -->
        <header class="profile-header" style="display: flex; margin-bottom: 44px; align-items: center;">
            <div style="flex: 0 0 auto; margin-right: 30px;">
                <img src="<?php echo !empty($profile_user['avatar']) ? htmlspecialchars($profile_user['avatar']) : 'assets/default_avatar.svg'?>
                     style="width: 150px; height: 150px; border-radius: 50%; object-fit: cover;">
            </div>
            
            <div style="flex: 1;">
                <div style="display: flex; align-items: center; margin-bottom: 20px;">
                    <h2 style="font-size: 28px; font-weight: 300; margin: 0 20px 0 0;"><?php echo htmlspecialchars($profile_user['username']); ?></h2>
                    
                    <?php if ($is_own_profile): ?>
                        <a href="settings.php" class="btn-secondary" style="padding: 7px 16px; margin-right: 8px;">Редактировать профиль</a>
                        <button class="btn-secondary" style="padding: 7px 16px;">Посмотреть архив</button>
                    <?php else: ?>
                        <button id="follow-btn" onclick="toggleFollow(<?php echo $target_id?>)" 
                                class="<?php echo $is_following 'btn-secondary' 'btn-primary'?>
                                style="padding: 7px 24px; margin-right: 8px;">
                            <?php echo $is_following 'Вы подписаны' 'Подписаться'?>
                        </button>
                        <button onclick="startConversation(<?php echo $target_id?>)" class="btn-secondary" style="padding: 7px 24px; margin-right: 8px;">Отправить сообщение</button>
                        <button class="btn-secondary" style="padding: 7px 16px;">▼</button>
                    <?php endif; ?>
                </div>
                
                <div class="profile-stats" style="display: flex; margin-bottom: 20px; font-size: 16px;">
                    <span style="margin-right: 40px;"><strong><?php echo $posts_count?></strong> посты</span>
                    <span style="margin-right: 40px; cursor: pointer;" onclick="showFollowers(<?php echo $target_id?>)">
                        <strong><?php echo $followers_count?></strong> читатели
                    </span>
                    <span style="cursor: pointer;" onclick="showFollowing(<?php echo $target_id?>)">
                        <strong><?php echo $following_count?></strong> смотрит
                    </span>
                </div>
                
                <div style="font-weight: 600; margin-bottom: 4px;"><?php echo htmlspecialchars($profile_user['full_name']); ?></div>
                <?php if (!empty($profile_user['bio'])): ?>
                    <div style="white-space: pre-wrap;"><?php echo htmlspecialchars($profile_user['bio']); ?></div>
                <?php endif; ?>
            </div>
        </header>
        
        <!-- Profile Tabs -->
        <div style="border-top: 1px solid var(--border-color); display: flex; justify-content: center; gap: 60px;">
            <div class="profile-tab active" onclick="switchProfileTab('posts', this)" style="padding: 18px 0; border-top: 1px solid white; margin-top: -1px; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; letter-spacing: 1px; cursor: pointer;">
                <svg fill="currentColor" height="12" viewBox="0 0 24 24" width="12"><rect fill="none" height="18" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" width="18" x="3" y="3"></rect><line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="9.015" x2="9.015" y1="3" y2="21"></line><line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="14.985" x2="14.985" y1="3" y2="21"></line><line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="21" x2="3" y1="9.015" y2="9.015"></line><line fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="21" x2="3" y1="14.985" y2="14.985"></line></svg>
                Сообщения
            </div>
            <div class="profile-tab" onclick="switchProfileTab('reels', this)" style="padding: 18px 0; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; letter-spacing: 1px; cursor: pointer; color: var(--text-secondary);">
                <svg fill="currentColor" height="12" viewBox="0 0 24 24" width="12"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.6 0 12 0zm0 22C6.5 22 2 17.5 2 12S6.5 2 12 2s10 4.5 10 10-4.5 10-10 10z"></path><path d="M12 6c-3.3 0-6 2.7-6 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z"></path></svg>
                REELS
            </div>
            <?php if ($is_own_profile): ?>
            <div class="profile-tab" onclick="switchProfileTab('saved', this)" style="padding: 18px 0; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; letter-spacing: 1px; cursor: pointer; color: var(--text-secondary);">
                <svg fill="currentColor" height="12" viewBox="0 0 24 24" width="12"><polygon fill="none" points="20 21 12 13.44 4 21 4 3 20 3 20 21" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></polygon></svg>
                Сохраненки
            </div>
            <?php endif; ?>
        </div>
        
        <!-- Posts Grid -->
        <div class="profile-grid" style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px; margin-top: 20px;">
            <?php if (empty($profile_posts)): ?>
                <div style="grid-column: 1 / -1; text-align: center; padding: 60px 0; color: var(--text-secondary);">
                    <svg aria-label="Камера" fill="currentColor" height="62" viewBox="0 0 96 96" width="62"><circle cx="48" cy="48" fill="none" r="47" stroke="currentColor" stroke-miterlimit="10" stroke-width="2"></circle><ellipse cx="48.002" cy="49.524" fill="none" rx="10.444" ry="10.476" stroke="currentColor" stroke-linejoin="round" stroke-width="2.095"></ellipse><path d="M63.994 69A8.02 8.02 0 0 0 72 60.968V39.456a8.023 8.023 0 0 0-8.01-8.035h-1.749a4.953 4.953 0 0 1-4.591-3.242C56.61 25.696 54.859 25 52.469 25h-8.983c-2.39 0-4.141.695-5.181 3.178a4.954 4.954 0 0 1-4.592 3.242H32.01a8.024 8.024 0 0 0-8.012 8.035v21.512A8.02 8.02 0 0 0 32.007 69Z" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="2"></path></svg>
                    <p style="margin-top: 20px; font-size: 28px; font-weight: 300;">Постов пока нет</p>
                </div>
            <?php else: ?>
                <?php foreach ($profile_posts as $post): ?>
                    <div class="grid-post" onclick="openPostModal(<?php echo $post['id']; ?>)" style="aspect-ratio: 1; overflow: hidden; cursor: pointer; position: relative;">
                        <?php if ($post['media_type'] === 'video'): ?>
                            <video src="<?php echo htmlspecialchars($post['image_url']); ?>" style="width: 100%; height: 100%; object-fit: cover;"></video>
                        <?php else: ?>
                            <img src="<?php echo htmlspecialchars($post['image_url']); ?>" style="width: 100%; height: 100%; object-fit: cover;">
                        <?php endif; ?>
                    </div>
                <?php endforeach; ?>
            <?php endif; ?>
        </div>
    </div>
    
    <script src="assets/app.js"></script>
    <script>
        const profileUserId = <?php echo $target_id?>;

        function toggleFollow(userId) {
            const btn = document.getElementById('follow-btn');
            const formData = new FormData();
            formData.append('action', 'follow');
            formData.append('user_id', userId);
            
            fetch('api.php', { method: 'POST', body: formData })
            .then(res => res.json())
            .then(data => {
                if (data.success) {
                    if (data.following) {
                        btn.textContent = 'Вы подписаны';
                        btn.className = 'btn-secondary';
                    } else {
                        btn.textContent = 'Подписаться';
                        btn.className = 'btn-primary';
                    }
                    // Update followers count
                    location.reload();
                }
            });
        }
        
        function startConversation(userId) {
            const formData = new FormData();
            formData.append('action', 'start_conversation');
            formData.append('user_id', userId);
            
            fetch('api.php', { method: 'POST', body: formData })
            .then(res => res.json())
            .then(data => {
                if (data.success) {
                    // Redirect to direct messages with conversation ID
                    window.location.href = `?view=direct&conv=${data.conversation_id}`;
                } else {
                    alert('Ошибка создания беседы.');
                }
            })
            .catch(error => {
                console.error('Error:', error);
                alert('Ошибка подключения');
            });
        }
        
        function showFollowers(userId) {
            alert('Список читателей — функция, которая находится в стадии разработки.');
        }
        
        function showFollowing(userId) {
            alert('Список подписок – это функция, которая находится в стадии разработки.');
        }
    </script>
</body>
</html>
Онлайн: 0
Реклама