PHP Classes
Icontem

File: rschat.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of V. Yanson  >  rschat  >  rschat.class.php  
File: rschat.class.php
Role: Class source
Content type: text/plain
Description: class itself
Class: rschat
Manage multiple Web based chat rooms
 

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;
        }
    }
}
 
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products