mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-27 17:59:22 +02:00

* Remove unneeded escape * Fix guild back buttons (change logo & motd) * small adjustment in news.php * Fix create character when admin (any case is allowed now) * Fix forum table style (boards & thread view) * Small improvement to plugins.enabled check * [WIP] nikic/fast-route implementation I will describe it more in Pull Request * Optimisations & fixes. * Fix path - should not be absolute * Add PLUGINS to Twig path * Don't hide "Install Plugin" Box by default * Update package-lock.json * nothing important, just early exit & fixes Fix creature display * fix premium_ends_at for tfs 1.3+ * Move pages * Move pages tbc * $db->select: make $where parameter optional, allows to get all records * Add some error box to error * fix parse error * Rewriting the router v2 To be more flexible * small fixes * fix & add admin icons * Move mass_* pages to correct folder * fix logout hook 2 * Delete accountmanagement.php * This code wasn't used * Add missing var * Add redirect_from && redirect_to to router options + Also add * for all methods shortcut * Remove comments Not allowed in normal json * Allow admin pages included into plugins dir * block access to some files * Fix admin logout * Fix #178 * feature: mail confirmed reward Suggested by @EPuncker # Conflicts: # system/hooks.php * remove misleading comment * adjust required version according to composer.json * fix duplicated word * Adjustments & fixed to mass actions * Add password confirm, and change text type to password * Add list of Open Source Software MyAAC is using * Fix signature * Show First, Second instead of numbers * fix base dir detection * fix double ACTION define + undefined URI in template * new function> escapeHtml + fix css in admin menus * fix changelog add * fix news adding, rename const to NEWS_* * Add verify to pages, add messages, limits, fix add * fix "Please fill all input" * add required input to admin pages * shorten some expressions with ?? * shorten code + fix conversion (int) * Move account_types to config, account.web_flags to common.php * Update example.json * feature: router aliases * shorten some code + const convert * remove wrong char * fix signature on custom basedir * fix: mass teleport position validation (#214) * fix: mass teleport position validation * fix: max position * Fix execute in CLI * fix warning in reload cache in dev mode * Configurable admin panel folder * feature: plugin require more options with comma * $config_account_salt -> USE_ACCOUNT_SALT * fix forum show_thread * Update show_thread.php --------- Co-authored-by: Gabriel Pedro <gpedro@users.noreply.github.com>
270 lines
5.4 KiB
PHP
270 lines
5.4 KiB
PHP
<?php
|
|
|
|
/**#@+
|
|
* @version 0.1.3
|
|
* @since 0.1.3
|
|
*/
|
|
|
|
/**
|
|
* @package POT
|
|
* @author Wrzasq <wrzasq@gmail.com>
|
|
* @copyright 2007 (C) by Wrzasq
|
|
* @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
|
|
*/
|
|
|
|
/**
|
|
* Base class for all database drivers.
|
|
*
|
|
* <p>
|
|
* It defines additional rotines required by database driver for POT using default SQL standard-compliant method.
|
|
* </p>
|
|
*
|
|
* @package POT
|
|
*/
|
|
abstract class OTS_Base_DB extends PDO implements IOTS_DB
|
|
{
|
|
use OTS_DB_PDOQuery;
|
|
/**
|
|
* Tables prefix.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $prefix = '';
|
|
|
|
/**
|
|
* Query counter
|
|
*
|
|
* @var int
|
|
*/
|
|
private $queries = 0;
|
|
|
|
protected $logged = false;
|
|
private $log = '';
|
|
|
|
/**
|
|
* Query-quoted field name.
|
|
*
|
|
* @param string $name Field name.
|
|
* @return string Quoted name.
|
|
*/
|
|
public function fieldName($name)
|
|
{
|
|
return '"' . $name . '"';
|
|
}
|
|
|
|
public function fieldNames()
|
|
{
|
|
$ret = '';
|
|
|
|
foreach(func_get_args() as $v) {
|
|
$ret .= $this->fieldName($v) . ',';
|
|
}
|
|
|
|
$ret[strlen($ret) - 1] = '';
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Query-quoted table name.
|
|
*
|
|
* @param string $name Table name.
|
|
* @return string Quoted name.
|
|
*/
|
|
public function tableName($name)
|
|
{
|
|
return $this->fieldName($this->prefix . $name);
|
|
}
|
|
|
|
private function doQuery(...$args)
|
|
{
|
|
$this->queries++;
|
|
|
|
if($this->logged) {
|
|
$startTime = microtime(true);
|
|
}
|
|
|
|
$ret = parent::query(...$args);
|
|
if($this->logged) {
|
|
$totalTime = microtime(true) - $startTime;
|
|
$this->log .= round($totalTime, 4) . ' ms - ' . $args[0] . PHP_EOL;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
public function select($table, $where = [], $limit = null)
|
|
{
|
|
$fields = array_keys($where);
|
|
$values = array_values($where);
|
|
$query = 'SELECT * FROM ' . $this->tableName($table);
|
|
|
|
if (!empty($where)) {
|
|
$query .= ' WHERE (';
|
|
|
|
$count = count($fields);
|
|
for ($i = 0; $i < $count; $i++) {
|
|
$query .= $this->fieldName($fields[$i]) . ' = ' . $this->quote($values[$i]) . ' AND ';
|
|
}
|
|
|
|
$query = substr($query, 0, -4);
|
|
$query .= ')';
|
|
}
|
|
|
|
if (isset($limit))
|
|
$query .=' LIMIT '.$limit.';';
|
|
else
|
|
$query .=';';
|
|
|
|
$query = $this->query($query);
|
|
$rowCount = $query->rowCount();
|
|
if ($rowCount <= 0) return false;
|
|
else if ($rowCount == 1) {
|
|
return $query->fetch();
|
|
}
|
|
|
|
return $query->fetchAll();
|
|
|
|
}
|
|
|
|
public function insert($table, $data)
|
|
{
|
|
$fields = array_keys($data);
|
|
$values = array_values($data);
|
|
$query = 'INSERT INTO ' . $this->tableName($table) . ' (';
|
|
foreach ($fields as $field) {
|
|
$query.= $this->fieldName($field).',';
|
|
}
|
|
|
|
$query = substr($query, 0, -1);
|
|
$query .= ') VALUES (';
|
|
foreach ($values as $value) {
|
|
if ($value === null) {
|
|
$query .= 'NULL,';
|
|
}
|
|
else {
|
|
$query .= $this->quote($value).',';
|
|
}
|
|
}
|
|
|
|
$query = substr($query, 0, -1);
|
|
$query .= ')';
|
|
|
|
$this->exec($query);
|
|
return true;
|
|
}
|
|
|
|
public function replace($table, $data)
|
|
{
|
|
$fields = array_keys($data);
|
|
$values = array_values($data);
|
|
$query = 'REPLACE INTO '.$this->tableName($table).' (';
|
|
foreach ($fields as $field)
|
|
$query.= $this->fieldName($field).',';
|
|
|
|
$query = substr($query, 0, -1);
|
|
$query.= ') VALUES (';
|
|
foreach ($values as $value)
|
|
if ($value === null)
|
|
$query.= 'NULL,';
|
|
else
|
|
$query.= $this->quote($value).',';
|
|
|
|
$query = substr($query, 0, -1);
|
|
$query .= ')';
|
|
|
|
$this->query($query);
|
|
return true;
|
|
}
|
|
|
|
public function update($table, $data, $where, $limit = 1)
|
|
{
|
|
$fields = array_keys($data);
|
|
$values = array_values($data);
|
|
|
|
$query = 'UPDATE '.$this->tableName($table).' SET ';
|
|
|
|
$count = count($fields);
|
|
for ($i = 0; $i < $count; $i++)
|
|
$query.= $this->fieldName($fields[$i]).' = '.$this->quote($values[$i]).', ';
|
|
|
|
$query = substr($query, 0, -2);
|
|
$query.=' WHERE (';
|
|
$fields = array_keys($where);
|
|
$values = array_values($where);
|
|
|
|
$count = count($fields);
|
|
for ($i = 0; $i < $count; $i++)
|
|
$query.= $this->fieldName($fields[$i]).' = '.$this->quote($values[$i]).' AND ';
|
|
|
|
$query = substr($query, 0, -4);
|
|
if (isset($limit))
|
|
$query .=') LIMIT '.$limit.';';
|
|
else
|
|
$query .=');';
|
|
|
|
$this->exec($query);
|
|
return true;
|
|
}
|
|
|
|
public function delete($table, $data, $limit = 1)
|
|
{
|
|
$fields = array_keys($data);
|
|
$values = array_values($data);
|
|
|
|
$query = 'DELETE FROM ' . $this->tableName($table) . ' WHERE (';
|
|
|
|
$count = count($fields);
|
|
for ($i = 0; $i < $count; $i++) {
|
|
$query .= $this->fieldName($fields[$i]) . ' = ' . $this->quote($values[$i]) . ' AND ';
|
|
}
|
|
|
|
$query = substr($query, 0, -4);
|
|
if ($limit > 0) {
|
|
$query.=') LIMIT '.$limit.';';
|
|
}
|
|
else {
|
|
$query.=');';
|
|
}
|
|
|
|
$this->exec($query);
|
|
return true;
|
|
}
|
|
/**
|
|
* LIMIT/OFFSET clause for queries.
|
|
*
|
|
* @param int|bool $limit Limit of rows to be affected by query (false if no limit).
|
|
* @param int|bool $offset Number of rows to be skipped before applying query effects (false if no offset).
|
|
* @return string LIMIT/OFFSET SQL clause for query.
|
|
*/
|
|
public function limit($limit = false, $offset = false)
|
|
{
|
|
// by default this is empty part
|
|
$sql = '';
|
|
|
|
if($limit !== false)
|
|
{
|
|
$sql = ' LIMIT ' . $limit;
|
|
|
|
// OFFSET has no effect if there is no LIMIT
|
|
if($offset !== false)
|
|
{
|
|
$sql .= ' OFFSET ' . $offset;
|
|
}
|
|
}
|
|
|
|
return $sql;
|
|
}
|
|
|
|
public function queries() {
|
|
return $this->queries;
|
|
}
|
|
|
|
public function getLog() {
|
|
return $this->log;
|
|
}
|
|
}
|
|
|
|
/**#@-*/
|
|
|
|
?>
|