Файл: pages/clan/clans.php
Строк: 197
<?php
// Physical module map v50.6: public URL stays clean while code lives in /pages.
if (!defined('GAME_ROOT')) define('GAME_ROOT', dirname(__DIR__, 2));
chdir(GAME_ROOT);
if (PHP_SAPI !== 'cli') { $_SERVER['PHP_SELF']='/clans.php'; $_SERVER['SCRIPT_NAME']='/clans.php'; }
/* Обновление игры под PHP 8.4 / PDO и усиление безопасности: by Метриум (Стэлп) */
include './system/common.php';
include './system/functions.php';
require_once './system/clan_features.php';
include './system/user.php';
include './system/menu.php';
if(!$user) {
header('location: /');
exit;
}
$ankkkk = htmlspecialchars((string)($_GET['action'] ?? ''), ENT_QUOTES, 'UTF-8');
switch($ankkkk) {
default:
$title = 'Рейтинг кланов';
include './system/h.php';
?>
<div class='main'>
<?php
$max = 10;
$count = db_result(db_query('SELECT COUNT(*) FROM `clans`'),0);
$pages = ceil($count/$max);
$page = _string(_num($_GET['page'] ?? 1));
if($page > $pages) {
$page = $pages;
}
if($page < 1) {
$page = 1;
}
$start = $page * $max - $max;
if($page == 1) {
$i = $page - 1;
}
elseif($page == 2) {
$i = ($page + 9);
}else{
$i = ($page * 10) - 9;
}
if($page == 1) {
echo '
<div class="center"><div class="block_zero"><img src="/images/town/hd/rating.jpg" alt="" width="100%"></div></div>
<div class="mini-line"></div>
';
}
if($count > 0) {
$q = db_query('SELECT * FROM `clans` ORDER BY `level` DESC,`exp` DESC LIMIT '.$start.', '.$max.'');
while($row = db_fetch_array($q)) {
$i++;
if($i < 4) {
?>
<div class="block_zero">
<img src="/images/icon/crys/<?=$i?>.png" alt=""> <?=$i?> место<div class="mb10"></div>
<a href="/clan/<?=$row['id']?>/"><img class="float-left" src="/images/icon/clan/gerb/<?=$row['gerb']?>.png" alt="" style="margin-right:3px;"></a>
<img src="/images/icon/clan/<?=$row['r']?>.png" alt=""> <a href="/clan/<?=$row['id']?>/"><?=$row['name']?></a> <br>
<img src="/images/icon/level.png" alt=""> Уровень: <b><?=$row['level']?></b> <br>
<img src="/images/icon/exp.png" alt=""> Опыт: <?=n_f($row['exp'])?><br>
</div>
<div class="mini-line"></div>
<?php
}else{
?>
<div class="block_zero">
<span class="white"><?=$i?></span>. <img src="/images/icon/clan/<?=$row['r']?>.png" alt=""> <a href="/clan/<?=$row['id']?>/"><?=$row['name']?></a>, <img src="/images/icon/level.png" alt="lvl"> <b><?=$row['level']?></b><br>
<img src="/images/icon/exp.png" alt=""> <?=n_f($row['exp'])?> опыта</div>
<div class="dot-line"></div>
<?php
}
}
?>
<div class="block_zero"><?=pages('?')?></div>
<?php
}
?>
<div class="dot-line"></div>
<div class="menuList"><li><a href="?action=search"><img src="/images/icon/clan.png" alt="">Поиск клана</a></li></div>
<div class="mini-line"></div>
<div class="menuList"><li><a href="/clans/create/"><img src="/images/icon/clan.png" alt="">Создать клан</a></li></div>
<div class="mini-line"></div>
<ul class="hint">
<li>Рейтинг обновляется один раз в 10 минут</li>
<li>Чтобы вступить в уже существующий клан, попросите лидера клана пригласить вас</li>
</ul>
</div>
<?php
include './system/f.php';
break;
case 'create':
$title = 'Создать клан';
include './system/h.php';
$cost = 2000;
?>
<?php
if($clan) {
?>
<div class='main'><font color='#999'>Для создания клана необходимо выйти из уже существующего</font></div>
<?php
}
else
{
$name = _string($_POST['name'] ?? '');
$name = mb_strtolower($name,'UTF-8');
if(($_SERVER['REQUEST_METHOD'] ?? 'GET')==='POST') security_require_csrf();
if($name && ($_SERVER['REQUEST_METHOD'] ?? 'GET')==='POST') {
if(!preg_match('/^[p{L}0-9 _-]{5,20}$/u',$name)) {
$_SESSION['err']='Название клана: 5–20 букв/цифр, пробел, дефис или подчёркивание.';
} elseif((int)$user['g'] < $cost) {
$_SESSION['err']='Недостаточно золота для создания клана.';
} elseif(db_fetch_one('SELECT `id` FROM `clans` WHERE `name`=? LIMIT 1',[$name])) {
$_SESSION['err']='Клан с таким названием уже существует.';
} else {
$randomGerb=random_int(1,17);
$pdo=db_pdo();
try {
$pdo->beginTransaction();
$st=$pdo->prepare('UPDATE `users` SET `g`=`g`-? WHERE `id`=? AND `g`>=?');
$st->execute([$cost,(int)$user['id'],$cost]);
if($st->rowCount()!==1) throw new RuntimeException('Недостаточно золота');
$st=$pdo->prepare('INSERT INTO `clans` (`name`,`r`,`gerb`,`day`,`mounth`,`year`) VALUES (?,?,?,?,?,?)');
$st->execute([$name,(int)$user['r'],$randomGerb,date('d'),date('m'),date('y')]);
$clan_id=(int)$pdo->lastInsertId();
$st=$pdo->prepare('INSERT INTO `clan_memb` (`clan`,`user`,`rank`,`time`,`last_update`) VALUES (?,?,5,?,?)');
$st->execute([$clan_id,(int)$user['id'],time(),time()+86400]);
clan_emblem_ensure_current($clan_id,$randomGerb,(int)$user['id']);
$pdo->commit();
header('Location: /clan/'); exit;
} catch(Throwable $e) {
if($pdo->inTransaction()) $pdo->rollBack();
$_SESSION['err']='Не удалось создать клан. Попробуйте ещё раз.';
if(function_exists('app_log_write')) app_log_write('CLAN-CREATE',$e->getMessage());
}
}
}
?>
<div class='main' align='center'>
<form action='' method='post'>
<?=security_csrf_field()?>
Название клана:<br/>
<input name='name'/><br/>
<span class='btn'><span class='end'><input class='label' type='submit' value='Создать клан'></span></span></form><center><span class='grey'>Цена: <img src='/images/icon/gold.png' alt=''/>
2000 золота</span></div></center><div class='mini-line'></div><div class ='main'><ul class='hint'><li>В названии можно использовать от 5 до 20 рус. или латин. символов.</li></ul></div>
</form>
</div>
<?php
}
include './system/f.php';
break;
case 'search':
$title = 'Поиск клана';
include './system/h.php';
$log = _string($_POST['log']);
if($log) {
$clun = db_query('SELECT * FROM `clans` WHERE `name` = "'.$log.'"');
$clun = db_fetch_array($clun);
if($clun) {
header('location: /clan/'.$clun['id'].'/');
}
else
{
echo'Нет такого клана';
}
}
?>
<div class='main'>
<div class='block_zero'>
<form action='/clans/search/' method='post'>
Название клана:<br/><input name='log' class='text'/><br/>
<span class='btn'><span class='end'><input class='label' type='submit' value='Поиск'></span></span>
</form>
</div><div class='mini-line'></div>
<div class='menuList'><li><a href='/clans/'><img src='/images/icon/clan.png' alt=''/>Список кланов</a></li></div>
</div>
<?php
include './system/f.php';
break;
}
?>