Файл: upload/pages/profile/profile.php
Строк: 167
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');
$id = abs((int)($_GET['id'] ?? 0));
$ank = FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$id]));
if (empty($ank['id'])) {
header("HTTP/1.0 404 Not Found");
include ($_SERVER['DOCUMENT_ROOT'] . '/pages/err_pages/404.php');
exit();
}
// Рейтинг
$rating_q = dbquery("SELECT * FROM `rating` WHERE `worker` = ? ORDER BY `id` DESC", [$id]);
$count_rt = DataResult(dbquery("SELECT COUNT(*) AS total_count FROM `rating` WHERE `worker` = ?", [$id]));
$user_group_profile = FetchAssoc(dbquery("SELECT * FROM `admin_perms` WHERE `id` = ?", [$ank['level_us']]));
// Кол-во ворков
$count_works = DataResult(dbquery("SELECT COUNT(*) AS total_count FROM `works` WHERE `user_work` = ?", [$id]));
// Бан
$us_ban = FetchAssoc(dbquery("SELECT * FROM `users_banned` WHERE `us` = ?", [$id]));
if ($us_ban) {
if ($us_ban['hours'] != -1) {
$end_ban = vremja($us_ban['time_ban'] + ($us_ban['hours'] * 3600));
} else {
$end_ban = 'Никогда';
}
$reason_ban = $us_ban['reas'] ?: 'Не указана';
}
// Ворки (фильтрация)
$all_raw = dbquery("SELECT * FROM `works` WHERE `user_work` = ? ORDER BY `id` DESC", [$id]);
$all_filtered = [];
while ($row = FetchAssoc($all_raw)) {
$hashOne = CryptorHash('1', $row['salt']);
if ($us_ban) {
continue;
}
if ($row['k_off'] === $hashOne && $row['user_work'] != $user['id']) {
continue;
}
if ($row['del'] === $hashOne) {
continue;
}
$all_filtered[] = $row;
}
$max_works = 32;
$k_post = count($all_filtered);
$works_filtered = array_slice($all_filtered, 0, $max_works);
// Рейтинг пользователя (для звёзд)
$rtg_us = FetchAssoc(dbquery("SELECT * FROM `rating` WHERE `worker` = ?", [$id]));
$breadcrumbs = generateBreadcrumbs([
['/', 'Главная'],
['#', 'Профиль ' . $ank['login']]
]);
// Бан
$ban = null;
if ($us_ban && $us_ban['us'] == $id) {
$ban = [
'reason' => $reason_ban,
'start' => vremja($us_ban['time_ban']),
'end' => $end_ban
];
}
// Услуги
$works_html = [];
foreach ($works_filtered as $work) {
// Передаём данные в компонент
$GLOBALS['work'] = $work;
$GLOBALS['user'] = $user;
// Подключаем компонент, который создаёт $work_item
require $_SERVER['DOCUMENT_ROOT'] . '/core/elements/work-box.php';
// Добавляем HTML в массив
$works_html[] = $work_item;
}
// Отзывы
$limit_comments = 20;
$comments_html = [];
$rating_first = dbquery("SELECT * FROM rating WHERE worker = ? ORDER BY id DESC LIMIT ?", [$id, $limit_comments]);
while ($rt = FetchAssoc($rating_first)) {
$ank_rating = FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$rt['us']]));
include $_SERVER['DOCUMENT_ROOT'] . '/core/elements/comment-box.php';
$comments_html[] = $comment_box;
}
$page_html = $view->render('pages/profile/profile.html', [
'breadcrumbs_html' => $breadcrumbs['html'],
'breadcrumbs_json' => $breadcrumbs['json_ld'],
'home' => homeLink(),
'user' => [
'id' => $ank['id'],
'login' => chars($ank['login']),
'avatar' => GetAvatar($ank['avatar']),
'background' => GetBackground($ank['background']),
'group_name' => $user_group_profile['name_perm'],
'group_style' => $user_group_profile['design_prefix'],
'header' => GetHead($ank['header']),
'description' => nl2br(chars($ank['description'])),
'rating_num' => rating_num_worker($id),
'rating_stars' => rating_star_worker($rtg_us['worker']),
'online' => onlineDot($ank['id'], 'profile-nick-online')
],
'is_owner' => ($user && $user['id'] == $id),
'is_auth' => isset($user['id']),
'ban' => $ban,
'works' => $works_html,
'works_limit' => $max_works,
'show_more_works' => ($k_post > $max_works),
'comments' => $comments_html,
'comments_limit' => $limit_comments,
'csrf' => $_SESSION['csrf_token'],
'show_more_comments' => ($count_rt > $limit_comments)
]);
require_once ($_SERVER['DOCUMENT_ROOT'] . '/layout.php');
?>
<script>
$(document).on('click', '#load-more-works', function() {
let btn = $(this);
let offset = parseInt(btn.data('offset'));
let id = btn.data('id');
$.ajax({
url: '/core/ajax/profile/load_more_works.php',
type: 'POST',
dataType: 'json',
data: { id: id, offset: offset },
success: function(res) {
$('.works-list-profile').append(res.html);
if (!res.show_more) {
btn.remove();
} else {
btn.data('offset', offset + 32);
}
}
});
});
$(document).on('click', '#load-more-comments', function() {
let btn = $(this);
let offset = parseInt(btn.data('offset'));
let id = btn.data('id');
$.ajax({
url: '/core/ajax/profile/load_more_comments.php',
type: 'POST',
dataType: 'json',
data: { id: id, offset: offset },
success: function(res) {
$('.comments-container').append(res.html);
if (!res.show_more) {
btn.remove();
} else {
btn.data('offset', offset + 20);
}
}
});
});
</script>
<script>
document.addEventListener("submit", function(e) {
const form = e.target.closest(".up-all-form");
if (!form) return;
const btn = form.querySelector(".up-all-btn");
btn.disabled = true;
btn.innerText = "Поднимаем...";
});
</script>