Login   Register  
PHP Classes
elePHPant
Icontem

File: rschat.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of V. Yanson  >  rschat  >  rschat.class.php  >  Download  
File: rschat.class.php
Role: Class source
Content type: text/plain
Description: class itself
Class: rschat
Manage multiple Web based chat rooms
Author: By
Last change:
Date: 8 years ago
Size: 4,246 bytes
 

Contents

Class file image Download
<?php
 
// error messages (just so its easy to change or translate)
define('RS_WRONG_USERNAME_OR_PASSWORD''Wrong username or password');
define('RS_LOGIN_BEFORE_POSTING''You need to login before posting');
define('RS_NO_ROOMS''No chat rooms are available');
define('RS_NO_ROOM''This room is not available');
 
class 
rschat
{
    private 
$db// database object. class type is mysql
    
protected $user_conf = array(); // user configuration. fetched after authentication
    
    
private $logged_in false// are we logged in or not?
    
    
protected $rooms = array(); // room list
    
    // constructor. (mysql) $db
    
public function __construct(mysql $db)
    {
        
$this->db $db;
    }
    
    
// authentication function. (string) $user, (string) $pass
    
public function login($user$pass)
    {
        
// log user out in case already logged in
        
$this->user_conf = array();
        
$this->logged_in false;
        
        
// try to authenticate
        
$auth $this->db->query("select * from users where username='" mysql_real_escape_string($user) . "' and password=PASSWORD('" mysql_real_escape_string($pass) . "') limit 1");
        if (
count($auth) > 0)
        { 
// good. username and password are correct
            // set variables
            
$this->user_conf['username'] = $auth[0]['username'];
            
$this->user_conf['id'] = $auth[0]['id'];
            
$this->user_conf['msg_format'] = array // message formatting
            
(
                
'color'    =>    $auth[0]['msg_color'],
                
'italic'    =>    $auth[0]['msg_italic'] === 'y' true false,
                
'bold'    =>    $auth[0]['msg_bold'] === 'y' true false
            
);
            
            
$this->logged_in true;
            return 
true;
        } else { 
// bad. something is incorrect in user input
            
$this->logged_in false;
            return 
RS_WRONG_USERNAME_OR_PASSWORD;
        }
    }
    
    
// get rooms list. if $force is set to true then we will grab it from database
    // even if we did that already. (bool) $force
    
public function get_rooms($force false)
    {
        if (
count($this->rooms) < || $force)
        {
            
$rooms $this->db->query("select * from rooms order by name");
            if (
count($rooms) > 0)
            {
                
$this->rooms $rooms;
                return 
$rooms;
            } else {
                return 
RS_NO_ROOMS;
            }
        }
    }
    
    
// check if room exists. (int) $room
    
public function check_room($room)
    {
        
$rooms $this->get_rooms(true);
        if (
is_array($rooms) && count($rooms) > 0)
        {
            foreach(
$rooms as $n => $v)
            {
                if (
$room === $v['id'])
                {
                    return 
true;
                }
            }
            
            return 
RS_NO_ROOM;
        } else {
            return 
RS_NO_ROOMS;
        }
    }
    
    
// this function sends message to chat room. (int) $room, (string) $message
    
public function say($room$message)
    {
        
// are we logged in?
        
if ($this->logged_in)
        {
            
// check if room actually exists
            
$room_exists $this->check_room($room);
            if (
$room_exists === true)
            {
                
// format and post message
                
$bold_start $this->user_conf['msg_format']['bold'] ? '<strong>' '';
                
$bold_end $this->user_conf['msg_format']['bold'] ? '</strong>' '';
                
$italic_start $this->user_conf['msg_format']['italic'] ? '<em>' '';
                
$italic_end $this->user_conf['msg_format']['italic'] ? '</em>' '';
                
                
$message '<font color="' $this->user_conf['msg_format']['color'] . '">' $bold_start $italic_start $message $italic_end $bold_end '</font>';
                
                
$this->db->query("insert into messages (room, user, message) values (" . (int) $room ", " . (int) $this->user_conf['id'] . ", '" mysql_real_escape_string($message) . "')");
            } else {
                return 
$room_exists;
            }
        } else {
            return 
RS_LOGIN_BEFORE_POSTING;
        }
    }
    
    
// get messages from specific room. (int) $room, (int) $last_message_id
    
public function get_messages($room$last_message_id)
    {
        
$room_exists $this->check_room($room);
        if (
$room_exists === true)
        {
            
$messages $this->db->query("select m.id, m.message, r.name, u.username from messages as m, users as u, rooms as r where m.room=r.id and m.user=u.id and m.id>" . (int) $last_message_id " and m.room=" . (int) $room " order by m.id");
            return array
            (
                
'last_message_id'    =>    $messages[count($messages) - 1]['id'],
                
'messages'    =>    $messages
            
);
        } else {
            return 
$room_exists;
        }
    }
}
 
?>