refactor: messages and reports only loaded on pages where needed

#313
This commit is contained in:
Martin Ambrus
2017-11-17 21:00:00 +01:00
parent db87ce88a7
commit 6d0e95670b
4 changed files with 116 additions and 60 deletions
+24 -2
View File
@@ -677,8 +677,12 @@ class MYSQLi_DB implements IDbConnection {
* @return string Returns a sanitized string, safe for SQL queries. * @return string Returns a sanitized string, safe for SQL queries.
*/ */
function escape($value) { function escape($value) {
$value = stripslashes($value); if (is_string($value)) {
return mysqli_real_escape_string($this->dblink, $value); $value = stripslashes( $value );
return mysqli_real_escape_string($this->dblink, $value);
} else {
return $value;
}
} }
/** /**
@@ -3636,6 +3640,24 @@ class MYSQLi_DB implements IDbConnection {
return mysqli_query($this->dblink,$q); return mysqli_query($this->dblink,$q);
} }
// no need to cache this method
function getUnreadMessagesCount($uid) {
$uid = (int) $uid;
return mysqli_fetch_array(mysqli_query($this->dblink, '
SELECT Count(*) as numUnread FROM '.TB_PREFIX.'mdata WHERE target = '.$uid.' AND viewed = 0'
), MYSQLI_ASSOC)['numUnread'];
}
// no need to cache this method
function getUnreadNoticesCount($uid) {
$uid = (int) $uid;
return mysqli_fetch_array(mysqli_query($this->dblink, '
SELECT Count(*) as numUnread FROM '.TB_PREFIX.'ndata WHERE uid = '.$uid.' AND viewed = 0'
), MYSQLI_ASSOC)['numUnread'];
}
function sendMessage($client, $owner, $topic, $message, $send, $alliance, $player, $coor, $report, $skip_escaping = false) { function sendMessage($client, $owner, $topic, $message, $send, $alliance, $player, $coor, $report, $skip_escaping = false) {
if (!$skip_escaping) { if (!$skip_escaping) {
list($client, $owner, $topic, $message, $send, $alliance, $player, $coor, $report) = $this->escape_input((int) $client, (int) $owner, $topic, $message, (int) $send, (int) $alliance, (int) $player, (int) $coor, (int) $report); list($client, $owner, $topic, $message, $send, $alliance, $player, $coor, $report) = $this->escape_input((int) $client, (int) $owner, $topic, $message, (int) $send, (int) $alliance, (int) $player, (int) $coor, (int) $report);
+86 -56
View File
@@ -18,14 +18,33 @@ class Message {
private $allNotice = array(); private $allNotice = array();
function __construct() { function __construct() {
$this->getMessages(); $req_file = basename($_SERVER['PHP_SELF']);
$this->getNotice(); $this->unread = $this->checkUnread();
if($this->totalMessage > 0) { $this->nunread = $this->checkNUnread();
$this->unread = $this->checkUnread();
} if ($req_file == 'nachrichten.php') {
if($this->totalNotice > 0) { if ( isset( $_GET['t'] ) ) {
$this->nunread = $this->checkNUnread(); switch ( $_GET['t'] ) {
} // send messages page
case 2:
$this->getMessages( 2 );
break;
// archived messages page
case 3:
$this->getMessages( 3 );
break;
}
} else {
// inbox - received messages page
$this->getMessages( 1 );
}
}
if ($req_file == 'berichte.php') {
$this->getNotice();
}
if(isset($_SESSION['reply'])) { if(isset($_SESSION['reply'])) {
$this->reply = $_SESSION['reply']; $this->reply = $_SESSION['reply'];
unset($_SESSION['reply']); unset($_SESSION['reply']);
@@ -218,17 +237,18 @@ class Message {
global $database,$session; global $database,$session;
$post = $database->escape($post); $post = $database->escape($post);
for($i = 1; $i <= 10; $i++) { for($i = 1; $i <= 10; $i++) {
if(isset($post['n' . $i])) { if ( isset( $post[ 'n' . $i ] ) ) {
$message1 = mysqli_query($GLOBALS['link'],"SELECT target, owner FROM " . TB_PREFIX . "mdata where id = ".(int) $post['n' . $i].""); $message1 = mysqli_query( $GLOBALS['link'], "SELECT target, owner FROM " . TB_PREFIX . "mdata where id = " . (int) $post[ 'n' . $i ] . "" );
$message = mysqli_fetch_array($message1); $message = mysqli_fetch_array( $message1 );
if($message['target'] == $session->uid && $message['owner'] == $session->uid){
$database->getMessage($post['n' . $i], 8); if ( $message['target'] == $session->uid && $message['owner'] == $session->uid ) {
}else if($message['target'] == $session->uid){ $database->getMessage( $post[ 'n' . $i ], 8 );
$database->getMessage($post['n' . $i], 5); } else if ( $message['target'] == $session->uid ) {
}else if($message['owner'] == $session->uid){ $database->getMessage( $post[ 'n' . $i ], 5 );
$database->getMessage($post['n' . $i], 7); } else if ( $message['owner'] == $session->uid ) {
} $database->getMessage( $post[ 'n' . $i ], 7 );
} }
}
} }
header("Location: nachrichten.php"); header("Location: nachrichten.php");
exit; exit;
@@ -317,17 +337,24 @@ class Message {
} }
} }
private function getMessages() { private function getMessages($which) {
global $database, $session; global $database, $session;
$this->inbox = $database->getMessage($session->uid, 1);
$this->sent = $database->getMessage($session->uid, 2); switch ($which) {
$this->inbox1 = $database->getMessage($session->uid, 9); case 1: $this->inbox = $database->getMessage($session->uid, 1);
$this->sent1 = $database->getMessage($session->uid, 10); $this->inbox1 = $database->getMessage($session->uid, 9);
if($session->plus) { break;
$this->archived = $database->getMessage($session->uid, 6);
$this->archived1 = $database->getMessage($session->uid, 11); case 2: $this->sent = $database->getMessage($session->uid, 2);
} $this->sent1 = $database->getMessage($session->uid, 10);
$this->totalMessage = count($this->inbox) + count($this->sent); break;
case 3: if($session->plus) {
$this->archived = $database->getMessage($session->uid, 6);
$this->archived1 = $database->getMessage($session->uid, 11);
}
break;
}
} }
private function sendAMessage($topic,$text) { private function sendAMessage($topic,$text) {
@@ -546,47 +573,50 @@ class Message {
} }
private function checkUnread() { private function checkUnread() {
foreach($this->inbox as $message) { global $database, $session;
if($message['viewed'] == 0) {
return true; return $database->getUnreadMessagesCount($session->uid);
}
}
return false;
} }
private function checkNUnread() { private function checkNUnread() {
foreach($this->allNotice as $notice) { global $database, $session;
if($notice['viewed'] == 0) {
return true; return $database->getUnreadNoticesCount($session->uid);
}
}
return false;
} }
private function findInbox($id) { private function findInbox($id) {
foreach($this->inbox as $message) { if (count($this->inbox)) {
if($message['id'] == $id) { foreach ( $this->inbox as $message ) {
return true; if ( $message['id'] == $id ) {
} return true;
} }
}
}
return false; return false;
} }
private function findSent($id) { private function findSent($id) {
foreach($this->sent as $message) { if (count($this->sent)) {
if($message['id'] == $id) { foreach ( $this->sent as $message ) {
return true; if ( $message['id'] == $id ) {
} return true;
} }
}
}
return false; return false;
} }
private function findArchive($id) { private function findArchive($id) {
foreach($this->archived as $message) { if (count($this->archived)) {
if($message['id'] == $id) { foreach ( $this->archived as $message ) {
return true; if ( $message['id'] == $id ) {
} return true;
} }
}
}
return false; return false;
} }
+2
View File
@@ -3,6 +3,8 @@ ALTER TABLE `s1_prisoners` DROP INDEX `from`, ADD INDEX `from-t11` (`from`, `t11
ALTER TABLE `s1_enforcement` DROP INDEX `from`, ADD INDEX `from` (`from`, `hero`) USING BTREE; ALTER TABLE `s1_enforcement` DROP INDEX `from`, ADD INDEX `from` (`from`, `hero`) USING BTREE;
ALTER TABLE `s1_forum_post` CHANGE `date` `date` INT NULL DEFAULT NULL; ALTER TABLE `s1_forum_post` CHANGE `date` `date` INT NULL DEFAULT NULL;
ALTER TABLE `s1_market` DROP INDEX `vref-accept`, ADD INDEX `vref-accept-merchant` (`vref`, `accept`, `merchant`) USING BTREE; ALTER TABLE `s1_market` DROP INDEX `vref-accept`, ADD INDEX `vref-accept-merchant` (`vref`, `accept`, `merchant`) USING BTREE;
ALTER TABLE `s1_mdata` ADD INDEX `target-viewed` (`target`, `viewed`);
ALTER TABLE `s1_ndata` ADD INDEX `uid-viewed` (`uid`, `viewed`);
-- 8.11.2017 -> query optimizations and cleanups -- 8.11.2017 -> query optimizations and cleanups
+4 -2
View File
@@ -1033,7 +1033,8 @@ CREATE TABLE IF NOT EXISTS `%PREFIX%mdata` (
`report` int(11) NULL, `report` int(11) NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `target-time` (`target`,`time`) USING BTREE, KEY `target-time` (`target`,`time`) USING BTREE,
KEY `owner` (`owner`) KEY `owner` (`owner`),
KEY `target-viewed` (`target`,`viewed`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --
@@ -1119,7 +1120,8 @@ CREATE TABLE IF NOT EXISTS `%PREFIX%ndata` (
KEY `time` (`time`), KEY `time` (`time`),
KEY `uid-time` (`uid`,`time`) USING BTREE, KEY `uid-time` (`uid`,`time`) USING BTREE,
KEY `del` (`del`), KEY `del` (`del`),
KEY `toWref` (`toWref`) KEY `toWref` (`toWref`),
KEY `uid-viewed` (`uid`,`viewed`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --