diff --git a/admin/pages/accounts.php b/admin/pages/accounts.php
index 5ec18d8d..7f47b3d0 100644
--- a/admin/pages/accounts.php
+++ b/admin/pages/accounts.php
@@ -7,6 +7,9 @@
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Player;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Account editor';
@@ -424,8 +427,7 @@ else if (isset($_REQUEST['search'])) {
isLoaded()) {
- $account_players = $account->getPlayersList();
- $account_players->orderBy('id');
+ $account_players = Player::where('account_id', $account->getId())->orderBy('id')->get();
if (isset($account_players)) { ?>
@@ -438,25 +440,13 @@ else if (isset($_REQUEST['search'])) {
- $player):
- $i++;
- $player_vocation = $player->getVocation();
- $player_promotion = $player->getPromotion();
- if (isset($player_promotion)) {
- if ((int)$player_promotion > 0)
- $player_vocation += ($player_promotion * $config['vocations_amount']);
- }
-
- if (isset($config['vocations'][$player_vocation])) {
- $vocation_name = $config['vocations'][$player_vocation];
- } ?>
+ $player): ?>
- |
- getName(); ?> |
- getLevel(); ?> |
- |
- |
+ |
+ name; ?> |
+ level; ?> |
+ vocation_name; ?> |
+ |
diff --git a/admin/pages/changelog.php b/admin/pages/changelog.php
index 4456344d..3d5cad64 100644
--- a/admin/pages/changelog.php
+++ b/admin/pages/changelog.php
@@ -8,6 +8,9 @@
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Changelog as ModelsChangelog;
+
defined('MYAAC') or die('Direct access not allowed!');
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
@@ -78,7 +81,7 @@ if(!empty($action))
error(implode(", ", $errors));
}
-$changelogs = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'changelog' . '` ORDER BY `id` DESC')->fetchAll();
+$changelogs = ModelsChangelog::orderBy('id')->get()->toArray();
$i = 0;
diff --git a/admin/pages/mass_account.php b/admin/pages/mass_account.php
index 507ef877..63bec54c 100644
--- a/admin/pages/mass_account.php
+++ b/admin/pages/mass_account.php
@@ -9,6 +9,9 @@
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Account;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Mass Account Actions';
@@ -26,15 +29,14 @@ function admin_give_points($points)
return;
}
+
$statement = $db->prepare('UPDATE `accounts` SET `premium_points` = `premium_points` + :points');
if (!$statement) {
displayMessage('Failed to prepare query statement.');
return;
}
- if (!$statement->execute([
- 'points' => $points
- ])) {
+ if (!Account::query()->increment('premium_points', $points)) {
displayMessage('Failed to add points.');
return;
}
@@ -50,15 +52,7 @@ function admin_give_coins($coins)
return;
}
- $statement = $db->prepare('UPDATE `accounts` SET `coins` = `coins` + :coins');
- if (!$statement) {
- displayMessage('Failed to prepare query statement.');
- return;
- }
-
- if (!$statement->execute([
- 'coins' => $coins
- ])) {
+ if (!Account::query()->increment('coins', $coins)) {
displayMessage('Failed to add coins.');
return;
}
diff --git a/admin/pages/mass_teleport.php b/admin/pages/mass_teleport.php
index 972975e2..5027fa1c 100644
--- a/admin/pages/mass_teleport.php
+++ b/admin/pages/mass_teleport.php
@@ -8,22 +8,19 @@
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Player;
+use MyAAC\Models\PlayerOnline;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Mass Teleport Actions';
function admin_teleport_position($x, $y, $z) {
- global $db;
- $statement = $db->prepare('UPDATE `players` SET `posx` = :x, `posy` = :y, `posz` = :z');
- if (!$statement) {
- displayMessage('Failed to prepare query statement.');
- return;
- }
-
- if (!$statement->execute([
- 'x' => $x, 'y' => $y, 'z' => $z
+ if (!Player::query()->update([
+ 'posx' => $x, 'posy' => $y, 'posz' => $z
])) {
- displayMessage('Failed to execute query.');
+ displayMessage('Failed to execute query. Probably already updated.');
return;
}
@@ -31,17 +28,10 @@ function admin_teleport_position($x, $y, $z) {
}
function admin_teleport_town($town_id) {
- global $db;
- $statement = $db->prepare('UPDATE `players` SET `town_id` = :town_id');
- if (!$statement) {
- displayMessage('Failed to prepare query statement.');
- return;
- }
-
- if (!$statement->execute([
- 'town_id' => $town_id
+ if (!Player::query()->update([
+ 'town_id' => $town_id,
])) {
- displayMessage('Failed to execute query.');
+ displayMessage('Failed to execute query. Probably already updated.');
return;
}
@@ -58,13 +48,12 @@ if (isset($_POST['action']) && $_POST['action']) {
$playersOnline = 0;
if($db->hasTable('players_online')) {// tfs 1.0
- $query = $db->query('SELECT count(*) AS `count` FROM `players_online`');
+ $playersOnline = PlayerOnline::count();
} else {
- $query = $db->query('SELECT count(*) AS `count` FROM `players` WHERE `players`.`online` > 0');
+ $playersOnline = Player::online()->count();
}
- $playersOnline = $query->fetch(PDO::FETCH_ASSOC);
- if ($playersOnline['count'] > 0) {
+ if ($playersOnline > 0) {
displayMessage('Please, close the server before execute this action otherwise players will not be affected.');
return;
}
diff --git a/admin/pages/menus.php b/admin/pages/menus.php
index 1e839d26..a0b492df 100644
--- a/admin/pages/menus.php
+++ b/admin/pages/menus.php
@@ -7,6 +7,9 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Menu;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Menus';
@@ -28,14 +31,22 @@ if (isset($_REQUEST['template'])) {
return;
}
- $db->query('DELETE FROM `' . TABLE_PREFIX . 'menu` WHERE `template` = ' . $db->quote($template));
+ Menu::where('template', $template)->delete();
foreach ($post_menu as $category => $menus) {
foreach ($menus as $i => $menu) {
if (empty($menu)) // don't save empty menu item
continue;
try {
- $db->insert(TABLE_PREFIX . 'menu', array('template' => $template, 'name' => $menu, 'link' => $post_menu_link[$category][$i], 'blank' => $post_menu_blank[$category][$i] == 'on' ? 1 : 0, 'color' => str_replace('#', '', $post_menu_color[$category][$i]), 'category' => $category, 'ordering' => $i));
+ Menu::create([
+ 'template' => $template,
+ 'name' => $menu,
+ 'link' => $post_menu_link[$category][$i],
+ 'blank' => $post_menu_blank[$category][$i] == 'on' ? 1 : 0,
+ 'color' => str_replace('#', '', $post_menu_color[$category][$i]),
+ 'category' => $category,
+ 'ordering' => $i
+ ]);
} catch (PDOException $error) {
warning('Error while adding menu item (' . $menu . '): ' . $error->getMessage());
}
@@ -58,6 +69,15 @@ if (isset($_REQUEST['template'])) {
return;
}
+ if (isset($_REQUEST['reset_colors'])) {
+ if (isset($config['menu_default_color'])) {
+ Menu::where('template', $template)->update(['color' => str_replace('#', '', $config['menu_default_color'])]);
+ }
+ else {
+ warning('There is no default color defined, cannot reset colors.');
+ }
+ }
+
if (!isset($config['menu_categories'])) {
echo "No menu categories set in template config.php.
This template doesn't support dynamic menus.";
return;
@@ -71,17 +91,29 @@ if (isset($_REQUEST['template'])) {
Hint: Add links to external sites using: http:// or https:// prefix.
Not all templates support blank and colorful links.
+
+
+
+
query('SELECT `name`, `link`, `blank`, `color`, `category`, `ordering` FROM `' . TABLE_PREFIX . 'menu` WHERE `enabled` = 1 AND `template` = ' . $db->quote($template) . ' ORDER BY `ordering` ASC;')->fetchAll();
- foreach ($menus_db as $menu) {
- $menus[$menu['category']][] = array('name' => $menu['name'], 'link' => $menu['link'], 'blank' => $menu['blank'], 'color' => $menu['color'], 'ordering' => $menu['ordering']);
- }
+ $menus = Menu::query()
+ ->select('name', 'link', 'blank', 'color', 'category', 'ordering')
+ ->where('enabled', 1)
+ ->where('template', $template)
+ ->orderBy('ordering')
+ ->get()
+ ->groupBy('category')
+ ->toArray();
+
$last_id = array();
?>
';
- $answers = $db->query('SELECT * FROM '.$db->tableName('myaac_bugtracker').' where `account` = '.$account_logged->getId().' and `id` = '.$id.' and `type` = 2 order by `reply`');
+ $answers = Bugtracker::where('account', $account_logged->getId())->where('id', $id)->where('type', 2)->orderBy('reply')->get()->toArray();
foreach($answers as $answer)
{
if($answer['who'] == 1)
@@ -207,9 +219,9 @@ $showed = $post = $reply = false;
{
if($bug[2]['status'] != 3)
{
- $reply = $db->query('SELECT MAX(reply) FROM `' . TABLE_PREFIX . 'bugtracker` where `account` = '.$acc.' and `id` = '.$id.' and `type` = 2')->fetch();
- $reply = $reply[0] + 1;
- $iswho = $db->query('SELECT * FROM `myaac_bugtracker` where `account` = '.$acc.' and `id` = '.$id.' and `type` = 2 order by `reply` desc limit 1')->fetch();
+ $reply = BugTracker::where('account', $aac)->where('id', $id)->where('type', 2)->max('reply');
+ $reply = $reply + 1;
+ $iswho = BugTracker::where('account', $acc)->where('id', $id)->where('type', 2)->orderByDesc('reply')->first()->toArray();
if(isset($_POST['finish']))
{
@@ -228,8 +240,16 @@ $showed = $post = $reply = false;
else
{
$type = 2;
- $INSERT = $db->query('INSERT INTO `myaac_bugtracker` (`account`,`id`,`text`,`reply`,`type`) VALUES ('.$db->quote($acc).','.$db->quote($id).','.$db->quote($_POST['text']).','.$db->quote($reply).','.$db->quote($type).')');
- $UPDATE = $db->query('UPDATE `myaac_bugtracker` SET `status` = 1 where `account` = '.$acc.' and `id` = '.$id.'');
+ $INSERT = BugTracker::create([
+ 'account' => $acc,
+ 'id' => $id,
+ 'text' => $_POST['text'],
+ 'reply' => $reply,
+ 'type' => $type
+ ]);
+ $UPDATE = BugTracker::where('id', $id)->where('account', $acc)->update([
+ 'status' => 1
+ ]);
header('Location: ?subtopic=bugtracker&id='.$id.'');
}
}
@@ -289,9 +309,9 @@ $showed = $post = $reply = false;
}
elseif(isset($_REQUEST['add']) && $_REQUEST['add'] == TRUE)
{
- $thread = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'bugtracker` where `account` = '.$acc.' and `type` = 1 order by `id` desc')->fetch();
- $id_next = $db->query('SELECT MAX(id) FROM `' . TABLE_PREFIX . 'bugtracker` where `account` = '.$acc.' and `type` = 1')->fetch();
- $id_next = $id_next[0] + 1;
+ $thread = BugTracker::where('account', $acc)->where('type', 1)->orderByDesc('id')->get()->toArray();
+ $id_next = BugTracker::where('account', $acc)->where('type', 1)->max('id');
+ $id_next = $id_next + 1;
if(empty($thread))
$thread['status'] = 3;
@@ -318,7 +338,16 @@ $showed = $post = $reply = false;
{
$type = 1;
$status = 1;
- $INSERT = $db->query('INSERT INTO `' . TABLE_PREFIX . 'bugtracker` (`account`,`id`,`text`,`type`,`subject`, `reply`,`status`,`tag`) VALUES ('.$db->quote($acc).','.$db->quote($id_next).','.$db->quote($_POST['text']).','.$db->quote($type).','.$db->quote($_POST['subject']).', 0,'.$db->quote($status).','.$db->quote($_POST['tags']).')');
+ $INSERT = BugTracker::create([
+ 'account' => $acc,
+ 'id' => $id_next,
+ 'text' => $_POST['text'],
+ 'type' => $type,
+ 'subject' => $_POST['subject'],
+ 'reply' => 0,
+ 'status' => $status,
+ 'tag' => $_POST['tags']
+ ]);
header('Location: ?subtopic=bugtracker&id='.$id_next.'');
}
diff --git a/system/pages/changelog.php b/system/pages/changelog.php
index bc65281b..9157dca0 100644
--- a/system/pages/changelog.php
+++ b/system/pages/changelog.php
@@ -10,6 +10,8 @@
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Changelog';
+use MyAAC\Models\Changelog;
+
$_page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
$limit = 30;
$offset = $_page * $limit;
@@ -17,7 +19,7 @@ $next_page = false;
$canEdit = hasFlag(FLAG_CONTENT_NEWS) || superAdmin();
-$changelogs = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'changelog` ' . ($canEdit ? '' : 'WHERE `hidden` = 0').' ORDER BY `id` DESC LIMIT ' . ($limit + 1) . ' OFFSET ' . $offset)->fetchAll();
+$changelogs = Changelog::isPublic()->orderByDesc('id')->limit($limit + 1)->offset($offset)->get()->toArray();
$i = 0;
foreach($changelogs as $key => &$log)
diff --git a/system/pages/creatures.php b/system/pages/creatures.php
index 9e472738..1b0e0ae8 100644
--- a/system/pages/creatures.php
+++ b/system/pages/creatures.php
@@ -9,13 +9,18 @@
* @copyright 2020 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Monster;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Creatures';
if (empty($_REQUEST['name'])) {
// display list of monsters
$preview = config('monsters_images_preview');
- $creatures = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 '.(empty($_REQUEST['boss']) ? '': 'AND `rewardboss` = 1').' ORDER BY name asc')->fetchAll();
+ $creatures = Monster::where('hidden', '!=', 1)->when(!empty($_REQUEST['boss']), function ($query) {
+ $query->where('rewardboss', 1);
+ })->get()->toArray();
if ($preview) {
foreach($creatures as $key => &$creature)
@@ -34,9 +39,7 @@ if (empty($_REQUEST['name'])) {
// display monster
$creature_name = urldecode(stripslashes(ucwords(strtolower($_REQUEST['name']))));
-$prep = $db->prepare('SELECT * FROM `' . TABLE_PREFIX . 'monsters` WHERE `hidden` != 1 AND `name` = ? LIMIT 1;');
-$prep->execute([$creature_name]);
-$creature = $prep->fetch();
+$creature = Monster::where('hidden', '!=', 1)->where('name', $creature_name)->first()->toArray();
if (isset($creature['name'])) {
function sort_by_chance($a, $b)
diff --git a/system/pages/faq.php b/system/pages/faq.php
index 5d71aa3c..f99a9fa8 100644
--- a/system/pages/faq.php
+++ b/system/pages/faq.php
@@ -7,6 +7,9 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\FAQ as ModelsFAQ;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Frequently Asked Questions';
@@ -68,21 +71,23 @@ if($canEdit)
));
}
-$faqs =
- $db->query('SELECT `id`, `question`, `answer`' .
- ($canEdit ? ', `hidden`, `ordering`' : '') .
- ' FROM `' . TABLE_PREFIX . 'faq`' .
- (!$canEdit ? ' WHERE `hidden` != 1' : '') .
- ' ORDER BY `ordering`;');
+$faqs = ModelsFAQ::select('id', 'question', 'answer')->when(!$canEdit, function ($query) {
+ $query->where('hidden', '!=', 1);
+})->orderBy('ordering');
-if(!$faqs->rowCount())
+if ($canEdit) {
+ $faqs->addSelect(['hidden', 'ordering']);
+}
+
+$faqs = $faqs->get()->toArray();
+if(!count($faqs))
{
?>
There are no questions added yet.
rowCount();
+$last = count($faqs);
$twig->display('faq.html.twig', array(
'faqs' => $faqs,
'last' => $last,
@@ -93,26 +98,17 @@ class FAQ
{
static public function add($question, $answer, &$errors)
{
- global $db;
if(isset($question[0]) && isset($answer[0]))
{
- $query = $db->select(TABLE_PREFIX . 'faq', array('question' => $question));
-
- if($query === false)
+ $row = ModelsFAQ::where('question', $question)->first();
+ if(!$row)
{
- $query =
- $db->query(
- 'SELECT ' . $db->fieldName('ordering') .
- ' FROM ' . $db->tableName(TABLE_PREFIX . 'faq') .
- ' ORDER BY ' . $db->fieldName('ordering') . ' DESC LIMIT 1'
- );
-
- $ordering = 0;
- if($query->rowCount() > 0) {
- $query = $query->fetch();
- $ordering = $query['ordering'] + 1;
- }
- $db->insert(TABLE_PREFIX . 'faq', array('question' => $question, 'answer' => $answer, 'ordering' => $ordering));
+ $ordering = ModelsFAQ::max('ordering') ?? 0;
+ ModelsFAQ::create([
+ 'question' => $question,
+ 'answer' => $answer,
+ 'ordering' => $ordering
+ ]);
}
else
$errors[] = 'FAQ with this question already exists.';
@@ -124,22 +120,23 @@ class FAQ
}
static public function get($id) {
- global $db;
- return $db->select(TABLE_PREFIX . 'faq', array('id' => $id));
+ return ModelsFAQ::find($id)->toArray();
}
static public function update($id, $question, $answer) {
- global $db;
- $db->update(TABLE_PREFIX . 'faq', array('question' => $question, 'answer' => $answer), array('id' => $id));
+ ModelsFAQ::where('id', $id)->update([
+ 'question' => $question,
+ 'answer' => $answer
+ ]);
}
static public function delete($id, &$errors)
{
- global $db;
if(isset($id))
{
- if(self::get($id) !== false)
- $db->delete(TABLE_PREFIX . 'faq', array('id' => $id));
+ $row = ModelsFAQ::find($id);
+ if($row)
+ $row->delete();
else
$errors[] = 'FAQ with id ' . $id . ' does not exists.';
}
@@ -151,14 +148,15 @@ class FAQ
static public function toggleHidden($id, &$errors)
{
- global $db;
if(isset($id))
{
- $query = self::get($id);
- if($query !== false)
- $db->update(TABLE_PREFIX . 'faq', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id));
- else
+ $row = ModelsFAQ::find($id);
+ if ($row) {
+ $row->hidden = ($row->hidden == 1 ? 0 : 1);
+ $row->save();
+ } else {
$errors[] = 'FAQ with id ' . $id . ' does not exists.';
+ }
}
else
$errors[] = 'id not set';
@@ -169,15 +167,18 @@ class FAQ
static public function move($id, $i, &$errors)
{
global $db;
- $query = self::get($id);
- if($query !== false)
+ $row = ModelsFAQ::find($id);
+ if($row)
{
- $ordering = $query['ordering'] + $i;
- $old_record = $db->select(TABLE_PREFIX . 'faq', array('ordering' => $ordering));
- if($old_record !== false)
- $db->update(TABLE_PREFIX . 'faq', array('ordering' => $query['ordering']), array('ordering' => $ordering));
+ $ordering = $row->ordering + $i;
+ $old_record = ModelsFAQ::where('ordering', $ordering)->first();
+ if($old_record) {
+ $old_record->ordering = $row->ordering;
+ $old_record->save();
+ }
- $db->update(TABLE_PREFIX . 'faq', array('ordering' => $ordering), array('id' => $id));
+ $row->ordering = $ordering;
+ $row->save();
}
else
$errors[] = 'FAQ with id ' . $id . ' does not exists.';
diff --git a/system/pages/gallery.php b/system/pages/gallery.php
index b6e2b07f..69ad2194 100644
--- a/system/pages/gallery.php
+++ b/system/pages/gallery.php
@@ -7,6 +7,9 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Gallery as ModelsGallery;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Gallery';
@@ -164,22 +167,19 @@ class Gallery
}
static public function get($id) {
- global $db;
- return $db->select(TABLE_PREFIX . 'gallery', array('id' => $id));
+ return ModelsGallery::find($id)->toArray();
}
static public function update($id, $comment, $image, $author) {
- global $db;
-
$pathinfo = pathinfo($image);
$extension = strtolower($pathinfo['extension']);
$filename = GALLERY_DIR . $pathinfo['filename'] . '.' . $extension;
- if($db->update(TABLE_PREFIX . 'gallery', array(
+ if(ModelsGallery::where('id', $id)->update([
'comment' => $comment,
- 'image' => $filename, 'author' => $author),
- array('id' => $id)
- )) {
+ 'image' => $filename,
+ 'author' => $author
+ ])) {
if(self::generateThumb($id, $image, $errors))
self::resize($image, 650, 500, $filename, $errors);
}
@@ -187,11 +187,13 @@ class Gallery
static public function delete($id, &$errors)
{
- global $db;
if(isset($id))
{
- if(self::get($id) !== false)
- $db->delete(TABLE_PREFIX . 'gallery', array('id' => $id));
+ $row = ModelsGallery::find($id);
+ if($row)
+ if (!$row->delete()) {
+ $errors[] = 'Fail during delete Gallery';
+ }
else
$errors[] = 'Image with id ' . $id . ' does not exists.';
}
@@ -203,13 +205,15 @@ class Gallery
static public function toggleHidden($id, &$errors)
{
- global $db;
if(isset($id))
{
- $query = self::get($id);
- if($query !== false)
- $db->update(TABLE_PREFIX . 'gallery', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id));
- else
+ $row = ModelsGallery::find($id);
+ if($row) {
+ $row->hidden = $row->hidden == 1 ? 0 : 1;
+ if (!$row->save()) {
+ $errors[] = 'Fail during toggle hidden Gallery';
+ }
+ } else
$errors[] = 'Image with id ' . $id . ' does not exists.';
}
else
@@ -226,10 +230,15 @@ class Gallery
{
$ordering = $query['ordering'] + $i;
$old_record = $db->select(TABLE_PREFIX . 'gallery', array('ordering' => $ordering));
- if($old_record !== false)
- $db->update(TABLE_PREFIX . 'gallery', array('ordering' => $query['ordering']), array('ordering' => $ordering));
+ if($old_record !== false) {
+ ModelsGallery::where('ordering', $ordering)->update([
+ 'ordering' => $query['ordering'],
+ ]);
+ }
- $db->update(TABLE_PREFIX . 'gallery', array('ordering' => $ordering), array('id' => $id));
+ ModelsGallery::where('id', $id)->update([
+ 'ordering' => $ordering,
+ ]);
}
else
$errors[] = 'Image with id ' . $id . ' does not exists.';
@@ -297,13 +306,13 @@ class Gallery
if(!self::resize($file, 170, 110, $thumb_filename, $errors))
return false;
- global $db;
if(isset($id))
{
- $query = self::get($id);
- if($query !== false)
- $db->update(TABLE_PREFIX . 'gallery', array('thumb' => $thumb_filename), array('id' => $id));
- else
+ $row = ModelsGallery::find($id);
+ if($row) {
+ $row->thumb = $thumb_filename;
+ $row->save();
+ } else
$errors[] = 'Image with id ' . $id . ' does not exists.';
}
else
diff --git a/system/pages/highscores.php b/system/pages/highscores.php
index fe8533c7..090da010 100644
--- a/system/pages/highscores.php
+++ b/system/pages/highscores.php
@@ -8,6 +8,11 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Player;
+use MyAAC\Models\PlayerDeath;
+use MyAAC\Models\PlayerKillers;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Highscores';
@@ -23,7 +28,7 @@ if(!is_numeric($page) || $page < 1 || $page > PHP_INT_MAX) {
$page = 1;
}
-$add_sql = '';
+$query = Player::query();
$settingHighscoresVocationBox = setting('core.highscores_vocation_box');
$configVocations = config('vocations');
@@ -41,7 +46,7 @@ if($settingHighscoresVocationBox && $vocation !== 'all')
$i += $configVocationsAmount;
}
- $add_sql = 'AND `vocation` IN (' . implode(', ', $add_vocs) . ')';
+ $query->whereIn('players.vocation', $add_vocs);
break;
}
}
@@ -112,15 +117,7 @@ else
$promotion = '';
if($db->hasColumn('players', 'promotion'))
- $promotion = ',promotion';
-
-$online = '';
-if($db->hasColumn('players', 'online'))
- $online = ',online';
-
-$deleted = 'deleted';
-if($db->hasColumn('players', 'deletion'))
- $deleted = 'deletion';
+ $promotion = ',players.promotion';
$outfit_addons = false;
$outfit = '';
@@ -151,6 +148,16 @@ if ($cache->enabled()) {
}
$offset = ($page - 1) * $configHighscoresPerPage;
+$query->join('accounts', 'accounts.id', '=', 'players.account_id')
+ ->withOnlineStatus()
+ ->whereNotIn('players.id', setting('core.highscores_ids_hidden'))
+ ->notDeleted()
+ ->where('players.group_id', '<', setting('core.highscores_groups_hidden'))
+ ->limit($limit)
+ ->offset($offset)
+ ->selectRaw('accounts.country, players.id, players.name, players.account_id, players.level, players.vocation' . $outfit . $promotion)
+ ->orderByDesc('value');
+
if (!isset($highscores) || empty($highscores)) {
if ($skill >= POT::SKILL_FIRST && $skill <= POT::SKILL_LAST) { // skills
if ($db->hasColumn('players', 'skill_fist')) {// tfs 1.0
@@ -164,66 +171,51 @@ if (!isset($highscores) || empty($highscores)) {
POT::SKILL_FISH => 'skill_fishing',
);
- $highscores = $db->query('SELECT accounts.country, players.id,players.name' . $online . ',level,vocation' . $promotion . $outfit . ', ' . $skill_ids[$skill] . ' as value FROM accounts,players WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' ' . $add_sql . ' AND accounts.id = players.account_id ORDER BY ' . $skill_ids[$skill] . ' DESC LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
- } else
- $highscores = $db->query('SELECT accounts.country, players.id,players.name' . $online . ',value,level,vocation' . $promotion . $outfit . ' FROM accounts,players,player_skills WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' ' . $add_sql . ' AND players.id = player_skills.player_id AND player_skills.skillid = ' . $skill . ' AND accounts.id = players.account_id ORDER BY value DESC, count DESC LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query->addSelect($skill_ids[$skill] . ' as value');
+ } else {
+ $query
+ ->join('player_skills', 'player_skills.player_id', '=', 'players.id')
+ ->where('skillid', $skill)
+ ->addSelect('player_skills.skillid as value');
+ }
} else if ($skill == SKILL_FRAGS) // frags
{
if ($db->hasTable('player_killers')) {
- $highscores = $db->query('SELECT accounts.country, players.id, players.name' . $online . ',level, vocation' . $promotion . $outfit . ', COUNT(`player_killers`.`player_id`) as value' .
- ' FROM `accounts`, `players`, `player_killers` ' .
- ' WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' ' . $add_sql . ' AND players.id = player_killers.player_id AND accounts.id = players.account_id' .
- ' GROUP BY `player_id`' .
- ' ORDER BY value DESC' .
- ' LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query->addSelect(['value' => PlayerKillers::where('player_killers.player_id', 'players.id')->selectRaw('COUNT(*)')]);
} else {
- $db->query("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");
-
- $highscores = $db->query('SELECT `a`.country, `p`.id, `p`.name' . $online . ',`p`.level, vocation' . $promotion . $outfit . ', COUNT(`pd`.`killed_by`) as value
- FROM `players` p
- LEFT JOIN `accounts` a ON `a`.`id` = `p`.`account_id`
- LEFT JOIN `player_deaths` pd ON `pd`.`killed_by` = `p`.`name`
- WHERE `p`.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ')
- AND `p`.' . $deleted . ' = 0
- AND `p`.group_id < ' . setting('core.highscores_groups_hidden') . ' ' . $add_sql . '
- AND `pd`.`unjustified` = 1
- GROUP BY `killed_by`
- ORDER BY value DESC
- LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query->addSelect(['value' => PlayerDeath::unjustified()->where('player_deaths.killed_by', 'players.name')->selectRaw('COUNT(*)')]);
}
} else if ($skill == SKILL_BALANCE) // balance
{
- $highscores = $db->query('SELECT accounts.country, players.id,players.name' . $online . ',level,balance as value,vocation' . $promotion . $outfit . ' FROM accounts,players WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' ' . $add_sql . ' AND accounts.id = players.account_id ORDER BY value DESC LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query
+ ->addSelect('players.balance as value');
} else {
if ($skill == POT::SKILL__MAGLEVEL) {
- $highscores = $db->query('SELECT accounts.country, players.id,players.name' . $online . ',maglevel,level,vocation' . $promotion . $outfit . ' FROM accounts, players WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 ' . $add_sql . ' AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' AND accounts.id = players.account_id ORDER BY maglevel DESC, manaspent DESC LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query
+ ->addSelect('players.maglevel as value', 'players.maglevel')
+ ->orderBy('manaspent');
} else { // level
- $highscores = $db->query('SELECT accounts.country, players.id,players.name' . $online . ',level,experience,vocation' . $promotion . $outfit . ' FROM accounts, players WHERE players.id NOT IN (' . implode(', ', setting('core.highscores_ids_hidden')) . ') AND players.' . $deleted . ' = 0 ' . $add_sql . ' AND players.group_id < ' . setting('core.highscores_groups_hidden') . ' AND accounts.id = players.account_id ORDER BY level DESC, experience DESC LIMIT ' . $limit . ' OFFSET ' . $offset)->fetchAll();
+ $query
+ ->addSelect('players.level as value', 'players.experience')
+ ->orderBy('experience');
$list = 'experience';
}
}
}
+$highscores = $query->get()->map(function($row) {
+ $tmp = $row->toArray();
+ $tmp['online'] = $row->online_status;
+ $tmp['vocation'] = $row->vocation_name;
+ unset($tmp['online_table']);
+
+ return $tmp;
+})->toArray();
+
if ($cache->enabled() && $needReCache) {
$cache->set($cacheKey, serialize($highscores), setting('core.highscores_cache_ttl') * 60);
}
-$online_exist = false;
-if($db->hasColumn('players', 'online'))
- $online_exist = true;
-
-$players = array();
-foreach($highscores as $player) {
- $players[] = $player['id'];
-}
-
-if($db->hasTable('players_online') && count($players) > 0) {
- $query = $db->query('SELECT `player_id`, 1 FROM `players_online` WHERE `player_id` IN (' . implode(', ', $players) . ')')->fetchAll();
- foreach($query as $t) {
- $is_online[$t['player_id']] = true;
- }
-}
-
$show_link_to_next_page = false;
$i = 0;
@@ -231,14 +223,6 @@ $settingHighscoresVocation = setting('core.highscores_vocation');
foreach($highscores as $id => &$player)
{
- if(isset($is_online)) {
- $player['online'] = (isset($is_online[$player['id']]) ? 1 : 0);
- } else {
- if(!isset($player['online'])) {
- $player['online'] = 0;
- }
- }
-
if(++$i <= $configHighscoresPerPage)
{
if($skill == POT::SKILL__MAGIC)
@@ -248,22 +232,10 @@ foreach($highscores as $id => &$player)
$player['experience'] = number_format($player['experience']);
}
- if($settingHighscoresVocation) {
- if(isset($player['promotion'])) {
- if((int)$player['promotion'] > 0) {
- $player['vocation'] += ($player['promotion'] * $configVocationsAmount);
- }
- }
-
- $tmp = 'Unknown';
- if(isset($configVocations[$player['vocation']])) {
- $tmp = $configVocations[$player['vocation']];
- }
-
- $player['vocation'] = $tmp;
+ if(!$settingHighscoresVocation) {
+ unset($player['vocation']);
}
-
$player['link'] = getPlayerLink($player['name'], false);
$player['flag'] = getFlagImage($player['country']);
if($settingHighscoresOutfit) {
diff --git a/system/pages/online.php b/system/pages/online.php
index 2d96a405..0ca74127 100644
--- a/system/pages/online.php
+++ b/system/pages/online.php
@@ -8,6 +8,10 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\ServerConfig;
+use MyAAC\Models\ServerRecord;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';
@@ -98,21 +102,19 @@ foreach($playersOnline as $player) {
$record = '';
if($players > 0) {
if($config['online_record']) {
+ $result = null;
$timestamp = false;
if($db->hasTable('server_record')) {
- $query =
- $db->query(
- 'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
- ' ORDER BY `record` DESC LIMIT 1');
$timestamp = true;
+ $result = ServerRecord::where('world_id', $config['lua']['worldId'])->orderByDesc('record')->first()->toArray();
} else if($db->hasTable('server_config')) { // tfs 1.0
- $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
- } else {
- $query = NULL;
+ $row = ServerConfig::where('config', 'players_record')->first();
+ if ($row) {
+ $result = ['record' => $row->value];
+ }
}
- if(isset($query) && $query->rowCount() > 0) {
- $result = $query->fetch();
+ if($record) {
$record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
}
}
diff --git a/system/pages/records.php b/system/pages/records.php
index 9a000ef5..c4f38db3 100644
--- a/system/pages/records.php
+++ b/system/pages/records.php
@@ -8,10 +8,18 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\ServerRecord;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = "Players Online Records";
+if(!$db->hasTable('server_record')) {
+ echo 'Record History is not supported in your distribution.';
+ return;
+}
+
echo '
Players online records on '.$config['lua']['serverName'].'
@@ -21,7 +29,7 @@ echo '
';
$i = 0;
- $records_query = $db->query('SELECT * FROM `server_record` ORDER BY `record` DESC LIMIT 50;');
+ $records_query = ServerRecord::limit(50)->orderByDesc('record')->get();
foreach($records_query as $data)
{
echo '
@@ -31,4 +39,4 @@ echo '
}
echo '
';
-?>
\ No newline at end of file
+?>
diff --git a/system/pages/spells.php b/system/pages/spells.php
index befed8d9..692df7cd 100644
--- a/system/pages/spells.php
+++ b/system/pages/spells.php
@@ -8,6 +8,9 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Spell;
+
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Spells';
@@ -34,10 +37,10 @@ else {
$order = 'name';
$spells = array();
-$spells_db = $db->query('SELECT * FROM `' . TABLE_PREFIX . 'spells` WHERE `hidden` != 1 AND `type` < 4 ORDER BY ' . $order . '');
+$spells_db = Spell::where('hidden', '!=', 1)->where('type', '<', 4)->orderBy($order)->get();
if((string)$vocation_id != 'all') {
- foreach($spells_db->fetchAll() as $spell) {
+ foreach($spells_db as $spell) {
$spell_vocations = json_decode($spell['vocations'], true);
if(in_array($vocation_id, $spell_vocations) || count($spell_vocations) == 0) {
$spell['vocations'] = null;
@@ -46,7 +49,7 @@ if((string)$vocation_id != 'all') {
}
}
else {
- foreach($spells_db->fetchAll() as $spell) {
+ foreach($spells_db as $spell) {
$vocations = json_decode($spell['vocations'], true);
foreach($vocations as &$tmp_vocation) {
diff --git a/system/router.php b/system/router.php
index 3f7abd25..a24a3b1b 100644
--- a/system/router.php
+++ b/system/router.php
@@ -7,6 +7,9 @@
* @copyright 2023 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Pages;
+
defined('MYAAC') or die('Direct access not allowed!');
if(!isset($content[0]))
@@ -288,16 +291,13 @@ unset($page);
function getDatabasePages($withHidden = false): array
{
- global $db, $logged_access;
- $pages = $db->query('SELECT `name` FROM ' . TABLE_PREFIX . 'pages WHERE ' . ($withHidden ? '' : '`hidden` != 1 AND ') . '`access` <= ' . $db->quote($logged_access));
- $ret = [];
+ global $logged_access;
+ $pages = Pages::where('access', '<=', $logged_access)->when(!$withHidden, function ($q) {
+ $q->isPublic();
+ })->get('name');
- if ($pages->rowCount() < 1) {
- return $ret;
- }
-
- foreach($pages->fetchAll() as $page) {
- $ret [] = $page['name'];
+ foreach($pages as $page) {
+ $ret[] = $page->name;
}
return $ret;
diff --git a/system/src/Models/Account.php b/system/src/Models/Account.php
new file mode 100644
index 00000000..f26f9700
--- /dev/null
+++ b/system/src/Models/Account.php
@@ -0,0 +1,69 @@
+ 'integer',
+ 'premdays' => 'integer',
+ 'premend' => 'integer',
+ 'premium_ends_at' => 'integer',
+ ];
+
+ public function players()
+ {
+ return $this->hasMany(Player::class);
+ }
+
+ public function viplist()
+ {
+ return $this->hasMany(AccountVipList::class);
+ }
+
+ public function getPremiumDaysAttribute()
+ {
+ if(isset($this->premium_ends_at) || isset($this->premend)) {
+ $col = isset($this->premium_ends_at) ? 'premium_ends_at' : 'premend';
+ $ret = ceil(($this->{$col}- time()) / (24 * 60 * 60));
+ return $ret > 0 ? $ret : 0;
+ }
+
+ if($this->premdays == 0) {
+ return 0;
+ }
+
+ global $config;
+ if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return -1;
+
+ if($this->premdays == 65535){
+ return 65535;
+ }
+
+ $ret = ceil($this->premdays - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->lastday))) - date("z", $this->lastday)));
+ return $ret > 0 ? $ret : 0;
+ }
+
+ public function getIsPremiumAttribute()
+ {
+ global $config;
+ if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return true;
+
+ if(isset($this->premium_ends_at)) {
+ return $this->premium_ends_at > time();
+ }
+
+ if(isset($this->premend)) {
+ return $this->premend > time();
+ }
+
+ return ($this->premdays - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->lastday))) - date("z", $this->lastday)) > 0);
+ }
+
+}
diff --git a/system/src/Models/AccountVipList.php b/system/src/Models/AccountVipList.php
new file mode 100644
index 00000000..676ddc05
--- /dev/null
+++ b/system/src/Models/AccountVipList.php
@@ -0,0 +1,21 @@
+belongsTo(Account::class);
+ }
+
+ public function player()
+ {
+ return $this->belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/BoostedCreature.php b/system/src/Models/BoostedCreature.php
new file mode 100644
index 00000000..77c6d399
--- /dev/null
+++ b/system/src/Models/BoostedCreature.php
@@ -0,0 +1,16 @@
+ 'integer',
+ ];
+
+ public $timestamps = false;
+}
diff --git a/system/src/Models/BugTracker.php b/system/src/Models/BugTracker.php
new file mode 100644
index 00000000..8c97ce4a
--- /dev/null
+++ b/system/src/Models/BugTracker.php
@@ -0,0 +1,15 @@
+where('hidden', '!=', 1);
+ }
+}
diff --git a/system/src/Models/Config.php b/system/src/Models/Config.php
new file mode 100644
index 00000000..72258dc3
--- /dev/null
+++ b/system/src/Models/Config.php
@@ -0,0 +1,14 @@
+hasColumn('guilds', 'owner_id')) {
+ $column = 'owner_id';
+ }
+
+ return $this->belongsTo(Player::class, $column);
+ }
+
+ public function members()
+ {
+ return $this->belongsToMany(Player::class, 'guild_membership')->withPivot('rank_id', 'nick');
+ }
+
+ public function invites()
+ {
+ return $this->belongsToMany(Player::class, 'guild_invites');
+ }
+
+}
diff --git a/system/src/Models/GuildInvite.php b/system/src/Models/GuildInvite.php
new file mode 100644
index 00000000..c95d629f
--- /dev/null
+++ b/system/src/Models/GuildInvite.php
@@ -0,0 +1,22 @@
+belongsTo(Player::class);
+ }
+
+ public function guild()
+ {
+ return $this->belongsTo(Guild::class);
+ }
+
+}
diff --git a/system/src/Models/GuildMembership.php b/system/src/Models/GuildMembership.php
new file mode 100644
index 00000000..81658e05
--- /dev/null
+++ b/system/src/Models/GuildMembership.php
@@ -0,0 +1,27 @@
+belongsTo(Player::class);
+ }
+
+ public function guild()
+ {
+ return $this->belongsTo(Guild::class);
+ }
+
+ public function rank()
+ {
+ return $this->belongsTo(GuildRank::class, 'rank_id');
+ }
+
+}
diff --git a/system/src/Models/GuildRank.php b/system/src/Models/GuildRank.php
new file mode 100644
index 00000000..3abce8e8
--- /dev/null
+++ b/system/src/Models/GuildRank.php
@@ -0,0 +1,17 @@
+belongsTo(Guild::class);
+ }
+
+}
diff --git a/system/src/Models/House.php b/system/src/Models/House.php
new file mode 100644
index 00000000..53e7ab15
--- /dev/null
+++ b/system/src/Models/House.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class, 'owner');
+ }
+}
diff --git a/system/src/Models/Menu.php b/system/src/Models/Menu.php
new file mode 100644
index 00000000..6e3b6d03
--- /dev/null
+++ b/system/src/Models/Menu.php
@@ -0,0 +1,14 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/Notepad.php b/system/src/Models/Notepad.php
new file mode 100644
index 00000000..6f1d52f7
--- /dev/null
+++ b/system/src/Models/Notepad.php
@@ -0,0 +1,20 @@
+belongsTo(Account::class);
+ }
+}
diff --git a/system/src/Models/Pages.php b/system/src/Models/Pages.php
new file mode 100644
index 00000000..44e6b0f6
--- /dev/null
+++ b/system/src/Models/Pages.php
@@ -0,0 +1,30 @@
+ 'integer',
+ 'enable_tinymce' => 'integer',
+ 'access' => 'integer',
+ 'hidden' => 'integer',
+ ];
+
+ public function player()
+ {
+ return $this->belongsTo(Player::class);
+ }
+
+ public function scopeIsPublic($query) {
+ $query->where('hidden', '!=', 1);
+ }
+
+}
diff --git a/system/src/Models/Player.php b/system/src/Models/Player.php
new file mode 100644
index 00000000..d140548c
--- /dev/null
+++ b/system/src/Models/Player.php
@@ -0,0 +1,138 @@
+ 'integer',
+ 'sex' => 'integer',
+ 'level' => 'integer',
+ 'vocation' => 'integer',
+ 'promotion' => 'integer',
+ 'looktype' => 'integer',
+ 'lookhead' => 'integer',
+ 'lookbody' => 'integer',
+ 'looklegs' => 'integer',
+ 'lookfeet' => 'integer',
+ 'lookaddons' => 'integer',
+ 'isreward' => 'integer',
+ ];
+
+ public function scopeOrderBySkill($query, $value)
+ {
+ global $db;
+ $query->when($db->hasColumn('players', 'skill_fist'), function ($query) {
+
+ });
+ }
+
+ public function getVocationNameAttribute()
+ {
+ $vocation = $this->vocation;
+ if (isset($this->promotion)) {
+ $vocation *= $this->promotion;
+ }
+
+ return config('vocations')[$vocation] ?? 'Unknown';
+ }
+
+ public function getIsDeletedAttribute()
+ {
+ if (isset($this->deleted)) {
+ return $this->deleted !== 0;
+ }
+
+ if (isset($this->deletion)) {
+ return $this->deletion !== 0;
+ }
+
+ return false;
+ }
+
+ public function scopeNotDeleted($query) {
+ global $db;
+
+ $column = 'deleted';
+ if($db->hasColumn('players', 'deletion')) {
+ $column = 'deletion';
+ }
+
+ $query->where($column, 0);
+ }
+
+ public function scopeWithOnlineStatus($query) {
+ global $db;
+ $query->when($db->hasTable('players_online'), function ($query) {
+ $query->with('onlineTable');
+ });
+ }
+
+ public function getOnlineStatusAttribute()
+ {
+ global $db;
+ if ($db->hasColumn('players', 'online')) {
+ return $this->online;
+ }
+
+ if ($db->hasTable('players_online')) {
+ return $this->onlineTable != null;
+ }
+
+ return false;
+ }
+
+ public function onlineTable()
+ {
+ return $this->belongsTo(PlayerOnline::class);
+ }
+
+ public function account()
+ {
+ return $this->belongsTo(Account::class);
+ }
+
+ public function storages()
+ {
+ return $this->hasMany(PlayerStorage::class);
+ }
+
+ public function items()
+ {
+ return $this->hasMany(PlayerItem::class);
+ }
+
+ public function kills()
+ {
+ return $this->hasMany(PlayerKillers::class);
+ }
+
+ public function deaths()
+ {
+ return $this->hasMany(PlayerDeath::class);
+ }
+
+ public function houses()
+ {
+ return $this->hasMany(House::class, 'owner');
+ }
+
+ public function skills()
+ {
+ return $this->hasMany(PlayerSkill::class);
+ }
+
+ public function viplist()
+ {
+ return $this->hasMany(PlayerVipList::class);
+ }
+
+ public function scopeOnline($query) {
+ $query->where('online', '>', 0);
+ }
+}
diff --git a/system/src/Models/PlayerDeath.php b/system/src/Models/PlayerDeath.php
new file mode 100644
index 00000000..3009f20c
--- /dev/null
+++ b/system/src/Models/PlayerDeath.php
@@ -0,0 +1,25 @@
+belongsTo(Player::class);
+ }
+
+ public function killer()
+ {
+ return $this->belongsTo(Player::class, 'killed_by');
+ }
+
+ public function scopeUnjustified($query) {
+ $query->where('unjustified', 1);
+ }
+}
diff --git a/system/src/Models/PlayerDepotItem.php b/system/src/Models/PlayerDepotItem.php
new file mode 100644
index 00000000..9149ea25
--- /dev/null
+++ b/system/src/Models/PlayerDepotItem.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerKillers.php b/system/src/Models/PlayerKillers.php
new file mode 100644
index 00000000..55abbfd8
--- /dev/null
+++ b/system/src/Models/PlayerKillers.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerOnline.php b/system/src/Models/PlayerOnline.php
new file mode 100644
index 00000000..e81b591e
--- /dev/null
+++ b/system/src/Models/PlayerOnline.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerSkill.php b/system/src/Models/PlayerSkill.php
new file mode 100644
index 00000000..27ec5f84
--- /dev/null
+++ b/system/src/Models/PlayerSkill.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerSpell.php b/system/src/Models/PlayerSpell.php
new file mode 100644
index 00000000..030e014f
--- /dev/null
+++ b/system/src/Models/PlayerSpell.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerStorage.php b/system/src/Models/PlayerStorage.php
new file mode 100644
index 00000000..43a05eda
--- /dev/null
+++ b/system/src/Models/PlayerStorage.php
@@ -0,0 +1,16 @@
+belongsTo(Player::class);
+ }
+}
diff --git a/system/src/Models/PlayerVipList.php b/system/src/Models/PlayerVipList.php
new file mode 100644
index 00000000..71067e45
--- /dev/null
+++ b/system/src/Models/PlayerVipList.php
@@ -0,0 +1,21 @@
+belongsTo(Player::class);
+ }
+
+ public function vip()
+ {
+ return $this->belongsTo(Player::class, 'vip_id');
+ }
+}
diff --git a/system/src/Models/Playeritem.php b/system/src/Models/Playeritem.php
new file mode 100644
index 00000000..8e7ad5f0
--- /dev/null
+++ b/system/src/Models/Playeritem.php
@@ -0,0 +1,17 @@
+belongsTo(Player::class);
+ }
+
+}
diff --git a/system/src/Models/ServerConfig.php b/system/src/Models/ServerConfig.php
new file mode 100644
index 00000000..47c67b2e
--- /dev/null
+++ b/system/src/Models/ServerConfig.php
@@ -0,0 +1,14 @@
+enabled())
if($fetch_from_db)
{
- // get info from db
- /**
- * @var OTS_DB_MySQL $db
- */
- $status_query = $db->query('SELECT `name`, `value` FROM `' . TABLE_PREFIX . 'config` WHERE ' . $db->fieldName('name') . ' LIKE "%status%"');
- if($status_query->rowCount() <= 0) // empty, just insert it
- {
- foreach($status as $key => $value)
+ $status_query = Config::where('name', 'LIKE', '%status%')->get();
+ if (!$status_query || !$status_query->count()) {
+ foreach($status as $key => $value) {
registerDatabaseConfig('status_' . $key, $value);
- }
- else
- {
- foreach($status_query as $tmp)
- $status[str_replace('status_', '', $tmp['name'])] = $tmp['value'];
+ }
+ } else {
+ foreach($status_query as $tmp) {
+ $status[str_replace('status_', '', $tmp->name)] = $tmp->value;
+ }
}
}
@@ -128,19 +127,13 @@ function updateStatus() {
// for status afk thing
if($config['online_afk'])
{
+ $status['playersTotal'] = 0;
// get amount of players that are currently logged in-game, including disconnected clients (exited)
if($db->hasTable('players_online')) { // tfs 1.x
- $query = $db->query('SELECT COUNT(`player_id`) AS `playersTotal` FROM `players_online`;');
+ $status['playersTotal'] = PlayerOnline::count();
}
else {
- $query = $db->query('SELECT COUNT(`id`) AS `playersTotal` FROM `players` WHERE `online` > 0');
- }
-
- $status['playersTotal'] = 0;
- if($query->rowCount() > 0)
- {
- $query = $query->fetch();
- $status['playersTotal'] = $query['playersTotal'];
+ $status['playersTotal'] = Player::online()->count();
}
}
diff --git a/system/template.php b/system/template.php
index a01939a4..0fbb0477 100644
--- a/system/template.php
+++ b/system/template.php
@@ -7,6 +7,9 @@
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
+
+use MyAAC\Models\Menu;
+
defined('MYAAC') or die('Direct access not allowed!');
// template
@@ -126,7 +129,7 @@ if($twig_loader) {
}
function get_template_menus() {
- global $db, $template_name;
+ global $template_name;
$cache = Cache::getInstance();
if ($cache->enabled()) {
@@ -137,11 +140,15 @@ function get_template_menus() {
}
if (!isset($result)) {
- $query = $db->query('SELECT `name`, `link`, `blank`, `color`, `category` FROM `' . TABLE_PREFIX . 'menu` WHERE `template` = ' . $db->quote($template_name) . ' ORDER BY `category`, `ordering` ASC');
- $result = $query->fetchAll();
+
+ $result = Menu::select(['name', 'link', 'blank', 'color', 'category'])
+ ->where('template', $template_name)
+ ->orderBy('category')
+ ->orderBy('ordering')
+ ->get();
if ($cache->enabled()) {
- $cache->set('template_menus', serialize($result), 600);
+ $cache->set('template_menus', serialize($result->toArray()), 600);
}
}
diff --git a/system/templates/account.change_comment.html.twig b/system/templates/account.change_comment.html.twig
index 15ac2208..c69e3f6b 100644
--- a/system/templates/account.change_comment.html.twig
+++ b/system/templates/account.change_comment.html.twig
@@ -30,15 +30,15 @@ If you do not want to specify a certain field, just leave it blank.
@@ -62,7 +62,7 @@ If you do not want to specify a certain field, just leave it blank.
Comment: |
- [max. length: 2000 chars, 50 lines (ENTERs)] |
+ [max. length: 2000 chars, 50 lines (ENTERs)] |
@@ -88,7 +88,7 @@ If you do not want to specify a certain field, just leave it blank.