game/modules_data/_mod.php

603 lines
29 KiB
PHP
Raw Normal View History

2023-01-28 02:24:37 +00:00
<?php
2022-06-06 21:30:34 +00:00
use Core\Db;
use Moderation\{AdmFactory, Announcement, Moderator, ModFactory, UserRegistrationList};
2022-06-06 21:30:34 +00:00
/** @var User $u */
if (!defined('GAME')) {
die();
2022-06-06 21:30:34 +00:00
}
$m = new Moderator($u->info['id']);
2022-06-06 21:30:34 +00:00
if (!$m->isModerator) {
return;
}
2022-06-06 21:30:34 +00:00
$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>';
2022-06-06 21:30:34 +00:00
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']]);
2023-01-28 02:24:37 +00:00
}
?>
<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
2023-01-28 02:24:37 +00:00
} else {
echo '<div style="text-align: center">Квест не найден.</div>>';
2023-01-28 02:24:37 +00:00
}
} 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)');
2023-01-28 02:24:37 +00:00
}
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;
2023-01-28 02:24:37 +00:00
}
}
?>
</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] . ':|:';
2023-01-28 02:24:37 +00:00
}
} else {
$i = -2;
$qd['act_date'] = trim($qd['act_date'], ':|');
2023-01-28 02:24:37 +00:00
}
$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] . ':|:';
2023-01-28 02:24:37 +00:00
}
} 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] . ':|:';
2023-01-28 02:24:37 +00:00
}
} 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] . ':|:';
2023-01-28 02:24:37 +00:00
}
} 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;
}
2023-01-28 02:24:37 +00:00
.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>
2023-01-28 02:24:37 +00:00
<button disabled>Добавить опыта</button> <i style="color: grey">- очень сломанная херня.</i>
<?php endif; ?>
</div>
2023-01-28 02:24:37 +00:00
<?php
if ($m->isAdmin) {
/** Мегафон только для администраторов. */
Announcement::init();
2023-01-28 02:24:37 +00:00
/** Регистрации персонажей только для администраторов. */
UserRegistrationList::get();
2023-01-28 02:24:37 +00:00
/** Лог действий модераторов только для администраторов. */
$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
2022-06-06 21:30:34 +00:00
}