Вход Регистрация
Файл: upload/pages/work/work.php
Строк: 197
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');

$id abs((int)($_GET['id'] ?? 0));
$work FetchAssoc(dbquery("SELECT * FROM works WHERE id = ?", [$id]));

if (empty(
$work['id'])) {
    
header("HTTP/1.0 404 Not Found");
    include (
$_SERVER['DOCUMENT_ROOT'] . '/pages/err_pages/404.php'); 
    exit();
}

$imgs dbquery("SELECT k_image FROM works_images WHERE k_work = ?", [$id]);

$images = [];

while (
$img FetchAssoc($imgs)) {
    
$images[] = ($img['k_image'] ?? '-');
}

$hashOne CryptorHash('1'$work['salt']);
$hashNull CryptorHash('0'$work['salt']);

$us FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$work['user_work']]));
$count_rt DataResult(dbquery("SELECT COUNT(*) AS total_count FROM `rating` WHERE `k_work` = ?", [$id]));

$order_work null;
if (
$user['id'] !== null && $work['user_work'] !== null) {
    
$order_work FetchAssoc(dbquery("SELECT * FROM `works_transact_orders` WHERE `worker` = ? AND `us` = ? AND `k_work` = ?", [$user['id'], $work['user_work'], $id]));
}

$work_process FetchAssoc(dbquery("SELECT * FROM `work_processed` WHERE `k_order` = ?", [$order_work['deal_order'] ?? '']));

$checkWorkProcess DataResult(dbquery("SELECT COUNT(*) AS total_count FROM `work_processed` WHERE `worker` = ? AND `creator` = ? AND `stade` = 1", [$user['id'], $work['user_work']]), 0);
$count_transact_user DataResult(dbquery("SELECT COUNT(*) FROM `transactions` WHERE `us` = ?", [$user['id']]), 0);

$blocks getWorkBlocks($work$work_process$user$users_perms$hashNull$hashOne$order_work);

if (isset(
$user['id'])) {
    
// Генерация ключа заказа
    
$orderDigits OrderGenKey();
    
    
// Оплата заказа
    
if (isset($_POST['pay'])) {
        
check_csrf();
        
processWorkPurchase($user$work$work_process$checkWorkProcess$orderDigits$id$us$count_transact_user);
    }
    
    
// Скрыть работу
    
if (isset($_POST['non-eye-work'])) {
        
check_csrf();
        if (
$work['user_work'] == $user['id'] || $users_perms['edit_works'] == 1) {
            
updateWorkVisibility($id'1'$work['salt']);
        } else {
            
showAlert('Ошибка''fail''Вы не можете скрыть чужое объявление!');
            
ReloadPage();
        }
    }
    
    
// Показать работу
    
if (isset($_POST['set-on-eye-work'])) {
        
check_csrf();
        if (
$work['user_work'] == $user['id'] || $users_perms['edit_works'] == 1) {
            
updateWorkVisibility($id'0'$work['salt']);
        } else {
            
showAlert('Ошибка''fail''Вы не можете показать чужое объявление!');
            
ReloadPage();
        }
    }
    
    
// Удалить работу
    
if (isset($_POST['delete-work'])) {
        
check_csrf();
        if (
$work['user_work'] == $user['id'] || $users_perms['edit_works'] == 1) {
            
deleteWork($id);
        } else {
            
showAlert('Ошибка''fail''Вы не можете удалить чужое объявление!');
            
ReloadPage();
        }
    }
}
    
    
// --- Модалки: права ---
$can_order = ($work['user_work'] != $user['id']);
$can_edit = ($work['user_work'] == $user['id'] || $users_perms['edit_works'] == 1);

$section FetchAssoc(dbquery("SELECT * FROM `section` WHERE `id` = ?", [$work['section']]));
$subcategory FetchAssoc(dbquery("SELECT * FROM `subcategory` WHERE `id` = ?", [$work['subcategory']]));
$category FetchAssoc(dbquery("SELECT * FROM `category` WHERE `id` = ?", [$work['category']]));

// --- Хлебные крошки ---
$breadcrumbs generateBreadcrumbs([
    [
'/''Главная'],
    [
'/category' $work['category'], $category['name']],
    [
'/subcategory' $work['subcategory'], $subcategory['name']],
    [
'/section' $work['section'], $section['name']],
    [
'#'$work['name_work']]
]);

// --- Сайдбар ---
include $_SERVER['DOCUMENT_ROOT'] . '/core/elements/sidebars/work.php';

// --- Галерея ---
$images $images;

// --- Комментарии ---
$comments_limit 20;

$q dbquery("
    SELECT *
    FROM rating
    WHERE k_work = ?
    ORDER BY id DESC
    LIMIT ?
"
, [$id$comments_limit]);

$comments = [];
while (
$rt FetchAssoc($q)) {
    
$ank_rating FetchAssoc(dbquery("SELECT * FROM users WHERE id = ?", [$rt['us']]));
    
    include 
$_SERVER['DOCUMENT_ROOT'] . '/core/elements/comment-box.php';
    
$comments[] = $comment_box;
}

$show_more_comments = ($count_rt $comments_limit);

// --- Рендер ---
$page_html $view->render('pages/work/work.html', [
    
'breadcrumbs_html' => $breadcrumbs['html'],
    
'breadcrumbs_json' => $breadcrumbs['json_ld'],

    
'csrf' => $_SESSION['csrf_token'],

    
'work' => [
        
'id' => $id,
        
'name' => nl2br(chars($work['name_work'])),
        
'desc' => nl2br(chars($work['desc_work']))
    ],
    
    
'images' => $images,
    
'non_image' => homeLink() . '/core/templates/' $theme '/images/work/non-image.png',
    
    
'sidebar' => $sidebar,

    
'can_order' => $can_order,
    
'can_edit' => $can_edit,

    
'comments' => $comments,
    
'comments_limit' => $comments_limit,
    
'show_more_comments' => $show_more_comments,

    
'home' => homeLink()
]);


require_once (
$_SERVER['DOCUMENT_ROOT'] . '/layout.php');
?>

<script>
const track = document.getElementById("galleryTrack");
const prev = document.getElementById("galleryPrev");
const next = document.getElementById("galleryNext");

let index = 0;
const total = track.children.length;

// === Управление видимостью стрелок ===
function updateArrows() {
    if (total <= 1) {
        prev.style.display = "none";
        next.style.display = "none";
        return;
    }

    if (index === 0) {
        prev.style.display = "none";
        next.style.display = "flex";
    } else if (index === total - 1) {
        prev.style.display = "flex";
        next.style.display = "none";
    } else {
        prev.style.display = "flex";
        next.style.display = "flex";
    }
}

function updateGallery() {
    track.style.transform = `translateX(-${index * 100}%)`;
    updateArrows();
}

// === Клики ===
next.onclick = () => {
    if (index < total - 1) index++;
    updateGallery();
};

prev.onclick = () => {
    if (index > 0) index--;
    updateGallery();
};

// === Свайп для телефона ===
let startX = 0;

track.addEventListener("touchstart", e => {
    startX = e.touches[0].clientX;
});

track.addEventListener("touchend", e => {
    let endX = e.changedTouches[0].clientX;
    let diff = startX - endX;

    if (diff > 50 && index < total - 1) {
        index++;
    } else if (diff < -50 && index > 0) {
        index--;
    }

    updateGallery();
});

// === Инициализация ===
updateArrows();
</script>

<script>
$(document).on('click', '#load-more-work-comments', function() {

    let btn = $(this);
    let offset = parseInt(btn.data('offset'));
    let id = btn.data('id');

    $.ajax({
        url: '/core/ajax/work/load_more_comments.php',
        type: 'POST',
        dataType: 'json',
        data: { id: id, offset: offset },
        success: function(res) {

            $('.comments-list-work').append(res.html);

            if (!res.show_more) {
                btn.remove();
            } else {
                btn.data('offset', offset + 20);
            }
        }
    });
});
</script>
<script>
$(document).ready(function() {

    // Универсальная функция проверки статуса
    function checkHeartStatus(workId, userId) {

        $.ajax({
            url: '/core/ajax/cart/check_in_cart.php',
            type: 'POST',
            dataType: 'json',
            data: { work_id: workId, user_id: userId },
            success: function(response) {

                let icon = $('#set-hreat i');

                if (!icon.length) return; // если кнопки нет — выходим

                if (response.success) {
                    icon.removeClass('far').addClass('fas'); // красное сердце
                } else {
                    icon.removeClass('fas').addClass('far'); // пустое сердце
                }
            },
            error: function(xhr, status, error) {
                console.error('Ошибка сети:', error);
            }
        });
    }

    // Проверяем статус при загрузке страницы
    checkHeartStatus(<?= $id ?><?= $user['id'?>);

    // Делегирование — работает даже если элемент появляется позже
    $(document).on('click', '#set-hreat', function(e) {
        e.preventDefault();

        let icon = $('#set-hreat i');
        if (!icon.length) return;

        let isInCart = icon.hasClass('fas'); // есть ли в избранном

        let url = isInCart
            ? '/core/ajax/cart/remove_from_cart.php'
            : '/core/ajax/cart/add_to_cart.php';

        $.ajax({
            url: url,
            type: 'POST',
            dataType: 'json',
            data: { work_id: <?= $id ?>, user_id: <?= $user['id'?> },
            success: function(response) {
                if (response.success) {
                    if (isInCart) {
                        icon.removeClass('fas').addClass('far'); // убрали
                    } else {
                        icon.removeClass('far').addClass('fas'); // добавили
                    }
                }
            },
            error: function(xhr, status, error) {
                console.error('Ошибка сети:', error);
            }
        });
    });

});
</script>
Онлайн: 5
Реклама