/*
* @package AJAX_Chat
* @author Sebastian Tschan
* @copyright (c) Sebastian Tschan
* @license GNU Affero General Public License
* @link https://blueimp.net/ajax/
*/
AJAX Chat
=========
This is the standalone version running without another web application.
AJAX stands for "Asynchronous JavaScript and XML".
The AJAX Chat clients (the user browsers) use JavaScript to query the web server for updates.
Instead of delivering a complete HTML page only updated data is send in XML format.
By using JavaScript the chat page can be updated without having to reload the whole page.
Requirements
============
Server-Side:
- PHP >= 4
- MySQL >= 4
- Ruby >= 1.8 (optional)
Client-Side:
- Enabled JavaScript
- Enabled Cookies
- Flash Plugin >= 9 (optional)
Installation
============
1. Configuration settings
----------------------
Edit database settings in lib/config.php:
$config['dbConnection']['host'] = 'your_database_hostname';
$config['dbConnection']['user'] = 'your_database_username';
$config['dbConnection']['pass'] = 'your_database_password';
$config['dbConnection']['name'] = 'your_database_name';
The database settings "type" and "link" are set to "null" by default.
If "type" is set to "null" it defaults to "mysqli" if existing, else to "mysql".
"link" can be set as reference to an existing database connection link or object.
If "link" is set to null, a new database connection is created.
2. Channel settings:
-----------------
Edit channels in lib/data/channels.php.
Each channel must have a unique id (the $channels array index) and a unique name.
Whitespace in the channel names will be converted to the underscore "_".
3. User settings:
--------------
Edit users in lib/data/users.php.
Each user must have a unique id (the $users array index) and a unique name.
The first user in the list (array index 0) is used for the guest user settings.
All guest users will have access to the channels set for this user and the user role AJAX_CHAT_GUEST.
Registered users can have the user roles AJAX_CHAT_USER, AJAX_CHAT_MODERATOR or AJAX_CHAT_ADMIN.
The list of channels a user has access to can be set for each user individually.
Whitespace in the user names will be converted to the underscore "_".
4. Upload to the server
--------------------
Upload the chat folder to your server somewhere under your document root:
e.g. http://example.org/path/to/chat/
5. Creation of database tables
---------------------------
Execute the provided installation script by visiting the following URL with your browser:
http://example.org/path/to/chat/install.php
Replace "http://example.org/path/to/chat/" with the real URL to your chat directory.
6. Delete the installation script
------------------------------
Delete the file install.php from the chat directory on your server.
Ready! Just place a link to the chat directory on your website. :)
Configuration files:
====================
AJAX Chat is fully customizable and contains two configuration files:
1. lib/config.php
--------------
This file contains the server side (PHP) settings.
2. js/config.js
------------
This file contains the client side (JavaScript) settings.
Each configuration option is explained with a comment prior to the setting assignment.
Customizing the layout:
=======================
The layout of AJAX Chat is fully customizable by using CSS (Cascaded Style Sheets).
AJAX Chat comes with a predefined set of styles. To add your own style, do the following:
1. Add a new CSS file (e.g. mystyle.css) by copying one of the existing styles from the CSS directory.
2. Edit your file (css/mystyle.css) and adjust the CSS settings to your liking.
3. Add the name of your style without file extension to the available styles in lib/config.php:
// Available styles:
$config['styleAvailable'] = array('mystyle','beige','black','grey');
// Default style:
$config['styleDefault'] = 'mystyle';
To further customize the layout you can adjust the template files in lib/template/.
Make sure you are creating valid XHTML, else you will produce errors in modern browsers.
This is due to the page content-type served as "application/xhtml+xml".
Using this content-type improves performance when manipulating the Document Object Model (DOM).
If for some reason you cannot create valid XHTML you can force a HTML content-type.
Just edit lib/config.php and set the following option:
$config['contentType'] = 'text/html';
Adjusting the language settings:
================================
AJAX Chat comes with two language file directories:
1. js/lang/
------------
This directory contains the language files used for the chat messages localization.
These are JavaScript files with the extension ".js".
2. lib/lang/
--------------
This directory contains the language files used for the template output.
These are PHP files with the extension ".php".
For each language, you need a file in each of these directories, with the language code as file name.
The language code is used following the ISO 639 standards.
The files for the english (language code "en") localization are the following:
js/lang/en.js
lib/lang/en.php
To enable a language, you need to add the language code in lib/config.php:
$config['langAvailable'] = array('en');
For the language selection you also need to add the language name:
$config['langNames'] = array('en'=>'English');
To avoid errors, you should follow these rules:
1. Make sure you encode your localization files in UTF-8 (without Byte-order mark).
2. Don't use HTML entities in your localization files.
3. Don't remove any "%s" inside the JavaScript language files - these are filled with dynamic data.
Logs:
=====
By default, AJAX Chat stores all chat messages in the database.
To access the logs you have to add the GET parameter view=logs to your chat url:
e.g. http://example.org/path/to/chat/?view=logs
If you are not already logged in, you have to login as administrator to access the logs.
The log view enables you to monitor the latest chat messages on all channels.
It is also possible to view the logs of private rooms and private messages.
You have the option to filter the logs by date, time and search strings.
The search filter accepts MySQL style regular expressions:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
To search for IPs, use the following syntax:
ip=127.0.0.1
Shoutbox:
=========
AJAX Chat is also usable as shoutbox - this is a short guide on how to set it up:
1. Shoutbox stylesheet
----------------------
Add the following line to the stylesheet (CSS) of all pages displaying the shoutbox:
@import url("http://example.org/path/to/chat/css/shoutbox.css");
Replace http://example.org/path/to/chat/ with the URL to the chat.
Modify css/shoutbox.css to your liking.
2. Shoutbox function
--------------------
Add the following function to your PHP code:
<?php
function getShoutBoxContent() {
// URL to the chat directory:
if(!defined('AJAX_CHAT_URL')) {
define('AJAX_CHAT_URL', './chat/');
}
// Path to the chat directory:
if(!defined('AJAX_CHAT_PATH')) {
define('AJAX_CHAT_PATH', realpath(dirname($_SERVER['SCRIPT_FILENAME']).'/chat').'/');
}
// Validate the path to the chat:
if(@is_file(AJAX_CHAT_PATH.'lib/classes.php')) {
// Include Class libraries:
require_once(AJAX_CHAT_PATH.'lib/classes.php');
// Initialize the shoutbox:
$ajaxChat = new CustomAJAXChatShoutBox();
// Parse and return the shoutbox template content:
return $ajaxChat->getShoutBoxContent();
}
return null;
}
?>
Make sure AJAX_CHAT_URL and AJAX_CHAT_PATH point to the chat directory.
2. Shoutbox output
------------------
Display the shoutbox content using the shoutbox function:
<div style="width:200px;"><?php echo getShoutBoxContent(); ?></div>
Socket Server:
==============
Using the AJAX technology alone the chat clients have to permanently pull updates from the server.
This is d