game/modules_data/_mod.php
Ivor Barhansky a9265dc4d8 Refactor code to improve maintainability and readability
This commit introduces changes aimed at enhancing code maintainability and readability. The most significant was moving code responsible for various future checks into a separate file to reduce clutter. Additionally, the code has been cleaned up, removing excessive spacing and redundancies.
2023-12-09 15:47:09 +02:00

603 lines
29 KiB
PHP

<?php
use Core\Db;
use Moderation\{AdmFactory, Announcement, Moderator, ModFactory, UserRegistrationList};
/** @var User $u */
if (!defined('GAME')) {
die();
}
$m = new Moderator($u->info['id']);
if (!$m->isModerator) {
return;
}
$merror = '';
$uer = '';
$go = isset($_GET['go']) ? round($_GET['go']) : 0;
if (!empty($_POST['logingo'])) {
$moderation = new ModFactory(
strip_tags($_POST['logingo']),
empty($_POST['modReason']) ? '' : $_POST['modReason'],
$u->info['room'],
);
$administration = new AdmFactory(
strip_tags($_POST['logingo'])
);
if (!empty($_POST['silence']) && !empty($_POST['time'])) {
$moderation->silence($_POST['time']);
} elseif (!empty($_POST['unsilence'])) {
$moderation->unsilence();
} elseif (!empty($_POST['prison']) && !empty($_POST['time'])) {
$moderation->prison($_POST['time']);
} elseif (!empty($_POST['unprison'])) {
$moderation->unprison();
} elseif (!empty($_POST['depersonalize']) && !empty($_POST['time'])) {
$moderation->depersonalize($_POST['time']);
} elseif (!empty($_POST['undepersonalize'])) {
$moderation->undepersonalize();
} elseif (!empty($_POST['ban']) && $m->canBlockUsers) {
$moderation->ban();
} elseif (!empty($_POST['unban']) && $m->canBlockUsers) {
$moderation->unban();
} elseif (!empty($_POST['addmoderator']) && $m->isAdmin) {
$administration->addmoderator();
} elseif (!empty($_POST['deletemoderator']) && $m->isAdmin) {
$administration->removemoderator();
} elseif (!empty($_POST['changegender']) && $m->isAdmin) {
$administration->changegender();
} elseif (!empty($_POST['changelogin']) && !empty($_POST['newLogin']) && $m->isAdmin) {
$administration->changelogin($_POST['newLogin']);
} elseif (!empty($_POST['giveitem']) && !empty($_POST['itemId']) && $m->isAdmin) {
$administration->additem((int)$_POST['itemId']);
} elseif (!empty($_POST['kickfrombattle']) && $m->isAdmin) {
$administration->kickfrombattle();
} elseif (!empty($_POST['toggleinvisibility']) && $m->isAdmin) {
$administration->toggleinvisibility();
}
if (!empty($moderation->status)) {
$uer = $moderation->status;
} elseif (!empty($administration->status)) {
$uer = $administration->status;
}
}
if (!empty($_POST['marrypartner1']) && !empty($_POST['marrypartner2'])) {
if (!empty($_POST['marry'])) {
$uer = 'marry: Not available';
} elseif (!empty($_POST['unmarry'])) {
$uer = 'unmarry: Not available';
}
}
echo '<script src="/js/jquery.js"></script>';
if ($go == 3 && $m->isAdmin) {
?>
<table style="width: 100%">
<tr>
<td style="text-align: center;"><h3>Редактирование обучающих квестов</h3></td>
<td style="text-align: right; width: 150px;">
<input type="button" value="&gt;" onclick="location='main.php?moderation';"/>
<input type="button" value="Вернуться" onclick="location='main.php?moderation&go=3';"/>
</td>
</tr>
<tr>
<td><?= empty($merror) ? '' : "<span style='color: red;'>$merror</span>" ?>
<?php
$sx = ['Мужской', 'Женский', 'Общий'];
if (isset($_GET['eq'])) {
$pl = Db::getRow('select * from an_quest where id = ?', [(int)$_GET['eq']]);
if (isset($pl['id'])) {
if (isset($_POST['pl_name'])) {
$pl['name'] = $_POST['pl_name'];
$pl['sex'] = $_POST['pl_sex'];
$pl['ico_bot'] = $_POST['pl_ico_bot'];
$pl['name_bot'] = $_POST['pl_name_bot'];
$pl['info'] = $_POST['pl_info'];
$pl['act'] = $_POST['pl_act'];
$pl['next'] = $_POST['pl_next'];
$pl['win'] = $_POST['pl_win'];
$pl['data'] = $_POST['pl_data'];
$pl['room'] = $_POST['pl_room'];
$pl['module'] = $_POST['pl_module'];
Db::sql(
'update an_quest set
name = ?,
sex = ?,
ico_bot = ?,
name_bot = ?,
info = ?,
act = ?,
next = ?,
win = ?,
data = ?,
room = ?,
module = ?
where id = ?',
[
$pl['name'],
$pl['sex'],
$pl['ico_bot'],
$pl['name_bot'],
$pl['info'],
$pl['act'],
$pl['next'],
$pl['win'],
$pl['data'],
$pl['room'],
$pl['module'],
$pl['id'],
]
);
$pl = Db::getRow('select * from an_quest where id = ?', [(int)$_GET['eq']]);
}
?>
<form method="post" action="/main.php?moderation&go=3&eq=<?= $pl['id'] ?>">
#id: <?= $pl['id'] ?><br/>
<label>
Название квеста:
<input style="width:200px;" name="pl_name" type="text" value="<?= $pl['name'] ?>">
</label><br/>
<hr/>
<label>
Пол: <input style="width:20px;" name="pl_sex" type="text" value="<?= $pl['sex'] ?>">
</label><br/>
<label>
Картинка бота: <input style="width:216px;" name="pl_ico_bot" type="text" value="<?= $pl['ico_bot'] ?>">
</label><br/>
<label>
Имя бота: <input style="width:253px;" name="pl_name_bot" type="text" value="<?= $pl['name_bot'] ?>">
</label>
<hr/>
<br/>
<label>
Информация:<br/><textarea style="width:330px;" name="pl_info"><?= $pl['info'] ?></textarea>
</label><br/>
<label>
Действие: <input style="width:255px;" name="pl_act" type="text" value="<?= $pl['act'] ?>">
</label><br/>
<label>
Следующий квест: <input style="width:200px;" name="pl_next" type="text" value="<?= $pl['next'] ?>">
</label><br/>
<label>
Награда: <input style="width:200px;" name="pl_win" type="text" value="<?= $pl['win'] ?>"> (опыт|кр|екр|предметы)
</label><br/>
<label>
Дата: <input style="width:200px;" name="pl_data" type="text" value="<?= $pl['data'] ?>">
</label><br/>
<hr/>
<label>
Комната (требует): <input name="pl_room" type="text" value="<?= $pl['room'] ?>">
</label><br/>
<label>
Модуль, действие (требует): <input name="pl_module" type="text" value="<?= $pl['module'] ?>">
</label>
<hr/>
<input type="submit" value="Сохранить квест">
</form>
<?php
} else {
echo '<div style="text-align: center">Квест не найден.</div>>';
}
} else {
echo '<a href="/main.php?moderation&go=3&add=1">Добавить новый квест</a><hr>';
if (isset($_GET['del'])) {
Db::sql('delete from an_quest where id = ?', [(int)$_GET['del']]);
} elseif (isset($_GET['add'])) {
Db::sql('insert into an_quest (id) values (default)');
}
foreach (Db::getRows('select id, name, sex from an_quest') as ['id' => $qid, 'name' => $qname, 'sex' => $qsex]) {
$qsex = $sx[$qsex];
echo <<<HTML
<div>
<span style="width:50px;display:inline-block;">$qid</span>
<span style="width:250px;display:inline-block; font-weight: bold;">$qname($qsex)</span>
<a href="/main.php?moderation&go=3&eq=$qid">Изменить</a>
<a href="/main.php?moderation&go=3&del=$qid">Удалить</a>
</div>
<hr>
HTML;
}
}
?>
</td>
</tr>
</table>
<?php
} elseif ($go == 2 && $m->isAdmin) {
if (isset($_POST['q_name'])) {
$qd = [];
/* Array ([q_act_atr_1] => 0 [q_act_val_1] => [q_tr_atr_1] => 0 [q_tr_val_1] => [q_ng_atr_1] => 0 [q_ng_val_1] => [q_nk_atr_NaN] => 0
[q_nk_val_NaN] => [q_info] => test описание [q_line1] => 1 [q_line2] => 1 [q_fast] => 1 [q_align1] => 1 [q_align2] => 1 [q_align3] => 1 ) */
$qd['name'] = $_POST['q_name'];
$qd['lvl'] = explode('-', $_POST['q_lvl']);
$qd['info'] = $_POST['q_info'];
if ($_POST['q_line1'] == 1) {
$qd['line'] = $_POST['q_line2'];
}
if ($_POST['q_fast'] == 1) {
$gd['fast'] = 1;
}
if ($_POST['align1'] == 1) {
$qd['align'] = 1;
} elseif ($_POST['align2'] == 1) {
$qd['align'] = 3;
} elseif ($_POST['align3'] == 1) {
$qd['align'] = 7;
}
$i = 1;
while ($i != -1) {
if (isset($_POST['q_act_atr_' . $i])) {
if ($_POST['q_act_val_' . $i] != '') {
$qd['act_date'] .= $_POST['q_act_atr_' . $i] . ':=:' . $_POST['q_act_val_' . $i] . ':|:';
}
} else {
$i = -2;
$qd['act_date'] = trim($qd['act_date'], ':|');
}
$i++;
}
$i = 1;
while ($i != -1) {
if (isset($_POST['q_tr_atr_' . $i])) {
if ($_POST['q_tr_val_' . $i] != '') {
$qd['tr_date'] .= $_POST['q_tr_atr_' . $i] . ':=:' . $_POST['q_tr_val_' . $i] . ':|:';
}
} else {
$i = -2;
$qd['tr_date'] = trim($qd['tr_date'], ':|');
}
$i++;
}
$i = 1;
while ($i != -1) {
if (isset($_POST['q_ng_atr_' . $i])) {
if ($_POST['q_ng_val_' . $i] != '') {
$qd['win_date'] .= $_POST['q_ng_atr_' . $i] . ':=:' . $_POST['q_ng_val_' . $i] . ':|:';
}
} else {
$i = -2;
$qd['win_date'] = trim($qd['win_date'], ':|');
}
$i++;
}
$i = 1;
while ($i != -1) {
if (isset($_POST['q_nk_atr_' . $i])) {
if ($_POST['q_nk_val_' . $i] != '') {
$qd['lose_date'] .= $_POST['q_nk_atr_' . $i] . ':=:' . $_POST['q_nk_val_' . $i] . ':|:';
}
} else {
$i = -2;
$qd['lose_date'] = trim($qd['lose_date'], ':|');
}
$i++;
}
Db::sql(
'insert into quests (name, min_lvl, max_lvl, tr_date, act_date, win_date, lose_date, info, line, align, fast) values (?,?,?,?,?,?,?,?,?,?,?)',
[
$qd['name'],
$qd['lvl'][0],
$qd['lvl'][1],
$qd['tr_date'],
$qd['act_date'],
$qd['win_date'],
$qd['lose_date'],
$qd['info'],
$qd['line'],
$qd['align'],
$qd['fast'],
]
);
}
?>
<script src="/js/modpanel.js"></script>
<title>Текстовое поле</title>
<style>
.vtop {
vertical-align: top;
}
.center {
text-align: center;
}
table.cs0 {
border-spacing: 0;
}
table.cp5 {
border-collapse: collapse;
}
table.cp5 td {
padding: 5px;
}
table.newquest {
width: 100%;
border: 0;
background-color: #e1e1e1;
}
</style>
<table style="width: 100%;">
<tr>
<td class="center"><h3>Редактор заданий</h3></td>
<td style="width: 150px; text-align: right;">
<input type="button" class="btn btn-success" value="Вернуться" onclick="location='/main.php?moderation';"/>
</td>
</tr>
<tr>
<td>
<table class="cs0 cp5 newquest">
<!-- -->
<tr>
<td style="border-bottom:1px solid #CCCCCC;">
<div style="margin-left:11px;">
<a href="javascript:void(0)" onclick="nqst()">Добавить новое задание</a>
</div>
<div></div>
</td>
</tr>
<tr id="addNewquest" style="display:none;">
<td style="border-bottom:1px solid #CCCCCC; background-color: #dadada;">
<b>Панель добавления новых заданий:</b><br>
<form method="post" action="/main.php?moderation&go=2">
<table class="cs0 cp5" style="width: 100%; border: 0;">
<tr>
<td class="vtop" style="width: 200px;"><label for="q_name">Название задания</label></td>
<td><input name="q_name" id="q_name" size="60" maxlength="50">
</td>
</tr>
<tr>
<td class="vtop"><label for="q_lvl">Уровень задания</label></td>
<td><input name="q_lvl" id="q_lvl" value="0-21" size="10" maxlength="5"/></td>
</tr>
<tr>
<td class="vtop">Действия</td>
<td class="vtop" id="qact"><a href="javascript:void(0)" onclick="addqact()"><small>[+] добавить</small></a></td>
</tr>
<tr>
<td class="vtop">Условия</td>
<td class="vtop" id="qtr"><a href="javascript:void(0)" onclick="addqtr()"><small>[+] добавить</small></a></td>
</tr>
<tr>
<td class="vtop">Награда</td>
<td class="vtop" id="qng"><a href="javascript:void(0)" onclick="addqng()"><small>[+] добавить</small></a></td>
</tr>
<tr>
<td class="vtop">Неудача</td>
<td class="vtop" id="qnk"><a href="javascript:void(0)" onclick="addqnk()"><small>[+] добавить</small></a></td>
</tr>
<tr>
<td class="vtop"><label for="q_info">Описание задания</label></td>
<td><textarea name="q_info" id="q_info" style="width:90%" rows="7"></textarea></td>
</tr>
<tr style="background-color: #cbcbcb">
<td class="vtop center">
<label><input name="q_line1" type="checkbox" id="checkbox3" value="1">
Линейное задание</label>
</td>
<td>
<label><input name="q_line2" id="q_line3" size="5" maxlength="3">
, id линейного сюжета</label>
</td>
</tr>
<tr style="background-color: #cbcbcb">
<td class="vtop center">
<label><input name="q_fast" type="checkbox" id="q_fast" value="1">
Быстрое задание</label>
</td>
</tr>
<tr style="background-color: #cbcbcb">
<td class="vtop center">
<small>
<label>
<input name="q_align1" type="checkbox" id="q_align1" value="1">Свет,
</label>
<label>
<input name="q_align2" type="checkbox" id="q_align2" value="1"/>Тьма,
</label><br>
<label>
<input name="q_align3" type="checkbox" id="q_align3" value="1"/>Нейтрал,
</label>
</small>
</td>
<td>
<input type="submit" value="Добавить задание"/>
</td>
</tr>
</table>
</form>
</td>
</tr>
<!-- -->
</table>
<table class="cs0 cp5 newquest">
<!-- -->
<?php
if (isset($_GET['delq'])) {
Db::sql('delete from quests where id = ?', [$_GET['delq']]);
}
$ql = Db::getRows('select id, name, info from quests');
foreach ($ql as $quest): ?>
<tr>
<td style="border-bottom:1px solid #CCCCCC; width: 300px;">
<div style="margin-left:11px;"><?= $quest['name'] ?></div>
<div></div>
</td>
<td style="border-bottom:1px solid #CCCCCC; background-color: #dadada; width: 75px;">
<div style="text-align: center;">
<a href="/main.php?moderation&go=2&delq=<?= $quest['id'] ?>">удалить</a>
</div>
</td>
<td style="border-bottom:1px solid #CCCCCC;">
<small><b>Описание:</b> <?= $quest['info'] ?></small>
</td>
</tr>
<?php endforeach; ?>
<!-- -->
</table>
</td>
</tr>
</table>
<?php
} else {
?>
<style>
.modpow {
background-color: #ddd5bf;
}
.mt {
background-color: #b1a993;
padding: 5px 10px;
}
.md {
padding: 10px;
}
</style>
<div id="useMagic" style="display:none; position:absolute; border:solid 1px #776f59; left: 50px; top: 186px;" class="modpow">
<div class="mt" id="modtitle"></div>
<div class="md" id="moddata"></div>
</div>
<div style="display: grid; grid-template-columns: auto 150px;">
<div style="text-align: center;">
<?php ?>
<h3>Модераторская</h3>
<?php ?>
</div>
<div style="text-align: right;">
<input type="button" class="btn btn-danger" value="Вернуться" onclick="location='main.php';">
</div>
</div>
<form action="/main.php?moderation&rnd=<?= PassGen::intCode() ?>" method="post" name="F1" id="F1">
<span style="color: red;"><?= $uer ?></span>
<br>
<div style="padding:10px; margin:5px; border-bottom:1px solid #cac9c7;">
<h4>Наложить/Снять наказание</h4>
<form method="post" id="moderation">
<label for="logingo">Логин персонажа:</label>
<input type="text" id="logingo" name="logingo">
<label for="modReason">Причина действия (где применимо):</label>
<input type="text" id="modReason" name="modReason">
</form>
<div>
<label>Время в минутах: <input type="number" min="1" name="time" form="moderation"></label>
<input type="submit" name="silence" value="Молчанка в чате" form="moderation">
<input type="submit" name="unsilence" value="❌ Снять молчанку" form="moderation"><br>
<label>Количество дней: <input type="number" min="1" name="time" form="moderation"></label>
<input type="submit" name="prison" value="Посадить в тюрьму" form="moderation">
<input type="submit" name="unprison" value="❌ Выпустить из тюрьмы" form="moderation"><br>
<label>Количество дней: <input type="number" min="1" name="time" form="moderation"></label>
<input type="submit" name="depersonalize" value="Скрыть профиль" form="moderation">
<input type="submit" name="undepersonalize" value="❌ Раскрыть профиль" form="moderation"><br>
<form method="post">
<label for="marrypartner1">Партнёр 1</label>
<input type="text" id="marrypartner1" name="logingo">
<label for="marrypartner2">Партнёр 2</label>
<input type="text" id="marrypartner2" name="logingo2">
<input type="submit" name="marry" value="💘 Свадьба!">
<input type="submit" name="unmarry" value="💔 Развод!">
</form>
<?php if ($m->canBlockUsers): ?>
<div style="background-color: lightcoral; margin: 5px 1px; border: 1px dashed crimson;">
<input type="submit" name="ban" value="🔒 ️Заблокировать>" form="moderation">
<input type="submit" name="unban" value="🔓 Разблокировать" form="moderation">
</div>
<?php endif; ?>
</div>
<?php if ($m->isAdmin): ?>
<div>
<a href="/main.php?moderation&go=2">Редактировать квесты, задания и обучающие программы</a><br>
<a href="/main.php?moderation&go=3">Редактировать квесты для Нубозавров</a><br>
<a href="/main.php?moderation&go=1">Редактировать возможности подчиненных</a><br>
</div>
<input type="submit" name="addmoderator" value="Назначить модератором>" form="moderation">
<input type="submit" name="deletemoderator" value="❌ Убрать из модераторов" form="moderation">
<input type="submit" name="kickfrombattle" value="⚔️ Вытащить из боя>" form="moderation">
<input type="submit" name="changegender" value="👨🏻‍🤝‍👩🏻 Сменить пол" form="moderation"><br>
<label for="newLogin">Новый логин:</label> <input type="text" id="newLogin" name="newLogin">
<input type="submit" name="changelogin" value="📝 Сменить логин"><br>
<label for="itemId">ID предмета:</label> <input type="number" id="itemId" name="itemId" min="1">
<input type="submit" name="giveitem" value="🎁 Подарить предмет"><br>
<button disabled>Добавить опыта</button> <i style="color: grey">- очень сломанная херня.</i>
<?php endif; ?>
</div>
<?php
if ($m->isAdmin) {
/** Мегафон только для администраторов. */
Announcement::init();
/** Регистрации персонажей только для администраторов. */
UserRegistrationList::get();
/** Лог действий модераторов только для администраторов. */
$dsee = [];
if (!isset($_POST['smod1'])) {
$_POST['smod1'] = date('d.m.Y');
}
$dsee['date'] = explode('.', $_POST['smod1']);
$dsee['date'] = $dsee['date'][2] . '-' . $dsee['date'][1] . '-' . $dsee['date'][0];
$dsee['t1'] = strtotime($dsee['date'] . ' 00:00:00');
$dsee['t2'] = strtotime($dsee['date'] . ' 23:59:59');
$dsee['date'] = date('d.m.Y', $dsee['t1']);
?>
<div style="padding:0 10px 5px 10px; margin:5px; border-bottom:1px solid #cac9c7;">
<h4>Показать лог действий модераторов</h4>
<label>
Показать действия за
<input name="smod1" type="text" id="smod1" value="<?= $_POST['smod1'] ?>" size="11" maxlength="10">
</label>
<label>
Логин модератора
<input name="smod2" type="text" id="smod2" value="<?= $_POST['smod2'] ?>" size="30" maxlength="30">
</label>
<input type="submit" name="delosee3" id="delosee3" class="btn" value="Поиск"/>
</div>
<?php
if (isset($_POST['delosee3'])) {
foreach (Db::getRows('select uid, time, text from users_delo where login = ? and time between ? and ?', [$_POST['smod2'], $dsee['t1'], $dsee['t2']]) as $log) {
$date = date('d.m.Y H:i:s', $log['time']);
$login = User::getLogin($log['uid']);
echo <<<HTML
<div style="padding:0 10px 5px 10px; margin:5px; border-bottom:1px solid #cac9c7;">
<div style="display:inline-block;width:150px;color:green">$date</div>
{$log['text']} персонажу $login
</div>
HTML;
}
}
} ?>
</form>
<?php
}