From 1310a49729249b122e24d4a6c29b68cafa02cda3 Mon Sep 17 00:00:00 2001 From: slawkens1 Date: Fri, 19 May 2017 02:30:39 +0200 Subject: [PATCH] some small update * moved site_closed to database, now you can close your site through admin panel * added option to admin panel: clear cache * added experiencetable_rows configurable * optimized OTS_Account->getGroupId(), now its using like 20 queries less * optimized OTS_Player->load($id) function, should perform faster loading * fixed highscores displaying of group outfits --- admin/templates/clean/style.css | 11 +++ common.php | 5 ++ config.php | 8 +- index.php | 38 +++++---- system/functions.php | 2 +- system/libs/cache_file.php | 2 +- system/libs/pot/OTS_Account.php | 22 ++---- system/libs/pot/OTS_Base_DB.php | 1 + system/libs/pot/OTS_Player.php | 113 +++++++++++++++++++++------ system/login.php | 3 - system/pages/admin/dashboard.php | 128 +++++++++++++++++++++++++++++-- system/pages/admin/players.php | 2 +- system/pages/characters.php | 3 +- system/pages/experiencetable.php | 2 +- system/pages/highscores.php | 2 +- system/pages/news.php | 4 - templates/tibiacom/index.php | 12 +-- 17 files changed, 265 insertions(+), 93 deletions(-) diff --git a/admin/templates/clean/style.css b/admin/templates/clean/style.css index c2f5da37..9001a1ab 100644 --- a/admin/templates/clean/style.css +++ b/admin/templates/clean/style.css @@ -40,6 +40,17 @@ h1, h2, h3, h4, h5, h6 {color: #313334; font-weight: bold;} text-align: left; } +.table, .table td, .table th{ + border: 1px solid #ddd; +} + +.table th a:link {color: white; text-decoration: none;} +.table th a:link {color: white; text-decoration: none;} +.table th a:visited {color: white; text-decoration: none;} +.table th a:focus {color: white; text-decoration: none;} +.table th a:active {color: white; text-decoration: underline;} +.table th a:hover {color: white; text-decoration: underline;} + .table tr:nth-child(odd) {background-color: #d1d1d1} a.ico { color:#9d9c9a; font-size:10px; text-decoration: none; padding:0 0 0 14px; background-repeat:no-repeat; background-position:0 0; } diff --git a/common.php b/common.php index 28a037dd..a8843e33 100644 --- a/common.php +++ b/common.php @@ -44,6 +44,11 @@ define('FLAG_CONTENT_COMMANDS', 64); define('FLAG_CONTENT_SPELLS', 128); define('FLAG_CONTENT_MONSTERS', 256); +// news +define('NEWS', 1); +define('TICKET', 2); +define('ARTICLE', 3); + // directories define('BASE', dirname(__FILE__) . '/'); define('ADMIN', BASE . 'admin/'); diff --git a/config.php b/config.php index 071f55d8..48323709 100644 --- a/config.php +++ b/config.php @@ -43,11 +43,6 @@ $config = array( // footer 'footer' => ''/*'
Your Server © 2016. All rights reserved.'*/, - // site closed - 'site_closed' => false, - 'site_closed_title' => 'Closed', - 'site_closed_message' => 'Server is under maintance, please visit later.

', - 'debug_level' => 0, // 0 - disabled, 1 - show load time, 2 - show db query counter, 3 - both, 4 - memory usage, 5 - load time & load time, 6 - queries & memory usage, 7 - all 'language' => 'en', // default language (currently only 'en' available) @@ -220,7 +215,8 @@ $config = array( // other 'email_lai_sec_interval' => 60, // time in seconds between e-mails to one account from lost account interface, block spam 'google_analytics_id' => '', // e.g.: UA-XXXXXXX-X - 'experiencetable_columns' => 5, // how many columns to display in experience table page. * 100, 5 = 500 (will show up to 500 level) + 'experiencetable_columns' => 5, // how many columns to display in experience table page. * experiencetable_rows, 5 = 500 (will show up to 500 level) + 'experiencetable_rows' => 100, // till how many levels in one columt 'monsters' => array(), 'npc' => array() diff --git a/index.php b/index.php index 86c1c92d..b780f113 100644 --- a/index.php +++ b/index.php @@ -96,24 +96,28 @@ if(!isset($content[0])) $load_it = true; // check if site has been closed -if($config['site_closed']) -{ - if(!admin()) - { - $title = $config['site_closed_title']; - $content .= $config['site_closed_message']; - $load_it = false; - } +$site_closed = false; +if(fetchDatabaseConfig('site_closed', $site_closed)) { + $site_closed = ($site_closed == 1); + if($site_closed) { + if(!admin()) + { + $title = getDatabaseConfig('site_closed_title'); + $content .= '

' . getDatabaseConfig('site_closed_message') . '


'; + $load_it = false; + } - if(!$logged) - { - ob_start(); - require(SYSTEM . 'pages/accountmanagement.php'); - $content .= ob_get_contents(); - ob_end_clean(); - $load_it = false; + if(!$logged) + { + ob_start(); + require(SYSTEM . 'pages/accountmanagement.php'); + $content .= ob_get_contents(); + ob_end_clean(); + $load_it = false; + } } } +define('SITE_CLOSED', $site_closed); // backward support for gesior if($config['backward_support']) { @@ -144,7 +148,7 @@ if($config['backward_support']) { $config['site']['download_page'] = true; $config['site']['serverinfo_page'] = true; $config['site']['screenshot_page'] = true; - + if($config['forum'] != '') $config['forum_link'] = (strtolower($config['forum']) == 'site' ? internalLayoutLink('forum') : $config['forum']); @@ -154,7 +158,7 @@ if($config['backward_support']) { if($load_it) { - if($config['site_closed'] && admin()) + if(SITE_CLOSED && admin()) $content .= '

Site is under maintenance (closed mode). Only privileged users can see it.

'; if($config['backward_support']) diff --git a/system/functions.php b/system/functions.php index 97209316..7fa9c26c 100644 --- a/system/functions.php +++ b/system/functions.php @@ -255,7 +255,7 @@ function fetchDatabaseConfig($name, &$value) */ function getDatabaseConfig($name) { - $value = ''; + $value = NULL; fetchDatabaseConfig($name, $value); return $value; } diff --git a/system/libs/cache_file.php b/system/libs/cache_file.php index e652b04e..1cbfac0e 100644 --- a/system/libs/cache_file.php +++ b/system/libs/cache_file.php @@ -63,7 +63,7 @@ class Cache_File } private function _name($key) { - return sprintf("%s/%s%s", $this->dir, $this->prefix, sha1($key)); + return sprintf("%s%s%s", $this->dir, $this->prefix, sha1($key)); } } ?> diff --git a/system/libs/pot/OTS_Account.php b/system/libs/pot/OTS_Account.php index a94e1508..cc3d4630 100644 --- a/system/libs/pot/OTS_Account.php +++ b/system/libs/pot/OTS_Account.php @@ -852,11 +852,7 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable public function getGroupId() { - global $groups; - if(!isset($groups)) - $groups = new OTS_Groups_List(); - - $group_id = 0; + global $db;; if(fieldExist('group_id', 'accounts')) { $query = $this->db->query('SELECT `group_id` FROM `accounts` WHERE `id` = ' . (int) $this->getId())->fetch(); // if anything was found @@ -864,19 +860,11 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable return $query['group_id']; } - // finds groups of all characters - foreach( $this->getPlayersList() as $player) - { - $group = $player->getGroup(); - - // checks if group's access level is higher then previouls found highest - if( $group->getId() > $group_id) - { - $group_id = $group->getId(); - } - } + $db->query('SELECT `group_id` FROM `players` WHERE `account_id` = ' . $this->getId() . ' ORDER BY `group_id` DESC LIMIT 1')->fetch(); + if(isset($query['group_id'])) + return $query['group_id']; - return $group_id; + return 0; } /** diff --git a/system/libs/pot/OTS_Base_DB.php b/system/libs/pot/OTS_Base_DB.php index 604f9867..2a2c1507 100644 --- a/system/libs/pot/OTS_Base_DB.php +++ b/system/libs/pot/OTS_Base_DB.php @@ -97,6 +97,7 @@ abstract class OTS_Base_DB extends PDO implements IOTS_DB public function query($query) { $this->queries++; + //echo $query . PHP_EOL; return parent::query($query); } diff --git a/system/libs/pot/OTS_Player.php b/system/libs/pot/OTS_Player.php index a4c7f7ed..5fd68a00 100644 --- a/system/libs/pot/OTS_Player.php +++ b/system/libs/pot/OTS_Player.php @@ -1,4 +1,21 @@ NULL, + 'loss_items' => NULL, + 'guild_info' => NULL, + 'skull_type' => NULL, + 'skull_time' => NULL, + 'blessings' => NULL, + 'direction' => NULL, + 'stamina' => NULL, + 'world_id' => NULL, + 'online' => NULL, + 'deletion' => NULL, + 'promotion' => NULL, + 'marriage' => NULL +);*/ + /**#@+ * @version 0.0.1 */ @@ -91,7 +108,6 @@ class OTS_Player extends OTS_Row_DAO POT::SKILL_SHIELD => array('value' => 0, 'tries' => 0), POT::SKILL_FISH => array('value' => 0, 'tries' => 0) ); - /** * Magic PHP5 method. * @@ -115,33 +131,84 @@ class OTS_Player extends OTS_Row_DAO */ public function load($id) { - $loss = ''; - if(fieldExist('loss_experience', 'players')) { - $loss = ', `loss_experience`, `loss_mana`, `loss_skills`'; - } - - $loss_items = ''; - if(fieldExist('loss_items', 'players')) { - $loss_items = ', `loss_items`, `loss_containers`'; - } - - $guild_info = ''; - if(!tableExist('guild_members') && fieldExist('guildnick', 'players')) { - $guild_info = ', `guildnick`, `rank_id`'; + global $__load; + + if(!isset($__load['loss_experience'])) + { + $loss = ''; + if(fieldExist('loss_experience', 'players')) { + $loss = ', `loss_experience`, `loss_mana`, `loss_skills`'; + } + + $__load['loss_experience'] = $loss; } - $skull_type = 'skull'; - if(fieldExist('skull_type', 'players')) { - $skull_type = 'skull_type'; + if(!isset($__load['loss_items'])) + { + $loss_items = ''; + if(fieldExist('loss_items', 'players')) { + $loss_items = ', `loss_items`, `loss_containers`'; + } + + $__load['loss_items'] = $loss_items; } - $skull_time = 'skulltime'; - if(fieldExist('skull_time', 'players')) { - $skull_time = 'skull_time'; + if(!isset($__load['guild_info'])) + { + $guild_info = ''; + if(!tableExist('guild_members') && fieldExist('guildnick', 'players')) { + $guild_info = ', `guildnick`, `rank_id`'; + } + + $__load['guild_info'] = $guild_info; + } + + if(!isset($__load['skull_type'])) + { + $skull_type = 'skull'; + if(fieldExist('skull_type', 'players')) { + $skull_type = 'skull_type'; + } + + $__load['skull_type'] = $skull_type; + } + + if(!isset($__load['skull_time'])) + { + $skull_time = 'skulltime'; + if(fieldExist('skull_time', 'players')) { + $skull_time = 'skull_time'; + } + + $__load['skull_time'] = $skull_time; + } + + if(!isset($__load['blessings'])) { + $__load['blessings'] = fieldExist('blessings', 'players'); + } + if(!isset($__load['direction'])) { + $__load['direction'] = fieldExist('direction', 'players'); + } + if(!isset($__load['stamina'])) { + $__load['stamina'] = fieldExist('stamina', 'players'); + } + if(!isset($__load['world_id'])) { + $__load['world_id'] = fieldExist('world_id', 'players'); + } + if(!isset($__load['online'])) { + $__load['online'] = fieldExist('online', 'players'); + } + if(!isset($__load['deletion'])) { + $__load['deletion'] = fieldExist('deletion', 'players'); + } + if(!isset($__load['promotion'])) { + $__load['promotion'] = fieldExist('promotion', 'players'); + } + if(!isset($__load['marriage'])) { + $__load['marriage'] = fieldExist('marriage', 'players'); } - // SELECT query on database - $this->data = $this->db->query('SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`' . (fieldExist('lookaddons', 'players') ? ', `lookaddons`' : '') . ', `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `save`, `conditions`, `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`' . $guild_info . ', `town_id`' . $loss . $loss_items . ', `balance`' . (fieldExist('blessings', 'players') ? ', `blessings`' : '') . (fieldExist('direction', 'players') ? ', `direction`' : '') . (fieldExist('stamina', 'players') ? ', `stamina`' : '') . (fieldExist('world_id', 'players') ? ', `world_id`' : '') . (fieldExist('online', 'players') ? ', `online`' : '') . ', `' . (fieldExist('deletion', 'players') ? 'deletion' : 'deleted') . '`' . (fieldExist('promotion', 'players') ? ', `promotion`' : '') . (fieldExist('marriage', 'players') ? ', `marriage`' : '') . ', `comment`, `created`, `hidden` FROM `players` WHERE `id` = ' . (int)$id)->fetch(); + $this->data = $this->db->query('SELECT `id`, `name`, `account_id`, `group_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, `health`, `healthmax`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`' . (fieldExist('lookaddons', 'players') ? ', `lookaddons`' : '') . ', `posx`, `posy`, `posz`, `cap`, `lastlogin`, `lastlogout`, `lastip`, `save`, `conditions`, `' . $__load['skull_time'] . '` as `skulltime`, `' . $__load['skull_type'] . '` as `skull`' . $__load['guild_info'] . ', `town_id`' . $__load['loss_experience'] . $__load['loss_items'] . ', `balance`' . ($__load['blessings'] ? ', `blessings`' : '') . ($__load['direction'] ? ', `direction`' : '') . ($__load['stamina'] ? ', `stamina`' : '') . ($__load['world_id'] ? ', `world_id`' : '') . ($__load['online'] ? ', `online`' : '') . ', `' . ($__load['deletion'] ? 'deletion' : 'deleted') . '`' . ($__load['promotion'] ? ', `promotion`' : '') . ($__load['marriage'] ? ', `marriage`' : '') . ', `comment`, `created`, `hidden` FROM `players` WHERE `id` = ' . (int)$id)->fetch(); if(!isset($this->data['guildnick']) || $this->data['guildnick']) $this->data['guildnick'] = ''; @@ -335,7 +402,7 @@ class OTS_Player extends OTS_Row_DAO $loss_items = ', `loss_items`, `loss_containers`'; $loss_items_data = ', ' . $this->data['loss_items'] . ', ' . $this->data['loss_containers']; } - + $guild_info = ''; $guild_info_data = ''; if(!tableExist('guild_members') && fieldExist('guildnick', 'players')) { diff --git a/system/login.php b/system/login.php index efd47e04..8627b2a0 100644 --- a/system/login.php +++ b/system/login.php @@ -73,9 +73,6 @@ else if(isset($_POST['remember_me'])) $_SESSION['remember_me'] = true; - //if(isset($_POST['admin'])) - // $_SESSION['admin'] = true; - $logged = true; $logged_flags = $account_logged->getWebFlags(); diff --git a/system/pages/admin/dashboard.php b/system/pages/admin/dashboard.php index ecf21906..024c76ec 100644 --- a/system/pages/admin/dashboard.php +++ b/system/pages/admin/dashboard.php @@ -10,7 +10,80 @@ */ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Dashboard'; + +if($cache->enabled()) { + if(isset($_GET['clear_cache'])) { + if(clearCache()) + success('Cache cleared.'); + else + error('Error while clearing cache.'); + } + ?> + + + + +
Clear cache
+ 255) { + error('Message is too long. Maximum length allowed is 255 chars.'); + } + else { + $tmp = ''; + if(fetchDatabaseConfig('site_closed', $tmp)) + updateDatabaseConfig('site_closed', $_status); + else + registerDatabaseConfig('site_closed', $_status); + + if(fetchDatabaseConfig('site_closed_message', $tmp)) + updateDatabaseConfig('site_closed_message', $message); + else + registerDatabaseConfig('site_closed_message', $message); + } +} +$is_closed = getDatabaseConfig('site_closed') == '1'; + +$closed_message = 'Server is under maintance, please visit later.'; +$tmp = ''; +if(fetchDatabaseConfig('site_closed_message', $tmp)) + $closed_message = $tmp; +?> +
+ + + + + + + + + + + + + +
Maintenance +
Site status: + +
Message: (only if closed) + + +
+ +
+
+

Status: Online
@@ -39,26 +112,69 @@ $title = 'Dashboard'; - +fetch('status', $tmp)) + $cache->delete('status'); + + if($cache->fetch('templates', $tmp)) + $cache->delete('templates'); + + if($cache->fetch('config_lua', $tmp)) + $cache->delete('config_lua'); + + if($cache->fetch('vocations', $tmp)) + $cache->delete('vocations'); + + if($cache->fetch('towns', $tmp)) + $cache->delete('towns'); + + if($cache->fetch('groups', $tmp)) + $cache->delete('groups'); + + if($cache->fetch('visitors', $tmp)) + $cache->delete('visitors'); + + if($cache->fetch('views_counter', $tmp)) + $cache->delete('views_counter'); + + if($cache->fetch('failed_logins', $tmp)) + $cache->delete('failed_logins'); + + if($cache->fetch('news' . $template_name . '_' . NEWS, $tmp)) + $cache->delete('news' . $template_name . '_' . NEWS); + + if($cache->fetch('news' . $template_name . '_' . TICKET, $tmp)) + $cache->delete('news' . $template_name . '_' . TICKET); + + if($cache->fetch('news' . $template_name . '_' . ARTICLE, $tmp)) + $cache->delete('news' . $template_name . '_' . ARTICLE); + + if($cache->fetch('template_ini' . $template_name, $tmp)) + $cache->delete('template_ini' . $template_name); + + return true; +} \ No newline at end of file diff --git a/system/pages/admin/players.php b/system/pages/admin/players.php index 6235e010..a786e6d7 100644 --- a/system/pages/admin/players.php +++ b/system/pages/admin/players.php @@ -307,7 +307,7 @@ if(!isset($player) || !$player->isLoaded()) $account = $player->getAccount(); ?> -

+

diff --git a/system/pages/characters.php b/system/pages/characters.php index b27356c5..81e03585 100644 --- a/system/pages/characters.php +++ b/system/pages/characters.php @@ -12,8 +12,7 @@ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Characters'; -require(SYSTEM . 'item.php'); - +//require(SYSTEM . 'item.php'); $groups = new OTS_Groups_List(); function generate_search_table($script = false) { diff --git a/system/pages/experiencetable.php b/system/pages/experiencetable.php index fca7f239..52f4da40 100644 --- a/system/pages/experiencetable.php +++ b/system/pages/experiencetable.php @@ -33,7 +33,7 @@ Remember you can also check the respective skill bar in your skill window of the diff --git a/system/pages/highscores.php b/system/pages/highscores.php index ad4298a8..f0d9249d 100644 --- a/system/pages/highscores.php +++ b/system/pages/highscores.php @@ -199,7 +199,7 @@ echo ' echo ' '; if($config['highscores_outfit']) - echo ''; + echo ''; echo '
Edit player
Experience
' . ($offset + $i) . '. diff --git a/system/pages/news.php b/system/pages/news.php index a0cd30c5..17206c12 100644 --- a/system/pages/news.php +++ b/system/pages/news.php @@ -94,10 +94,6 @@ $title = 'Latest News'; $news_cached = false; // some constants, used mainly by database (cannot by modified without schema changes) -define('NEWS', 1); -define('TICKET', 2); -define('ARTICLE', 3); - define('TITLE_LIMIT', 100); define('BODY_LIMIT', 65535); // maximum news body length diff --git a/templates/tibiacom/index.php b/templates/tibiacom/index.php index ea6b897f..c822a84a 100644 --- a/templates/tibiacom/index.php +++ b/templates/tibiacom/index.php @@ -681,17 +681,9 @@ echo "";
/headline.php?p=" alt="Contentbox headline" /> -*/ - if($config['site_closed']) - $tmp_page = $config['site_closed_title']; - else - $tmp_page = (isset($_404) ? '404' : PAGE); - - $headline = $template_path.'/images/header/headline-' . $tmp_page . '.gif'; + $headline = $template_path.'/images/header/headline-' . PAGE . '.gif'; if(!file_exists($headline)) - $headline = $template_path . '/headline.php?t=' . ucfirst($tmp_page); + $headline = $template_path . '/headline.php?t=' . ucfirst($title); ?> Contentbox headline