nativegallery/views/pages/Contests/VotingIndex.php

185 lines
7.5 KiB
PHP
Raw Normal View History

2025-02-11 20:25:11 +03:00
<?php
use \App\Services\{Auth, DB, Date};
2025-02-17 22:10:46 +03:00
use \App\Models\{User};
2025-02-11 20:25:11 +03:00
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/views/components/LoadHead.php'); ?>
</head>
<body>
<div id="backgr"></div>
<table class="tmain">
<?php include($_SERVER['DOCUMENT_ROOT'] . '/views/components/Navbar.php'); ?>
2025-02-15 04:54:12 +03:00
<script>
2025-02-17 22:10:46 +03:00
var kid = <?=DB::query('SELECT id FROM contests WHERE status=2')[0]['id']?>;
2025-02-15 04:54:12 +03:00
var tipTimeout = null;
function hideTip()
{
$('#tip').fadeOut('fast', function()
{
$(this).attr('lock', 0);
$('#img').html('');
});
}
$(document).ready(function()
{
$('.contestBtn').click(function()
{
var pid = $(this).attr('pid');
var savedClass = $(this).attr('class');
$(this).addClass('loading');
2025-02-17 22:10:46 +03:00
$.getJSON('/api/photo/contests/rate', { action: 'vote-contest', kid: kid, pid: pid }, function (data)
2025-02-15 04:54:12 +03:00
{
if (data[0])
{
for (var pid in data[0])
$('.contestBtn[pid="' + pid + '"]').attr('class', 'contestBtn' + (data[0][pid] == 0 ? '' : ' voted'));
}
else $('.contestBtn[pid="' + pid + '"]').attr('class', savedClass);
if (data[1]) alert(data[1]);
})
.fail(function(jx) { alert(jx.responseText); });
return false;
});
$(document).on('mouseenter', '.f', function()
{
var hidden_img = $(this).closest('.p20p').prev('img');
$('#img').html('<a href="/photo/' + hidden_img.attr('pid') + '/" target="_blank"><img src="' + (hidden_img.length ? hidden_img.attr('src') : this.src.replace('_s', '')) + '"></a>');
$('#tip').css('top', $(window).scrollTop() + 20).show();
})
.on('mouseenter', '.f, #tip', function()
{
clearTimeout(tipTimeout);
var lock = Math.min(parseInt($('#tip').attr('lock')) + 1, 2);
$('#tip').attr('lock', lock);
})
.on('mouseleave', '.f, #tip', function()
{
var lock = Math.max(parseInt($('#tip').attr('lock')) - 1, 0);
$('#tip').attr('lock', lock);
tipTimeout = setTimeout(function() { if ($('#tip').attr('lock') == 0) hideTip(); }, 100);
})
.on('mousemove', '.f, #tip', function(e)
{
if (e.pageX > $(document).width() * 0.5) hideTip();
});
});
</script>
2025-02-11 20:25:11 +03:00
<tr>
<td class="main">
2025-02-15 04:54:12 +03:00
2025-02-11 20:25:11 +03:00
<center>
<h1>Фотоконкурс</h1>
2025-02-15 04:54:12 +03:00
<p class="narrow" style="font-size:19px"><b>Голосование</b> &nbsp;&middot;&nbsp; <a href="results">Победители</a> &nbsp;&middot;&nbsp; <a href="/voting/rating">Рейтинг</a> &nbsp;&middot;&nbsp; <a href="/voting/waiting">Претенденты</a></p>
2025-02-11 20:25:11 +03:00
<div style="margin-top:20px">Чтобы проголосовать, отметьте одну, две или три фотографии, которые Вам понравились</div><br><br>
2025-02-15 04:54:12 +03:00
<?php
if (DB::query('SELECT status FROM contests WHERE status=2')[0]['status'] != 2) {
2025-02-17 22:10:46 +03:00
$contest = DB::query('SELECT * FROM contests WHERE status=1')[0];
2025-02-15 04:54:12 +03:00
echo '<div class="p20">
2025-02-11 20:25:11 +03:00
<h4>Сейчас конкурс не проводится. Пожалуйста, заходите позже.</h4>
2025-02-17 22:10:46 +03:00
</div>
2025-02-16 06:18:52 +03:00
<script>startCountdown(' . $contest['openpretendsdate'] . ');</script>
<h2>Следующий Фотоконкурс будет через:</h2>
<h1 id="countdown"></h1>';
2025-02-15 04:54:12 +03:00
} else { ?>
<div id="tip" lock="0"><span id="img"></span></div>
2025-02-16 06:18:52 +03:00
<?php
2025-02-17 22:10:46 +03:00
$contest = DB::query('SELECT * FROM contests WHERE status=2')[0];
$photos_contest = DB::query('SELECT * FROM photos WHERE on_contest=2 AND contest_id=:id', array(':id'=>$contest['id']));
2025-02-16 06:18:52 +03:00
foreach ($photos_contest as $pc) {
2025-02-17 22:10:46 +03:00
$class = '';
if ((int)DB::query('SELECT photo_id FROM contests_rates WHERE photo_id=:pid AND user_id=:uid AND contest_id=:cid', array(':uid' => Auth::userid(), ':pid' => $pc['id'], ':cid' => $contest['id']))[0]['photo_id'] === (int)$pc['id']) {
$class = ' voted';
}
echo '<img pid="'.$pc['id'].'" src="'.$pc['photourl'].'" style="display:none">
2025-02-15 04:54:12 +03:00
<div class="p20p">
<table>
<tr>
2025-02-17 22:10:46 +03:00
<td><a href="#" pid="'.$pc['id'].'" class="contestBtn'.$class.'"></a></td>
<td class="pb_photo" id="p2068176"><a href="/photo/'.$pc['id'].'/" target="_blank" class="prw"><img class="f" src="/api/photo/compress?url='.$pc['photourl'].'" data-src="/api/photo/compress?url='.$pc['photourl'].'" alt="630 КБ">
2025-02-15 04:54:12 +03:00
<div class="hpshade">
2025-02-17 22:10:46 +03:00
<div class="eye-icon">'.DB::query('SELECT COUNT(*) FROM photos_views WHERE photo_id=:id', array(':id'=>$p['id']))[0]['COUNT(*)'].'</div>
2025-02-15 04:54:12 +03:00
</div>
</a></td>
<td class="pb_descr">
2025-02-17 22:10:46 +03:00
<p>'.htmlspecialchars($pc['postbody']).'</p>
<p><b class="pw-place">'.htmlspecialchars($pc['place']).'</b></p>
<p class="sm"><b>'.Date::zmdate($pc['posted_at']).'</b><br>Автор: <a href="/author/'.$pc['user_id'].'/">'.$user->i('username').'</a></p>
</td>
2025-02-15 04:54:12 +03:00
</tr>
</table>
2025-02-16 06:18:52 +03:00
</div>';
}
?>
2025-02-17 22:10:46 +03:00
2025-02-15 04:54:12 +03:00
<br>Число проголосовавших: <b>3</b><br>Число голосов: <b>6</b><br><br>
2025-02-11 20:25:11 +03:00
</center>
2025-02-15 04:54:12 +03:00
<?php }
?>
2025-02-11 20:25:11 +03:00
2025-02-15 04:54:12 +03:00
<br>
2025-02-11 20:25:11 +03:00
2025-02-15 04:54:12 +03:00
</center>
</td>
</tr>
2025-02-11 20:25:11 +03:00
2025-02-15 04:54:12 +03:00
<?php include($_SERVER['DOCUMENT_ROOT'] . '/views/components/Footer.php'); ?>
</tr>
2025-02-11 20:25:11 +03:00
</table>
<script>
2025-02-15 04:54:12 +03:00
// Установите дату и время, до которого нужно отсчитывать
const countdownDate = new Date("Mar 1, 2025 00:00:00").getTime();
// Обновляем отсчет каждую секунду
const x = setInterval(function() {
// Получаем текущее время
const now = new Date().getTime();
// Вычисляем разницу между целевой датой и текущим временем
const distance = countdownDate - now;
// Вычисляем дни, часы, минуты и секунды
const days = Math.floor(distance / (1000 * 60 * 60 * 24));
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Отображаем результат в элементе с id "countdown"
document.getElementById("countdown").innerHTML =
days + ":" + hours + ":" + minutes + ":" + seconds;
// Если отсчет завершен, выводим сообщение
if (distance < 0) {
clearInterval(x);
document.getElementById("countdown").innerHTML = "Время истекло!";
}
}, 1000);
</script>
2025-02-11 20:25:11 +03:00
</body>
</html>