File size: 7.82Kb
<?php
require_once 'db.php';
if (empty($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
$current_id = (int)$_SESSION['user_id'];
if (is_banned($current_id)) {
include 'header.php';
echo '<p>Ваш аккаунт заблокирован. Обратитесь в поддержку.</p>';
include 'footer.php';
exit;
}
/* 🔔 помечаем все "новые друзья" как просмотренные для этого пользователя */
$upd = $mysqli->prepare("
UPDATE friendships
SET requester_notified = 1
WHERE requester_id = ? AND status = 'accepted' AND requester_notified = 0
");
$upd->bind_param('i', $current_id);
$upd->execute();
$upd->close();
// входящие заявки
$stmt = $mysqli->prepare("
SELECT f.requester_id AS user_id, f.created_at,
u.name, u.city, u.photo
FROM friendships f
JOIN users u ON u.id = f.requester_id
WHERE f.addressee_id = ? AND f.status = 'pending'
ORDER BY f.created_at DESC
");
$stmt->bind_param('i', $current_id);
$stmt->execute();
$requests = $stmt->get_result();
$stmt->close();
// друзья
$stmt = $mysqli->prepare("
SELECT
CASE WHEN f.requester_id = ? THEN f.addressee_id ELSE f.requester_id END AS user_id,
u.name, u.city, u.photo, f.created_at
FROM friendships f
JOIN users u ON u.id = CASE WHEN f.requester_id = ? THEN f.addressee_id ELSE f.requester_id END
WHERE (f.requester_id = ? OR f.addressee_id = ?) AND f.status = 'accepted'
ORDER BY u.name
");
$stmt->bind_param('iiii', $current_id, $current_id, $current_id, $current_id);
$stmt->execute();
$friends = $stmt->get_result();
$stmt->close();
include 'header.php';
?>
<style>
.friends-page { margin-top: 18px; }
.friends-grid {
display: grid;
grid-template-columns: minmax(0,1fr) minmax(0,1fr);
gap: 18px;
}
.friend-card, .request-card {
background:#ffffff;
border-radius:22px;
padding:16px 18px;
box-shadow:0 10px 30px rgba(0,0,0,0.06);
}
.friends-list, .requests-list {
display:flex;
flex-direction:column;
gap:10px;
}
.friend-row, .request-row {
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
}
.friend-info {
display:flex;
align-items:center;
gap:10px;
}
.friend-avatar{
width:46px;height:46px;border-radius:999px;object-fit:cover;
}
.friend-avatar-placeholder{
width:46px;height:46px;border-radius:999px;
background:linear-gradient(135deg,#ffe5f0,#f5ebff);
display:flex;align-items:center;justify-content:center;font-size:22px;
}
.friend-name{font-size:14px;font-weight:600;}
.friend-city{font-size:12px;color:#7b7287;}
.friend-actions{display:flex;flex-wrap:wrap;gap:4px;}
@media (max-width:768px){
.friends-grid{grid-template-columns:1fr;}
.friend-card,.request-card{margin:0 -4px;border-radius:18px;}
}
</style>
<div class="friends-page">
<h1>Друзья</h1>
<div class="friends-grid">
<section class="request-card">
<h2 style="margin-top:0;font-size:18px;">Заявки в друзья</h2>
<?php if ($requests->num_rows === 0): ?>
<p style="font-size:14px;color:#7b7287;">У вас пока нет новых заявок.</p>
<?php else: ?>
<div class="requests-list">
<?php while ($u = $requests->fetch_assoc()): ?>
<div class="request-row">
<div class="friend-info">
<?php if ($u['photo']): ?>
<img src="/assets/img/<?= htmlspecialchars($u['photo']) ?>" class="friend-avatar" alt="">
<?php else: ?>
<div class="friend-avatar-placeholder">🙂</div>
<?php endif; ?>
<div>
<div class="friend-name"><?= htmlspecialchars($u['name'] ?: 'Без имени') ?></div>
<?php if (!empty($u['city'])): ?>
<div class="friend-city"><?= htmlspecialchars($u['city']) ?></div>
<?php endif; ?>
</div>
</div>
<div class="friend-actions">
<form method="post" action="friends_action.php">
<input type="hidden" name="target_id" value="<?= (int)$u['user_id'] ?>">
<button name="action" value="accept" class="btn-primary btn-small">Принять</button>
</form>
<form method="post" action="friends_action.php">
<input type="hidden" name="target_id" value="<?= (int)$u['user_id'] ?>">
<button name="action" value="decline" class="btn-outline btn-small">Отклонить</button>
</form>
</div>
</div>
<?php endwhile; ?>
</div>
<?php endif; ?>
</section>
<section class="friend-card">
<h2 style="margin-top:0;font-size:18px;">Мои друзья</h2>
<?php if ($friends->num_rows === 0): ?>
<p style="font-size:14px;color:#7b7287;">
У вас пока нет друзей. Попробуйте добавить кого-нибудь из анкет 😊
</p>
<?php else: ?>
<div class="friends-list">
<?php while ($u = $friends->fetch_assoc()): ?>
<div class="friend-row">
<div class="friend-info">
<?php if ($u['photo']): ?>
<img src="/assets/img/<?= htmlspecialchars($u['photo']) ?>" class="friend-avatar" alt="">
<?php else: ?>
<div class="friend-avatar-placeholder">🙂</div>
<?php endif; ?>
<div>
<div class="friend-name"><?= htmlspecialchars($u['name'] ?: 'Без имени') ?></div>
<?php if (!empty($u['city'])): ?>
<div class="friend-city"><?= htmlspecialchars($u['city']) ?></div>
<?php endif; ?>
</div>
</div>
<div class="friend-actions">
<a href="user.php?user_id=<?= (int)$u['user_id'] ?>" class="btn-outline btn-small">Профиль</a>
<a href="messages.php?user_id=<?= (int)$u['user_id'] ?>" class="btn-outline btn-small">Написать</a>
<a href="send_gift.php?user_id=<?= (int)$u['user_id'] ?>" class="btn-outline btn-small">Подарок</a>
<form method="post" action="friends_action.php">
<input type="hidden" name="target_id" value="<?= (int)$u['user_id'] ?>">
<button name="action" value="remove" class="btn-outline btn-small"
onclick="return confirm('Удалить из друзей?');">
Удалить
</button>
</form>
</div>
</div>
<?php endwhile; ?>
</div>
<?php endif; ?>
</section>
</div>
</div>
<?php include 'footer.php'; ?>