mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-26 17:29:21 +02:00
485 lines
16 KiB
PHP
485 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* Account editor
|
|
*
|
|
* @package MyAAC
|
|
* @author Lee
|
|
* @copyright 2019 MyAAC
|
|
* @link https://my-aac.org
|
|
*/
|
|
defined('MYAAC') or die('Direct access not allowed!');
|
|
|
|
$title = 'Account editor';
|
|
$base = BASE_URL . 'admin/?p=accounts';
|
|
|
|
if ($config['account_country'])
|
|
require SYSTEM . 'countries.conf.php';
|
|
|
|
function echo_success($message)
|
|
{
|
|
echo '<p class="success">' . $message . '</p>';
|
|
}
|
|
|
|
function echo_error($message)
|
|
{
|
|
global $error;
|
|
echo '<p class="error">' . $message . '</p>';
|
|
$error = true;
|
|
}
|
|
|
|
function verify_number($number, $name, $max_length)
|
|
{
|
|
if (!Validator::number($number))
|
|
echo_error($name . ' can contain only numbers.');
|
|
|
|
$number_length = strlen($number);
|
|
if ($number_length <= 0 || $number_length > $max_length)
|
|
echo_error($name . ' cannot be longer than ' . $max_length . ' digits.');
|
|
}
|
|
|
|
$hasSecretColumn = $db->hasColumn('accounts', 'secret');
|
|
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
|
$hasPointsColumn = $db->hasColumn('accounts', 'premium_points');
|
|
$hasTypeColumn = $db->hasColumn('accounts', 'type');
|
|
$hasGroupColumn = $db->hasColumn('accounts', 'group_id');
|
|
|
|
if ($config['account_country']) {
|
|
$countries = array();
|
|
foreach (array('pl', 'se', 'br', 'us', 'gb') as $c)
|
|
$countries[$c] = $config['countries'][$c];
|
|
|
|
$countries['--'] = '----------';
|
|
foreach ($config['countries'] as $code => $c)
|
|
$countries[$code] = $c;
|
|
}
|
|
?>
|
|
|
|
<link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>tools/css/jquery.datetimepicker.css"/ >
|
|
<script src="<?php echo BASE_URL; ?>tools/js/jquery.datetimepicker.js"></script>
|
|
|
|
<?php
|
|
$id = 0;
|
|
if (isset($_REQUEST['id']))
|
|
$id = (int)$_REQUEST['id'];
|
|
else if (isset($_REQUEST['search_name'])) {
|
|
if (strlen($_REQUEST['search_name']) < 3 && !Validator::number($_REQUEST['search_name'])) {
|
|
echo 'Player name is too short.';
|
|
} else {
|
|
if (Validator::number($_REQUEST['search_name']))
|
|
$id = $_REQUEST['search_name'];
|
|
else {
|
|
$query = $db->query('SELECT `id` FROM `accounts` WHERE `name` = ' . $db->quote($_REQUEST['search_name']));
|
|
if ($query->rowCount() == 1) {
|
|
$query = $query->fetch();
|
|
$id = $query['id'];
|
|
} else {
|
|
$query = $db->query('SELECT `id`, `name` FROM `accounts` WHERE `name` LIKE ' . $db->quote('%' . $_REQUEST['search_name'] . '%'));
|
|
if ($query->rowCount() > 0 && $query->rowCount() <= 10) {
|
|
echo 'Do you mean?<ul>';
|
|
foreach ($query as $row)
|
|
echo '<li><a href="' . $base . '&id=' . $row['id'] . '">' . $row['name'] . '</a></li>';
|
|
echo '</ul>';
|
|
} else if ($query->rowCount() > 10)
|
|
echo 'Specified name resulted with too many accounts.';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$groups = new OTS_Groups_List();
|
|
if ($id > 0) {
|
|
$account = new OTS_Account();
|
|
$account->load($id);
|
|
|
|
if (isset($account, $_POST['save']) && $account->isLoaded()) {// we want to save
|
|
$error = false;
|
|
|
|
$_error = '';
|
|
$account_db = new OTS_Account();
|
|
if(USE_ACCOUNT_NAME) {
|
|
$name = $_POST['name'];
|
|
|
|
$account_db->find($name);
|
|
if ($account_db->isLoaded() && $account->getName() != $name)
|
|
echo_error('This name is already used. Please choose another name!');
|
|
}
|
|
|
|
$account_db->load($id);
|
|
if (!$account_db->isLoaded())
|
|
echo_error('Account with this id doesn\'t exist.');
|
|
|
|
//type/group
|
|
if($hasTypeColumn || $hasGroupColumn) {
|
|
$group = $_POST['group'];
|
|
}
|
|
|
|
$password = ((!empty($_POST["pass"]) ? $_POST['pass'] : null));
|
|
if (!Validator::password($password)) {
|
|
$errors['password'] = Validator::getLastError();
|
|
}
|
|
|
|
//secret
|
|
if($hasSecretColumn) {
|
|
$secret = $_POST['secret'];
|
|
}
|
|
|
|
//key
|
|
$key = $_POST['key'];
|
|
$email = $_POST['email'];
|
|
if (!Validator::email($email))
|
|
$errors['email'] = Validator::getLastError();
|
|
|
|
//tibia coins
|
|
if ($hasCoinsColumn) {
|
|
$t_coins = $_POST['t_coins'];
|
|
verify_number($t_coins, 'Tibia coins', 12);
|
|
}
|
|
// prem days
|
|
$p_days = (int)$_POST['p_days'];
|
|
verify_number($p_days, 'Prem days', 11);
|
|
|
|
//prem points
|
|
$p_points = $_POST['p_points'];
|
|
verify_number($p_points, 'Prem Points', 11);
|
|
|
|
//rl name
|
|
$rl_name = $_POST['rl_name'];
|
|
|
|
//location
|
|
$rl_loca = $_POST['rl_loca'];
|
|
|
|
//country
|
|
$rl_country = $_POST['rl_country'];
|
|
|
|
$web_flags = $_POST['web_flags'];
|
|
verify_number($web_flags, 'Web Flags', 1);
|
|
|
|
//created
|
|
$created = $_POST['created'];
|
|
verify_number($created, 'Created', 11);
|
|
|
|
//web last login
|
|
$web_lastlogin = $_POST['web_lastlogin'];
|
|
verify_number($web_lastlogin, 'Web Last logout', 11);
|
|
|
|
if (!$error) {
|
|
if(USE_ACCOUNT_NAME) {
|
|
$account->setName($name);
|
|
}
|
|
|
|
if ($hasTypeColumn) {
|
|
$account->setCustomField('type', $group);
|
|
} elseif ($hasGroupColumn) {
|
|
$account->setCustomField('group_id', $group);
|
|
}
|
|
|
|
if($hasSecretColumn) {
|
|
$account->setCustomField('secret', $secret);
|
|
}
|
|
$account->setCustomField('key', $key);
|
|
$account->setEMail($email);
|
|
if ($hasCoinsColumn) {
|
|
$account->setCustomField('coins', $t_coins);
|
|
}
|
|
|
|
$lastDay = 0;
|
|
if($p_days != 0 && $p_days != PHP_INT_MAX ) {
|
|
$lastDay = time();
|
|
} else if ($lastDay != 0) {
|
|
$lastDay = 0;
|
|
}
|
|
|
|
$account->setPremDays($p_days);
|
|
$account->setLastLogin($lastDay);
|
|
if ($hasPointsColumn) {
|
|
$account->setCustomField('premium_points', $p_points);
|
|
}
|
|
$account->setRLName($rl_name);
|
|
$account->setLocation($rl_loca);
|
|
$account->setCountry($rl_country);
|
|
$account->setCustomField('created', $created);
|
|
$account->setWebFlags($web_flags);
|
|
$account->setCustomField('web_lastlogin', $web_lastlogin);
|
|
|
|
if (isset($password)) {
|
|
$config_salt_enabled = $db->hasColumn('accounts', 'salt');
|
|
if ($config_salt_enabled) {
|
|
$salt = generateRandomString(10, false, true, true);
|
|
$password = $salt . $password;
|
|
$account_logged->setCustomField('salt', $salt);
|
|
}
|
|
|
|
$password = encrypt($password);
|
|
$account->setPassword($password);
|
|
|
|
if ($config_salt_enabled)
|
|
$account->setCustomField('salt', $salt);
|
|
}
|
|
|
|
$account->save();
|
|
echo_success('Account saved at: ' . date('G:i'));
|
|
}
|
|
}
|
|
}
|
|
|
|
$search_account = '';
|
|
if (isset($_REQUEST['search_name']))
|
|
$search_account = $_REQUEST['search_name'];
|
|
else if (isset($_REQUEST['search_account']))
|
|
$search_account = $_REQUEST['search_account'];
|
|
else if ($id > 0 && isset($account) && $account->isLoaded()) {
|
|
if(USE_ACCOUNT_NAME) {
|
|
$search_account = $account->getName();
|
|
}
|
|
else {
|
|
$search_account = $account->getId();
|
|
}
|
|
}
|
|
|
|
?>
|
|
<div class="row">
|
|
<?php if (isset($account) && $account->isLoaded()) { ?>
|
|
|
|
<form action="<?php echo $base . ((isset($id) && $id > 0) ? '&id=' . $id : ''); ?>" method="post"
|
|
class="form-horizontal">
|
|
<div class="col-md-8">
|
|
<div class="box box-primary">
|
|
<div class="box-body">
|
|
<div class="row">
|
|
<?php if(USE_ACCOUNT_NAME): ?>
|
|
<div class="col-xs-4">
|
|
<label for="name" class="control-label">Account Name:</label>
|
|
<input type="text" class="form-control" id="name" name="name"
|
|
autocomplete="off" style="cursor: auto;"
|
|
value="<?php echo $account->getName(); ?>"/>
|
|
</div>
|
|
<?php endif; ?>
|
|
<div class="col-xs-5">
|
|
<label for="c_pass" class="control-label">Password: (check to change)</label>
|
|
<div class="input-group">
|
|
<span class="input-group-addon">
|
|
<input type="checkbox"
|
|
name="c_pass"
|
|
id="c_pass"
|
|
value="false"
|
|
class="input_control"/>
|
|
</span>
|
|
<input type="text" class="form-control" id="pass" name="pass"
|
|
autocomplete="off" maxlength="20"
|
|
value=""/>
|
|
</div>
|
|
</div>
|
|
<div class="col-xs-3">
|
|
<label for="account_id" class="control-label">Account ID:</label>
|
|
<input type="text" class="form-control" id="account_id" name="account_id"
|
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11" disabled
|
|
value="<?php echo $account->getId(); ?>"/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<?php
|
|
$acc_group = $account->getAccGroupId();
|
|
if ($hasTypeColumn) {
|
|
$acc_type = array("Normal", "Tutor", "Senior Tutor", "Gamemaster", "God"); ?>
|
|
<div class="col-xs-6">
|
|
<label for="group" class="control-label">Account Type:</label>
|
|
<select name="group" id="group" class="form-control">
|
|
<?php foreach ($acc_type as $id => $a_type): ?>
|
|
<option value="<?php echo($id + 1); ?>" <?php echo($acc_group == ($id + 1) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
<?php
|
|
} elseif ($hasGroupColumn) {
|
|
?>
|
|
<div class="col-xs-6">
|
|
<label for="group" class="control-label">Account Type:</label>
|
|
<select name="group" id="group" class="form-control">
|
|
<?php
|
|
foreach ($groups->getGroups() as $id => $group): ?>
|
|
<option value="<?php echo $id; ?>" <?php echo($acc_group == $id ? 'selected' : ''); ?>><?php echo $group->getName(); ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
<?php } ?>
|
|
<div class="col-xs-6">
|
|
<label for="web_flags" class="control-label">Website Access:</label>
|
|
<select name="web_flags" id="web_flags" class="form-control">
|
|
<?php $web_acc = array("None", "Admin", "Super Admin", "(Admin + Super Admin)");
|
|
foreach ($web_acc as $id => $a_type): ?>
|
|
<option value="<?php echo($id); ?>" <?php echo($account->getWebFlags() == ($id) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<?php if($hasSecretColumn): ?>
|
|
<div class="col-xs-6">
|
|
<label for="secret" class="control-label">Secret:</label>
|
|
<input type="text" class="form-control" id="secret" name="secret"
|
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11"
|
|
value="<?php echo $account->getCustomField('secret'); ?>"/>
|
|
</div>
|
|
<?php endif; ?>
|
|
<div class="col-xs-6">
|
|
<label for="key" class="control-label">Key:</label>
|
|
<input type="text" class="form-control" id="key" name="key"
|
|
autocomplete="off" style="cursor: auto;" size="8" maxlength="11"
|
|
value="<?php echo $account->getCustomField('key'); ?>"/>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-xs-6">
|
|
<label for="email" class="control-label">Email:</label>
|
|
<input type="text" class="form-control" id="email" name="email"
|
|
autocomplete="off" maxlength="20"
|
|
value="<?php echo $account->getEMail(); ?>"/>
|
|
</div>
|
|
<?php if ($hasCoinsColumn): ?>
|
|
<div class="col-xs-6">
|
|
<label for="t_coins" class="control-label">Tibia Coins:</label>
|
|
<input type="text" class="form-control" id="t_coins" name="t_coins"
|
|
autocomplete="off" maxlength="8"
|
|
value="<?php echo $account->getCustomField('coins') ?>"/>
|
|
</div>
|
|
<?php endif; ?>
|
|
<div class="col-xs-6">
|
|
<label for="p_days" class="control-label">Premium Days:</label>
|
|
<input type="text" class="form-control" id="p_days" name="p_days"
|
|
autocomplete="off" maxlength="11"
|
|
value="<?php echo $account->getPremDays(); ?>"/>
|
|
</div>
|
|
<?php if ($hasPointsColumn): ?>
|
|
<div class="col-xs-6">
|
|
<label for="p_points" class="control-label">Premium Points:</label>
|
|
<input type="text" class="form-control" id="p_points" name="p_points"
|
|
autocomplete="off" maxlength="8"
|
|
value="<?php echo $account->getCustomField('premium_points') ?>"/>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-xs-4">
|
|
<label for="rl_name" class="control-label">RL Name:</label>
|
|
<input type="text" class="form-control" id="rl_name" name="rl_name"
|
|
autocomplete="off" maxlength="20"
|
|
value="<?php echo $account->getRLName(); ?>"/>
|
|
</div>
|
|
<div class="col-xs-4">
|
|
<label for="rl_loca" class="control-label">Location:</label>
|
|
<input type="text" class="form-control" id="rl_loca" name="rl_loca"
|
|
autocomplete="off" maxlength="20"
|
|
value="<?php echo $account->getLocation(); ?>"/>
|
|
</div>
|
|
<div class="col-xs-4">
|
|
<label for="rl_country" class="control-label">Country:</label>
|
|
<select name="rl_country" id="rl_country" class="form-control">
|
|
<?php foreach ($countries as $id => $a_type): ?>
|
|
<option value="<?php echo($id); ?>" <?php echo($account->getCountry() == ($id) ? 'selected' : ''); ?>><?php echo $a_type; ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-xs-4">
|
|
<label for="created" class="control-label">Created:</label>
|
|
<input type="text" class="form-control" id="created" name="created"
|
|
autocomplete="off" maxlength="20"
|
|
value="<?php echo $account->getCustomField('created'); ?>"/>
|
|
</div>
|
|
<div class="col-xs-4">
|
|
<label for="web_lastlogin" class="control-label">Web Last Login:</label>
|
|
<input type="text" class="form-control" id="web_lastlogin" name="web_lastlogin"
|
|
autocomplete="off" maxlength="20"
|
|
value="<?php echo $account->getCustomField('web_lastlogin'); ?>"/>
|
|
</div>
|
|
</div>
|
|
|
|
<input type="hidden" name="save" value="yes"/>
|
|
<div class="box-footer">
|
|
<a href="<?php echo ADMIN_URL; ?>?p=accounts"><span class="btn btn-danger">Cancel</span></a>
|
|
<div class="pull-right">
|
|
<input type="submit" class="btn btn-primary" value="Update">
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<?php } ?>
|
|
<div class="col-md-4">
|
|
<div class="box box-primary">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">Search Account:</h3>
|
|
<div class="box-tools pull-right">
|
|
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="box-body">
|
|
<form action="<?php echo $base; ?>" method="post">
|
|
<div class="input-group input-group-sm">
|
|
<input type="text" class="form-control" name="search_name" value="<?php echo $search_account; ?>"
|
|
maxlength="32" size="32">
|
|
<span class="input-group-btn">
|
|
<button type="submit" type="button" class="btn btn-info btn-flat">Search</button>
|
|
</span>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
if (isset($account) && $account->isLoaded()) {
|
|
$account_players = array();
|
|
$query = $db->query('SELECT `name`,`level`,`vocation` FROM `players` WHERE `account_id` = ' . $account->getId() . ' ORDER BY `name`')->fetchAll();
|
|
if (isset($query)) {
|
|
?>
|
|
<div class="box">
|
|
<div class="box-header">
|
|
<h3 class="box-title">Character List:</h3>
|
|
</div>
|
|
<div class="box-body no-padding">
|
|
<table class="table table-striped">
|
|
<tbody>
|
|
<tr>
|
|
<th style="width: 10px">#</th>
|
|
<th>Name</th>
|
|
<th>Level</th>
|
|
<th style="width: 40px">Edit</th>
|
|
</tr>
|
|
<?php
|
|
$i = 1;
|
|
foreach ($query as $p) {
|
|
$account_players[] = $p;
|
|
echo '<tr>
|
|
<td>' . $i . '.</td>
|
|
<td>' . $p['name'] . '</td>
|
|
<td>' . $p['level'] . '</td>
|
|
<td><a href="?p=players&search_name=' . $p['name'] . '"><span class="btn btn-success btn-sm edit btn-flat"><i class="fa fa-edit"></i></span></a></span></td>
|
|
</tr>';
|
|
$i++;
|
|
} ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
};
|
|
};
|
|
?>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
$('#lastlogout').datetimepicker({format: 'unixtime'});
|
|
$('#created').datetimepicker({format: 'unixtime'});
|
|
$('#web_lastlogin').datetimepicker({format: 'unixtime'});
|
|
$(document).ready(function () {
|
|
$('.input_control').change(function () {
|
|
$('input[name=pass]')[0].disabled = !this.checked;
|
|
$('input[name=pass]')[0].value = '';
|
|
}).change();
|
|
});
|
|
</script>
|