Файл: upload/core/functions/rating.php
Строк: 124
<?php
function _render_stars($avg)
{
if ($avg <= 0) {
return str_repeat('<span class="half-star"><i class="fas fa-star"></i></span>', 5);
}
$wholeStars = floor($avg);
$hasHalfStar = fmod($avg, 1) >= 0.5;
$starsHtml = '';
for ($i = 0; $i < 5; $i++) {
if ($i < $wholeStars) {
$starsHtml .= '<span class="full-star"><i class="fas fa-star"></i></span>';
} elseif ($i == $wholeStars && $hasHalfStar) {
$starsHtml .= '<span class="half-star"><i class="fas fa-star"></i></span>';
} else {
$starsHtml .= '<span class="half-star"><i class="fas fa-star"></i></span>';
}
}
return $starsHtml;
}
function _get_active_ratings($sql, $params)
{
$q = dbquery($sql, $params);
$ratings = [];
while ($rt = FetchAssoc($q)) {
$ratings[] = $rt['rating'] ?? 0;
}
return $ratings;
}
function format_rating($rating)
{
// 0 должен быть просто 0
if ($rating == 0) {
return "0";
}
$rating = round($rating, 1);
// Если число целое — добавляем .0
if (floor($rating) == $rating) {
return $rating . '.0';
}
return $rating;
}
function rating_num_work($id)
{
$ratings = _get_active_ratings(
"SELECT rating FROM rating WHERE k_work = ?",
[$id]
);
if (empty($ratings)) return "0";
$avg = array_sum($ratings) / count($ratings);
return format_rating($avg);
}
function rating_num_worker($id)
{
$ratings = _get_active_ratings(
"SELECT rating FROM rating WHERE worker = ?",
[$id]
);
if (empty($ratings)) return "0";
$avg = array_sum($ratings) / count($ratings);
return format_rating($avg);
}
function rating_num_star_work($id)
{
$ratings = _get_active_ratings(
"SELECT rating FROM rating WHERE rating = ?",
[$id]
);
if (empty($ratings)) {
return _render_stars(0);
}
$avg = array_sum($ratings) / count($ratings);
return _render_stars(format_rating($avg));
}
function render_stars_by_value($rating)
{
return _render_stars($rating);
}
function rating_star_work($id)
{
$ratings = _get_active_ratings(
"SELECT rating FROM rating WHERE k_work = ?",
[$id]
);
if (empty($ratings)) return _render_stars(0);
$avg = round(array_sum($ratings) / count($ratings), 1);
return _render_stars($avg);
}
function rating_star_worker($id)
{
$ratings = _get_active_ratings(
"SELECT rating FROM rating WHERE worker = ?",
[$id]
);
if (empty($ratings)) return _render_stars(0);
$avg = round(array_sum($ratings) / count($ratings), 1);
return _render_stars($avg);
}
?>