Файл: upload/pages/feedback/new-feedback.php
Строк: 80
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');
if (!isset($user['id'])) {
showAlert('Ошибка', 'fail', 'Сперва необходимо авторизоваться');
RedirectToPage('/');
exit();
}
$id = abs((int)($_GET['id'] ?? 0));
$work_prc = FetchAssoc(dbquery("SELECT * FROM `work_processed` WHERE `id` = ?", [$id]));
if (empty($work_prc['id'])) {
header("HTTP/1.0 404 Not Found");
include ($_SERVER['DOCUMENT_ROOT'] . '/pages/err_pages/404.php');
exit();
}
$work_rating = FetchAssoc(dbquery("SELECT * FROM `rating` WHERE `k_work` = ?", [$work_prc['k_work']]));
$work = FetchAssoc(dbquery("SELECT * FROM `works` WHERE `id` = ?", [$work_prc['k_work']]));
$worker = FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$work_prc['creator']]));
$us_worker = FetchAssoc(dbquery("SELECT * FROM `users` WHERE `id` = ?", [$work_prc['worker']]));
$HashNull = CryptorHash('0', $work['salt']);
$rating_feedback = FetchAssoc(dbquery("SELECT * FROM `rating` WHERE `deal` = ? AND `us` = ? AND `del` = ?", [$id, $user['id'], $HashNull]));
if (isset($rating_feedback['id'])) {
RedirectToPage('/');
exit();
}
if ($work_prc['worker'] != $user['id']) {
RedirectToPage('/');
exit();
}
$breadcrumbs = generateBreadcrumbs([
['/', 'Главная'],
['#', 'Отзыв о заказе']
]);
$page_html = $view->render('pages/feedback/new.html', [
'breadcrumbs_html' => $breadcrumbs['html'],
'breadcrumbs_json' => $breadcrumbs['json_ld'],
'csrf' => $_SESSION['csrf_token'],
'work' => [
'name' => $work['name_work'],
'desc' => $work['desc_work']
],
'worker' => nick($worker['id']),
'order_id' => $id,
'closed' => vremja($work_prc['time_work'])
]);
if(isset($_POST['set'])) {
check_csrf();
$rating = intval($_POST['rating']);
$feedback = chars($_POST['feedback']);
$del = CryptorHash('0', $work['salt']);
if($work_prc['creator'] == $user['id']) {
showAlert('Ошибка', 'fail', 'Нельзя оставить отзыв самому себе');
ReloadPage();
exit();
} else {
if ($work_prc['worker'] != $user['id']) {
showAlert('Ошибка', 'fail', 'Вы не приобретали эту работу');
ReloadPage();
exit();
} else {
if (isset($rating_feedback['id'])) {
showAlert('Ошибка', 'fail', 'Вы уже оставили отзыв на эту работу');
ReloadPage();
exit();
} else {
// === 1. Создаём отзыв ===
dbquery("INSERT INTO `rating`
SET `worker` = ?, `us` = ?, `rating` = ?, `k_work` = ?, `k_comment` = ?, `deal` = ?, `del` = ?, `salt` = ?",
[$work_prc['creator'], $user['id'], $rating, $work['id'], $feedback, $id, $del, $work['salt']]
);
// === 2. Получаем ID созданного отзыва ===
$rating_id = InGetLastInsertId();
// === 3. Сохраняем в историю ===
dbquery("
INSERT INTO `rating_history`
(rating_id, deal, us, worker, rating, k_work, k_comment, created_at, deleted_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, NULL)
", [
$rating_id,
$id,
$user['id'],
$work_prc['creator'],
$rating,
$work['id'],
$feedback,
time()
]);
// === 4. Уведомление исполнителю ===
$text = "[QUOTEMESSAGEROOT][BMESSAGEROOT]Оценил выполнение заказа на {$rating} звезд![/BMESSAGEROOT][/QUOTEMESSAGEROOT]";
insertMessage($user['id'], $work_prc['creator'], $text);
RedirectToPage('/deal' . $id);
}
}
}
}
require_once ($_SERVER['DOCUMENT_ROOT'] . '/layout.php');
?>
<script>
var labels = document.querySelectorAll("label.star");
labels.forEach(function(label, idx){
label.addEventListener("click", function(e){
e.preventDefault();
let radioButton = document.querySelector(`input[name="rating"][value="${idx + 1}"]`);
radioButton.checked = true;
labels.forEach(function(lb, lidx){
if(lidx <= idx) lb.classList.add("active");
else lb.classList.remove("active");
});
});
});
labels.forEach(function(label, idx){
label.addEventListener("mouseover", function(){
labels.forEach(function(lb, lidx){
if(lidx <= idx) lb.classList.add("active");
else lb.classList.remove("active");
});
});
});
labels.forEach(function(label, idx){
label.addEventListener("mouseout", function(){
let currentRating = parseInt(document.querySelector('input[name="rating"]:checked')?.value || 0);
labels.forEach(function(lb, lidx){
if(lidx < currentRating) lb.classList.add("active");
else lb.classList.remove("active");
});
});
});
</script>