• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Private messages in Gesior AAC!

Tairens

Member
Joined
Sep 23, 2007
Messages
90
Reaction score
5
Hello!

It is code responsible for private message in aac ;)

Some screens:
swsu9u.jpg



In main folder add file 'messagesclass.php':
Code:
<?php

    class PrivateMessageList
    {
        private $list = array();
        private $data;
        private $db;
        
        private function getMessagesBySender($sender)
        {
            $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('ots_messages') . ' WHERE ' . $this->db->fieldName('sender') . ' = ' .(int)$sender)->fetchAll();
        }
        
        private function getMessagesByReceiver($receiver)
        {
            $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('ots_messages') . ' WHERE ' . $this->db->fieldName('receiver') . ' = ' .(int) $receiver)->fetchAll();
        }
        
        public function getMessagesNumberByReadStatus()
        {
            $number = 0;
            foreach($this->list as $message)
            {
                if(!$message->getReadStatus())
                {
                    $number += 1;
                }
            }
            return $number;
        }
        
        public function __construct($id, $receiver = true /*if false reading sender */)
        {
            $this->db = POT::getInstance()->getDBHandle();
            if($receiver)
            {
                $this->getMessagesBySender($id);
            }
            else
            {
                $this->getMessagesByReceiver($id);
            }
            foreach($this->data as $element)
            {
                $object = new PrivateMessage();
                $object->load($element['id']);
                if($object->isLoaded())
                {
                    $this->list[] = $object;
                }
            }
        }
        
        public function reload($id, $receiver = true)
        {
            return new self($id, $receiver);
        }
        
        public function getList()
        {
            return $this->list;
        }    
    }

    class PrivateMessage
    {
        private $data;    
        private $db;
            
        public function __construct()
        {
            $this->db = POT::getInstance()->getDBHandle();
        }
        
        public function load($id)
        {
            $this->data = $this->db->query('SELECT * FROM ' . $this->db->tableName('ots_messages') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
        }
        
        public function isLoaded()
        {
            return isset($this->data['id']);
        }
        
        public function _get($option)
        {
            return $this->data[$option];
        }
        
        public function setTopic($value)
        {
            $this->data['topic'] = $value;
        }
        
        public function setText($value)
        {
            $this->data['text'] = $value;
        }
        
        public function setDate($value)
        {
            $this->data['date'] = $value;
        }
        
        public function setSender($value)
        {
            $this->data['sender'] = $value;
        }
        
        public function setReceiver($value)
        {
            $this->data['receiver'] = $value;
        }
        
        public function setReadStatus($value)
        {
            return $this->db->query('UPDATE ' . $this->db->fieldName('ots_messages') . ' SET ' . $this->db->fieldName('status') . ' = ' . (int) $value);
        }
        
        public function getTopic()
        {
            return $this->data['topic'];
        }
        
        public function getText()
        {
            return $this->data['text'];
        }
        
        public function getId()
        {
            return $this->data['id'];
        }
        
        public function getDate()
        {
            return $this->data['date'];
        }
        
        public function getSender()
        {
            return $this->data['sender'];
        }
        
        public function getReceiver()
        {
            return $this->data['receiver'];
        }
        
        public function getReadStatus()
        {
            return $this->data['status'] > 0;
        }
        
        public function save()
        {
            $this->db->query('INSERT INTO ' . $this->db->tableName('ots_messages') . ' (' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('topic') . ', ' . $this->db->fieldName('text') . ', ' . $this->db->fieldName('date') . ', '. $this->db->fieldName('sender') . ', '. $this->db->fieldName('receiver') . ', '. $this->db->fieldName('status') . ') VALUES (' . $this->db->quote($this->getLastInsertId() + 1) . ', ' . $this->db->quote($this->data['topic']) . ', '. $this->db->quote($this->data['text']) . ', '. $this->db->quote($this->data['date']) . ', '. $this->db->quote($this->data['sender']) . ', ' . $this->db->quote($this->data['receiver']) . ', ' . (int)$this->data['status'] . ')');
        }
        
        public function delete()
        {
            $this->db->query('DELETE FROM ' . $this->db->tableName('ots_messages') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
        }
        
        private function getLastInsertId()
        {
            $number = $this->db->query('SELECT MAX(id) FROM '.$this->db->tableName('ots_messages').'')->fetchColumn();
            if($number > 0)
            {
                return $number;
            }
            return 0;
        }
    }


?>
Second file name is 'messages.php':
Code:
<?php
if($logged)
{
    $colors = array($config['site']['lightborder'], $config['site']['darkborder']);
    include_once('messagesclass.php');
    $Action = $_GET['action'];
    
    $main_content .= '<center><h2><a href="?subtopic=messages&action=newMessage">New message</a>|';
    $main_content .= '<a href="?subtopic=messages&action=inbox">Inbox</a>|';
    $main_content .= '<a href="?subtopic=messages&action=outbox">Outbox</a></h2></center>';
    
    if(empty($Action))
    {
        $Action = 'inbox';
    }    
    if($Action == 'inbox' || $Action == 'outbox')
    {
        $newAction = array('outbox' => array('outbox', true), 'inbox' => array('inbox', false));
        $newAction = $newAction[$Action];
        $Messages = new PrivateMessageList($account_logged->getId(), $newAction[1]);
        if(count($Messages->getList()) > 0)
        {
            $main_content .= '<center><h2>Messages in ' . $newAction[0] . '</h2></center>';
            $main_content .= '<table border="1" cellspacing="0" width="100%">';
            $main_content .= '<tr bgcolor=' . $colors[1] . '>';
            $main_content .= '<td>ID</td><td>Topic</td><td>Date</td><td>From</td><td>Read status</td>';
            $main_content .= '</tr>';    
            
            foreach($Messages->getList() as $key => $Message)
            {
                $From = POT::getInstance()->createObject('Account');
                $From->load($Message->getSender());
                $From = $From->getPlayers();
                $main_content .= '<tr bgcolor=' . $colors[$key % 2] . '>';
                $main_content .= '<td>' . ($key + 1) . '</td>';
                $main_content .= '<td><a href="?subtopic=messages&action=show&id=' . $Message->getId() . '">' . $Message->getTopic() . '</a></td>';
                $main_content .= '<td>' . date("D-M-Y", $Message->getDate()) . '</td>';
                $main_content .= '<td>' . $From[0] . '</td>';
                $main_content .= '<td>' . ($Message->getReadStatus() ? '<font color="green">Read<font>' : '<font color="red">Not read</font>') . '</td>';
                $main_content .= '</tr>';
            }
            $main_content .= '</table>';
        }
        else
        {
            $main_content .= 'No messages in ' . $newAction[0] . '.';
        }
    }
    else if($Action == 'newMessage')
    {
        if(empty($_POST['text']) || empty($_POST['topic']) || empty($_POST['receiver']))
        {
            $main_content .= '<center><h2>New private message</h2></center>';
            $main_content .= '<form action="?subtopic=messages&action=newMessage" method="POST">';
            $main_content .= 'Topic:<br><input name="topic" /><br>';
            $main_content .= 'Receiver:<br><input name="receiver" /><br>';
            $main_content .= 'Message text:<br><textarea name="text" cols="69" rows="10"></textarea>';
            $main_content .= '<input type="submit" value="Send"/>';
            $main_content .= '<input type="reset" value="Clean"/>';
            $main_content .= '</form>';
        }
        else
        {
            $Receiver = POT::getInstance()->createObject('Player');
            $Receiver->find($_POST['receiver']);
            $IDS = array();
            foreach($account_logged->getPlayers() as $Player)
            {
                $IDS[] = $Player->getId();
            }
            if(in_array($Receiver->getAccount()->getID(), $IDS))
            {    
                $main_content .= 'You cannot send messages to your character!';
            }
            else
            {
                if($Receiver->isLoaded())
                {
                    $Message = new PrivateMessage();
                    $Message->setTopic(htmlspecialchars($_POST['topic']));    
                    $Message->setText(htmlspecialchars($_POST['text']));
                    $Message->setDate(time());
                    $Message->setSender($account_logged->getId());
                    $Message->setReceiver($Receiver->getAccount()->getID());
                    $Message->save();
                    $main_content .= 'Message has been sent.';
                }
                else
                {
                    $main_content .= 'Player not found.';
                }
            }
        }
    }
    else if($Action == 'show')
    {
        $Message = new PrivateMessage();
        $Message->load($_GET['id']);
        if($Message->isLoaded())
        {
            if($Message->getReceiver() == $account_logged->getId() || $Message->getSender() == $account_logged->getId())
            {
                if(!$Message->getReadStatus() && $Message->getReceiver() == $account_logged->getId())
                {
                    $Message->setReadStatus(1);
                }
                $From = POT::getInstance()->createObject('Account');
                $From->load($Message->getSender());
                $From = $From->getPlayers();
                $main_content .= '<center><h2>Message</h2></center>';
                $main_content .= '<table border="1" cellspacing="0" width="100%">';
                $main_content .= '<tr bgcolor=' . $colors[1] . '>';
                $main_content .= '<td>From: </td><td>' . $From[0] . '</td></tr>';
                $main_content .= '<tr bgcolor=' . $colors[0] . '>';
                $main_content .= '<td>Topic</td><td>' . $Message->getTopic() . '</td></tr>';
                $main_content .= '<tr bgcolor=' . $colors[1] . '>';
                $main_content .= '<td>Date:</td><td>' . date('D-M-Y', $Message->getDate()) . '</td></tr>';
                $main_content .= '</table><table border="0" cellspacing="0" width="100%">';
                $main_content .= '<tr bgcolor=' . $colors[0] . '><td>' . $Message->getText() . '</td></tr></table>';
                $main_content .= '<br><a href="?subtopic=messages&action=newMessage">Reply</a>|';
                $main_content .= '<a href="?subtopic=messages&action=remove&id=' . $Message->getId() . '">Remove</a>|';
                $main_content .= '<a href="?subtopic=messages&action=inbox">Inbox</a>|';
                $main_content .= '<a href="?subtopic=messages&action=outbox">Outbox</a>';
            }
        }
        else
        {
            $main_content .= '<center>Cannot show this message.</center>';
        }
    }
    else if($Action == 'remove')
    {
        $Message = new PrivateMessage();
        $Message->load($_GET['id']);
        if($Message->isLoaded())
        {
            if($Message->getReceiver() == $account_logged->getId())
            {
                $Message->delete();
                $main_content .= 'Message deleted.';
            }
            else
            {
                $main_content .= 'You cannot remove this message.';
            }
        }
        else
        {
            $main_content .= '<center>Cannot show this message.</center>';
        }
    }
}


?>
In index.php add:
Code:
case "messages";
        $subtopic = "messages";
        $topic = "Private messages";
        include("mesages.php");
    break;
In layout.php:
Code:
<?php
if($logged)
{
?>
<a href='?subtopic=messages'>
  <div id='submenu_messages' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
    <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
    <div id='ActiveSubmenuItemIcon_accountmanagement' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
    <div class='SubmenuitemLabel'>Messages(<?php 
    $Messages = new PrivateMessageList($account_logged->getId(), false);
    echo($Messages->getMessagesNumberByReadStatus());
    ?>)</div>
    <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
  </div>
</a>
<?php
}
?>
Yours,
Tairens
 
Last edited by a moderator:
Sorry for second post but i found one mistake. Please replace line 103 for this:
Code:
if(!$Message->getReadStatus() && $Message->getReceiver() == $account_logged->getId())
 
Sorry for second post but i found one mistake. Please replace line 103 for this:
Code:
if(!$Message->getReadStatus() && $Message->getReceiver() == $account_logged->getId())
Where???
 
Help me please

Please help me =(


Warning: include(mesages.php) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\news\index.php on line 220

Warning: include() [function.include]: Failed opening 'mesages.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\news\index.php on line 220

85264159.jpg

93854032.jpg
 
Uhh... I have problem ...
Code:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'c10rlmap.ots_messages' doesn't exist' in /var/www/clients/client10/web17/web/messagesclass.php:16 Stack trace: #0 /var/www/clients/client10/web17/web/messagesclass.php(16): PDO->query('SELECT `id` FRO...') #1 /var/www/clients/client10/web17/web/messagesclass.php(41): PrivateMessageList->getMessagesByReceiver('1836868') #2 /var/www/clients/client10/web17/web/messages.php(20): PrivateMessageList->__construct('1836868', false) #3 /var/www/clients/client10/web17/web/index.php(287): include('/var/www/client...') #4 {main} thrown in /var/www/clients/client10/web17/web/messagesclass.php on line 16

Wery Good work !!
 
Last edited by a moderator:
In index.php add:
Code:
case "messages";
        $subtopic = "messages";
        $topic = "Private messages";
        include("mesages.php");
    break;

it Should be

Code:
case "messages";
        $subtopic = "messages";
        $topic = "Private messages";
        include("messages.php");
    break;
 
man, no funtion system.. the script in layout not is compatible, <?php> and find <php> to <a href to find </a>
 
error mysql table

hello friend
I tried to install this mod, but I requested data and have not put sql sql table, specifically messages_z.sql, if you do not mind me putting the sql table.
thanks friend
 
Back
Top