mirror of
https://github.com/claradex/nativegallery.git
synced 2025-04-23 16:43:04 +03:00
Compare commits
6 commits
e9655f6463
...
cfab1d2e96
Author | SHA1 | Date | |
---|---|---|---|
|
cfab1d2e96 | ||
|
118968739c | ||
|
04373e197c | ||
|
847ebb32be | ||
|
0275ff30c6 | ||
|
b41ec07317 |
22 changed files with 348 additions and 307 deletions
59
app/Controllers/Api/Contests/GetInfo.php
Normal file
59
app/Controllers/Api/Contests/GetInfo.php
Normal file
|
@ -0,0 +1,59 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controllers\Api\Contests;
|
||||
|
||||
use App\Services\{DB, Json};
|
||||
|
||||
class GetInfo
|
||||
{
|
||||
private array $contest;
|
||||
private string $pretendsStatus;
|
||||
private string $publicStatus;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->fetchContest();
|
||||
$this->setStatuses();
|
||||
$this->outputJson();
|
||||
}
|
||||
|
||||
private function fetchContest(): void
|
||||
{
|
||||
$statuses = [0, 1, 2];
|
||||
foreach ($statuses as $status) {
|
||||
$contest = DB::query('SELECT * FROM contests WHERE status = :status', [':status' => $status]);
|
||||
if (!empty($contest)) {
|
||||
$this->contest = $contest[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function setStatuses(): void
|
||||
{
|
||||
$time = time();
|
||||
$status = $this->contest['status'] ?? null;
|
||||
|
||||
if ($status === 0) {
|
||||
$this->pretendsStatus = ($this->contest['openpretendsdate'] > $time) ? 'waiting' : 'waitingforserver';
|
||||
$this->publicStatus = 'closed';
|
||||
} elseif ($status === 1) {
|
||||
$this->pretendsStatus = ($this->contest['closepretendsdate'] > $time) ? 'opened' : 'waitingforserver';
|
||||
$this->publicStatus = 'closed';
|
||||
} elseif ($status === 2) {
|
||||
$this->pretendsStatus = 'closed';
|
||||
$this->publicStatus = ($this->contest['closedate'] <= $time) ? 'waitingforserver' : 'opened';
|
||||
}
|
||||
}
|
||||
|
||||
private function outputJson(): void
|
||||
{
|
||||
echo json_encode(array(
|
||||
'contest' => $this->contest,
|
||||
'statuses' => [
|
||||
'pretends' => $this->pretendsStatus,
|
||||
'public' => $this->publicStatus,
|
||||
]
|
||||
));
|
||||
}
|
||||
}
|
46
app/Controllers/Api/Images/Contests/Rate.php
Normal file
46
app/Controllers/Api/Images/Contests/Rate.php
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controllers\Api\Images\Contests;
|
||||
|
||||
|
||||
|
||||
use App\Services\{Auth, Router, GenerateRandomStr, DB, Json, EXIF};
|
||||
use App\Models\{User, Vote, Photo};
|
||||
|
||||
|
||||
class Rate
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$count = 3;
|
||||
$uservotes = DB::query('SELECT COUNT(*) FROM contests_rates WHERE user_id=:uid AND contest_id=:cid', array(':uid' => Auth::userid(), ':cid' => $_GET['kid']))[0]['COUNT(*)'];
|
||||
$countvotes = $count - $uservotes;
|
||||
$contest = DB::query('SELECT * FROM contests WHERE id=:id', array(":id" => $_GET['kid']))[0];
|
||||
$photo = new Photo($_GET['pid']);
|
||||
if ($contest['status'] != 2) {
|
||||
exit;
|
||||
}
|
||||
if ($photo->i('on_contest') != 1 && $photo->i('contest_id') != $_GET['kid']) {
|
||||
exit;
|
||||
}
|
||||
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' => $_GET['pid'], ':cid' => $_GET['kid']))[0]['photo_id'] === (int)$_GET['pid']) {
|
||||
DB::query('DELETE FROM contests_rates WHERE user_id=:uid AND photo_id=:pid AND contest_id=:cid', array(':pid' => $_GET['pid'], ':uid' => Auth::userid(), ':cid' => $_GET['kid']));
|
||||
$status = 0;
|
||||
$newval = $countvotes + 1;
|
||||
} else {
|
||||
$newval = $countvotes - 1;
|
||||
if ($newval >= 0) {
|
||||
DB::query('INSERT INTO contests_rates VALUES (\'0\', :pid, :uid, :cid)', array(':pid' => $_GET['pid'], ':uid' => Auth::userid(), ':cid' => $_GET['kid']));
|
||||
$status = 1;
|
||||
}
|
||||
}
|
||||
if ($newval < 0) {
|
||||
$text = 'Вы можете выбрать максимум 3 фотографии.';
|
||||
} else if ($newval === 0) {
|
||||
$text = 'Вы выбрали 3 фотографии. Спасибо за голосование!';
|
||||
} else {
|
||||
$text = "Вы можете выбрать ещё {$newval} фото.";
|
||||
}
|
||||
echo '[{"' . $_GET['pid'] . '":'.$status.'},"' . $text . '"]';
|
||||
}
|
||||
}
|
|
@ -12,12 +12,14 @@ class SendPretend
|
|||
{
|
||||
public function __construct()
|
||||
{
|
||||
DB::query('UPDATE photos SET on_contest=1, contest_id=:id WHERE id=:idd', array(':id'=>$_POST['cid'], ':idd'=>$_POST['photo_id']));
|
||||
echo json_encode(
|
||||
array(
|
||||
'errorcode' => 0,
|
||||
'error' => 0
|
||||
)
|
||||
);
|
||||
if (DB::query('SELECT contest_id FROM photos WHERE user_id=:uid', array(':uid' => Auth::userid()))[0]['contest_id'] != $_POST['cid']) {
|
||||
DB::query('UPDATE photos SET on_contest=1, contest_id=:id WHERE id=:idd', array(':id' => $_POST['cid'], ':idd' => $_POST['photo_id']));
|
||||
echo json_encode(
|
||||
array(
|
||||
'errorcode' => 0,
|
||||
'error' => 0
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ use \App\Controllers\Api\{Login, Register};
|
|||
use \App\Controllers\Api\Subscribe as SubscribeUser;
|
||||
use \App\Controllers\Api\Images\{Upload};
|
||||
use \App\Controllers\Api\Images\Rate as PhotoVote;
|
||||
use \App\Controllers\Api\Images\RateContest as PhotoVoteContest;
|
||||
use \App\Controllers\Api\Images\Compress as PhotoCompress;
|
||||
use \App\Controllers\Api\Images\CheckAll as PhotoCheckAll;
|
||||
use \App\Controllers\Api\Images\LoadRecent as PhotoLoadRecent;
|
||||
|
@ -21,6 +20,8 @@ use \App\Controllers\Api\Images\Comments\Pin as PhotoCommentPin;
|
|||
use \App\Controllers\Api\Images\Comments\Load as PhotoCommentLoad;
|
||||
use \App\Controllers\Api\Images\Comments\Rate as PhotoCommentVote;
|
||||
use \App\Controllers\Api\Images\Contests\SendPretend as PhotoContestsSendPretend;
|
||||
use \App\Controllers\Api\Images\Contests\Rate as PhotoContestsRate;
|
||||
use \App\Controllers\Api\Contests\GetInfo as ContestsGetInfo;
|
||||
use \App\Controllers\Api\GeoDB\Search as GeoDBSearch;
|
||||
use \App\Controllers\Api\Vehicles\Load as VehiclesLoad;
|
||||
use \App\Controllers\Api\Profile\Update as ProfileUpdate;
|
||||
|
@ -57,7 +58,7 @@ class ApiController
|
|||
return new PhotoVote();
|
||||
}
|
||||
public static function photovotecontest() {
|
||||
return new PhotoVoteContest();
|
||||
return new PhotoContestsRate();
|
||||
}
|
||||
public static function photofavorite() {
|
||||
return new PhotoFavorite();
|
||||
|
@ -140,6 +141,9 @@ class ApiController
|
|||
public static function vehiclesload() {
|
||||
return new VehiclesLoad();
|
||||
}
|
||||
public static function contestsgetinfo() {
|
||||
return new ContestsGetInfo();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -36,6 +36,9 @@ class ExecContests
|
|||
case 2:
|
||||
self::handleClosingContest($contest);
|
||||
break;
|
||||
case 02:
|
||||
self::handleClosePretendsByTime($contest);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -56,20 +59,38 @@ class ExecContests
|
|||
|
||||
private static function handleClosePretends(array $contest)
|
||||
{
|
||||
if (self::isAnotherContestInStatus(2)) {
|
||||
if (self::isAnotherContestInStatus(2) || self::isAnotherContestInStatus(02)) {
|
||||
echo "[{$contest['id']}] Waiting for another contest to end. Skip...\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if ($contest['closepretendsdate'] <= time() && $contest['opendate'] <= time()) {
|
||||
if ($contest['closepretendsdate'] <= time()) {
|
||||
DB::query('UPDATE photos SET on_contest=2 WHERE on_contest=1 AND contest_id=:id', array(':id'=>$contest['id']));
|
||||
DB::query('UPDATE contests SET status = 2 WHERE id = :id', [':id' => $contest['id']]);
|
||||
if ($contest['opendate'] <= time()) {
|
||||
DB::query('UPDATE contests SET status = 2 WHERE id = :id', [':id' => $contest['id']]);
|
||||
echo "[{$contest['id']}] Opened.\n";
|
||||
} else {
|
||||
DB::query('UPDATE contests SET status = 02 WHERE id = :id', [':id' => $contest['id']]);
|
||||
}
|
||||
echo "[{$contest['id']}] Closed for pretends.\n";
|
||||
} else {
|
||||
echo "[{$contest['id']}] Not closed for pretends. Skip...\n";
|
||||
}
|
||||
}
|
||||
|
||||
private static function handleClosePretendsByTime(array $contest)
|
||||
{
|
||||
echo "[{$contest['id']}] Cheking for Open by time...\n";
|
||||
if ($contest['opendate'] <= time()) {
|
||||
DB::query('UPDATE contests SET status = 2 WHERE id = :id', [':id' => $contest['id']]);
|
||||
echo "[{$contest['id']}] .\n";
|
||||
} else {
|
||||
echo "[{$contest['id']}] not opened by time. Skip...\n";
|
||||
}
|
||||
echo "[{$contest['id']}] Opened.\n";
|
||||
|
||||
}
|
||||
|
||||
private static function handleClosingContest(array $contest)
|
||||
{
|
||||
if ($contest['closedate'] > time()) {
|
||||
|
@ -80,25 +101,32 @@ class ExecContests
|
|||
echo "[{$contest['id']}] Ready for closing!\n";
|
||||
self::processVotes($contest);
|
||||
DB::query('UPDATE contests SET status = 3 WHERE id = :id', [':id' => $contest['id']]);
|
||||
DB::query('UPDATE photos SET contest_id = 0, on_contest = 0 WHERE contest_id = :id', [':id' => $contest['id']]);
|
||||
echo "[{$contest['id']}] Closed.\n";
|
||||
if (NGALLERY['root']['contests']['autonew']['enabled'] === true) {
|
||||
echo "Creating new contest...";
|
||||
$theme = DB::query('SELECT * FROM contests_themes WHERE status=1 ORDER BY RAND() LIMIT 1')[0];
|
||||
if (count($theme) <= 0) {
|
||||
echo "Not found themes for autocreating Contest. Skip...\n";
|
||||
return;
|
||||
}
|
||||
$time = time();
|
||||
if (NGALLERY['root']['contests']['autonew']['pretendsopen'] === 'now') {
|
||||
if (NGALLERY['root']['contests']['autonew']['times']['pretendsopen'] === 'now') {
|
||||
$pretendsopen = $time;
|
||||
$status = 1;
|
||||
} else {
|
||||
$pretendsopen = Date::addTime(NGALLERY['root']['contests']['autonew']['pretendsopen']);
|
||||
$status = 0;
|
||||
$pretendsopen = Date::addTime(NGALLERY['root']['contests']['autonew']['times']['pretendsopen']);
|
||||
}
|
||||
|
||||
$pretendsclose = Date::addTime(NGALLERY['root']['contests']['autonew']['pretendsclose']);
|
||||
if (NGALLERY['root']['contests']['autonew']['open'] === 'now') {
|
||||
$pretendsclose = Date::addTime(NGALLERY['root']['contests']['autonew']['times']['pretendsclose']);
|
||||
if (NGALLERY['root']['contests']['autonew']['times']['open'] === 'now') {
|
||||
$contestopen = $pretendsclose;
|
||||
} else {
|
||||
$contestopen = Date::addTime(NGALLERY['root']['contests']['autonew']['open']);
|
||||
$contestopen = Date::addTime(NGALLERY['root']['contests']['autonew']['times']['open']);
|
||||
}
|
||||
$contestclose = Date::addTime(NGALLERY['root']['contests']['autonew']['close']);
|
||||
DB::query('INSERT INTO contests VALUES (\'0\', :themeid, :openprdate, :closeprdate, :opendate, :closedate, 0)', array(':themeid'=>$theme['id'], ':openprdate'=>$pretendsopen, ':closeprdate'=>$pretendsclose, ':opendate'=>$contestopen, ':closedate'=>$contestclose));
|
||||
$contestclose = Date::addTime(NGALLERY['root']['contests']['autonew']['times']['close']);
|
||||
DB::query('INSERT INTO contests VALUES (\'0\', :themeid, :openprdate, :closeprdate, :opendate, :closedate, :status)', array(':themeid'=>$theme['id'], ':openprdate'=>$pretendsopen, ':closeprdate'=>$pretendsclose, ':opendate'=>$contestopen, ':closedate'=>$contestclose, ':status'=>$status));
|
||||
echo "Contest created! Continue...";
|
||||
}
|
||||
}
|
||||
|
@ -107,8 +135,8 @@ class ExecContests
|
|||
{
|
||||
$votes = DB::query(
|
||||
'SELECT user_id, photo_id, COUNT(*) AS vote_count
|
||||
FROM photos_rates_contest WHERE contest_id = :id
|
||||
GROUP BY user_id ORDER BY vote_count DESC LIMIT 3',
|
||||
FROM contests_rates WHERE contest_id = :id
|
||||
GROUP BY user_id ORDER BY vote_count DESC LIMIT 10',
|
||||
[':id' => $contest['id']]
|
||||
);
|
||||
|
||||
|
@ -123,20 +151,28 @@ class ExecContests
|
|||
{
|
||||
$photo = DB::query('SELECT * FROM photos WHERE id = :id', [':id' => $vote['photo_id']])[0];
|
||||
$photoData = json_decode($photo['content'], true);
|
||||
|
||||
|
||||
if (!isset($photoData['contests']) || !is_array($photoData['contests'])) {
|
||||
$photoData['contests'] = [];
|
||||
}
|
||||
|
||||
$theme = DB::query('SELECT title FROM contests_themes WHERE id = :id', [':id' => $contest['themeid']])[0]['title'];
|
||||
|
||||
$photoData['contests'] = [
|
||||
|
||||
$photoData['contests'][] = [
|
||||
'id' => $contest['id'],
|
||||
'contesttheme' => $theme,
|
||||
'votenum' => $vote['vote_count'],
|
||||
'place' => $place
|
||||
];
|
||||
|
||||
|
||||
|
||||
DB::query('INSERT INTO contests_winners VALUES (\'0\', :photo_id, :place, :contest_id, :date)', array(':photo_id'=>$vote['photo_id'], ':place'=>$place, ':contest_id'=>$contest['id'], ':date'=>time()));
|
||||
|
||||
DB::query('UPDATE photos SET content = :content, on_contest=0, contest_id=0 WHERE id = :id', [
|
||||
':id' => $vote['photo_id'],
|
||||
':content' => json_encode($photoData)
|
||||
':content' => json_encode($photoData, JSON_UNESCAPED_UNICODE)
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
private static function isAnotherContestInStatus(int $status): bool
|
||||
|
|
|
@ -69,7 +69,9 @@ class Routes
|
|||
Router::post('/api/photo/comment/$id/edit', 'ApiController@photocommentedit');
|
||||
Router::post('/api/photo/comment/$id/delete', 'ApiController@photocommentdelete');
|
||||
Router::post('/api/photo/comment/$id/pin', 'ApiController@photocommentpin');
|
||||
Router::post('/api/photo/contests/sendpretend', 'ApiController@sendpretendphoto()');
|
||||
Router::post('/api/photo/contests/sendpretend', 'ApiController@sendpretendphoto');
|
||||
Router::get('/api/photo/contests/rate', 'ApiController@photovotecontest');
|
||||
Router::get('/api/contests/getinfo', 'ApiController@contestsgetinfo');
|
||||
Router::get('/api/vehicles/load', 'ApiController@vehiclesload');
|
||||
Router::get('/api/geodb/search', 'ApiController@geodbsearch');
|
||||
if ($user->i('admin') > 0) {
|
||||
|
|
BIN
static/img/star_people.png
Normal file
BIN
static/img/star_people.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 528 B |
BIN
static/img/vs1.png
Normal file
BIN
static/img/vs1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 542 B |
BIN
static/img/vs2.png
Normal file
BIN
static/img/vs2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 494 B |
BIN
static/img/vs3.png
Normal file
BIN
static/img/vs3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 544 B |
|
@ -84,10 +84,10 @@ body {
|
|||
<i class="bx bx-world nav__icon"></i>
|
||||
<span class="nav__name">GeoDB<span class="badge text-bg-warning">BETA</span></span>
|
||||
</a>
|
||||
<a href="/admin?type=Pages" class="nav__link">
|
||||
<!--a href="/admin?type=Pages" class="nav__link">
|
||||
<i class="bx bx-file-blank nav__icon"></i>
|
||||
<span class="nav__name">Страницы</span>
|
||||
</a>
|
||||
</!--a-->
|
||||
<a href="/admin?type=Settings" class="nav__link">
|
||||
<i class="bx bx-cog nav__icon"></i>
|
||||
<span class="nav__name">Настройки<span class="badge text-bg-warning">BETA</span></span>
|
||||
|
|
|
@ -60,6 +60,8 @@ if (!$task->isTaskExists("ExecContests", "php ".$_SERVER['DOCUMENT_ROOT'].$task-
|
|||
$status = 'Ещё не проведён';
|
||||
} else if ($t['status'] === 1) {
|
||||
$status = 'Отбор кандидатов';
|
||||
} else if ($t['status'] === 02) {
|
||||
$status = 'Ещё не открыт для отбора победителей';
|
||||
} else if ($t['status'] === 2) {
|
||||
$status = 'Отбор победителей';
|
||||
} else if ($t['status'] === 3) {
|
||||
|
|
|
@ -39,10 +39,10 @@ use \App\Models\User;
|
|||
<div class="v-header__tabs">
|
||||
<div class="v-tabs">
|
||||
<div class="v-tabs__scroll">
|
||||
<div class="v-tabs__content"><a href="#" onclick="changeTab('full')" id="full" class="v-tab v-tab-b v-tab--active"><span class="v-tab__label">
|
||||
<div class="v-tabs__content"><!--a href="#" onclick="changeTab('full')" id="full" class="v-tab v-tab-b"><span class="v-tab__label">
|
||||
Полный список
|
||||
|
||||
</span></a><a href="#" onclick="changeTab('moderate')" id="moderate" class="v-tab v-tab-b"><span class="v-tab__label">
|
||||
</span></!--a--><a href="#" onclick="changeTab('moderate')" id="moderate" class="v-tab v-tab-b v-tab--active"><span class="v-tab__label">
|
||||
Ожидают модерации
|
||||
|
||||
</span></a>
|
||||
|
@ -54,7 +54,7 @@ use \App\Models\User;
|
|||
</div>
|
||||
<script src="/js/diff.js"></script>
|
||||
<script src="/js/pwrite-compare.js"></script>
|
||||
<div style="display: none;" id="moderate__block">
|
||||
<div id="moderate__block"class="active__block" >
|
||||
<div class="p20w" style="display:block">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
|
@ -219,7 +219,7 @@ use \App\Models\User;
|
|||
</tbody>
|
||||
</table>
|
||||
</div></div>
|
||||
<div style="display: none;" class="active__block" id="full__block">
|
||||
<div style="display: none;" id="full__block">
|
||||
fgdfg
|
||||
</div>
|
||||
|
||||
|
|
|
@ -86,10 +86,10 @@ function renderInputs($data, $prefix = '')
|
|||
<div class="v-header__tabs">
|
||||
<div class="v-tabs">
|
||||
<div class="v-tabs__scroll">
|
||||
<div class="v-tabs__content"><a href="#" onclick="changeTab('config')" id="config" class="v-tab v-tab-b v-tab--active"><span class="v-tab__label">
|
||||
<div class="v-tabs__content"><!--a href="#" onclick="changeTab('config')" id="config" class="v-tab v-tab-b v-tab--active"><span class="v-tab__label">
|
||||
Конфиг сервера
|
||||
|
||||
</span></a><a href="#" onclick="changeTab('tasks')" id="tasks" class="v-tab v-tab-b"><span class="v-tab__label">
|
||||
</span></!--a--><a href="#" onclick="changeTab('tasks')" id="tasks" class="v-tab v-tab-b v-tab--active"><span class="v-tab__label">
|
||||
Задачи
|
||||
|
||||
</span></a>
|
||||
|
@ -99,7 +99,7 @@ function renderInputs($data, $prefix = '')
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="active__block" id="config__block">
|
||||
<div id="config__block" style="display: none;" >
|
||||
<div class="alert alert-warning" role="alert">
|
||||
Изменяйте только на свой страх и риск.
|
||||
</div>
|
||||
|
@ -118,7 +118,7 @@ function renderInputs($data, $prefix = '')
|
|||
|
||||
|
||||
</div>
|
||||
<div style="display: none;" id="tasks__block">
|
||||
<div class="active__block"id="tasks__block">
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use \App\Services\{Auth, DB, Date};
|
||||
use \App\Models\User;
|
||||
use \App\Models\{User};
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
@ -20,7 +20,7 @@ use \App\Models\User;
|
|||
<?php include($_SERVER['DOCUMENT_ROOT'] . '/views/components/Navbar.php'); ?>
|
||||
<script>
|
||||
|
||||
var kid = 2119;
|
||||
var kid = <?=DB::query('SELECT id FROM contests WHERE status=2')[0]['id']?>;
|
||||
var tipTimeout = null;
|
||||
|
||||
|
||||
|
@ -42,7 +42,7 @@ $(document).ready(function()
|
|||
var savedClass = $(this).attr('class');
|
||||
$(this).addClass('loading');
|
||||
|
||||
$.getJSON('/api.php', { action: 'vote-contest', kid: kid, pid: pid }, function (data)
|
||||
$.getJSON('/api/photo/contests/rate', { action: 'vote-contest', kid: kid, pid: pid }, function (data)
|
||||
{
|
||||
if (data[0])
|
||||
{
|
||||
|
@ -89,195 +89,48 @@ $(document).ready(function()
|
|||
<center>
|
||||
<h1>Фотоконкурс</h1>
|
||||
|
||||
<p class="narrow" style="font-size:19px"><b>Голосование</b> · <a href="results">Победители</a> · <a href="/voting/rating">Рейтинг</a> · <a href="/voting/waiting">Претенденты</a></p>
|
||||
<p class="narrow" style="font-size:19px"><b>Голосование</b> · <a href="/voting/results">Победители</a> · <a href="/voting/rating">Рейтинг</a> · <a href="/voting/waiting">Претенденты</a></p>
|
||||
<div style="margin-top:20px">Чтобы проголосовать, отметьте одну, две или три фотографии, которые Вам понравились</div><br><br>
|
||||
<?php
|
||||
if (DB::query('SELECT status FROM contests WHERE status=2')[0]['status'] != 2) {
|
||||
$contest = DB::query('SELECT * FROM contests WHERE status=0')[0];
|
||||
$contest = DB::query('SELECT * FROM contests WHERE status=1')[0];
|
||||
echo '<div class="p20">
|
||||
<h4>Сейчас конкурс не проводится. Пожалуйста, заходите позже.</h4>
|
||||
</div>
|
||||
</div>
|
||||
<script>startCountdown(' . $contest['openpretendsdate'] . ');</script>
|
||||
<h2>Следующий Фотоконкурс будет через:</h2>
|
||||
<h1 id="countdown"></h1>';
|
||||
} else { ?>
|
||||
<div id="tip" lock="0"><span id="img"></span></div>
|
||||
<?php
|
||||
$photos_contest = DB::query('SELECT * FROM photos WHERE on_contest=1');
|
||||
$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']));
|
||||
foreach ($photos_contest as $pc) {
|
||||
echo '<img pid="2068176" src="/photo/20/68/17/2068176.jpg" style="display:none">
|
||||
$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">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2068176" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2068176"><a href="/photo/2068176/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/68/17/2068176_s.jpg" alt="630 КБ">
|
||||
<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 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">2</div>
|
||||
<div class="eye-icon">182</div>
|
||||
<div class="eye-icon">'.DB::query('SELECT COUNT(*) FROM photos_views WHERE photo_id=:id', array(':id'=>$p['id']))[0]['COUNT(*)'].'</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/237/" target="_blank">Гота</a></span>, Schindler/Siemens Be 4/8 <span class="nw">№ <span class="nf"><a href="/vehicle/97221/#n586477" target="_blank">222</a></span></span> — маршрут <a href="/search.php?cid=237&type=1&route=4" class="route">4</a></span></span><br><a href="/city/237/" target="_blank">Гота</a> — <a href="/articles/166/" target="_blank">Разные фотографии</a></p>
|
||||
<p><b class="pw-place">Boxberg <img src="/img/place_arrow.gif" alt="/" width="15" height="11" style="position:relative; top:-1px; margin:0 3px"> Leina</b><br><br><span class="pw-descr">Настоящий немецкий Сайлент Хилл!<br />
|
||||
<br />
|
||||
Echtes deutsches Silent Hill!</span></p>
|
||||
<p class="sm"><b>26 декабря 2024 г., четверг</b><br>Автор: <a href="/author/24525/">KIA-Trainz</a></p>
|
||||
</td>
|
||||
<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>
|
||||
</tr>
|
||||
</table>
|
||||
</div>';
|
||||
}
|
||||
?>
|
||||
<img pid="2073198" src="/photo/20/73/19/2073198.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2073198" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2073198"><a href="/photo/2073198/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/73/19/2073198_s.jpg" alt="526 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="eye-icon">246</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/2/" target="_blank">Санкт-Петербург</a></span>, <span class="s5"> ЛВС-86К <span class="nw">№ <span class="nf"><a href="/vehicle/4653/#n4758" target="_blank">8200</a></span></span> </span> — маршрут <a href="/search.php?cid=2&type=1&route=52" class="route">52</a></span></span><br><a href="/city/2/" target="_blank">Санкт-Петербург</a> — <a href="/articles/1129/" target="_blank">Трамвайные линии и инфраструктура</a></p>
|
||||
<p><b class="pw-place">Проспект Маршала Жукова</b></p>
|
||||
<p class="sm"><b>18 ноября 2023 г., суббота</b><br>Автор: <a href="/author/19181/">Матвей Батуро</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2069925" src="/photo/20/69/92/2069925.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2069925" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2069925"><a href="/photo/2069925/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/69/92/2069925_s.jpg" alt="797 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">5</div>
|
||||
<div class="eye-icon">251</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/2/" target="_blank">Санкт-Петербург</a></span>, 71-931М «Витязь-М» <span class="nw">№ <span class="nf"><a href="/vehicle/562421/#n745611" target="_blank">7903</a></span></span> — перегонка</span></span><br><span style="word-spacing:-1px"><b><a href="/city/2/" target="_blank">Санкт-Петербург</a></b>, ПР (18М) <span class="nw">№ <b><a href="/vehicle/5073/#n5182" target="_blank">С-7116</a></b></span> — перегонка</span></p>
|
||||
<p><b class="pw-place">Улица Куйбышева</b></p>
|
||||
<p class="sm"><b>18 января 2025 г., суббота</b><br>Автор: <a href="/author/36016/">bo1ng10</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2070488" src="/photo/20/70/48/2070488.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2070488" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2070488"><a href="/photo/2070488/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/70/48/2070488_s.jpg" alt="656 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">5</div>
|
||||
<div class="eye-icon">328</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><b><a href="/city/2/" target="_blank">Санкт-Петербург</a></b>, <span class="s5"> 71-134А (ЛМ-99АВ) <span class="nw">№ <b><a href="/vehicle/5784/#n5890" target="_blank">8318</a></b></span> </span> — маршрут <b><a href="/search.php?cid=2&type=1&route=41" class="route">41</a></b></span></p>
|
||||
<p><b class="pw-place">Садовая улица</b></p>
|
||||
<p class="sm"><b>31 января 2025 г., пятница</b><br>Автор: <a href="/author/31083/">Yastrebov Nikolay</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="1456406" src="/photo/14/56/40/1456406.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="1456406" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p1456406"><a href="/photo/1456406/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/14/56/40/1456406_s.jpg" alt="481 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">1</div>
|
||||
<div class="eye-icon">582</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/101/" target="_blank">Харьков</a></span>, T3-ВПСт <span class="nw">№ <span class="nf"><a href="/vehicle/452625/#n558420" target="_blank">3011</a></span></span> — маршрут <a href="/search.php?cid=101&type=1&route=3" class="route">3</a>, СМЕ 3011+3012</span></span><br><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/101/" target="_blank">Харьков</a></span>, T3-ВПСт <span class="nw">№ <span class="nf"><a href="/vehicle/452626/#n558421" target="_blank">3012</a></span></span> — маршрут <a href="/search.php?cid=101&type=1&route=3" class="route">3</a>, СМЕ 3011+3012</span></span><br><a href="/city/101/" target="_blank">Харьков</a> — <a href="/articles/5380/" target="_blank">Трамвайные линии</a></p>
|
||||
<p><b class="pw-place">Сергіївський майдан <img src="/img/place_arrow.gif" alt="/" width="15" height="11" style="position:relative; top:-1px; margin:0 3px"> Павлівська площа</b> | Сергиевская площадь <img src="/img/place_arrow.gif" alt="/" width="15" height="11" style="position:relative; top:-1px; margin:0 3px"> Павловская площадь</p>
|
||||
<p class="sm"><b>6 марта 2021 г., суббота</b><br>Автор: <a href="/author/21015/">Moon_Expedition</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2074014" src="/photo/20/74/01/2074014.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2074014" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2074014"><a href="/photo/2074014/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/74/01/2074014_s.jpg" alt="555 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">16</div>
|
||||
<div class="eye-icon">1286</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><b><a href="/city/2/" target="_blank">Санкт-Петербург</a></b>, ЛВС-86К <span class="nw">№ <b><a href="/vehicle/135069/#n130294" target="_blank">5117</a></b></span> — маршрут <b><a href="/search.php?cid=2&type=1&route=19" class="route">19</a></b></span><br><span style="word-spacing:-1px"><b><a href="/city/2/" target="_blank">Санкт-Петербург</a></b>, 71-638-02 «Поларис» <span class="nw">№ <b><a href="/vehicle/604225/#n803377" target="_blank">5810</a></b></span></span></p>
|
||||
<p><b class="pw-place">К/ст "Лахтинский разлив"</b></p>
|
||||
<p class="sm"><b>10 февраля 2025 г., понедельник</b><br>Автор: <a href="/author/26699/">Qwerty_qwertovich</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2072063" src="/photo/20/72/06/2072063.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2072063" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2072063"><a href="/photo/2072063/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/72/06/2072063_s.jpg" alt="674 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="eye-icon">224</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><b><a href="/city/2/" target="_blank">Санкт-Петербург</a></b>, <span class="s3"> 81-717 (ЛВЗ) <span class="nw">№ <b><a href="/vehicle/258072/#n614988" target="_blank">8451</a></b></span> </span></span></p>
|
||||
<p><b class="pw-place">Электродепо "Московское" (ТЧ-3)</b><br><br><span class="pw-descr">Маневровые передвижения</span></p>
|
||||
<p class="sm"><b>7 февраля 2025 г., пятница</b><br>Автор: <a href="/author/20006/">frunzenecc</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2068816" src="/photo/20/68/81/2068816.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2068816" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2068816"><a href="/photo/2068816/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/68/81/2068816_s.jpg" alt="675 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="com-icon">3</div>
|
||||
<div class="eye-icon">322</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><b><a href="/city/89/" target="_blank">Брест</a></b>, МАЗ-ЭТОН Т103 <span class="nw">№ <b><a href="/vehicle/54899/#n53610" target="_blank">118</a></b></span> — маршрут <b><a href="/search.php?cid=89&type=2&route=102" class="route">102</a></b></span></p>
|
||||
<p><b class="pw-place">Вуліца Гаўрылава</b> | Улица Гаврилова</p>
|
||||
<p class="sm"><b>29 января 2025 г., среда</b><br>Автор: <a href="/author/28158/">Ivan Tkachenko</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<img pid="2060153" src="/photo/20/60/15/2060153.jpg" style="display:none">
|
||||
<div class="p20p">
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="#" pid="2060153" class="contestBtn"></a></td>
|
||||
<td class="pb_photo" id="p2060153"><a href="/photo/2060153/" target="_blank" class="prw"><img class="f" src="/img/prw-loader.gif" data-src="/photo/20/60/15/2060153_s.jpg" alt="486 КБ">
|
||||
<div class="hpshade">
|
||||
<div class="eye-icon">204</div>
|
||||
</div>
|
||||
</a></td>
|
||||
<td class="pb_descr">
|
||||
<p><span style="word-spacing:-1px"><span class="sec"><span class="nf"><a href="/city/35/" target="_blank">Рига</a></span>, Tatra T3MR (T6B5-R) <span class="nw">№ <span class="nf"><a href="/vehicle/53599/#n101864" target="_blank">35098</a></span></span> — 35098+35108</span></span><br><a href="/city/35/" target="_blank">Рига</a> — <a href="/articles/7271/" target="_blank">Мосты</a></p>
|
||||
<p><b class="pw-place">Slokas iela</b> | Улица Слокас</p>
|
||||
<p class="sm"><b>28 октября 2024 г., понедельник</b><br>Автор: <a href="/author/18598/">Tučňák</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<br>Число проголосовавших: <b>3</b><br>Число голосов: <b>6</b><br><br>
|
||||
<br>Число проголосовавших: <b><?=DB::query('SELECT COUNT(DISTINCT user_id) AS unique_user_count FROM contests_rates WHERE contest_id=:id', array(':id'=>$contest['id']))[0]['unique_user_count']?></b><br>Число голосов: <b><?=DB::query('SELECT COUNT(*) FROM contests_rates WHERE contest_id=:id', array(':id'=>$contest['id']))[0]['COUNT(*)']?></b><br><br>
|
||||
|
||||
</center>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use \App\Services\{Auth, DB, Date};
|
||||
use \App\Models\User;
|
||||
use \App\Models\{User, Photo};
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
@ -18,94 +18,57 @@ use \App\Models\User;
|
|||
<div id="backgr"></div>
|
||||
<table class="tmain">
|
||||
<?php include($_SERVER['DOCUMENT_ROOT'] . '/views/components/Navbar.php'); ?>
|
||||
<?php
|
||||
|
||||
?>
|
||||
<tr>
|
||||
<td class="main">
|
||||
<center>
|
||||
<h1>Победители фотоконкурса</h1>
|
||||
<p class="narrow" style="font-size:19px"><a href="/voting">Голосование</a> · <b>Победители</b> · <a href="/voting/rating">Рейтинг</a> · <a href="/voting/waiting">Претенденты</a></p>
|
||||
<div style="margin:20px">Для вывода подробного отчёта о конкурсе нажмите на интересующую вас дату.</div>
|
||||
<div class="pages"><span class="pg">««</span><span class="ps">1</span><a href="?show=results&st=10" class="pg">2</a><a href="?show=results&st=20" class="pg">3</a><a href="?show=results&st=30" class="pg">4</a> ··· <a href="?show=results&st=2090" class="pg">210</a><a href="?show=results&st=10" class="pg" id="NextLink">»»</a></div>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-02-04" title="Подробный отчёт о конкурсе">04.02.2025</a></b></span><br><span class="sm">Линии и пейзажи</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2066028/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/66/02/2066028_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2065380/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/38/2065380_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2064449/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/64/44/2064449_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-02-03" title="Подробный отчёт о конкурсе">03.02.2025</a></b></span><br><span class="sm">Линии и пейзажи</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/1894111/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/18/94/11/1894111_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2063989/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/63/98/2063989_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2061805/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/61/80/2061805_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-02-02" title="Подробный отчёт о конкурсе">02.02.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2065272/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/27/2065272_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2064912/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/64/91/2064912_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2026071/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/26/07/2026071_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-02-01" title="Подробный отчёт о конкурсе">01.02.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2064843/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/64/84/2064843_s.jpg?1" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2065143/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/14/2065143_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2063982/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/63/98/2063982_s.jpg?1" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-31" title="Подробный отчёт о конкурсе">31.01.2025</a></b></span><br><b class="sm">Итоговое голосование</b></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2042060/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/42/06/2042060_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs5.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-30" title="Подробный отчёт о конкурсе">30.01.2025</a></b></span><br><span class="sm">Линии и пейзажи</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2058534/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/58/53/2058534_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2057575/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/57/57/2057575_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2058630/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/58/63/2058630_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-29" title="Подробный отчёт о конкурсе">29.01.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2064029/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/64/02/2064029_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2065381/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/38/2065381_s.jpg?1" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2065050/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/05/2065050_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2065800/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/65/80/2065800_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-28" title="Подробный отчёт о конкурсе">28.01.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2062445/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/62/44/2062445_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2048251/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/48/25/2048251_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2062446/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/62/44/2062446_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-26" title="Подробный отчёт о конкурсе">26.01.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2061877/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/61/87/2061877_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs3.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2047310/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/47/31/2047310_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2060964/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/60/96/2060964_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-01-25" title="Подробный отчёт о конкурсе">25.01.2025</a></b></span><br><span class="sm">Фотографии транспорта</span></p>
|
||||
<table>
|
||||
<tr>
|
||||
<a href="/photo/2061294/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/61/29/2061294_s.jpg?2" class="f" style="margin-bottom:7px"><br><img src="/img/vs4.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2061425/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/61/42/2061425_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs2.png" style="position:relative; top:-2px"> </a>
|
||||
<a href="/photo/2048649/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="/img/prw-loader.gif" data-src="/photo/20/48/64/2048649_s.jpg" class="f" style="margin-bottom:7px"><br><img src="/img/vs1.png" style="position:relative; top:-2px"> </a>
|
||||
</tr>
|
||||
</table><br>
|
||||
<div class="pages"><span class="pg">««</span><span class="ps">1</span><a href="?show=results&st=10" class="pg">2</a><a href="?show=results&st=20" class="pg">3</a><a href="?show=results&st=30" class="pg">4</a> ··· <a href="?show=results&st=2090" class="pg">210</a><a href="?show=results&st=10" class="pg" id="NextLink">»»</a></div>
|
||||
<p class="narrow" style="font-size:19px"><a href="/voting.php">Голосование</a> · <b>Победители</b> · <a href="?show=rating">Рейтинг</a> · <a href="?show=waiting">Претенденты</a></p>
|
||||
<?php
|
||||
$photos = DB::query("SELECT * FROM contests_winners
|
||||
WHERE place BETWEEN 1 AND 3
|
||||
ORDER BY contest_id, place;
|
||||
|
||||
");
|
||||
|
||||
$grouped = [];
|
||||
foreach ($photos as $row) {
|
||||
$grouped[$row['contest_id']][] = $row;
|
||||
}
|
||||
$final_result = [];
|
||||
foreach ($grouped as $contest_id => $rows) {
|
||||
$chunks = array_chunk($rows, 3);
|
||||
foreach ($chunks as $chunk) {
|
||||
$final_result[] = $chunk;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($final_result as $fc) {
|
||||
$themeid = DB::query('SELECT themeid FROM contests WHERE id=:id', array(':id'=>$fc[0]['contest_id']))[0]['themeid'];
|
||||
$theme = DB::query('SELECT title FROM contests_themes WHERE id=:id', array(':id'=>$themeid))[0]['title'];
|
||||
echo '<p><span class="narrow" style="font-size:21px"><b><a href="?show=table&date=2025-02-04" title="Подробный отчёт о конкурсе">'.date('d.m.Y', $fc[0]['date']).'</a></b></span><br><span class="sm">'.$theme.'</span></p>
|
||||
<table>
|
||||
<tr>';
|
||||
foreach ($fc as $f) {
|
||||
$photo = new Photo($f['photo_id']);
|
||||
if ($f['place'] === 1) {
|
||||
$img = 'vs3';
|
||||
} else if ($f['place'] === 2) {
|
||||
$img = 'vs2';
|
||||
} else if ($f['place'] === 3) {
|
||||
$img = 'vs1';
|
||||
}
|
||||
echo '<a href="/photo/'.$f['photo_id'].'/" class="p20" style="display:table-cell; text-align:center; vertical-align:bottom; padding:20px 20px 10px; font-size:17px"><img src="'.$photo->i('photourl').'" class="f" style="margin-bottom:7px"><br><img src="/static/img/'.$img.'.png" style="position:relative; top:-2px"> </a>';
|
||||
}
|
||||
echo '
|
||||
</tr>
|
||||
</table><br>';
|
||||
}
|
||||
|
||||
?>
|
||||
<p class="narrow" style="font-size:19px"><a href="/voting">Голосование</a> · <b>Победители</b> · <a href="/voting/rating">Рейтинг</a> · <a href="/voting/waiting">Претенденты</a></p>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -151,7 +151,9 @@ function convertUnixToRussianDateTime($unixTime)
|
|||
data: $(this).serialize(),
|
||||
success: function(response) {
|
||||
var jsonData = JSON.parse(response);
|
||||
|
||||
if (jsonData.errorcode === 0) {
|
||||
alert('Фотография успешно отправлена на претенденты на Фотоконкурс');
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
use \App\Services\{Auth, DB, Date};
|
||||
use \App\Models\{User, VoteContest};
|
||||
use \App\Models\{User, VoteContest, Vote};
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
|
@ -31,25 +31,36 @@ use \App\Models\{User, VoteContest};
|
|||
<?php
|
||||
if (DB::query('SELECT status FROM contests WHERE status=1')[0]['status'] === 1) {
|
||||
$contest = DB::query('SELECT * FROM contests WHERE status=1')[0];
|
||||
$photos_contest = DB::query('SELECT * FROM photos WHERE on_contest=1');
|
||||
$photos_contest = DB::query('SELECT p.*, COUNT(prc.photo_id) AS rates_count
|
||||
FROM photos p
|
||||
LEFT JOIN photos_rates_contest prc ON p.id = prc.photo_id
|
||||
WHERE p.on_contest = 1 AND p.contest_id = :id
|
||||
GROUP BY p.id
|
||||
ORDER BY rates_count DESC;
|
||||
', array(':id'=>$contest['id']));
|
||||
foreach ($photos_contest as $pc) {
|
||||
$user = new User($pc['user_id']);
|
||||
if (VoteContest::photo(Auth::userid(), $pc['id'], $contest['id']) === 1) {
|
||||
$classp = 'voted';
|
||||
} else if (VoteContest::photo(Auth::userid(), $pc['id'], $contest['id']) === 0) {
|
||||
$classm = 'voted';
|
||||
}
|
||||
echo '<div class="p20p">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="pb_pre vote" style="padding-left:15px; padding-right:10px; display:table-cell" cid="'.$contest['id'].'" pid="'.$pc['id'].'">
|
||||
<a href="#" vote="1" class="konk_btn"><span>Красиво, на конкурс!</span></a>
|
||||
<a href="#" vote="1" class="konk_btn '.$classp.'"><span>Красиво, на конкурс!</span></a>
|
||||
<table style="margin:5px 0 7px; width:100px">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:20px"><img class="loader" pid="2072294" src="/img/loader.gif"></td>
|
||||
<td align="center" style="padding:2px"><b class="s_rating" pid="2072294">'.VoteContest::count($pc['id'], $contest['id']).'</b></td>
|
||||
<td align="center" style="padding:2px"><b class="s_rating" pid="'.$pc['id'].'">'.VoteContest::count($pc['id'], $contest['id']).'</b></td>
|
||||
<td style="width:20px; display:table-cell" class="star" pid="2072294"><img src="/img/star_people.png" alt=""></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<a href="#" vote="0" class="konk_btn"><span>Неконкурсное фото</span></a>
|
||||
<a href="#" vote="0" class="konk_btn '.$classm.'"><span>Неконкурсное фото</span></a>
|
||||
</td>
|
||||
<td class="pb_photo" id="p2072294"><a href="/photo/'.$pc['id'].'" target="_blank" class="prw"><img class="f" src="/api/photo/compress?url='.$pc['photourl'].'" alt="597 КБ" style="display: inline;">
|
||||
<div class="hpshade">
|
||||
|
@ -76,7 +87,7 @@ use \App\Models\{User, VoteContest};
|
|||
|
||||
|
||||
<br>
|
||||
<p class="narrow" style="font-size:19px"><a href="/voting.php">Голосование</a> · <a href="?show=results">Победители</a> · <a href="?show=rating">Рейтинг</a> · <b>Претенденты</b></p>
|
||||
<p class="narrow" style="font-size:19px"><a href="/voting">Голосование</a> · <a href="/voting/results">Победители</a> · <a href="/voting/rating">Рейтинг</a> · <b>Претенденты</b></p>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -134,20 +134,62 @@ LIMIT 10;');
|
|||
$contest = DB::query('SELECT * FROM contests WHERE status=2')[0];
|
||||
$theme = DB::query('SELECT * FROM contests_themes WHERE id=:id', array(':id' => $contest['themeid']))[0];
|
||||
echo ' <div id="contestNotify" style="float:left; border:solid 1px #171022; padding:6px 10px 7px; margin-bottom:13px; background-color:#E5D6FF"><h4>Фотоконкурс!</h4>
|
||||
Закончится через: <b id="countdown"></b><br>
|
||||
<span id="timett">Закончится через:</span> <b id="countdown"></b><br>
|
||||
Тематика: <b>' . $theme['title'] . '</b><br>
|
||||
<b style="color: #412378;">Голосуйте за лучшие фотографии, которые должны стать победителями сегодняшнего конкурса!</b><br><br>
|
||||
<a href="/voting" style="background-color: #37009D; color: #fff;" type="button">Голосовать!</a>
|
||||
<div id="contestBtns"><a href="/voting" style="background-color: #37009D; color: #fff;" type="button">Голосовать!</a></div>
|
||||
<script>startCountdown(' . $contest['closedate'] . ');</script>';
|
||||
} else if (DB::query('SELECT status FROM contests WHERE status=1')[0]['status'] === 1) {
|
||||
$contest = DB::query('SELECT * FROM contests WHERE status=1')[0];
|
||||
$theme = DB::query('SELECT * FROM contests_themes WHERE id=:id', array(':id' => $contest['themeid']))[0];
|
||||
echo ' <div id="contestNotify" style="float:left; border:solid 1px #171022; padding:6px 10px 7px; margin-bottom:13px; background-color:#E5D6FF"><h4>Фотоконкурс!</h4>
|
||||
Начнётся через: <b id="countdown"></b><br>
|
||||
<span id="timett">Начнётся через:</span> <b id="countdown"></b><br>
|
||||
Тематика: <b>' . $theme['title'] . '</b><br>
|
||||
<b style="color: #412378;">Лучшие фотографии по мнению сообщества ' . NGALLERY['root']['title'] . ' будут отмечены</b><br><br>
|
||||
<a href="/voting/sendpretend" style="background-color: #37009D; color: #fff;" type="button">Участвовать!</a> <a href="/voting/waiting" style="background-color: #37009D; color: #fff;" type="button">Голосовать за претендентов</a>
|
||||
<script>startCountdown(' . $contest['closepretendsdate'] . ');</script>';
|
||||
<b id="textContest" style="color: #412378;">Лучшие фотографии по мнению сообщества ' . NGALLERY['root']['title'] . ' будут отмечены</b><br><br>
|
||||
<div id="contestBtns"><a href="/voting/sendpretend" style="background-color: #37009D; color: #fff;" type="button">Участвовать!</a> <a href="/voting/waiting" style="background-color: #37009D; color: #fff;" type="button">Голосовать за претендентов</a></div>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
let unixThreshold = '.$contest['closepretendsdate'].'; // Задайте нужное значение UNIX
|
||||
let checkInterval = 1000; // Интервал проверки в миллисекундах (1 секунда)
|
||||
let isRequestSent = false;
|
||||
|
||||
function checkUnixTime() {
|
||||
let currentUnixTime = Math.floor(Date.now() / 1000);
|
||||
|
||||
if (currentUnixTime > unixThreshold) {
|
||||
$("#countdown").text("Ожидаем ответ от сервера...");
|
||||
|
||||
$.ajax({
|
||||
url: "/api/contests/getinfo", // Укажите свой URL
|
||||
method: "GET",
|
||||
success: function (response) {
|
||||
|
||||
let data = typeof response === "string" ? JSON.parse(response) : response;
|
||||
if (data.statuses.pretends === "closed" && data.statuses.public === "opened") {
|
||||
clearInterval(pingInterval); // Останавливаем старый пинг
|
||||
$("#textContest").text("Голосуйте за лучшие фотографии, которые должны стать победителями сегодняшнего конкурса!");
|
||||
$("#timett").text("Закончится через:");
|
||||
$("#contestBtns").html(`<a href="/voting" style="background-color: #37009D; color: #fff;" type="button">Голосовать!</a>`)
|
||||
unixThreshold = data.contest.closedate;
|
||||
startCountdown(data.contest.closedate);
|
||||
pingInterval = setInterval(checkUnixTime, checkInterval);
|
||||
}
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
console.error("Ошибка запроса:", error);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log(currentUnixTime);
|
||||
}
|
||||
}
|
||||
|
||||
// Запускаем периодический пинг
|
||||
let pingInterval = setInterval(checkUnixTime, checkInterval);
|
||||
});
|
||||
|
||||
|
||||
</script>';
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -125,6 +125,25 @@ if ($photo->i('id') !== null) {
|
|||
<img onerror="errimg(); this.onerror = null;" id="ph" src="<?= $photo->i('photourl') ?>" alt="" title="Фотография">
|
||||
<?php
|
||||
}
|
||||
if ($photo->i('on_contest') === 2) { ?>
|
||||
<a class="underphoto" href="/voting"><img style="margin-top:-4px" src="/static/img/star_people.png"> Фотография участвует в голосовании</a>
|
||||
|
||||
<?php }
|
||||
|
||||
foreach ($photo->content('contests') as $c) {
|
||||
if ($c['place'] === 1) {
|
||||
$img = '3';
|
||||
}
|
||||
if ($c['place'] === 2) {
|
||||
$img = '2';
|
||||
}
|
||||
if ($c['place'] === 3) {
|
||||
$img = '1';
|
||||
}
|
||||
echo '<a class="underphoto" style="font-weight:bold" href="/pk.php?pid=2068816&type=d"><img style="margin-top:-4px" src="/static/img/vs'.$img.'.png"> '.$c['place'].'-е место на фотоконкурсе</a>';
|
||||
}
|
||||
|
||||
|
||||
if ($photo->i('priority') === 1) { ?>
|
||||
<div class="underphoto s17" style="cursor:help" title="Фотография не удовлетворяет действующим на момент публикации критериям качества снимков."><i style="position:relative; top:1px" class="fas fa-info-circle"></i> <b class="dot">Условная публикация</b></div>
|
||||
<?php } else if ($photo->i('priority') === 2) { ?>
|
||||
|
@ -259,14 +278,14 @@ if ($photo->i('id') !== null) {
|
|||
echo 'voted';
|
||||
} ?>"><span>Мне не нравится</span></a>
|
||||
<?php
|
||||
if ($photo->content('video') === null && $photo->i('user_id') != Auth::userid()) { ?>
|
||||
if (($photo->content('video') === null && $photo->i('user_id') != Auth::userid()) || $photo->i('on_contest') != 2) { ?>
|
||||
<a class="konk_btn <?php if (Vote::photoContest(Auth::userid(), $id) === 1) {
|
||||
echo 'voted';
|
||||
} ?>" vote="1" href="#"><span>Красиво, на конкурс!</span></a>
|
||||
<a href="#" vote="0" class="konk_btn <?php if (Vote::photoContest(Auth::userid(), $id) === 0) {
|
||||
echo 'voted';
|
||||
} ?>"><span>Неконкурсное фото</span></a>
|
||||
<?php } else if ($photo->i('user_id') === Auth::userid()) { ?>
|
||||
<?php } else if ($photo->i('user_id') === Auth::userid() && $photo->i('on_contest') != 2) { ?>
|
||||
|
||||
<a href="#" vote="1" class="konk_btn"><span>Выставить на конкурс</span></a><a href="#" vote="0" class="konk_btn"><span>Не участвовать в конкурсе</span></a></div>
|
||||
<?php } ?>
|
||||
|
|
|
@ -425,10 +425,10 @@ $(document).ready(function()
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<!--tr>
|
||||
<td class="lcol">Модель камеры:</td>
|
||||
<td style="padding-bottom:17px"><input type="text" name="cammod" style="width:300px" value=""></td>
|
||||
</tr>
|
||||
</!--tr>
|
||||
<tr>
|
||||
<td class="lcol">Пользователь:</td>
|
||||
<td>
|
||||
|
@ -501,7 +501,7 @@ $(document).ready(function()
|
|||
<tr>
|
||||
<td></td>
|
||||
<td><br><input type="submit" value=" Искать "></td>
|
||||
</tr>
|
||||
</tr-->
|
||||
</tbody></table>
|
||||
</form>
|
||||
</tbody>
|
||||
|
|
Loading…
Reference in a new issue