WordPress.org

Plugin Directory

Changeset 396162


Ignore:
Timestamp:
06/12/11 06:39:06 (3 years ago)
Author:
mohanjith
Message:

Lets try to fix upgrade race

File:
1 edited

Legend:

Unmodified
Added
Removed
  • chat/trunk/chat.php

    r381641 r396162  
     1<?php 
     2/* 
     3 Plugin Name: Chat Lite 
     4 Plugin URI: http://premium.wpmudev.org/project/wordpress-chat-plugin 
     5 Description: Provides you with a fully featured chat area either in a 
     6post, page or bottom corner of your site - once activated configure <a 
     7href="options-general.php?page=chat">here</a> and drop into a post or 
     8page by clicking on the new chat icon in your post/page editor. 
     9 Author: S H Mohanjith (Incsub) 
     10 WDP ID: 223 
     11 Version: 1.0.5 
     12 Stable tag: trunk 
     13 Author URI: http://premium.wpmudev.org 
     14*/ 
     15/** 
     16 * @global  object  $chat   Convenient access to the chat object 
     17 */ 
     18global $chat; 
     19 
     20/** 
     21 * Chat object (PHP4 compatible) 
     22 *  
     23 * Allow your readers to chat with you 
     24 *  
     25 * @since 1.0.0 
     26 * @author S H Mohanjith <moha@mohanjith.net> 
     27 */ 
     28if (!class_exists('Chat')) { 
     29    class Chat { 
     30        /** 
     31         * @todo Update version number for new releases 
     32         *  
     33         * @var     string  $chat_current_version   Current version 
     34         */ 
     35        var $chat_current_version = '1.0.4'; 
     36         
     37        /** 
     38         * @var     string  $translation_domain Translation domain 
     39         */ 
     40        var $translation_domain = 'chat'; 
     41         
     42        /** 
     43         * @var     array   $auth_type_map      Authentication methods map 
     44         */ 
     45        var $auth_type_map = array(1 => 'current_user', 2 => 'network_user', 3 => 'facebook', 4 => 'twitter', 5 => 'public_user'); 
     46         
     47        /** 
     48         * @var     array   $fonts_list     List of fonts 
     49         */ 
     50        var $fonts_list = array( 
     51            "Arial" => "Arial, Helvetica, sans-serif", 
     52            "Arial Black" => "'Arial Black', Gadget, sans-serif", 
     53            "Bookman Old Style" => "'Bookman Old Style', serif", 
     54            "Comic Sans MS" => "'Comic Sans MS', cursive", 
     55            "Courier" => "Courier, monospace", 
     56            "Courier New" => "'Courier New', Courier, monospace", 
     57            "Garamond" => "Garamond, serif", 
     58            "Georgia" => "Georgia, serif", 
     59            "Impact" => "Impact, Charcoal, sans-serif", 
     60            "Lucida Console" => "'Lucida Console', Monaco, monospace", 
     61            "Lucida Sans Unicode" => "'Lucida Sans Unicode', 'Lucida Grande', sans-serif", 
     62            "MS Sans Serif" => "'MS Sans Serif', Geneva, sans-serif", 
     63            "MS Serif" => "'MS Serif', 'New York', sans-serif", 
     64            "Palatino Linotype" => "'Palatino Linotype', 'Book Antiqua', Palatino, serif", 
     65            "Symbol" => "Symbol, sans-serif", 
     66            "Tahoma" => "Tahoma, Geneva, sans-serif", 
     67            "Times New Roman" => "'Times New Roman', Times, serif", 
     68            "Trebuchet MS" => "'Trebuchet MS', Helvetica, sans-serif", 
     69            "Verdana" => "Verdana, Geneva, sans-serif", 
     70            "Webdings" => "Webdings, sans-serif", 
     71            "Wingdings" => "Wingdings, 'Zapf Dingbats', sans-serif" 
     72        ); 
     73         
     74        /** 
     75         * @var     array   $_chat_options          Consolidated options 
     76         */ 
     77        var $_chat_options = array(); 
     78         
     79        /** 
     80         * Get the table name with prefixes 
     81         *  
     82         * @global  object  $wpdb 
     83         * @param   string  $table  Table name 
     84         * @return  string          Table name complete with prefixes 
     85         */ 
     86        function tablename($table) { 
     87            global $wpdb; 
     88            // We use a single table for all chats accross the network 
     89            return $wpdb->base_prefix.'chat_'.$table; 
     90        } 
     91         
     92        /** 
     93         * Initializing object 
     94         *  
     95         * Plugin register actions, filters and hooks.  
     96         */ 
     97        function Chat() { 
     98         
     99            // Activation deactivation hooks 
     100             
     101            register_activation_hook(__FILE__, array(&$this, 'install')); 
     102            register_deactivation_hook(__FILE__, array(&$this, 'uninstall')); 
     103         
     104            // Actions 
     105             
     106            add_action('init', array(&$this, 'init')); 
     107            add_action('wp_head', array(&$this, 'wp_head'), 1); 
     108            add_action('wp_head', array(&$this, 'output_css')); 
     109            add_action('wp_footer', array(&$this, 'wp_footer'), 1); 
     110            // add_action('admin_head', array($this, 'admin_head')); 
     111            add_action('save_post', array(&$this, 'post_check')); 
     112            add_action('edit_user_profile', array(&$this, 'profile')); 
     113            add_action('show_user_profile', array(&$this, 'profile')); 
     114             
     115            add_action('admin_print_styles-settings_page_chat', array(&$this, 'admin_styles')); 
     116            add_action('admin_print_scripts-settings_page_chat', array(&$this, 'admin_scripts')); 
     117             
     118            // Filters 
     119            // From process.php 
     120            add_action('wp_ajax_chatProcess', array(&$this, 'process')); 
     121            add_action('wp_ajax_nopriv_chatProcess', array(&$this, 'process')); 
     122             
     123            // Only authenticated users (admin) can clear and archive 
     124            add_action('wp_ajax_chatArchive', array(&$this, 'archive')); 
     125            add_action('wp_ajax_chatClear', array(&$this, 'clear')); 
     126             
     127            // TinyMCE options 
     128            add_action('wp_ajax_chatTinymceOptions', array(&$this, 'tinymce_options')); 
     129             
     130            add_filter('wp_redirect', array(&$this, 'profile_process'), 1, 1); 
     131            add_filter('admin_menu', array(&$this, 'admin_menu')); 
     132             
     133            // White list the options to make sure non super admin can save chat options  
     134            add_filter('whitelist_options', array(&$this, 'whitelist_options')); 
     135             
     136            // Add shortcode 
     137            add_shortcode('chat', array(&$this, 'process_shortcode')); 
     138             
     139            $this->_chat_options['default'] = get_option('chat_default', array( 
     140                'sound'         => 'enabled', 
     141                'avatar'        => 'enabled', 
     142                'emoticons'     => 'disabled', 
     143                'date_show'     => 'disabled', 
     144                'time_show'     => 'disabled', 
     145                'width'         => '', 
     146                'height'        => '', 
     147                'background_color'  => '#FFFFFF', 
     148                'date_color'        => '#6699CC', 
     149                'name_color'        => '#666666', 
     150                'moderator_name_color'  => '#6699CC', 
     151                'special_color'     => '#660000', 
     152                'text_color'        => '#000000', 
     153                'code_color'        => '#FFFFCC', 
     154                'font'          => '', 
     155                'font_size'     => '12', 
     156                'log_creation'      => 'disabled', 
     157                'log_display'       => 'disabled', 
     158                'login_options'     => array('current_user'), 
     159                'moderator_roles'   => array('administrator','editor','author') 
     160                )); 
     161             
     162            $this->_chat_options['site'] = get_option('chat_site', array( 
     163                'site'          => 'enabled', 
     164                'sound'         => 'enabled', 
     165                'avatar'        => 'enabled', 
     166                'emoticons'     => 'disabled', 
     167                'date_show'     => 'disabled', 
     168                'time_show'     => 'disabled', 
     169                'width'         => '', 
     170                'height'        => '', 
     171                'border_color'      => '#4b96e2', 
     172                'background_color'  => '#FFFFFF', 
     173                'date_color'        => '#6699CC', 
     174                'name_color'        => '#666666', 
     175                'moderator_name_color'  => '#6699CC', 
     176                'special_color'     => '#660000', 
     177                'text_color'        => '#000000', 
     178                'code_color'        => '#FFFFCC', 
     179                'font'          => '', 
     180                'font_size'     => '12', 
     181                'log_creation'      => 'disabled', 
     182                'log_display'       => 'disabled', 
     183                'login_options'     => array('current_user'), 
     184                'moderator_roles'   => array('administrator','editor','author'))); 
     185        } 
     186         
     187        /** 
     188         * Activation hook 
     189         *  
     190         * Create tables if they don't exist and add plugin options 
     191         *  
     192         * @see     http://codex.wordpress.org/Function_Reference/register_activation_hook 
     193         *  
     194         * @global  object  $wpdb 
     195         */ 
     196        function install() { 
     197            global $wpdb; 
     198         
     199            /** 
     200             * WordPress database upgrade/creation functions 
     201             */ 
     202            require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     203                 
     204            // Get the correct character collate 
     205            if ( ! empty($wpdb->charset) ) 
     206                $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; 
     207            if ( ! empty($wpdb->collate) ) 
     208                $charset_collate .= " COLLATE $wpdb->collate"; 
     209                 
     210            if($wpdb->get_var("SHOW TABLES LIKE '". Chat::tablename('message') ."'") != Chat::tablename('message')) 
     211            { 
     212                // Setup chat message table 
     213                $sql_main = "CREATE TABLE ".Chat::tablename('message')." ( 
     214                                id BIGINT NOT NULL AUTO_INCREMENT, 
     215                                blog_id INT NOT NULL , 
     216                                chat_id INT NOT NULL , 
     217                                timestamp TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' , 
     218                                name VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL , 
     219                                avatar VARCHAR( 1024 ) CHARACTER SET utf8 NOT NULL , 
     220                                message TEXT CHARACTER SET utf8 NOT NULL , 
     221                                moderator ENUM( 'yes', 'no' ) NOT NULL DEFAULT 'no' , 
     222                                archived ENUM( 'yes', 'no' ) NOT NULL DEFAULT 'no' , 
     223                                PRIMARY KEY (`id`), 
     224                                KEY `blog_id` (`blog_id`), 
     225                                KEY `chat_id` (`chat_id`), 
     226                                KEY `timestamp` (`timestamp`), 
     227                                KEY `archived` (`archived`) 
     228                            ) ENGINE = InnoDB {$charset_collate};"; 
     229                dbDelta($sql_main); 
     230            } else { 
     231                $wpdb->query("ALTER TABLE ".Chat::tablename('message')." CHANGE name name VARCHAR( 255 ) CHARACTER SET utf8 NOT NULL;"); 
     232                $wpdb->query("ALTER TABLE ".Chat::tablename('message')." CHANGE avatar avatar VARCHAR( 1024 ) CHARACTER SET utf8 NOT NULL;"); 
     233                $wpdb->query("ALTER TABLE ".Chat::tablename('message')." CHANGE message message TEXT CHARACTER SET utf8 NOT NULL;"); 
     234                 
     235                if ($wpdb->get_var("SHOW COLUMNS FROM ".Chat::tablename('message')." LIKE 'moderator'") != 'moderator') { 
     236                    $wpdb->query("ALTER TABLE ".Chat::tablename('message')." ADD moderator ENUM( 'yes', 'no' ) NOT NULL DEFAULT 'no' AFTER message;"); 
     237                } 
     238            } 
     239             
     240            // Setup the chat log table 
     241            $sql_main = "CREATE TABLE ".Chat::tablename('log')." ( 
     242                            id BIGINT NOT NULL AUTO_INCREMENT, 
     243                            blog_id INT NOT NULL , 
     244                            chat_id INT NOT NULL , 
     245                            start TIMESTAMP DEFAULT '0000-00-00 00:00:00' , 
     246                            end TIMESTAMP DEFAULT '0000-00-00 00:00:00' , 
     247                            created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
     248                            PRIMARY KEY (`id`), 
     249                            KEY `blog_id` (`blog_id`), 
     250                            KEY `chat_id` (`chat_id`) 
     251                        ) ENGINE = InnoDB {$charset_collate};"; 
     252            dbDelta($sql_main); 
     253             
     254            // Default chat options 
     255            $this->_chat_options['default'] = array( 
     256                'sound'         => 'enabled', 
     257                'avatar'        => 'enabled', 
     258                'emoticons'     => 'disabled', 
     259                'date_show'     => 'disabled', 
     260                'time_show'     => 'disabled', 
     261                'width'         => '', 
     262                'height'        => '', 
     263                'background_color'  => '#ffffff', 
     264                'date_color'        => '#6699CC', 
     265                'name_color'        => '#666666', 
     266                'moderator_name_color'  => '#6699CC', 
     267                'special_color'     => '#660000', 
     268                'text_color'        => '#000000', 
     269                'code_color'        => '#FFFFCC', 
     270                'font'          => '', 
     271                'font_size'     => '12', 
     272                'log_creation'      => 'disabled', 
     273                'log_display'       => 'disabled', 
     274                'login_options'     => array('current_user'), 
     275                'moderator_roles'   => array('administrator','editor','author')); 
     276             
     277            // Site wide chat options 
     278            $this->_chat_options['site'] = array( 
     279                'site'          => 'enabled', 
     280                'sound'         => 'enabled', 
     281                'avatar'        => 'enabled', 
     282                'emoticons'     => 'disabled', 
     283                'date_show'     => 'disabled', 
     284                'time_show'     => 'disabled', 
     285                'width'         => '', 
     286                'height'        => '', 
     287                'border_color'      => '#4b96e2', 
     288                'background_color'  => '#ffffff', 
     289                'date_color'        => '#6699CC', 
     290                'name_color'        => '#666666', 
     291                'moderator_name_color'  => '#6699CC', 
     292                'special_color'     => '#660000', 
     293                'text_color'        => '#000000', 
     294                'code_color'        => '#FFFFCC', 
     295                'font'          => '', 
     296                'font_size'     => '12', 
     297                'log_creation'      => 'disabled', 
     298                'log_display'       => 'disabled', 
     299                'login_options'     => array('current_user'), 
     300                'moderator_roles'   => array('administrator','editor','author')); 
     301             
     302            add_option('chat_default', $this->_chat_options['default']); 
     303            add_option('chat_site', $this->_chat_options['site'], null, 'no'); 
     304        } 
     305         
     306        /** 
     307         * Deactivation hook 
     308         *  
     309         * @see     http://codex.wordpress.org/Function_Reference/register_deactivation_hook 
     310         *  
     311         * @global  object  $wpdb 
     312         */ 
     313        function uninstall() { 
     314            global $wpdb; 
     315            // Nothing to do 
     316        } 
     317         
     318        /** 
     319         * Get chat options 
     320         * 
     321         * @param string $key 
     322         * @param mixed $default 
     323         * @param string $type 
     324         * @return mixed 
     325         */ 
     326        function get_option($key, $default = null, $type = 'default') { 
     327            if (isset($this->_chat_options[$type][$key])) { 
     328                return $this->_chat_options[$type][$key]; 
     329            } else { 
     330                return get_option($key, $default); 
     331            } 
     332            return $default; 
     333        } 
     334         
     335        /** 
     336         * Initialize the plugin 
     337         *  
     338         * @see     http://codex.wordpress.org/Plugin_API/Action_Reference 
     339         * @see     http://adambrown.info/p/wp_hooks/hook/init 
     340         */ 
     341        function init() { 
     342            if (preg_match('/mu\-plugin/', PLUGINDIR) > 0) { 
     343                load_muplugin_textdomain($this->translation_domain, dirname(plugin_basename(__FILE__)).'/languages'); 
     344            } else { 
     345                load_plugin_textdomain($this->translation_domain, false, dirname(plugin_basename(__FILE__)).'/languages'); 
     346            } 
     347             
     348            wp_register_script('chat_soundmanager', plugins_url('chat/js/soundmanager2-nodebug-jsmin.js'), array(), $this->chat_current_version); 
     349            wp_register_script('jquery-cookie', plugins_url('chat/js/jquery-cookie.js'), array('jquery')); 
     350            // wp_register_script('jquery-blockUI', plugins_url('chat/js/jquery.blockUI.js'), array('jquery')); 
     351            wp_register_script('chat_js', plugins_url('chat/js/chat.js'), array('jquery', 'jquery-cookie', 'chat_soundmanager'), $this->chat_current_version, true); 
     352             
     353            if (is_admin()) { 
     354                wp_register_script('farbtastic', plugins_url('chat/js/farbtastic.js'), array('jquery')); 
     355                wp_register_script('chat_admin_js', plugins_url('chat/js/chat-admin.js'), array('jquery','jquery-cookie','jquery-ui-core','jquery-ui-tabs','farbtastic'), $this->chat_current_version, true); 
     356                wp_register_style('chat_admin_css', plugins_url('chat/css/wp_admin.css')); 
     357            } 
     358             
     359            if ((current_user_can('edit_posts') || current_user_can('edit_pages')) && get_user_option('rich_editing') == 'true') { 
     360                add_filter("mce_external_plugins", array(&$this, "tinymce_add_plugin")); 
     361                add_filter('mce_buttons', array(&$this,'tinymce_register_button')); 
     362                add_filter('mce_external_languages', array(&$this,'tinymce_load_langs')); 
     363            } 
     364             
     365            // Need to stop any output until cookies are set 
     366            ob_start(); 
     367        } 
     368         
     369        /** 
     370         * Add the CSS (admin_head) 
     371         *  
     372         * @see     http://codex.wordpress.org/Plugin_API/Action_Reference/admin_head-(plugin_page) 
     373         */ 
     374        function admin_styles() { 
     375            wp_enqueue_style('chat_admin_css'); 
     376        } 
     377         
     378        function admin_scripts() { 
     379            wp_enqueue_script('jquery-cookie'); 
     380            wp_enqueue_script('farbtastic'); 
     381            //wp_enqueue_script('jquery-blockUI'); 
     382            wp_enqueue_script('chat_admin_js'); 
     383        } 
     384         
     385        /** 
     386         * Add the admin menus 
     387         *  
     388         * @see     http://codex.wordpress.org/Adding_Administration_Menus 
     389         */ 
     390        function admin_menu() { 
     391            add_options_page(__('Chat Plugin Options', $this->translation_domain), __('Chat', $this->translation_domain), 8, 'chat', array(&$this, 'plugin_options')); 
     392        } 
     393         
     394        /** 
     395         * Is Twitter setup complete 
     396         *  
     397         * @return  boolean         Is Twitter setup complete. true or false         
     398         */ 
     399        function is_twitter_setup() { 
     400            if ($this->get_option('twitter_api_key', '') != '') { 
     401                return true; 
     402            } 
     403            return false; 
     404        } 
     405         
     406        /** 
     407         * Is Facebook setup complete 
     408         *  
     409         * @todo    Validate the application ID and secret with Facebook 
     410         *  
     411         * @return  boolean         Is Facebook setup complete. true or false        
     412         */ 
     413        function is_facebook_setup() { 
     414            if ($this->get_option('facebook_application_id', '') != '' && $this->get_option('facebook_application_secret', '') != '') { 
     415                return true; 
     416            } 
     417            return false; 
     418        } 
     419         
     420        /** 
     421         * TinyMCE dialog content 
     422         */ 
     423        function tinymce_options() { 
     424            ?> 
     425            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
     426            <html> 
     427                <head> 
     428                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     429                    <script type="text/javascript" src="../wp-includes/js/tinymce/tiny_mce_popup.js?ver=327-1235"></script> 
     430                    <script type="text/javascript" src="../wp-includes/js/tinymce/utils/mctabs.js?ver=327-1235"></script> 
     431                    <script type="text/javascript" src="../wp-includes/js/tinymce/utils/validate.js?ver=327-1235"></script> 
     432                     
     433                    <script type="text/javascript" src="../wp-includes/js/tinymce/utils/form_utils.js?ver=327-1235"></script> 
     434                    <script type="text/javascript" src="../wp-includes/js/tinymce/utils/editable_selects.js?ver=327-1235"></script> 
     435                     
     436                    <script type="text/javascript" src="../wp-includes/js/jquery/jquery.js"></script> 
     437                     
     438                    <script type="text/javascript"> 
     439                        var default_options = { 
     440                            id: "<?php print $this->get_last_chat_id(); ?>", 
     441                            sound: "<?php print $this->get_option('sound', 'enabled'); ?>", 
     442                            avatar: "<?php print $this->get_option('avatar', 'enabled'); ?>", 
     443                            emoticons: "<?php print $this->get_option('emoticons', 'disabled'); ?>", 
     444                            date_show: "<?php print $this->get_option('date_show', 'disabled'); ?>", 
     445                            time_show: "<?php print $this->get_option('time_show', 'disabled'); ?>", 
     446                            width: "<?php print $this->get_option('width', ''); ?>", 
     447                            height: "<?php print $this->get_option('height', ''); ?>", 
     448                            background_color: "<?php print $this->get_option('background_color', '#ffffff'); ?>", 
     449                            date_color: "<?php print $this->get_option('date_color', '#6699CC'); ?>", 
     450                            name_color: "<?php print $this->get_option('name_color', '#666666'); ?>", 
     451                            moderator_name_color: "<?php print $this->get_option('moderator_name_color', '#6699CC'); ?>", 
     452                            text_color: "<?php print $this->get_option('text_color', '#000000'); ?>", 
     453                            font: "<?php print $this->get_option('font', ''); ?>", 
     454                            font_size: "<?php print $this->get_option('font_size', '12'); ?>", 
     455                            log_creation: "<?php print $this->get_option('log_creation', 'disabled'); ?>", 
     456                            log_display: "<?php print $this->get_option('log_display', 'disabled'); ?>", 
     457                            login_options: "<?php print join(',', $this->get_option('login_options', array('current_user'))); ?>", 
     458                            moderator_roles: "<?php print join(',', $this->get_option('moderator_roles', array('administrator','editor','author'))); ?>" 
     459                        }; 
     460     
     461                        var current_options = { 
     462                            id: default_options.id+Math.floor(Math.random()*10), 
     463                            sound: "<?php print $this->get_option('sound', 'enabled'); ?>", 
     464                            avatar: "<?php print $this->get_option('avatar', 'enabled'); ?>", 
     465                            emoticons: "<?php print $this->get_option('emoticons', 'disabled'); ?>", 
     466                            date_show: "<?php print $this->get_option('date_show', 'disabled'); ?>", 
     467                            time_show: "<?php print $this->get_option('time_show', 'disabled'); ?>", 
     468                            width: "<?php print $this->get_option('width', ''); ?>", 
     469                            height: "<?php print $this->get_option('height', ''); ?>", 
     470                            background_color: "<?php print $this->get_option('background_color', '#ffffff'); ?>", 
     471                            date_color: "<?php print $this->get_option('date_color', '#6699CC'); ?>", 
     472                            name_color: "<?php print $this->get_option('name_color', '#666666'); ?>", 
     473                            moderator_name_color: "<?php print $this->get_option('moderator_name_color', '#6699CC'); ?>", 
     474                            text_color: "<?php print $this->get_option('text_color', '#000000'); ?>", 
     475                            font: "<?php print $this->get_option('font', ''); ?>", 
     476                            font_size: "<?php print $this->get_option('font_size', '12'); ?>", 
     477                            log_creation: "<?php print $this->get_option('log_creation', 'disabled'); ?>", 
     478                            log_display: "<?php print $this->get_option('log_display', 'disabled'); ?>", 
     479                            login_options: "<?php print join(',', $this->get_option('login_options', array('current_user'))); ?>", 
     480                            moderator_roles: "<?php print join(',', $this->get_option('moderator_roles', array('administrator','editor','author'))); ?>" 
     481                        }; 
     482                         
     483                        parts = tinyMCEPopup.editor.selection.getContent().replace(' ]', '').replace('[', '').split(' '); 
     484                        old_string = ''; 
     485                         
     486                        if (!(parts.length > 1 && parts[0] == 'chat')) { 
     487                            _tmp = tinyMCEPopup.editor.getContent().split('[chat '); 
     488                            if (_tmp.length > 1) { 
     489                                _tmp1 = _tmp[1].split(' ]'); 
     490                                old_string = '[chat '+_tmp1[0]+' ]'; 
     491                                parts = (old_string).replace(' ]', '').replace('[', '').split(' '); 
     492                            } 
     493                        } 
     494     
     495                        if (parts.length > 1 && parts[0] == 'chat') { 
     496                            current_options.id = parts[1].replace('id="', '').replace('"', ''); 
     497     
     498                            for (i=2; i<parts.length; i++) { 
     499                                attr_parts = parts[i].split('='); 
     500                                if (attr_parts.length > 1) { 
     501                                    current_options[attr_parts[0]] = attr_parts[1].replace('"', '').replace('"', ''); 
     502                                }    
     503                            } 
     504                        } 
     505     
     506                        var insertChat = function (ed) { 
     507                            output  ='[chat id="'+current_options.id+'" '; 
     508     
     509                            if (default_options.sound != jQuery.trim(jQuery('#chat_sound').val())) { 
     510                                output += 'sound="'+jQuery.trim(jQuery('#chat_sound').val())+'" '; 
     511                            } 
     512                            if (default_options.date_show != jQuery.trim(jQuery('#chat_date_show').val())) { 
     513                                output += 'date_show="'+jQuery.trim(jQuery('#chat_date_show').val())+'" '; 
     514                            } 
     515                            if (default_options.time_show != jQuery.trim(jQuery('#chat_time_show').val())) { 
     516                                output += 'time_show="'+jQuery.trim(jQuery('#chat_time_show').val())+'" '; 
     517                            } 
     518                            if (default_options.width != jQuery.trim(jQuery('#chat_width').val())) { 
     519                                output += 'width="'+jQuery.trim(jQuery('#chat_width').val())+'" '; 
     520                            } 
     521                            if (default_options.height != jQuery.trim(jQuery('#chat_height').val())) { 
     522                                output += 'height="'+jQuery.trim(jQuery('#chat_height').val())+'" '; 
     523                            } 
     524                            if (default_options.font != jQuery.trim(jQuery('#chat_font').val())) { 
     525                                output += 'font="'+jQuery.trim(jQuery('#chat_font').val())+'" '; 
     526                            } 
     527                            if (default_options.font_size != jQuery.trim(jQuery('#chat_font_size').val())) { 
     528                                output += 'font_size="'+jQuery.trim(jQuery('#chat_font_size').val())+'" '; 
     529                            } 
     530                            var chat_login_options_arr = []; 
     531                            jQuery('input[name=chat_login_options]:checked').each(function() { 
     532                                chat_login_options_arr.push(jQuery(this).val()) 
     533                            }); 
     534                            if (default_options.login_options != jQuery.trim(chat_login_options_arr.join(','))) { 
     535                                output += 'login_options="'+jQuery.trim(chat_login_options_arr.join(','))+'" '; 
     536                            } 
     537                             
     538                            var chat_moderator_roles_arr = []; 
     539                            jQuery('input[name=chat_moderator_roles]:checked').each(function() { 
     540                                chat_moderator_roles_arr.push(jQuery(this).val()) 
     541                            }); 
     542                            if (default_options.moderator_roles != jQuery.trim(chat_moderator_roles_arr.join(','))) { 
     543                                output += 'moderator_roles="'+jQuery.trim(chat_moderator_roles_arr.join(','))+'" '; 
     544                            } 
     545                             
     546                            output += ']'; 
     547                             
     548                            if (old_string == '') { 
     549                                tinyMCEPopup.execCommand('mceReplaceContent', false, output); 
     550                            } else { 
     551                                tinyMCEPopup.execCommand('mceSetContent', false, tinyMCEPopup.editor.getContent().replace(old_string, output)); 
     552                            } 
     553     
     554                            // Return 
     555                            tinyMCEPopup.close(); 
     556                        }; 
     557                    </script> 
     558                    <style type="text/css"> 
     559                    td.info { 
     560                        vertical-align: top; 
     561                        color: #777; 
     562                    } 
     563                    </style> 
     564     
     565                    <title>{#chat_dlg.title}</title> 
     566                </head> 
     567                <body style="display: none"> 
     568                    <form onsubmit="insertChat();return false;" action="#"> 
     569                        <div class="tabs"> 
     570                            <ul> 
     571                                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#chat_dlg.general}</a></span></li> 
     572                                <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#chat_dlg.appearance}</a></span></li> 
     573                                <li id="logs_tab"><span><a href="javascript:mcTabs.displayTab('logs_tab','logs_panel');" onmousedown="return false;">{#chat_dlg.logs}</a></span></li> 
     574                                <li id="authentication_tab"><span><a href="javascript:mcTabs.displayTab('authentication_tab','authentication_panel');" onmousedown="return false;">{#chat_dlg.authentication}</a></span></li> 
     575                            </ul> 
     576                        </div> 
     577                 
     578                        <div class="panel_wrapper"> 
     579                            <div id="general_panel" class="panel current"> 
     580                                <fieldset> 
     581                                    <legend>{#chat_dlg.general}</legend> 
     582                 
     583                                    <table border="0" cellpadding="4" cellspacing="0"> 
     584                                        <tr> 
     585                                            <td><label for="chat_sound">{#chat_dlg.sound}</label></td> 
     586                                            <td> 
     587                                                <select id="chat_sound" name="chat_sound" > 
     588                                                    <option value="enabled" <?php print ($this->get_option('sound', 'enabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     589                                                    <option value="disabled" <?php print ($this->get_option('sound', 'enabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     590                                                </select> 
     591                                            </td> 
     592                                            <td class="info"><?php _e("Play sound when a new message is received?", $this->translation_domain); ?></td> 
     593                                        </tr> 
     594                                         
     595                                         
     596                                        <tr class="chat_lite_disabled" > 
     597                                            <td><label for="chat_avatar">{#chat_dlg.avatar}</label></td> 
     598                                            <td> 
     599                                                <select id="chat_avatar" name="chat_avatar" disabled="disabled" > 
     600                                                    <option value="enabled" <?php print ($this->get_option('avatar', 'enabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     601                                                    <option value="disabled" <?php print ($this->get_option('avatar', 'enabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     602                                                </select> 
     603                                            </td> 
     604                                            <td class="info"><?php _e("Display the user's avatar with the message?", $this->translation_domain); ?></td> 
     605                                        </tr> 
     606                                         
     607                                        <tr class="chat_lite_disabled" > 
     608                                            <td><label for="chat_emoticons">{#chat_dlg.emoticons}</label></td> 
     609                                            <td> 
     610                                                <select id="chat_emoticons" name="chat_emoticons" disabled="disabled" > 
     611                                                    <option value="enabled" <?php print ($this->get_option('emoticons', 'disabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     612                                                    <option value="disabled" <?php print ($this->get_option('emoticons', 'disabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     613                                                </select> 
     614                                            </td> 
     615                                            <td class="info"><?php _e("Display emoticons bar?", $this->translation_domain); ?></td> 
     616                                        </tr> 
     617                                         
     618                                        <tr> 
     619                                            <td><label for="chat_date_show">{#chat_dlg.show_date}</label></td> 
     620                                            <td> 
     621                                                <select id="chat_date_show" name="chat_date_show" > 
     622                                                    <option value="enabled" <?php print ($this->get_option('date_show', 'disabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     623                                                    <option value="disabled" <?php print ($this->get_option('date_show', 'disabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     624                                                </select> 
     625                                            </td> 
     626                                            <td class="info"><?php _e("Display date the message was sent?", $this->translation_domain); ?></td> 
     627                                        </tr> 
     628                                         
     629                                        <tr> 
     630                                            <td><label for="chat_time_show">{#chat_dlg.show_time}</label></td> 
     631                                            <td> 
     632                                                <select id="chat_time_show" name="chat_time_show" > 
     633                                                    <option value="enabled" <?php print ($this->get_option('time_show', 'disabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     634                                                    <option value="disabled" <?php print ($this->get_option('time_show', 'disabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     635                                                </select> 
     636                                            </td> 
     637                                            <td class="info"><?php _e("Display the time  the message was sent?", $this->translation_domain); ?></td> 
     638                                        </tr> 
     639                 
     640                                        <tr> 
     641                                            <td><label for="chat_width">{#chat_dlg.dimensions}</label></td> 
     642                                            <td> 
     643                                                <input type="text" id="chat_width" name="chat_width" value="<?php print $this->get_option('width', ''); ?>" class="size" size="5" /> x 
     644                                                <input type="text" id="chat_height" name="chat_height" value="<?php print $this->get_option('height', ''); ?>" class="size" size="5" /> 
     645                                            </td> 
     646                                            <td class="info"><?php _e("Dimensions of the chat box", $this->translation_domain); ?></td> 
     647                                        </tr> 
     648                                    </table> 
     649                                </fieldset> 
     650                            </div> 
     651                                 
     652                            <div id="appearance_panel" class="panel"> 
     653                                <fieldset> 
     654                                    <legend>{#chat_dlg.colors}</legend> 
     655                 
     656                                    <table border="0" cellpadding="4" cellspacing="0" class="chat_lite_disabled"> 
     657                                        <tr> 
     658                                            <td><label for="chat_background_color">{#chat_dlg.background}</label></td> 
     659                                            <td> 
     660                                                <input type="text" id="chat_background_color" name="chat_background_color" value="<?php print $this->get_option('background_color', '#ffffff'); ?>" class="color" size="7" disabled="disabled" /> 
     661                                                <div class="color" id="chat_background_color_panel"></div> 
     662                                            </td> 
     663                                            <td class="info"><?php _e("Chat box background color", $this->translation_domain); ?></td> 
     664                                        </tr> 
     665                                             
     666                                        <tr> 
     667                                            <td><label for="chat_date_color">{#chat_dlg.date}</label></td> 
     668                                            <td> 
     669                                                <input type="text" id="chat_date_color" name="chat_date_color" value="<?php print $this->get_option('date_color', '#6699CC'); ?>" class="color" size="7" disabled="disabled" /> 
     670                                                <div class="color" id="chat_date_color_panel"></div> 
     671                                            </td> 
     672                                            <td class="info"><?php _e("Date background color", $this->translation_domain); ?></td> 
     673                                        </tr> 
     674                                             
     675                                        <tr> 
     676                                            <td><label for="chat_name_color">{#chat_dlg.name}</label></td> 
     677                                            <td> 
     678                                                <input type="text" id="chat_name_color" name="chat_name_color" value="<?php print $this->get_option('name_color', '#666666'); ?>" class="color" size="7" disabled="disabled" /> 
     679                                                <div class="color" id="chat_name_color_panel"></div> 
     680                                            </td> 
     681                                            <td class="info"><?php _e("Name background color", $this->translation_domain); ?></td> 
     682                                        </tr> 
     683                                         
     684                                        <tr> 
     685                                            <td><label for="chat_moderator_name_color">{#chat_dlg.moderator_name}</label></td> 
     686                                            <td> 
     687                                                <input type="text" id="chat_moderator_name_color" name="chat_moderator_name_color" value="<?php print $this->get_option('moderator_name_color', '#6699CC'); ?>" class="color" size="7" disabled="disabled" /> 
     688                                                <div class="color" id="chat_moderator_name_color_panel"></div> 
     689                                            </td> 
     690                                            <td class="info"><?php _e("Moderator Name background color", $this->translation_domain); ?></td> 
     691                                        </tr> 
     692                                         
     693                                        <tr> 
     694                                            <td><label for="chat_text_color">{#chat_dlg.text}</label></td> 
     695                                            <td> 
     696                                                <input type="text" id="chat_text_color" name="chat_text_color" value="<?php print $this->get_option('text_color', '#000000'); ?>" class="color" size="7" disabled="disabled" /> 
     697                                                <div class="color" id="chat_text_color_panel"></div> 
     698                                            </td> 
     699                                            <td class="info"><?php _e("Text color", $this->translation_domain); ?></td> 
     700                                        </tr> 
     701                                    </table> 
     702                                </fieldset> 
     703                                 
     704                                <fieldset> 
     705                                    <legend>{#chat_dlg.fonts}</legend> 
     706                 
     707                                    <table border="0" cellpadding="4" cellspacing="0"> 
     708                 
     709                                        <tr> 
     710                                            <td><label for="chat_font">{#chat_dlg.font}</label></td> 
     711                                            <td> 
     712                                                <select id="chat_font" name="chat_font" class="font" > 
     713                                                <?php foreach ($this->fonts_list as $font_name => $font) { ?> 
     714                                                    <option value="<?php print $font; ?>" <?php print ($this->get_option('font', '') == $font)?'selected="selected"':''; ?>" ><?php print $font_name; ?></option> 
     715                                                <?php } ?> 
     716                                                </select> 
     717                                            </td> 
     718                                            <td class="info"><?php _e("Chat box font", $this->translation_domain); ?></td> 
     719                                        </tr> 
     720                                         
     721                                        <tr> 
     722                                            <td><label for="chat_font_size">{#chat_dlg.font_size}</label></td> 
     723                                            <td> 
     724                                                <select id="chat_font_size" name="chat_font_size" class="font_size" > 
     725                                                <?php for ($font_size=8; $font_size<21; $font_size++) { ?> 
     726                                                    <option value="<?php print $font_size; ?>" <?php print ($this->get_option('font_size', '12') == $font_size)?'selected="selected"':''; ?> ><?php print $font_size; ?></option> 
     727                                                <?php } ?> 
     728                                                </select> px 
     729                                            </td> 
     730                                            <td class="info"><?php _e("Chat box font size", $this->translation_domain); ?></td> 
     731                                        </tr> 
     732                                    </table> 
     733                                </fieldset> 
     734                            </div> 
     735                             
     736                            <div id="logs_panel" class="panel"> 
     737                                <fieldset> 
     738                                    <legend>{#chat_dlg.logs}</legend> 
     739                                     
     740                                    <table border="0" cellpadding="4" cellspacing="0"> 
     741                                        <tr> 
     742                                            <td><label for="chat_log_creation">{#chat_dlg.creation}</label></td> 
     743                                            <td> 
     744                                                <select id="chat_log_creation" name="chat_log_creation" disabled="disabled" > 
     745                                                    <option value="enabled" <?php print ($this->get_option('log_creation', 'disabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     746                                                    <option value="disabled" <?php print ($this->get_option('log_creation', 'disabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     747                                                </select> 
     748                                            </td> 
     749                                            <td class="info"><?php _e("Log chat messages?", $this->translation_domain); ?></td> 
     750                                        </tr> 
     751                                         
     752                                        <tr> 
     753                                            <td><label for="chat_log_display">{#chat_dlg.display}</label></td> 
     754                                            <td> 
     755                                                <select id="chat_log_display" name="chat_log_display" disabled="disabled"  > 
     756                                                    <option value="enabled" <?php print ($this->get_option('log_display', 'disabled') == 'enabled')?'selected="selected"':''; ?>>{#chat_dlg.enabled}</option> 
     757                                                    <option value="disabled" <?php print ($this->get_option('log_display', 'disabled') == 'disabled')?'selected="selected"':''; ?>>{#chat_dlg.disabled}</option> 
     758                                                </select> 
     759                                            </td> 
     760                                            <td class="info"><?php _e("Display chat logs?", $this->translation_domain); ?></td> 
     761                                        </tr> 
     762                                    </table> 
     763                                </fieldset> 
     764                            </div> 
     765                         
     766                            <div id="authentication_panel" class="panel"> 
     767                                <fieldset> 
     768                                    <legend>{#chat_dlg.authentication}</legend> 
     769                                     
     770                                    <table border="0" cellpadding="4" cellspacing="0"> 
     771                                        <tr> 
     772                                            <td valign="top"><label for="chat_login_options">{#chat_dlg.login_options}</label></td> 
     773                                            <td> 
     774                                                <label><input type="checkbox" id="chat_login_options_current_user" name="chat_login_options" class="chat_login_options" value="current_user" <?php print (in_array('current_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Current user', $this->translation_domain); ?></label><br/> 
     775                                                <?php if (is_multisite()) { ?> 
     776                                                <label><input type="checkbox" id="chat_login_options_network_user" name="chat_login_options" class="chat_login_options" value="network_user" <?php print (in_array('network_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Network user', $this->translation_domain); ?></label><br/> 
     777                                                <?php } ?> 
     778                                                <label><input type="checkbox" id="chat_login_options_public_user" name="chat_login_options" class="chat_login_options" value="public_user" <?php print (in_array('public_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Public user', $this->translation_domain); ?></label><br/> 
     779                                                <?php if ($this->is_twitter_setup()) { ?> 
     780                                                <label><input type="checkbox" id="chat_login_options_twitter" name="chat_login_options" class="chat_login_options" value="twitter" <?php print (!$this->is_twitter_setup())?'disabled="disabled"':''; ?> <?php print (in_array('twitter', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Twitter', $this->translation_domain); ?></label><br/> 
     781                                                <?php } ?> 
     782                                                <?php if ($this->is_facebook_setup()) { ?> 
     783                                                <label><input type="checkbox" id="chat_login_options_facebook" name="chat_login_options" class="chat_login_options" value="facebook" <?php print (!$this->is_facebook_setup())?'disabled="disabled"':''; ?> <?php print (in_array('facebook', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Facebook', $this->translation_domain); ?></label><br/> 
     784                                                <?php } ?> 
     785                                            </td> 
     786                                            <td class="info"><?php _e("Authentication methods users can use", $this->translation_domain); ?></td> 
     787                                        </tr> 
     788                                        <tr> 
     789                                            <td valign="top"><label for="chat_moderator_roles">{#chat_dlg.moderator_roles}</label></td> 
     790                                            <td> 
     791                                                <?php 
     792                                                foreach (get_editable_roles() as $role => $details) { 
     793                                                    $name = translate_user_role($details['name'] ); 
     794                                                ?> 
     795                                                <label><input type="checkbox" id="chat_moderator_roles_<?php print $role; ?>" name="chat_moderator_roles" class="chat_moderator_roles" value="<?php print $role; ?>" <?php print (in_array($role, $this->get_option('moderator_roles', array('administrator','editor','author'))) > 0)?'checked="checked"':''; ?> /> <?php _e($name, $this->translation_domain); ?></label><br/> 
     796                                                <?php  
     797                                                } 
     798                                                ?> 
     799                                            </td> 
     800                                            <td class="info"><?php _e("Select which roles are moderators", $this->translation_domain); ?></td> 
     801                                        </tr> 
     802                                    </table> 
     803                                </fieldset> 
     804                            </div> 
     805                        </div> 
     806                 
     807                        <div class="mceActionPanel"> 
     808                            <div style="float: left"> 
     809                                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" /> 
     810                            </div> 
     811                 
     812                            <div style="float: right"> 
     813                                <input type="submit" id="insert" name="insert" value="{#insert}" /> 
     814                            </div> 
     815                        </div> 
     816                    </form> 
     817                    <script type="text/javascript"> 
     818                        jQuery(window).load(function() { 
     819                            for (attr in current_options) { 
     820                                if (attr == "id") continue; 
     821         
     822                                if (current_options[attr].match(',')) { 
     823                                    jQuery("#chat_"+attr).val(current_options[attr].split(',')); 
     824                                } else { 
     825                                    jQuery("#chat_"+attr).val(current_options[attr]); 
     826                                } 
     827                            } 
     828                        }); 
     829                    </script> 
     830                </body> 
     831            </html> 
     832            <?php 
     833            exit(0); 
     834        } 
     835         
     836        function whitelist_options($options) { 
     837            $added = array( 'chat' => array( 'chat_default', 'chat_site' ) ); 
     838            $options = add_option_whitelist( $added, $options ); 
     839            return $options; 
     840        } 
     841         
     842        /** 
     843         * Plugin options 
     844         */ 
     845        function plugin_options() {  
     846            ?> 
     847            <div class="wrap"> 
     848            <h2><?php _e('Chat Settings', $this->translation_domain); ?></h2> 
     849            <form method="post" action="options.php"> 
     850                <?php settings_fields('chat'); ?> 
     851             
     852                <div id="chat_tab_pane" class="chat_tab_pane"> 
     853                    <ul> 
     854                        <li><a href="#chat_default_panel"><span><?php _e('In post chat options', $this->translation_domain); ?></span></a></li> 
     855                        <li><a href="#chat_site_panel"><span><?php _e('Bottom corner chat', $this->translation_domain); ?></span></a></li> 
     856                        <li class="chat_lite_disabled_tab"><a href="#chat_twitter_api_panel"><span><?php _e('Twitter API', $this->translation_domain); ?></span></a></li> 
     857                        <li class="chat_lite_disabled_tab"><a href="#chat_facebook_api_panel"><span><?php _e('Facebook API', $this->translation_domain); ?></span></a></li> 
     858                        <li class="chat_lite_disabled_tab"><a href="#chat_advanced_panel"><span><?php _e('Advanced', $this->translation_domain); ?></span></a></li> 
     859                    </ul> 
     860                     
     861                    <div id="chat_default_panel" class="chat_panel current"> 
     862                        <p class="info"><b><?php printf(__('Grayed out options available in the full version. <a href="%s" target="_blank">**Upgrade to the full version now &raquo;**</a>', $this->translation_domain), 'http://premium.wpmudev.org/project/wordpress-chat-plugin'); ?></b></p> 
     863                         
     864                        <p class="info"><?php _e('Default options for in post chat boxes', $this->translation_domain); ?></p> 
     865                         
     866                        <fieldset> 
     867                            <legend><?php _e('General', $this->translation_domain); ?></legend> 
     868             
     869                            <table border="0" cellpadding="4" cellspacing="0"> 
     870                                <tr> 
     871                                    <td><label for="chat_sound"><?php _e('Sound', $this->translation_domain); ?></label></td> 
     872                                    <td> 
     873                                        <select id="chat_sound" name="chat_default[sound]" > 
     874                                            <option value="enabled" <?php print ($this->get_option('sound', 'enabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     875                                            <option value="disabled" <?php print ($this->get_option('sound', 'enabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     876                                        </select> 
     877                                    </td> 
     878                                    <td class="info"><?php _e("Play sound when a new message is received?", $this->translation_domain); ?></td> 
     879                                </tr>    
     880                                     
     881                                <tr class="chat_lite_disabled"> 
     882                                    <td><label for="chat_avatar"><?php _e('Avatar', $this->translation_domain); ?></label></td> 
     883                                    <td> 
     884                                        <select id="chat_avatar" name="chat_default[avatar]" disabled="disabled" > 
     885                                            <option value="enabled" <?php print ($this->get_option('avatar', 'enabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     886                                            <option value="disabled" <?php print ($this->get_option('avatar', 'enabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     887                                        </select> 
     888                                    </td> 
     889                                    <td class="info"><?php _e("Display the user's avatar with the message?", $this->translation_domain); ?></td> 
     890                                </tr> 
     891                                     
     892                                <tr class="chat_lite_disabled"> 
     893                                    <td><label for="chat_emoticons"><?php _e('Emoticons', $this->translation_domain); ?></label></td> 
     894                                    <td> 
     895                                        <select id="chat_emoticons" name="chat_default[emoticons]" disabled="disabled" > 
     896                                            <option value="enabled" <?php print ($this->get_option('emoticons', 'disabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     897                                            <option value="disabled" <?php print ($this->get_option('emoticons', 'disabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     898                                        </select> 
     899                                    </td> 
     900                                    <td class="info"><?php _e("Display emoticons bar?", $this->translation_domain); ?></td> 
     901                                </tr> 
     902                                 
     903                                <tr> 
     904                                    <td><label for="chat_date_show"><?php _e('Show date', $this->translation_domain); ?></label></td> 
     905                                    <td> 
     906                                        <select id="chat_date_show" name="chat_default[date_show]" > 
     907                                            <option value="enabled" <?php print ($this->get_option('date_show', 'disabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     908                                            <option value="disabled" <?php print ($this->get_option('date_show', 'disabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     909                                        </select> 
     910                                    </td> 
     911                                    <td class="info"><?php _e("Display date the message was sent?", $this->translation_domain); ?></td> 
     912                                </tr> 
     913                                     
     914                                <tr> 
     915                                    <td><label for="chat_time_show"><?php _e('Show time', $this->translation_domain); ?></label></td> 
     916                                    <td> 
     917                                        <select id="chat_time_show" name="chat_default[time_show]" > 
     918                                            <option value="enabled" <?php print ($this->get_option('time_show', 'disabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     919                                            <option value="disabled" <?php print ($this->get_option('time_show', 'disabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     920                                        </select> 
     921                                    </td> 
     922                                    <td class="info"><?php _e("Display the time  the message was sent?", $this->translation_domain); ?></td> 
     923                                </tr> 
     924             
     925                                <tr> 
     926                                    <td><label for="chat_width"><?php _e('Dimensions', $this->translation_domain); ?></label></td> 
     927                                    <td> 
     928                                        <input type="text" id="chat_width" name="chat_default[width]" value="<?php print $this->get_option('width', '100%'); ?>" class="size" size="5" /> x 
     929                                        <input type="text" id="chat_height" name="chat_default[height]" value="<?php print $this->get_option('height', '425px'); ?>" class="size" size="5" /> 
     930                                    </td> 
     931                                    <td class="info"><?php _e("Dimensions of the chat box", $this->translation_domain); ?></td> 
     932                                </tr> 
     933                            </table> 
     934                        </fieldset> 
     935                         
     936                        <fieldset> 
     937                            <legend><?php _e('Colors', $this->translation_domain); ?></legend> 
     938             
     939                            <table border="0" cellpadding="4" cellspacing="0" class="chat_lite_disabled" > 
     940                                <tr> 
     941                                    <td><label for="chat_background_color"><?php _e('Background', $this->translation_domain); ?></label></td> 
     942                                    <td> 
     943                                        <input type="text" id="chat_background_color" name="chat_default[background_color]" value="<?php print $this->get_option('background_color', '#ffffff'); ?>" class="color" size="7" disabled="disabled" /> 
     944                                        <div class="color" id="chat_background_color_panel"></div> 
     945                                    </td> 
     946                                    <td class="info"><?php _e("Chat box background color", $this->translation_domain); ?></td> 
     947                                </tr> 
     948                                         
     949                                <tr> 
     950                                    <td><label for="chat_date_color"><?php _e('Date', $this->translation_domain); ?></label></td> 
     951                                    <td> 
     952                                        <input type="text" id="chat_date_color" name="chat_default[date_color]" value="<?php print $this->get_option('date_color', '#6699CC'); ?>" class="color" size="7" disabled="disabled" /> 
     953                                        <div class="color" id="chat_date_color_panel"></div> 
     954                                    </td> 
     955                                    <td class="info"><?php _e("Date and time background color", $this->translation_domain); ?></td> 
     956                                </tr> 
     957                                 
     958                                <tr> 
     959                                    <td><label for="chat_name_color"><?php _e('Name', $this->translation_domain); ?></label></td> 
     960                                    <td> 
     961                                        <input type="text" id="chat_name_color" name="chat_default[name_color]" value="<?php print $this->get_option('name_color', '#666666'); ?>" class="color" size="7" disabled="disabled" /> 
     962                                        <div class="color" id="chat_name_color_panel"></div> 
     963                                    </td> 
     964                                    <td class="info"><?php _e("Name background color", $this->translation_domain); ?></td> 
     965                                </tr> 
     966                                 
     967                                <tr> 
     968                                    <td><label for="chat_moderator_name_color"><?php _e('Moderator Name', $this->translation_domain); ?></label></td> 
     969                                    <td> 
     970                                        <input type="text" id="chat_moderator_name_color" name="chat_default[moderator_name_color]" value="<?php print $this->get_option('moderator_name_color', '#6699CC'); ?>" class="color" size="7" disabled="disabled" /> 
     971                                        <div class="color" id="chat_moderator_name_color_panel"></div> 
     972                                    </td> 
     973                                    <td class="info"><?php _e("Moderator Name background color", $this->translation_domain); ?></td> 
     974                                </tr> 
     975                                 
     976                                <tr> 
     977                                    <td><label for="chat_text_color"><?php _e('Text', $this->translation_domain); ?></label></td> 
     978                                    <td> 
     979                                        <input type="text" id="chat_text_color" name="chat_default[text_color]" value="<?php print $this->get_option('text_color', '#000000'); ?>" class="color" size="7" disabled="disabled" /> 
     980                                        <div class="color" id="chat_text_color_panel"></div> 
     981                                    </td> 
     982                                    <td class="info"><?php _e("Text color", $this->translation_domain); ?></td> 
     983                                </tr> 
     984                            </table> 
     985                        </fieldset> 
     986                         
     987                        <fieldset> 
     988                            <legend><?php _e('Fonts', $this->translation_domain); ?></legend> 
     989             
     990                            <table border="0" cellpadding="4" cellspacing="0"> 
     991                                <tr> 
     992                                    <td><label for="chat_font"><?php _e('Font', $this->translation_domain); ?></label></td> 
     993                                    <td> 
     994                                        <select id="chat_font" name="chat_default[font]" class="font" > 
     995                                        <?php foreach ($this->fonts_list as $font_name => $font) { ?> 
     996                                            <option value="<?php print $font; ?>" <?php print ($this->get_option('font', '') == $font)?'selected="selected"':''; ?>" ><?php print $font_name; ?></option> 
     997                                        <?php } ?> 
     998                                        </select> 
     999                                    </td> 
     1000                                    <td class="info"><?php _e("Chat box font", $this->translation_domain); ?></td> 
     1001                                </tr> 
     1002                                     
     1003                                <tr> 
     1004                                    <td><label for="chat_font_size"><?php _e('Font size', $this->translation_domain); ?></label></td> 
     1005                                    <td> 
     1006                                        <select id="chat_font_size" name="chat_default[font_size]" class="font_size" > 
     1007                                        <?php for ($font_size=8; $font_size<21; $font_size++) { ?> 
     1008                                            <option value="<?php print $font_size; ?>" <?php print ($this->get_option('font_size', '12') == $font_size)?'selected="selected"':''; ?>" ><?php print $font_size; ?></option> 
     1009                                        <?php } ?> 
     1010                                        </select> px 
     1011                                    </td> 
     1012                                    <td class="info"><?php _e("Chat box font size", $this->translation_domain); ?></td> 
     1013                                </tr> 
     1014                            </table> 
     1015                        </fieldset> 
     1016                         
     1017                        <fieldset> 
     1018                            <legend><?php _e('Logs', $this->translation_domain); ?></legend> 
     1019                                 
     1020                            <table border="0" cellpadding="4" cellspacing="0" class="chat_lite_disabled"> 
     1021                                <tr> 
     1022                                    <td><label for="chat_log_creation"><?php _e('Creation', $this->translation_domain); ?></label></td> 
     1023                                    <td> 
     1024                                        <select id="chat_log_creation" name="chat_default[log_creation]" disabled="disabled" > 
     1025                                            <option value="enabled" <?php print ($this->get_option('log_creation', 'enabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1026                                            <option value="disabled" <?php print ($this->get_option('log_creation', 'enabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1027                                        </select> 
     1028                                    </td> 
     1029                                    <td class="info"><?php _e("Log chat messages?", $this->translation_domain); ?></td> 
     1030                                </tr> 
     1031                                     
     1032                                <tr> 
     1033                                    <td><label for="chat_log_display"><?php _e('Display', $this->translation_domain); ?></label></td> 
     1034                                    <td> 
     1035                                        <select id="chat_log_display" name="chat_default[log_display]" disabled="disabled" > 
     1036                                            <option value="enabled" <?php print ($this->get_option('log_display', 'enabled') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1037                                            <option value="disabled" <?php print ($this->get_option('log_display', 'enabled') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1038                                        </select> 
     1039                                    </td> 
     1040                                    <td class="info"><?php _e("Display chat logs?", $this->translation_domain); ?></td> 
     1041                                </tr> 
     1042                            </table> 
     1043                        </fieldset> 
     1044                         
     1045                        <fieldset> 
     1046                            <legend><?php _e('Authentication', $this->translation_domain); ?></legend> 
     1047                             
     1048                            <table border="0" cellpadding="4" cellspacing="0"> 
     1049                                <tr> 
     1050                                    <td valign="top"><label for="chat_login_options"><?php _e('Login options', $this->translation_domain); ?></label></td> 
     1051                                    <td> 
     1052                                        <label><input type="checkbox" id="chat_login_options_current_user" name="chat_default[login_options][]" class="chat_login_options" value="current_user" <?php print (in_array('current_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Current user', $this->translation_domain); ?></label><br/> 
     1053                                        <?php if (is_multisite()) { ?> 
     1054                                        <label><input type="checkbox" id="chat_login_options_network_user" name="chat_default[login_options][]" class="chat_login_options" value="network_user" <?php print (in_array('network_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Network user', $this->translation_domain); ?></label><br/> 
     1055                                        <?php } ?> 
     1056                                        <label><input type="checkbox" id="chat_login_options_public_user" name="chat_default[login_options][]" class="chat_login_options" value="public_user" <?php print (in_array('public_user', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Public user', $this->translation_domain); ?></label><br/> 
     1057                                        <span class="chat_lite_disabled" ><label ><input type="checkbox" id="chat_login_options_twitter" name="chat_default[login_options][]" class="chat_login_options" value="twitter" <?php print (!$this->is_twitter_setup())?'disabled="disabled"':''; ?> <?php print (in_array('twitter', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Twitter', $this->translation_domain); ?></label><br/> 
     1058                                        <label ><input type="checkbox" id="chat_login_options_facebook" name="chat_default[login_options][]" class="chat_login_options" value="facebook" <?php print (!$this->is_facebook_setup())?'disabled="disabled"':''; ?> <?php print (in_array('facebook', $this->get_option('login_options', array('current_user'))) > 0)?'checked="checked"':''; ?> /> <?php _e('Facebook', $this->translation_domain); ?></label><br/></span> 
     1059                                    </td> 
     1060                                    <td class="info"><?php _e("Authentication methods users can use", $this->translation_domain); ?></td> 
     1061                                </tr> 
     1062                                 
     1063                                <tr class="chat_lite_disabled" > 
     1064                                    <td valign="top"><label for="chat_moderator_roles"><?php _e('Moderator roles', $this->translation_domain); ?></label></td> 
     1065                                    <td> 
     1066                                        <?php 
     1067                                        foreach (get_editable_roles() as $role => $details) { 
     1068                                            $name = translate_user_role($details['name'] ); 
     1069                                        ?> 
     1070                                        <label><input type="checkbox" id="chat_moderator_roles_<?php print $role; ?>" name="chat_default[moderator_roles][]" class="chat_moderator_roles" value="<?php print $role; ?>" <?php print (in_array($role, $this->get_option('moderator_roles', array('administrator','editor','author'))) > 0)?'checked="checked"':''; ?> disabled="disabled" /> <?php _e($name, $this->translation_domain); ?></label><br/> 
     1071                                        <?php  
     1072                                        } 
     1073                                        ?> 
     1074                                    </td> 
     1075                                    <td class="info"><?php _e("Select which roles are moderators", $this->translation_domain); ?></td> 
     1076                                </tr> 
     1077                            </table> 
     1078                        </fieldset> 
     1079                    </div> 
     1080                     
     1081                    <div id="chat_site_panel" class="chat_panel current"> 
     1082                        <p class="info"><b><?php printf(__('Grayed out options available in the full version. <a href="%s" target="_blank">**Upgrade to the full version now &raquo;**</a>', $this->translation_domain), 'http://premium.wpmudev.org/project/wordpress-chat-plugin'); ?></b></p> 
     1083                         
     1084                        <p class="info"><?php _e('Options for the bottom corner chat', $this->translation_domain); ?></p> 
     1085                         
     1086                        <fieldset> 
     1087                            <legend><?php _e('Main', $this->translation_domain); ?></legend> 
     1088             
     1089                            <table border="0" cellpadding="4" cellspacing="0"> 
     1090                                <tr> 
     1091                                    <td><label for="chat_site_1"><?php _e('Show', $this->translation_domain); ?></label></td> 
     1092                                    <td> 
     1093                                        <select id="chat_site_1" name="chat_site[site]" > 
     1094                                            <option value="enabled" <?php print ($this->get_option('site', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1095                                            <option value="disabled" <?php print ($this->get_option('site', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1096                                        </select> 
     1097                                    </td> 
     1098                                    <td class="info"><?php _e("Display bottom corner chat?", $this->translation_domain); ?></td> 
     1099                                </tr> 
     1100                            </table> 
     1101                        </fieldset> 
     1102                         
     1103                        <fieldset> 
     1104                            <legend><?php _e('General', $this->translation_domain); ?></legend> 
     1105             
     1106                            <table border="0" cellpadding="4" cellspacing="0"> 
     1107                                 
     1108                                <tr> 
     1109                                    <td><label for="chat_sound_1"><?php _e('Sound', $this->translation_domain); ?></label></td> 
     1110                                    <td> 
     1111                                        <select id="chat_sound_1" name="chat_site[sound]" > 
     1112                                            <option value="enabled" <?php print ($this->get_option('sound', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1113                                            <option value="disabled" <?php print ($this->get_option('sound', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1114                                        </select> 
     1115                                    </td> 
     1116                                    <td class="info"><?php _e("Play sound when a new message is received?", $this->translation_domain); ?></td> 
     1117                                </tr>    
     1118                                     
     1119                                <tr class="chat_lite_disabled"> 
     1120                                    <td><label for="chat_avatar_1"><?php _e('Avatar', $this->translation_domain); ?></label></td> 
     1121                                    <td> 
     1122                                        <select id="chat_avatar_1" name="chat_site[avatar]" disabled="disabled"> 
     1123                                            <option value="enabled" <?php print ($this->get_option('avatar', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1124                                            <option value="disabled" <?php print ($this->get_option('avatar', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1125                                        </select> 
     1126                                    </td> 
     1127                                    <td class="info"><?php _e("Display the user's avatar with the message?", $this->translation_domain); ?></td> 
     1128                                </tr> 
     1129                                     
     1130                                <tr class="chat_lite_disabled"> 
     1131                                    <td><label for="chat_emoticons_1"><?php _e('Emoticons', $this->translation_domain); ?></label></td> 
     1132                                    <td> 
     1133                                        <select id="chat_emoticons_1" name="chat_site[emoticons]" disabled="disabled"> 
     1134                                            <option value="enabled" <?php print ($this->get_option('emoticons', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1135                                            <option value="disabled" <?php print ($this->get_option('emoticons', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1136                                        </select> 
     1137                                    </td> 
     1138                                    <td class="info"><?php _e("Display emoticons bar?", $this->translation_domain); ?></td> 
     1139                                </tr> 
     1140                                 
     1141                                <tr> 
     1142                                    <td><label for="chat_date_show_1"><?php _e('Show date', $this->translation_domain); ?></label></td> 
     1143                                    <td> 
     1144                                        <select id="chat_date_show_1" name="chat_site[date_show]" > 
     1145                                            <option value="enabled" <?php print ($this->get_option('date_show', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1146                                            <option value="disabled" <?php print ($this->get_option('date_show', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1147                                        </select> 
     1148                                    </td> 
     1149                                    <td class="info"><?php _e("Display date the message was sent?", $this->translation_domain); ?></td> 
     1150                                </tr> 
     1151                                     
     1152                                <tr> 
     1153                                    <td><label for="chat_time_show_1"><?php _e('Show time', $this->translation_domain); ?></label></td> 
     1154                                    <td> 
     1155                                        <select id="chat_time_show_1" name="chat_site[time_show]" > 
     1156                                            <option value="enabled" <?php print ($this->get_option('time_show', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1157                                            <option value="disabled" <?php print ($this->get_option('time_show', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1158                                        </select> 
     1159                                    </td> 
     1160                                    <td class="info"><?php _e("Display the time  the message was sent?", $this->translation_domain); ?></td> 
     1161                                </tr> 
     1162             
     1163                                <tr> 
     1164                                    <td><label for="chat_width_1"><?php _e('Dimensions', $this->translation_domain); ?></label></td> 
     1165                                    <td> 
     1166                                        <input type="text" id="chat_width_1" name="chat_site[width]" value="<?php print $this->get_option('width', '', 'site'); ?>" class="size" size="5" /> x 
     1167                                        <input type="text" id="chat_height_1" name="chat_site[height]" value="<?php print $this->get_option('height', '', 'site'); ?>" class="size" size="5" /> 
     1168                                    </td> 
     1169                                    <td class="info"><?php _e("Dimensions of the chat box", $this->translation_domain); ?></td> 
     1170                                </tr> 
     1171                            </table> 
     1172                        </fieldset> 
     1173                         
     1174                        <fieldset> 
     1175                            <legend><?php _e('Colors', $this->translation_domain); ?></legend> 
     1176             
     1177                            <table border="0" cellpadding="4" cellspacing="0" class="chat_lite_disabled"> 
     1178                                <tr> 
     1179                                    <td><label for="chat_border_color_1"><?php _e('Border', $this->translation_domain); ?></label></td> 
     1180                                    <td> 
     1181                                        <input type="text" id=chat_border_color_1 name="chat_site[border_color]" value="<?php print $this->get_option('border_color', '#4b96e2', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1182                                        <div class="color" id="chat_border_color_1_panel"></div> 
     1183                                    </td> 
     1184                                    <td class="info"><?php _e("Chat box border color", $this->translation_domain); ?></td> 
     1185                                </tr> 
     1186                                 
     1187                                <tr> 
     1188                                    <td><label for="chat_background_color_1"><?php _e('Background', $this->translation_domain); ?></label></td> 
     1189                                    <td> 
     1190                                        <input type="text" id="chat_background_color_1" name="chat_site[background_color]" value="<?php print $this->get_option('background_color', '#ffffff', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1191                                        <div class="color" id="chat_background_color_1_panel"></div> 
     1192                                    </td> 
     1193                                    <td class="info"><?php _e("Chat box background color", $this->translation_domain); ?></td> 
     1194                                </tr> 
     1195                                         
     1196                                <tr> 
     1197                                    <td><label for="chat_date_color"><?php _e('Date', $this->translation_domain); ?></label></td> 
     1198                                    <td> 
     1199                                        <input type="text" id="chat_date_color_1" name="chat_site[date_color]" value="<?php print $this->get_option('date_color', '#6699CC', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1200                                        <div class="color" id="chat_date_color_1_panel"></div> 
     1201                                    </td> 
     1202                                    <td class="info"><?php _e("Date and time background color", $this->translation_domain); ?></td> 
     1203                                </tr> 
     1204                                 
     1205                                <tr> 
     1206                                    <td><label for="chat_name_color"><?php _e('Name', $this->translation_domain); ?></label></td> 
     1207                                    <td> 
     1208                                        <input type="text" id="chat_name_color_1" name="chat_site[name_color]" value="<?php print $this->get_option('name_color', '#666666', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1209                                        <div class="color" id="chat_name_color_1_panel"></div> 
     1210                                    </td> 
     1211                                    <td class="info"><?php _e("Name background color", $this->translation_domain); ?></td> 
     1212                                </tr> 
     1213                                 
     1214                                <tr> 
     1215                                    <td><label for="chat_moderator_name_color"><?php _e('Moderator Name', $this->translation_domain); ?></label></td> 
     1216                                    <td> 
     1217                                        <input type="text" id="chat_moderator_name_color_1" name="chat_site[moderator_name_color]" value="<?php print $this->get_option('moderator_name_color', '#6699CC', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1218                                        <div class="color" id="chat_moderator_name_color_1_panel"></div> 
     1219                                    </td> 
     1220                                    <td class="info"><?php _e("Moderator Name background color", $this->translation_domain); ?></td> 
     1221                                </tr> 
     1222                                 
     1223                                <tr> 
     1224                                    <td><label for="chat_text_color"><?php _e('Text', $this->translation_domain); ?></label></td> 
     1225                                    <td> 
     1226                                        <input type="text" id="chat_text_color_1" name="chat_site[text_color]" value="<?php print $this->get_option('text_color', '#000000', 'site'); ?>" class="color" size="7" disabled="disabled" /> 
     1227                                        <div class="color" id="chat_text_color_1_panel"></div> 
     1228                                    </td> 
     1229                                    <td class="info"><?php _e("Text color", $this->translation_domain); ?></td> 
     1230                                </tr> 
     1231                            </table> 
     1232                        </fieldset> 
     1233                         
     1234                        <fieldset> 
     1235                            <legend><?php _e('Fonts', $this->translation_domain); ?></legend> 
     1236             
     1237                            <table border="0" cellpadding="4" cellspacing="0"> 
     1238                                <tr> 
     1239                                    <td><label for="chat_font_1"><?php _e('Font', $this->translation_domain); ?></label></td> 
     1240                                    <td> 
     1241                                        <select id="chat_font_1" name="chat_site[font]" class="font" > 
     1242                                        <?php foreach ($this->fonts_list as $font_name => $font) { ?> 
     1243                                            <option value="<?php print $font; ?>" <?php print ($this->get_option('font', '', 'site') == $font)?'selected="selected"':''; ?>" ><?php print $font_name; ?></option> 
     1244                                        <?php } ?> 
     1245                                        </select> 
     1246                                    </td> 
     1247                                    <td class="info"><?php _e("Chat box font", $this->translation_domain); ?></td> 
     1248                                </tr> 
     1249                                     
     1250                                <tr> 
     1251                                    <td><label for="chat_font_size_1"><?php _e('Font size', $this->translation_domain); ?></label></td> 
     1252                                    <td><select id="chat_font_size_1" name="chat_site[font_size]" class="font_size" > 
     1253                                        <?php for ($font_size=8; $font_size<21; $font_size++) { ?> 
     1254                                            <option value="<?php print $font_size; ?>" <?php print ($this->get_option('font_size', '12', 'site') == $font_size)?'selected="selected"':''; ?>" ><?php print $font_size; ?></option> 
     1255                                        <?php } ?> 
     1256                                        </select> px 
     1257                                    </td> 
     1258                                    <td class="info"><?php _e("Chat box font size", $this->translation_domain); ?></td> 
     1259                                </tr> 
     1260                            </table> 
     1261                        </fieldset> 
     1262                         
     1263                        <fieldset> 
     1264                            <legend><?php _e('Logs', $this->translation_domain); ?></legend> 
     1265                                 
     1266                            <table border="0" cellpadding="4" cellspacing="0" class="chat_lite_disabled" > 
     1267                                <tr> 
     1268                                    <td><label for="chat_log_creation_1"><?php _e('Creation', $this->translation_domain); ?></label></td> 
     1269                                    <td> 
     1270                                        <select id="chat_log_creation_1" name="chat_site[log_creation]" disabled="disabled" > 
     1271                                            <option value="enabled" <?php print ($this->get_option('log_creation', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1272                                            <option value="disabled" <?php print ($this->get_option('log_creation', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1273                                        </select> 
     1274                                    </td> 
     1275                                    <td class="info"><?php _e("Log chat messages?", $this->translation_domain); ?></td> 
     1276                                </tr> 
     1277                                     
     1278                                <tr> 
     1279                                    <td><label for="chat_log_display_1"><?php _e('Display', $this->translation_domain); ?></label></td> 
     1280                                    <td> 
     1281                                        <select id="chat_log_display_1" name="chat_site[log_display]" disabled="disabled" > 
     1282                                            <option value="enabled" <?php print ($this->get_option('log_display', 'enabled', 'site') == 'enabled')?'selected="selected"':''; ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1283                                            <option value="disabled" <?php print ($this->get_option('log_display', 'enabled', 'site') == 'disabled')?'selected="selected"':''; ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1284                                        </select> 
     1285                                    </td> 
     1286                                    <td class="info"><?php _e("Display chat logs?", $this->translation_domain); ?></td> 
     1287                                </tr> 
     1288                            </table> 
     1289                        </fieldset> 
     1290                         
     1291                        <fieldset> 
     1292                            <legend><?php _e('Authentication', $this->translation_domain); ?></legend> 
     1293                                 
     1294                            <table border="0" cellpadding="4" cellspacing="0"> 
     1295                                <tr> 
     1296                                    <td valign="top"><label for="chat_login_options_1"><?php _e('Login options', $this->translation_domain); ?></label></td> 
     1297                                    <td> 
     1298                                        <label><input type="checkbox" id="chat_login_options_1_current_user" name="chat_site[login_options][]" class="chat_login_options" value="current_user" <?php print (in_array('current_user', $this->get_option('login_options', array('current_user'), 'site')) > 0)?'checked="checked"':''; ?> /> <?php _e('Current user', $this->translation_domain); ?></label><br/> 
     1299                                        <?php if (is_multisite()) { ?> 
     1300                                        <label><input type="checkbox" id="chat_login_options_1_network_user" name="chat_site[login_options][]" class="chat_login_options" value="network_user" <?php print (in_array('network_user', $this->get_option('login_options', array('current_user'), 'site')) > 0)?'checked="checked"':''; ?> /> <?php _e('Network user', $this->translation_domain); ?></label><br/> 
     1301                                        <?php } ?> 
     1302                                        <label><input type="checkbox" id="chat_login_options_1_public_user" name="chat_site[login_options][]" class="chat_login_options" value="public_user" <?php print (in_array('public_user', $this->get_option('login_options', array('current_user'), 'site')) > 0)?'checked="checked"':''; ?> /> <?php _e('Public user', $this->translation_domain); ?></label><br/> 
     1303                                        <label class="chat_lite_disabled"><input type="checkbox" id="chat_login_options_1_twitter" name="chat_site[login_options][]" class="chat_login_options" value="twitter" <?php print (!$this->is_twitter_setup())?'disabled="disabled"':''; ?> <?php print (in_array('twitter', $this->get_option('login_options', array('current_user'), 'site')) > 0)?'checked="checked"':''; ?> /> <?php _e('Twitter', $this->translation_domain); ?></label><br/> 
     1304                                        <label class="chat_lite_disabled"><input type="checkbox" id="chat_login_options_1_facebook" name="chat_site[login_options][]" class="chat_login_options" value="facebook" <?php print (!$this->is_facebook_setup())?'disabled="disabled"':''; ?> <?php print (in_array('facebook', $this->get_option('login_options', array('current_user'), 'site')) > 0)?'checked="checked"':''; ?> /> <?php _e('Facebook', $this->translation_domain); ?></label><br/> 
     1305                                    </td> 
     1306                                    <td class="info"><?php _e("Authentication methods users can use", $this->translation_domain); ?></td> 
     1307                                </tr> 
     1308                                 
     1309                                <tr class="chat_lite_disabled"> 
     1310                                    <td valign="top"><label for="chat_moderator_roles_1"><?php _e('Moderator roles', $this->translation_domain); ?></label></td> 
     1311                                    <td> 
     1312                                        <?php 
     1313                                        foreach (get_editable_roles() as $role => $details) { 
     1314                                            $name = translate_user_role($details['name'] ); 
     1315                                        ?> 
     1316                                        <label><input type="checkbox" id="chat_moderator_roles_1_<?php print $role; ?>" name="chat_site[moderator_roles][]" class="chat_moderator_roles" value="<?php print $role; ?>" <?php print (in_array($role, $this->get_option('moderator_roles', array('administrator','editor','author'), 'site')) > 0)?'checked="checked"':''; ?> disabled="disabled" /> <?php _e($name, $this->translation_domain); ?></label><br/> 
     1317                                        <?php  
     1318                                        } 
     1319                                        ?> 
     1320                                    </td> 
     1321                                    <td class="info"><?php _e("Select which roles are moderators", $this->translation_domain); ?></td> 
     1322                                </tr> 
     1323                            </table> 
     1324                        </fieldset> 
     1325                    </div> 
     1326                     
     1327                    <div id="chat_twitter_api_panel" class="chat_panel chat_auth_panel"> 
     1328                        <table border="0" cellpadding="4" cellspacing="0"> 
     1329                            <tr> 
     1330                                <td colspan="4" ><p class="info"><b><?php printf(__('Only available in the full version. <a href="%s" target="_blank">**Upgrade to the full version now &raquo;**</a>', $this->translation_domain), 'http://premium.wpmudev.org/project/wordpress-chat-plugin'); ?></b></p></td> 
     1331                            </tr> 
     1332                            <tr class="chat_lite_disabled"> 
     1333                                <td><label for="chat_twitter_api_key"><?php _e('@Anywhere API key', $this->translation_domain); ?></label></td> 
     1334                                <td> 
     1335                                    <input type="text" id="chat_twitter_api_key" name="chat_default[twitter_api_key]" value="<?php print $this->get_option('twitter_api_key', ''); ?>" class="" size="40" disabled="disabled" /> 
     1336                                </td> 
     1337                                <td class="info"> 
     1338                                    <ol> 
     1339                                        <li><?php print sprintf(__('Register this site as an application on Twitter\'s <a target="_blank" href="%s">app registration page</a>', $this->translation_domain), "http://dev.twitter.com/apps/new"); ?></li> 
     1340                                        <li><?php _e('If you\'re not logged in, you can use your Twitter username and password', $this->translation_domain); ?></li> 
     1341                                        <li><?php _e('Your Application\'s Name will be what shows up after "via" in your twitter stream', $this->translation_domain); ?></li> 
     1342                                        <li><?php _e('Application Type should be set on Browser', $this->translation_domain); ?></li> 
     1343                                        <li><?php _e('The callback URL should be', $this->translation_domain); ?> <b><?php print get_bloginfo('url'); ?></b></li> 
     1344                                        <li><?php _e('Once you have registered your site as an application, you will be provided with @Anywhere API key.', $this->translation_domain); ?></li> 
     1345                                        <li><?php _e('Copy and paste them to the fields on the left', $this->translation_domain); ?></li> 
     1346                                    </ol> 
     1347                                </td> 
     1348                            </tr> 
     1349                        </table> 
     1350                    </div> 
     1351                     
     1352                    <div id="chat_facebook_api_panel" class="chat_panel chat_auth_panel"> 
     1353                        <table border="0" cellpadding="4" cellspacing="0"> 
     1354                            <tr> 
     1355                                <td colspan="4" ><p class="info"><b><?php printf(__('Only available in the full version. <a href="%s" target="_blank">**Upgrade to the full version now &raquo;**</a>', $this->translation_domain), 'http://premium.wpmudev.org/project/wordpress-chat-plugin'); ?></b></p></td> 
     1356                            </tr> 
     1357                            <tr class="chat_lite_disabled"> 
     1358                                <td><label for="chat_facebook_application_id"><?php _e('Application id', $this->translation_domain); ?></label></td> 
     1359                                <td> 
     1360                                    <input type="text" id="chat_facebook_application_id" name="chat_default[facebook_application_id]" value="<?php print $this->get_option('facebook_application_id', ''); ?>" class="" size="40" disabled="disabled" /> 
     1361                                </td> 
     1362                                <td rowspan="2" class="info"> 
     1363                                    <ol> 
     1364                                        <li><?php print sprintf(__('Register this site as an application on Facebook\'s <a target="_blank" href="%s">app registration page</a>', $this->translation_domain), 'http://www.facebook.com/developers/createapp.php'); ?></li> 
     1365                                        <li><?php _e('If you\'re not logged in, you can use your Facebook username and password', $this->translation_domain); ?></li> 
     1366                                        <li><?php _e('The site URL should be', $this->translation_domain); ?> <b><?php print get_bloginfo('url'); ?></b></li> 
     1367                                        <li><?php _e('Once you have registered your site as an application, you will be provided with a Application ID and a Application secret.', $this->translation_domain); ?></li> 
     1368                                        <li><?php _e('Copy and paste them to the fields on the left', $this->translation_domain); ?></li> 
     1369                                    </ol> 
     1370                                </td> 
     1371                            </tr> 
     1372                                     
     1373                            <tr class="chat_lite_disabled"> 
     1374                                <td><label for="chat_facebook_application_secret"><?php _e('Application secret', $this->translation_domain); ?></label></td> 
     1375                                <td> 
     1376                                    <input type="text" id="chat_facebook_application_secret" name="chat_default[facebook_application_secret]" value="<?php print $this->get_option('facebook_application_secret', ''); ?>" class="" size="40" disabled="disabled" /> 
     1377                                </td> 
     1378                            </tr> 
     1379                        </table> 
     1380                    </div> 
     1381                     
     1382                    <div id="chat_advanced_panel" class="chat_panel chat_advanced_panel"> 
     1383                        <table border="0" cellpadding="4" cellspacing="0" > 
     1384                            <tr> 
     1385                                <td colspan="4" ><p class="info"><b><?php printf(__('Only available in the full version. <a href="%s" target="_blank">**Upgrade to the full version now &raquo;**</a>', $this->translation_domain), 'http://premium.wpmudev.org/project/wordpress-chat-plugin'); ?></b></p></td> 
     1386                            </tr> 
     1387                            <tr class="chat_lite_disabled"> 
     1388                                <td><label for="chat_interval"><?php _e('Interval', $this->translation_domain); ?></label></td> 
     1389                                <td> 
     1390                                    <input type="text" id="chat_interval" name="chat_default[interval]" value="<?php print $this->get_option('interval', 1); ?>" class="" size="2" disabled="disabled" /> 
     1391                                </td> 
     1392                                <td class="info"> 
     1393                                    Refresh interval in seconds 
     1394                                </td> 
     1395                            </tr> 
     1396                        </table> 
     1397                    </div> 
     1398                </div> 
     1399             
     1400                <input type="hidden" name="page_options" value="chat_default,chat_site" /> 
     1401                 
     1402                <p class="submit"><input type="submit" name="Submit" 
     1403                    value="<?php _e('Save Changes', $this->translation_domain) ?>" /></p> 
     1404            </form> 
     1405            </div> 
     1406            <?php 
     1407        } 
     1408         
     1409        /** 
     1410         * Title filter 
     1411         *  
     1412         * @see     http://codex.wordpress.org/Function_Reference/wp_head 
     1413         *  
     1414         * @global  object  $current_user 
     1415         * @global  object  $post 
     1416         * @global  array   $chat_localized 
     1417         * @param   string  $title 
     1418         */ 
     1419        function wp_head() { 
     1420            global $current_user, $post, $chat_localized; 
     1421         
     1422            get_currentuserinfo(); 
     1423                     
     1424            if ( !in_array('subscriber',$current_user->roles) ) { 
     1425                $vip = 'yes'; 
     1426            } else { 
     1427                $vip = 'no'; 
     1428            } 
     1429                     
     1430            $chat_sounds = get_usermeta($current_user->ID, 'chat_sounds', 'enabled'); 
     1431            if (empty($chat_sounds)) { 
     1432                $chat_sounds = $this->get_option('sounds', "enabled"); 
     1433            } 
     1434                     
     1435            if (!is_array($chat_localized)) { 
     1436                $chat_localized = array(); 
     1437            } 
     1438                     
     1439            $chat_localized["url"] = site_url()."/wp-admin/admin-ajax.php"; 
     1440            $chat_localized["plugin_url"] = plugins_url("chat/"); 
     1441            $chat_localized["facebook_text_sign_out"] = __('Sign out of Facebook', $this->translation_domain); 
     1442            $chat_localized["twitter_text_sign_out"] = __('Sign out of Twitter', $this->translation_domain); 
     1443            $chat_localized["please_wait"] = __('Please wait...', $this->translation_domain); 
     1444                     
     1445            $chat_localized["minimize"] = __('Minimize', $this->translation_domain); 
     1446            $chat_localized["minimize_button"] = plugins_url('chat/images/16-square-blue-remove.png'); 
     1447            $chat_localized["maximize"] = __('Maximize', $this->translation_domain); 
     1448            $chat_localized["maximize_button"] = plugins_url('chat/images/16-square-green-add.png'); 
     1449             
     1450            $chat_localized["interval"] = $this->get_option('interval', 1); 
     1451             
     1452            if ( is_user_logged_in() ) { 
     1453                $chat_localized['name'] = $current_user->display_name; 
     1454                $chat_localized['vip'] = $vip; 
     1455                $chat_localized['sounds'] = $chat_sounds; 
     1456                $chat_localized['post_id'] = $post->ID; 
     1457            } else { 
     1458                $chat_localized['name'] = ""; 
     1459                $chat_localized['vip'] = false; 
     1460                $chat_localized['sounds'] = "enabled"; 
     1461                $chat_localized['post_id'] = $post->ID; 
     1462            } 
     1463             
     1464            if ($this->get_option('twitter_api_key') != '') { 
     1465                $chat_localized["twitter_active"] = true; 
     1466                wp_enqueue_script('twitter', 'http://platform.twitter.com/anywhere.js?id='.$this->get_option('twitter_api_key').'&v=1'); 
     1467            } else { 
     1468                $chat_localized["twitter_active"] = false; 
     1469            } 
     1470            if ($this->get_option('facebook_application_id') != '') { 
     1471                $chat_localized["facebook_active"] = true; 
     1472                $chat_localized["facebook_app_id"] = $this->get_option('facebook_application_id'); 
     1473                wp_enqueue_script('facebook', 'http://connect.facebook.net/en_US/all.js'); 
     1474            } else { 
     1475                $chat_localized["facebook_active"] = false; 
     1476            } 
     1477            wp_enqueue_script('jquery'); 
     1478            wp_enqueue_script('jquery-cookie'); 
     1479            wp_enqueue_script('chat_js'); 
     1480             
     1481            if ($this->get_option('site', 'enabled', 'site') == 'enabled') { 
     1482                $atts = array( 
     1483                    'id' => 1, 
     1484                    'sound' => $this->get_option('sound', 'enabled', 'site'), 
     1485                    'avatar' => $this->get_option('avatar', 'enabled', 'site'), 
     1486                    'emoticons' => $this->get_option('emoticons', 'enabled', 'site'), 
     1487                    'date_show' => $this->get_option('date_show', 'disabled', 'site'), 
     1488                    'time_show' => $this->get_option('time_show', 'disabled', 'site'), 
     1489                    'width' => $this->get_option('width', '', 'site'), 
     1490                    'height' => $this->get_option('height', '', 'site'), 
     1491                    'background_color' => $this->get_option('background_color', '#ffffff', 'site'), 
     1492                    'date_color' => $this->get_option('date_color', '#6699CC', 'site'), 
     1493                    'name_color' => $this->get_option('name_color', '#666666', 'site'), 
     1494                    'moderator_name_color' => $this->get_option('moderator_name_color', '#6699CC', 'site'), 
     1495                    'text_color' => $this->get_option('text_color', '#000000', 'site'), 
     1496                    'font' => $this->get_option('font', '', 'site'), 
     1497                    'font_size' => $this->get_option('font_size', '', 'site'), 
     1498                    'log_creation' => $this->get_option('log_creation', 'disabled', 'site'), 
     1499                    'log_display' => $this->get_option('log_display', 'disabled', 'site'), 
     1500                    'login_options' => join(',', $this->get_option('login_options', array('current_user'), 'site')), 
     1501                    'moderator_roles' => join(',', $this->get_option('moderator_roles', array('administrator','editor','author'))), 
     1502                ); 
     1503                $this->process_shortcode($atts); 
     1504            } 
     1505        } 
     1506         
     1507        /** 
     1508         * Check the post for the short code and mark it 
     1509         *  
     1510         * @deprecated  No longer relevant with site wide chat as well 
     1511         */ 
     1512        function post_check($post_ID) { 
     1513            $post = get_post($post_ID); 
     1514            if ( $post->post_content != str_replace('[chat', '', $post->post_content) ) { 
     1515                update_post_meta($post_ID, '_has_chat', 'yes'); 
     1516            } else { 
     1517                delete_post_meta($post_ID, '_has_chat'); 
     1518            } 
     1519        } 
     1520         
     1521        /** 
     1522         * Handle profile update 
     1523         *  
     1524         * @see     http://codex.wordpress.org/Function_Reference/wp_redirect 
     1525         *  
     1526         * @global  object  $current_user 
     1527         * @param   string  $location 
     1528         * @return  string  $location 
     1529         */ 
     1530        function profile_process($location) { 
     1531            global $current_user; 
     1532            if ( !empty( $_GET['user_id'] ) ) { 
     1533                $uid = $_GET['user_id']; 
     1534            } else { 
     1535                $uid = $current_user->ID; 
     1536            } 
     1537            if ( !empty( $_POST['chat_sounds'] ) ) { 
     1538                update_usermeta( $uid, 'chat_sounds', $_POST['chat_sounds'] ); 
     1539            } 
     1540            return $location; 
     1541        } 
     1542         
     1543        /** 
     1544         * Add sound preferences to user profile 
     1545         *  
     1546         * @global  object  $current_user 
     1547         */ 
     1548        function profile() { 
     1549            global $current_user; 
     1550             
     1551            if (!empty( $_GET['user_id'])) { 
     1552                $uid = $_GET['user_id']; 
     1553            } else { 
     1554                $uid = $current_user->ID; 
     1555            } 
     1556             
     1557            $chat_sounds = get_usermeta( $uid, 'chat_sounds' ); 
     1558            ?> 
     1559            <h3><?php _e('Chat Settings', $this->translation_domain); ?></h3> 
     1560             
     1561            <table class="form-table"> 
     1562                <tr> 
     1563                <th><label for="chat_sounds"><?php _e('Chat sounds', $this->translation_domain); ?></label></th> 
     1564                <td> 
     1565                    <select name="chat_sounds" id="chat_sounds"> 
     1566                    <option value="enabled"<?php if ( $chat_sounds == 'enabled' ) { echo ' selected="selected" '; } ?>><?php _e('Enabled', $this->translation_domain); ?></option> 
     1567                    <option value="disabled"<?php if ( $chat_sounds == 'disabled' ) { echo ' selected="selected" '; } ?>><?php _e('Disabled', $this->translation_domain); ?></option> 
     1568                    </select> 
     1569                </td> 
     1570                </tr> 
     1571            </table> 
     1572            <?php 
     1573        } 
     1574         
     1575        /** 
     1576         * Output CSS 
     1577         */ 
     1578        function output_css() { 
     1579            echo '<link rel="stylesheet" href="' . plugins_url('chat/css/style.css') . '" type="text/css" />'; 
     1580        } 
     1581         
     1582        /** 
     1583         * Validate and return the Facebook cookie payload 
     1584         *  
     1585         * @see     http://developers.facebook.com/docs/guides/web#login 
     1586         */ 
     1587        function get_facebook_cookie() { 
     1588            $app_id = $this->get_option('facebook_application_id', ''); 
     1589            $application_secret = $this->get_option('facebook_application_secret', ''); 
     1590             
     1591            $args = array(); 
     1592            parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
     1593            ksort($args); 
     1594            $payload = ''; 
     1595             
     1596            foreach ($args as $key => $value) { 
     1597                if ($key != 'sig') { 
     1598                    $payload .= $key . '=' . $value; 
     1599                } 
     1600            } 
     1601             
     1602            if (md5($payload . $application_secret) != $args['sig']) { 
     1603                return null; 
     1604            } 
     1605            return $args; 
     1606        } 
     1607         
     1608        /** 
     1609         * Authenticate user 
     1610         *  
     1611         * @global  object  $current_user 
     1612         * @param   array   $options    Login options 
     1613         * @return  int         How the user was authenticated or false (1,2,3,4,5) 
     1614         */ 
     1615        function authenticate($options = array()) { 
     1616            global $current_user; 
     1617             
     1618            // current user 
     1619            if (is_user_logged_in() && current_user_can('read')) { 
     1620                return 1; 
     1621            } 
     1622            // Network user 
     1623            if (in_array('network_user', $options) && is_user_logged_in()) { 
     1624                return 2; 
     1625            } 
     1626            if (in_array('twitter', $options) && preg_match('/twitter/', $_COOKIE['chat_stateless_user_type_104']) > 0) { 
     1627                return 4; 
     1628            } 
     1629            if (in_array('public_user', $options) && preg_match('/public_user/', $_COOKIE['chat_stateless_user_type_104']) > 0) { 
     1630                return 5; 
     1631            } 
     1632            return false; 
     1633        } 
     1634         
     1635         
     1636        /** 
     1637         * Get the user name 
     1638         *  
     1639         * So many loggin options, this will decide the display name of the user 
     1640         *  
     1641         * @global  object  $current_user 
     1642         * @param   array   $options    Login options 
     1643         * @return  string              User name or false 
     1644         */ 
     1645        function get_user_name($options = array()) { 
     1646            global $current_user; 
     1647             
     1648            // current_user or network_user 
     1649            if ((is_user_logged_in() && current_user_can('read')) || (in_array('network_user', $options) && is_user_logged_in())) { 
     1650                return $current_user->display_name; 
     1651            } 
     1652            if (in_array('twitter', $options) && isset($_COOKIE['chat_stateless_user_type_104']) && preg_match('/twitter/', $_COOKIE['chat_stateless_user_type_104']) > 0) { 
     1653                return $_COOKIE['chat_stateless_user_name_twitter']; 
     1654            } 
     1655            if (in_array('public_user', $options) && isset($_COOKIE['chat_stateless_user_type_104']) && preg_match('/public_user/', $_COOKIE['chat_stateless_user_type_104']) > 0) { 
     1656                return $_COOKIE['chat_stateless_user_name_public_user']; 
     1657            } 
     1658            return false; 
     1659        } 
     1660         
     1661        /** 
     1662         * Do our magic in the footer and add the site wide chat 
     1663         */ 
     1664        function wp_footer() { 
     1665            $atts = array( 
     1666                'id' => 1, 
     1667                'sound' => $this->get_option('sound', 'enabled', 'site'), 
     1668                'avatar' => $this->get_option('avatar', 'enabled', 'site'), 
     1669                'emoticons' => $this->get_option('emoticons', 'enabled', 'site'), 
     1670                'date_show' => $this->get_option('date_show', 'disabled', 'site'), 
     1671                'time_show' => $this->get_option('time_show', 'disabled', 'site'), 
     1672                'width' => $this->get_option('width', '', 'site'), 
     1673                'height' => $this->get_option('height', '', 'site'), 
     1674                'background_color' => $this->get_option('background_color', '#ffffff', 'site'), 
     1675                'date_color' => $this->get_option('date_color', '#6699CC', 'site'), 
     1676                'name_color' => $this->get_option('name_color', '#666666', 'site'), 
     1677                'moderator_name_color' => $this->get_option('moderator_name_color', '#6699CC', 'site'), 
     1678                'text_color' => $this->get_option('text_color', '#000000', 'site'), 
     1679                'font' => $this->get_option('font', '', 'site'), 
     1680                'font_size' => $this->get_option('font_size', '', 'site'), 
     1681                'log_creation' => $this->get_option('log_creation', 'disabled', 'site'), 
     1682                'log_display' => $this->get_option('log_display', 'disabled', 'site'), 
     1683                'login_options' => join(',', $this->get_option('login_options', array('current_user'), 'site')), 
     1684                'moderator_roles' => join(',', $this->get_option('moderator_roles', array('administrator','editor','author'))), 
     1685            ); 
     1686             
     1687            if ($this->get_option('site', 'enabled', 'site') == 'enabled') { 
     1688                $width = $this->get_option('width', '', 'site'); 
     1689                if (!empty($width)) { 
     1690                    $width_str = 'width: '.$width; 
     1691                    $width_style = ''; 
     1692                } else { 
     1693                    $width_style = ' free-width'; 
     1694                } 
     1695                echo '<div id="chat-block-site" class="chat-block-site closed'.$width_style.'" style="'.$width_str.'; background-color: '.$this->get_option('border_color', '#4b96e2', 'site').';">'; 
     1696                echo '<div id="chat-block-header" class="chat-block-header"><span class="chat-title-text">'.__('Chat', $this->translation_domain).'</span><span class="chat-prompt-text">'.__('Click here to chat!', $this->translation_domain).'</span>'; 
     1697                echo '<img src="'.plugins_url('chat/images/16-square-green-add.png').'" alt="+" width="16" height="16" title="'.__('Maximize', $this->translation_domain).'" class="chat-toggle-button" id="chat-toggle-button" />'; 
     1698                echo '</div>'; 
     1699                echo '<div id="chat-block-inner" style="background: '.$this->get_option('background_color', '#ffffff', 'site').';">'.$this->process_shortcode($atts).'</div>'; 
     1700                echo '</div>'; 
     1701            } 
     1702        } 
     1703         
     1704        /** 
     1705         * Process short code 
     1706         *  
     1707         * @global  object  $post 
     1708         * @global  array   $chat_localized Localized strings and options 
     1709         * @return  string                  Content 
     1710         */ 
     1711        function process_shortcode($atts) { 
     1712            global $post, $chat_localized; 
     1713             
     1714            $a = shortcode_atts(array( 
     1715                'id' => 1, 
     1716                'sound' => $this->get_option('sound', 'enabled'), 
     1717                'avatar' => $this->get_option('avatar', 'enabled'), 
     1718                'emoticons' => $this->get_option('emoticons', 'enabled'), 
     1719                'date_show' => $this->get_option('date_show', 'disabled'), 
     1720                'time_show' => $this->get_option('time_show', 'disabled'), 
     1721                'width' => $this->get_option('width', '700px'), 
     1722                'height' => $this->get_option('height', '425px'), 
     1723                'background_color' => $this->get_option('background_color', '#ffffff'), 
     1724                'date_color' => $this->get_option('date_color', '#6699CC'), 
     1725                'name_color' => $this->get_option('name_color', '#666666'), 
     1726                'moderator_name_color' => $this->get_option('moderator_name_color', '#6699CC'), 
     1727                'text_color' => $this->get_option('text_color', '#000000'), 
     1728                'font' => $this->get_option('font', ''), 
     1729                'font_size' => $this->get_option('font_size', ''), 
     1730                'log_creation' => $this->get_option('log_creation', 'disabled'), 
     1731                'log_display' => $this->get_option('log_display', 'disabled'), 
     1732                'login_options' => join(',', $this->get_option('login_options', array('current_user'))), 
     1733                'moderator_roles' => join(',', $this->get_option('moderator_roles', array('administrator','editor','author'))), 
     1734            ), $atts); 
     1735             
     1736            foreach ($a as $k=>$v) { 
     1737                $chat_localized[$k.'_'.$a['id']] = $v; 
     1738            } 
     1739             
     1740            $font_style = ""; 
     1741         
     1742            if (!empty($a['font'])) { 
     1743                $font_style .= 'font-family: '.$a['font'].';'; 
     1744            } 
     1745            if (!empty($a['font_size'])) { 
     1746                $font_style .= 'font-size: '.$a['font_size'].'px;'; 
     1747            } 
     1748             
     1749            if ($post && $post->ID) { 
     1750                $permalink = get_permalink($post->ID); 
     1751            } else { 
     1752                $permalink = ""; 
     1753            } 
     1754             
     1755            $chat_url = $_SERVER['REQUEST_URI']; 
     1756            $chat_url = rtrim($chat_url, "/"); 
     1757            $chat_url = substr($chat_url, -8); 
     1758             
     1759            if (empty($permalink) || preg_match('/\?/', $permalink) > 0) { 
     1760                $url_separator = "&"; 
     1761            } else { 
     1762                $url_separator = "?"; 
     1763            } 
     1764             
     1765            $smilies_list = array(':)', ':D', ':(', ':o', '8O', ':?', '8)', ':x', ':P', ':|', ';)', ':lol:', ':oops:', ':cry:', ':evil:', ':twisted:', ':roll:', ':!:', ':?:', ':idea:', ':arrow:', ':mrgreen:'); 
     1766             
     1767            if ($post) { 
     1768                $content = '<div id="chat-box-'.$a['id'].'" class="chat-box" style="width: '.$a['width'].' !important; background-color: '.$a['background_color'].'; '.$font_style.'" >'; 
     1769            } else { 
     1770                $content = '<div id="chat-box-'.$a['id'].'" class="chat-box" style="width: '.$a['width'].' !important; height: '.$a['height'].' !important; background-color: '.$a['background_color'].'; '.$font_style.'" >'; 
     1771            } 
     1772            $content .= '<div id="chat-wrap-'.$a['id'].'" class="chat-wrap avatar-'.$a['avatar'].'" >'; 
     1773            if ($post) { 
     1774                $content .= '<div id="chat-area-'.$a['id'].'" class="chat-area" style="height: '.$a['height'].' !important;" ></div></div>'; 
     1775            } else { 
     1776                $content .= '<div id="chat-area-'.$a['id'].'" class="chat-area" ></div></div>'; 
     1777            } 
     1778            $chat_localized['type_'.$a['id']] = $this->authenticate(preg_split('/,/', $a['login_options'])); 
     1779            if ( $chat_localized['type_'.$a['id']] ) { 
     1780                $chat_localized['name_'.$a['id']] = $this->get_user_name(preg_split('/,/', $a['login_options'])); 
     1781                     
     1782                $content .= '<div class="chat-note"><p><strong>' . __('Message', $this->translation_domain) . '</strong></p></div>'; 
     1783                $content .= '<form id="send-message-area">'; 
     1784                $content .= '<input type="hidden" name="chat-post-id" id="chat-post-id-'.$a['id'].'" value="'.$a['id'].'" class="chat-post-id" />'; 
     1785                     
     1786                $content .= '<div class="chat-tool-bar-wrap"><div class="chat-note">'; 
     1787                 
     1788                if ($a['emoticons'] == 'enabled') { 
     1789                    $content .= '<div id="chat-emoticons-list-'.$a['id'].'" class="chat-emoticons-list chat-tool-bar">'; 
     1790                    foreach ($smilies_list as $smilie) { 
     1791                        $content .= convert_smilies($smilie); 
     1792                    } 
     1793                    $content .= '</div>'; 
     1794                } 
     1795                     
     1796                $content .= '<div class="chat-clear"></div></div></div>'; 
     1797                     
     1798                $content .= '<div id="chat-send-wrap">'; 
     1799                $content .= '<div class="chat-clear"></div>'; 
     1800                $content .= '<div class="chat-send-wrap"><textarea id="chat-send-'.$a['id'].'" class="chat-send"></textarea></div>'; 
     1801                $content .= '<div class="chat-note">' . __('"Enter" to send', $this->translation_domain) . '. ' . __('Place code in between code tags', $this->translation_domain) . '.</div>'; 
     1802                if ( $this->authenticate(preg_split('/,/', $a['login_options'])) > 2 ) { 
     1803                    $content .= '<div class="chat-note"><input type="button" value="'. __('Logout', $this->translation_domain) .'" name="chat-logout-submit" class="chat-logout-submit" id="chat-logout-submit-'.$a['id'].'" /></div>'; 
     1804                } 
     1805                $content .= '</div>'; 
     1806                $content .= '<div class="chat-tool-bar-wrap"><div class="chat-note">'; 
     1807                 
     1808                $content .= '<div class="chat-clear"></div></div></div>'; 
     1809                $content .= '</form>'; 
     1810            } else { 
     1811                if (preg_match('/public_user|twitter|facebook/', $a['login_options']) > 0) { 
     1812                    if (preg_match('/public_user/', $a['login_options']) > 0) { 
     1813                        $content .= '<div class="login-message">'.__('To get started just enter your email address and desired username', $this->translation_domain).': </div>'; 
     1814                        $content .= '<form id="chat-login-'.$a['id'].'" class="chat-login">'; 
     1815                        $content .= '<div id="chat-login-wrap-'.$a['id'].'" class="chat-login-wrap">'; 
     1816                        $content .= '<label for="chat-login-name-'.$a['id'].'">'.__('Name', $this->translation_domain) . '</label> <input id="chat-login-name-'.$a['id'].'" name="chat-login-name" class="chat-login-name" type="text" /> '; 
     1817                        $content .= '<label for="chat-login-email-'.$a['id'].'">' . __('E-mail', $this->translation_domain) . '</label> <input id="chat-login-email-'.$a['id'].'" name="chat-login-email" class="chat-login-email" type="text" /> '; 
     1818                        $content .= '<input type="submit" value="'. __('Login', $this->translation_domain) .'" name="chat-login-submit" id="chat-login-submit-'.$a['id'].'" />'; 
     1819                        $content .= '</div>'; 
     1820                        $content .= '</form>'; 
     1821                    } 
     1822                    if (preg_match('/twitter|facebook/', $a['login_options']) > 0 && ($this->get_option('twitter_api_key') != '' or $this->get_option('facebook_application_id') != '')) {  
     1823                        $content .= '<div class="login-message">Log in using your: </div>'; 
     1824                        $content .= '<div class="chat-login-wrap">'; 
     1825                        if (preg_match('/twitter/', $a['login_options']) > 0 && $this->get_option('twitter_api_key') != '') {  
     1826                            $content .= '<span id="chat-twitter-signin-btn-'.$a['id'].'" class="chat-auth-button chat-twitter-signin-btn"></span>'; 
     1827                        } 
     1828                        if (preg_match('/facebook/', $a['login_options']) > 0 && $this->get_option('facebook_application_id') != '') {  
     1829                            $content .= '<span id="chat-facebook-signin-btn-'.$a['id'].'" class="chat-auth-button chat-facebook-signin-btn"></span>'; 
     1830                        } 
     1831                        $content .= '</div>'; 
     1832                    } 
     1833                } else { 
     1834                    $content .= '<div class="login-message"><strong>' . __('You must be logged in to participate in chats', $this->translation_domain) . '</strong></div>'; 
     1835                } 
     1836                $content .= '<form id="send-message-area">'; 
     1837                $content .= '<input type="hidden" name="chat-post-id" id="chat-post-id-'.$a['id'].'" value="'.$a['id'].'" class="chat-post-id" />'; 
     1838                $content .= '</form>'; 
     1839            } 
     1840                     
     1841            if ( $a['log_display'] == 'enabled' &&  $a['id'] != 1) { 
     1842                $dates = $this->get_archives($a['id']); 
     1843                     
     1844                if ( $dates && is_array($dates) ) { 
     1845                    $content .= '<br />'; 
     1846                    $content .= '<div class="chat-note"><p><strong>' . __('Chat Logs', $this->translation_domain) . '</strong></p></div>'; 
     1847                    foreach ($dates as $date) { 
     1848                        $date_content .= '<li><a class="chat-log-link" style="text-decoration: none;" href="' . $permalink . $url_separator . 'lid=' . $date->id . '">' . date_i18n(get_option('date_format').' '.get_option('time_format'), strtotime($date->start) + get_option('gmt_offset') * 3600, false) . ' - ' . date_i18n(get_option('date_format').' '.get_option('time_format'), strtotime($date->end) + get_option('gmt_offset') * 3600, false) . '</a>'; 
     1849                        if (isset($_GET['lid']) && $_GET['lid'] == $date->id) { 
     1850                            $_POST['cid'] = $a['id']; 
     1851                            $_POST['archived'] = 'yes'; 
     1852                            $_POST['function'] = 'update'; 
     1853                            $_POST['since'] = strtotime($date->start); 
     1854                            $_POST['end'] = strtotime($date->end); 
     1855                            $_POST['date_color'] = $a['date_color']; 
     1856                            $_POST['name_color'] = $a['name_color']; 
     1857                            $_POST['moderator_name_color'] = $a['moderator_name_color']; 
     1858                            $_POST['text_color'] = $a['text_color']; 
     1859                            $_POST['date_show'] = $a['date_show']; 
     1860                            $_POST['time_show'] = $a['time_show']; 
     1861                            $_POST['avatar'] = $a['avatar']; 
     1862                             
     1863                            $date_content .= '<div class="chat-wrap avatar-'.$a['avatar'].'" style="background-color: '.$a['background_color'].'; '.$font_style.'"><div class="chat-area" >'; 
     1864                            $date_content .= $this->process('yes'); 
     1865                            $date_content .= '</div></div>'; 
     1866                        } 
     1867                        $date_content .= '</li>'; 
     1868                    } 
     1869                    $content .= '<div id="chat-log-wrap-'.$a['id'].'" class="chat-log-wrap" style="background-color: '.$a['background_color'].'; '.$font_style.'"><div id="chat-log-area-'.$a['id'].'" class="chat-log-area"><ul>' . $date_content . '</ul></div></div>'; 
     1870                } 
     1871            } 
     1872            $content .= '<div class="chat-clear"></div></div>'; 
     1873             
     1874            wp_localize_script('chat_js', 'chat_localized', $chat_localized); 
     1875             
     1876            return $content; 
     1877        } 
     1878         
     1879        /** 
     1880         * @see     http://codex.wordpress.org/TinyMCE_Custom_Buttons 
     1881         */ 
     1882        function tinymce_register_button($buttons) { 
     1883            array_push($buttons, "separator", "chat"); 
     1884            return $buttons; 
     1885        } 
     1886         
     1887        /** 
     1888         * @see     http://codex.wordpress.org/TinyMCE_Custom_Buttons 
     1889         */ 
     1890        function tinymce_load_langs($langs) { 
     1891            $langs["chat"] =  plugins_url('chat/tinymce/langs/langs.php'); 
     1892            return $langs; 
     1893        } 
     1894      
     1895        /** 
     1896         * @see     http://codex.wordpress.org/TinyMCE_Custom_Buttons 
     1897         */ 
     1898        function tinymce_add_plugin($plugin_array) { 
     1899            $plugin_array['chat'] = plugins_url('chat/tinymce/editor_plugin.js'); 
     1900            return $plugin_array; 
     1901        } 
     1902         
     1903        /** 
     1904         * Process chat requests 
     1905         *  
     1906         * Mostly copied from process.php 
     1907         *  
     1908         * @global  object  $current_user  
     1909         * @param   string  $return     Return? 'yes' or 'no' 
     1910         * @return  string          If $return is yes will return the output else echo 
     1911         */ 
     1912        function process($return = 'no') { 
     1913            global $current_user; 
     1914            get_currentuserinfo(); 
     1915             
     1916            $function = $_POST['function']; 
     1917             
     1918            if ( empty($function) ) { 
     1919                $function = $_GET['function']; 
     1920            } 
     1921             
     1922            $log = array(); 
     1923             
     1924            switch($function) { 
     1925                case 'update': 
     1926                    $chat_id = $_POST['cid']; 
     1927                    $since = $_POST['since']; 
     1928                    $since_id = $_POST['since_id']; 
     1929                    $end = isset($_POST['end'])?$_POST['end']:0; 
     1930                    $archived = isset($_POST['archived'])?$_POST['archived']:'no'; 
     1931                     
     1932                    $rows = $this->get_messages($chat_id, $since, $end, $archived, $since_id); 
     1933     
     1934                    if ($rows) { 
     1935                        $text = array(); 
     1936                         
     1937                        foreach ($rows as $row) { 
     1938                            $message = stripslashes($row->message); 
     1939                            $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; 
     1940                             
     1941                            if(($message) != "\n" && ($message) != "<br />" && ($message) != "") { 
     1942                                    if(preg_match($reg_exUrl, $message, $url)) { 
     1943                                        $message = preg_replace($reg_exUrl, '<a href="'.$url[0].'" target="_blank">'.$url[0].'</a>', $message); 
     1944                                    } 
     1945                            } 
     1946                             
     1947                            $message = preg_replace(array('/\[code\]/','/\[\/code\]/'), array('<code style="background: '.$this->get_option('code_color', '#FFFFCC').'; padding: 4px 8px;">', '</code>'), $message); 
     1948                             
     1949                            $message = str_replace("\n", "<br />", $message); 
     1950                             
     1951                            $prepend = ""; 
     1952                            if ($_POST['avatar'] == 'enabled') { 
     1953                                if (preg_match('/@/', $row->avatar)) { 
     1954                                    $avatar = get_avatar($row->avatar, 50, null, $row->name); 
     1955                                } else { 
     1956                                    $avatar = "<img alt='{$row->name}' src='{$row->avatar}' class='avatar photo' />"; 
     1957                                } 
     1958                                $prepend .= "$avatar "; 
     1959                            } 
     1960                             
     1961                            if ($_POST['date_show'] == 'enabled') { 
     1962                                $prepend .= ' <span class="date" style="background: '.$_POST['date_color'].';">'. date_i18n(get_option('date_format'), strtotime($row->timestamp) + get_option('gmt_offset') * 3600, false) . '</span>'; 
     1963                            } 
     1964                            if ($_POST['time_show'] == 'enabled') { 
     1965                                $prepend .= ' <span class="time" style="background: '.$_POST['date_color'].';">'. date_i18n(get_option('time_format'), strtotime($row->timestamp) + get_option('gmt_offset') * 3600, false) . '</span>'; 
     1966                            } 
     1967                             
     1968                            if ($row->moderator == 'yes') { 
     1969                                $name_color = $_POST['moderator_name_color']; 
     1970                            } else { 
     1971                                $name_color = $_POST['name_color']; 
     1972                            } 
     1973                             
     1974                            $prepend .= ' <span class="name" style="background: '.$name_color.';">'.stripslashes($row->name).'</span>'; 
     1975                             
     1976                            $text[$row->id] = " <div id='row-".strtotime($row->timestamp)."' class='row'>{$prepend}<span class='message' style='color: ".$_POST['text_color']."'>".convert_smilies($message)."</span><div class='chat-clear'></div></div>"; 
     1977                            $last_check = $row->timestamp; 
     1978                        } 
     1979                         
     1980                        $log['text'] = $text; 
     1981                        $log['time'] = strtotime($last_check)+1; 
     1982                    } 
     1983                    break;  
     1984                case 'send': 
     1985                    $chat_id = $_POST['cid']; 
     1986                    $name = htmlentities(strip_tags($_POST['name'])); 
     1987                    $avatar = (isset($_COOKIE['chat_stateless_user_image_'.$this->auth_type_map[$_POST['type']]]) && !empty($_COOKIE['chat_stateless_user_image_'.$this->auth_type_map[$_POST['type']]]))?$_COOKIE['chat_stateless_user_image_'.$this->auth_type_map[$_POST['type']]]:$current_user->user_email; 
     1988                    // $avatar = ($current_user && $current_user->user_email && $current_user->display_name == $_POST['name'])?$current_user->user_email:$avatar; 
     1989                    $message = $_POST['message']; 
     1990                     
     1991                    $moderator_roles = explode(',', $_POST['moderator_roles']); 
     1992                    $moderator = $this->is_moderator($moderator_roles); 
     1993                     
     1994                    $message = preg_replace(array('/<code>/','/<\/code>/'), array('[code]', '[/code]'), $message); 
     1995                     
     1996                    $message = htmlentities(strip_tags($message)); 
     1997                    $smessage = base64_decode($message); 
     1998                     
     1999                     
     2000                    $this->send_message($chat_id, $name, $avatar, base64_encode($smessage), $moderator); 
     2001                    break; 
     2002            } 
     2003             
     2004            if ($return == 'yes') { 
     2005                if (isset($log['text']) && is_array($log['text'])) { 
     2006                    return "<p>".join("</p><p>", $log['text'])."</p>"; 
     2007                } else { 
     2008                    return ""; 
     2009                } 
     2010            } else { 
     2011                echo json_encode($log); 
     2012                exit(0); 
     2013            } 
     2014        } 
     2015         
     2016        /** 
     2017         * Test whether logged in user is a moderator 
     2018         * 
     2019         * @param   Array   $moderator_roles Moderator roles 
     2020         * @return  bool    $moderator   True if moderator False if not 
     2021         */ 
     2022        function is_moderator($moderator_roles) { 
     2023            global $current_user; 
     2024             
     2025            if ($current_user->ID) { 
     2026                foreach ($moderator_roles as $role) { 
     2027                    if (in_array($role, $current_user->roles)) { 
     2028                        return true; 
     2029                    } 
     2030                } 
     2031            } 
     2032            return false; 
     2033        } 
     2034         
     2035        /** 
     2036         * Get message 
     2037         *  
     2038         * @global  object  $wpdb 
     2039         * @global  int     $blog_id 
     2040         * @param   int     $chat_id    Chat ID 
     2041         * @param   int     $since      Start Unix timestamp 
     2042         * @param   int     $end        End Unix timestamp 
     2043         * @param   string  $archived   Archived? 'yes' or 'no' 
     2044         */ 
     2045        function get_messages($chat_id, $since = 0, $end = 0, $archived = 'no', $since_id = false) { 
     2046            global $wpdb, $blog_id; 
     2047             
     2048            $chat_id = $wpdb->escape($chat_id); 
     2049            $archived = $wpdb->escape($archived); 
     2050            $since_id = $wpdb->escape($since_id); 
     2051             
     2052            if (empty($end)) { 
     2053                $end = time(); 
     2054            } 
     2055             
     2056            $start = date('Y-m-d H:i:s', $since); 
     2057            $end = date('Y-m-d H:i:s', $end); 
     2058             
     2059            if ($since_id == false) { 
     2060                $since_id = 0; 
     2061            } else { 
     2062                $start = date('Y-m-d H:i:s', 0); 
     2063            } 
     2064             
     2065            return $wpdb->get_results( 
     2066                "SELECT * FROM `".Chat::tablename('message')."` WHERE blog_id = '$blog_id' AND chat_id = '$chat_id' AND archived = '$archived' AND timestamp BETWEEN '$start' AND '$end' AND id > '$since_id' ORDER BY timestamp ASC;" 
     2067            ); 
     2068        } 
     2069         
     2070        /** 
     2071         * Send the message 
     2072         *  
     2073         * @global  object  $wpdb 
     2074         * @global  int $blog_id 
     2075         * @param   int $chat_id    Chat ID 
     2076         * @param   string  $name       Name 
     2077         * @param   string  $avatar     URL or e-mail 
     2078         * @param   string  $message    Payload message 
     2079         * @param   string  $moderator  Moderator 
     2080         */ 
     2081        function send_message($chat_id, $name, $avatar, $message, $moderator) { 
     2082            global $wpdb, $blog_id; 
     2083             
     2084            $wpdb->real_escape = true; 
     2085             
     2086            $time_stamp = date("Y-m-d H:i:s"); 
     2087             
     2088            $chat_id = $wpdb->_real_escape($chat_id); 
     2089            $name = $wpdb->_real_escape(trim(base64_decode($name))); 
     2090            $avatar = $wpdb->_real_escape(trim($avatar)); 
     2091            $message = $wpdb->_real_escape(trim(base64_decode($message))); 
     2092            $moderator_str = 'no'; 
     2093             
     2094            if (empty($message)) { 
     2095                return false; 
     2096            } 
     2097            if ($moderator) { 
     2098                $moderator_str = 'yes'; 
     2099            } 
     2100             
     2101            return $wpdb->query("INSERT INTO ".Chat::tablename('message')." 
     2102                        (blog_id, chat_id, timestamp, name, avatar, message, archived, moderator) 
     2103                        VALUES ('$blog_id', '$chat_id', '$time_stamp', '$name', '$avatar', '$message', 'no', '$moderator_str');"); 
     2104        } 
     2105         
     2106        /** 
     2107         * Get the last chat id for the given blog 
     2108         *  
     2109         * @global  object  $wpdb 
     2110         * @global  int     $blog_id 
     2111         */ 
     2112        function get_last_chat_id() { 
     2113            global $wpdb, $blog_id; 
     2114             
     2115            $last_id = $wpdb->get_var("SELECT chat_id FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' ORDER BY chat_id DESC LIMIT 1"); 
     2116             
     2117            if ($last_id) { 
     2118                return substr($last_id, 0, -1); 
     2119            } 
     2120            return 1; 
     2121        } 
     2122         
     2123        /** 
     2124         * Clear a chat log 
     2125         *  
     2126         * @global  object  $wpdb 
     2127         * @global  int     $blog_id 
     2128         */ 
     2129        function clear() { 
     2130            global $wpdb, $blog_id; 
     2131             
     2132            $since = date('Y-m-d H:i:s', $_POST['since']); 
     2133            $chat_id = $wpdb->escape($_POST['cid']); 
     2134             
     2135            if (current_user_can('edit_posts') && current_user_can('edit_pages')) { 
     2136                $wpdb->query("DELETE FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp <= '{$since}' AND archived = 'no';"); 
     2137            } 
     2138            exit(0); 
     2139        } 
     2140         
     2141        /** 
     2142         * Archive a chat log 
     2143         *  
     2144         * @global  object  $wpdb 
     2145         * @global  int     $blog_id 
     2146         */ 
     2147        function archive() { 
     2148            global $wpdb, $blog_id; 
     2149             
     2150            $since = date('Y-m-d H:i:s', $_POST['since']); 
     2151            $chat_id = $wpdb->escape($_POST['cid']); 
     2152            $created = date('Y-m-d H:i:s'); 
     2153             
     2154            if (current_user_can('edit_posts') && current_user_can('edit_pages')) { 
     2155                $start = $wpdb->get_var("SELECT timestamp FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp <= '{$since}' AND archived = 'no' ORDER BY timestamp ASC LIMIT 1;"); 
     2156                $end = $wpdb->get_var("SELECT timestamp FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp <= '{$since}' AND archived = 'no' ORDER BY timestamp DESC LIMIT 1;"); 
     2157                 
     2158                $sql = array(); 
     2159                 
     2160                $sql[] = "SELECT timestamp FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp <= '{$since}' AND archived = 'no' ORDER BY timestamp DESC LIMIT 1;"; 
     2161                $sql[] = "SELECT timestamp FROM `".Chat::tablename('message')."` WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp <= '{$since}' AND archived = 'no' ORDER BY timestamp ASC LIMIT 1; "; 
     2162                $sql[] = "UPDATE `".Chat::tablename('message')."` set archived = 'yes' WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp BETWEEN '{$start}' AND '{$end}' AND archived = 'no';"; 
     2163                 
     2164                $wpdb->query("UPDATE `".Chat::tablename('message')."` set archived = 'yes' WHERE blog_id = '{$blog_id}' AND chat_id = '{$chat_id}' AND timestamp BETWEEN '{$start}' AND '{$end}' AND archived = 'no';"); 
     2165                 
     2166                $wpdb->query("INSERT INTO ".Chat::tablename('log')." 
     2167                            (blog_id, chat_id, start, end, created) 
     2168                            VALUES ('$blog_id', '$chat_id', '$start', '$end', '$created');"); 
     2169            } 
     2170                         
     2171            exit(0); 
     2172        } 
     2173         
     2174        /** 
     2175         * Get a list of archives for the given chat 
     2176         *  
     2177         * @global  object  $wpdb 
     2178         * @global  int     $blog_id 
     2179         * @param   int     $chat_id    Chat ID 
     2180         * @return  array               List of archives 
     2181         */ 
     2182        function get_archives($chat_id) { 
     2183            global $wpdb, $blog_id; 
     2184             
     2185            $chat_id = $wpdb->escape($chat_id); 
     2186             
     2187            return $wpdb->get_results( 
     2188                "SELECT * FROM `".Chat::tablename('log')."` WHERE blog_id = '$blog_id' AND chat_id = '$chat_id' ORDER BY created ASC;" 
     2189            ); 
     2190        } 
     2191    } 
     2192} 
     2193 
     2194// Lets get things started 
     2195$chat = new Chat(); 
Note: See TracChangeset for help on using the changeset viewer.