Чат 1.2.0

Добавляет чат с большим числом возможностей.

  1. Exile
    Совместимость:
    проверялся на совместимость
    Изменения в БД:
    требуются
    Автор:
    _Xz_
    Общественное достояние:
    да
    Описание: добавляет чат с большим числом возможностей.
    Инструкция по установке:
    PHP:
    -- index.php
    -найти
    $user
    ->session_start();
    после вставить
    $page_cfg
    ['include_bbcode_js'] = true;

    if(
    $bb_cfg['chat'])
    {
        if (!
    $sql CACHE('bb_cache')->get('chat'))
        {
            
    $sql DB()->fetch_rowset("SELECT c.*, u.username, u.user_rank, u.avatar_ext_id, u.user_opt
                FROM bb_chat c
                LEFT JOIN "
    BB_USERS ." u ON(u.user_id = c.user_id)
                ORDER BY c.id DESC
                LIMIT 
    {$bb_cfg['chat_message']}");
            
    CACHE('bb_cache')->set('chat'$sql);
        }

        foreach(
    $sql as $row)
        {
            
    $message '<div class="row1 chat-comment" id="pp_'$row['id'] .'"><div style="min-height: 32px;">';
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '<a href="'PROFILE_URL $row['user_id'] .'">';
            
    $message .= str_replace('<img''<img align="left" height="32" width="32" style="padding-right: 3px;"'get_avatar($row['user_id'], $row['avatar_ext_id'], !bf($row['user_opt'], 'user_opt''dis_avatar')));
            
    $message .= ($row['user_id'] == GUEST_UID) ? '' '</a>';
            if(
    IS_AM)
            {
                
    $message .= '<input onclick="set_hid_chbox('$row['id'] .');" class="floatR chat-post" type="checkbox" value="'$row['id'] .'" />';
                
    $message .= '<span onclick="edit_comment('$row['id'] .'); return false;" class="txtb floatR">[p]</span>';
            }
            
    $title_ip = (IS_ADMIN) ? decode_ip($row['ip']) : 'Ник в чат';
            
    $message .= '<a href="#" class="bold" title="'$title_ip .'" onclick="add_nick(\'[n]'$row['username'] .'[/n]\'); return false;">'str_replace('title="''data="'profile_url(array('username' => $row['username'], 'user_rank' => $row['user_rank']))) .'</a><div class="small">'bb_date($row['time']) .'</div></div>';
            
    $message .= '<div class="spacer_2"></div><span style="font-size: 11px;">'$row['text_html'] .'</span></div>';
            
    $message .= (IS_AM) ? '<span id="pe_'$row['id'] .'"></span>' '';

            
    $template->assign_block_vars('chat', array(
                
    'TEXT'        => $message,
            ));
        }
        
    $template->assign_vars(array(
            
    'CHAT_ID' => (int) @$sql[0]['id'],
        ));
    }

    -- 
    page_header.tpl
    вставить в удобное место
    <!-- IF $bb_cfg['chat'] -->
                <
    script type="text/javascript">
                    var 
    id = {CHAT_ID};
                    
    ajax.callback.chat = function(data) {
                        if(
    data.up) $('#chat').scrollTop(0);
                        if(
    data.clear) {
                            $(
    '.chat_message').attr('value''');
                            
    get_message_chat(1);
                        }
                        <!-- IF 
    IS_AM -->
                        else if(
    data.del) {
                            for(
    i=0data.del.lengthi++) {
                                $(
    '#pp_'data.del[i]).hide();
                            }
                        }else if(
    data.html){
                            $(
    '#pp_'data.post_id).show().html(data.html);
                            
    initPostBBCode('#pp_'data.post_id);
                            $(
    '#pe_'data.post_id).hide();
                            
    ajax.open false;
                        } else if(
    data.text){
                            
    ajax.open data.post_id;
                            $(
    '#pe_'data.post_id).html(data.text);
                        }
                        <!-- ENDIF -->
                        else {
                            if(
    data.message) $('#chat').prepend(data.message);
                            
    initPostBBCode('#chat');
                        }

                        if(
    data.idid data.id;
                    };
                    
    setInterval(function(){ get_message_chat(0); }, 25000);

                    function 
    get_message_chat(up){
                        
    ajax.exec({action 'chat'mode'select'ididupup});
                    }
                    function 
    submit_click(e) {
                        
    || window.event;
                        if (
    e.keyCode == 13 && e.ctrlKey) {
                            
    submit_chat();
                        };
                    }
                    function 
    submit_chat(){
                        var 
    message = $('.chat_message').val();
                        if (
    message.length 3) {
                            
    alert('Вы должны ввести текст сообщения');
                            $(
    '.chat_message').focus();
                            return 
    false;
                        }
                        
    ajax.exec({action 'chat'mode'insert'messagemessage});
                    }
                    function 
    add_nick(text){
                        var 
    message = $('.chat_message').val();
                        $(
    '.chat_message').attr('value'message text +' ');
                        $(
    '.chat_message').focus();
                    }
                
    </script>
                <!-- IF IS_AM -->
                <script type="text/javascript">
                    ajax.open = false;
                    function edit_comment (post_id, text, type) {
                        if(ajax.open && ajax.open != post_id) {
                            alert('У вас уже открыто одно быстрое редактирование!');
                        } else{
                            if(ajax.open && !text){
                                $('#pp_'+ post_id).show();
                                $('#pe_'+ post_id).hide();
                            } else{
                                $('#pp_'+ post_id).hide();
                                $('#pe_'+ post_id).show();

                                ajax.exec({
                                    action  : 'chat',
                                    mode    : 'edit',
                                    post_id : post_id,
                                    text    : text,
                                    type    : type
                                });
                            }
                            ajax.open = false;
                        }
                    }
                    function del_message_chat(){
                        if(!confirm('Вы уверены, что хотите удалить эти сообщения?')) return false;
                        var ids = 0;
                        $('input.chat-post:checked').each(function(){
                            ids += ','+ this.value;
                        });
                        if(!ids) alert('Вы не выбрали сообщения.');
                        else ajax.exec({action : 'chat', mode: 'delete', ids: ids});
                    }
                    function set_hid_chbox(id)
                    {
                        $('#pp_'+ id).toggleClass('hl-selected-post');
                        return false;
                    }
                </script>
                <!-- ENDIF -->
                <style type="text/css">
                    #chat { overflow: auto; height: 300px; }
                    .chat-comment {
                        margin: 3px;
                        padding: 4px;
                        border: solid 1px #b7c0c5;
                        border-radius: 5px;
                        -moz-border-radius: 5px;
                        -webkit-border-radius: 5px;
                    }
                    textarea.chat_message {
                        height: 40px;
                        margin: 4px;
                        border-radius: 0px;
                        -moz-border-radius: 0px;
                        -webkit-border-radius: 0px;
                        font-size: 11px;
                    }
                    #submit_chat {
                        border: 1px solid #b7c0c5;
                        padding: 2px;
                        background-color: #EFEFEF;
                        font-size: 10px;
                        font-weight: bold;
                    }
                    #submit_chat:hover { color: #0080FF; }
                </style>
                <h3>Мини чат</h3>
                <div class="tCenter">
                    <form name="post">
                        <textarea class="chat_message w90" id="message" onkeydown="submit_click(event)"></textarea>
                        <div class="buttons mrg_4">
                            <input type="button" value="B" name="codeB" title="{L_BOLD}" style="font-weight: bold; width: 30px;" />
                            <input type="button" value="i" name="codeI" title="{L_ITALIC}" style="width: 30px; font-style: italic;" />
                            <input type="button" value="u" name="codeU" title="{L_UNDERLINE}" style="width: 30px; text-decoration: underline;" />
                            <input type="button" value="s" name="codeS" title="{L_STRIKEOUT}" style="width: 30px; text-decoration: line-through;" />&nbsp;&nbsp;
                            <input type="button" value="{L_QUOTE}" name="codeQuote" title="{L_QUOTE_TITLE}" style="width: 57px;" />
                            <input type="button" value="Img" name="codeImg" title="{L_IMG_TITLE}" style="width: 40px;" />
                            <input type="button" value="{L_URL}" name="codeUrl" title="{L_URL_TITLE}" style="width: 63px; text-decoration: underline;" />
                            <input type="hidden" name="codeUrl2" />&nbsp;
                            <input type="button" value="{L_CODE}" name="codeCode" title="{L_CODE_TITLE}" style="width: 43px;" />
                            <input type="button" value="{L_LIST}" name="codeList" title="{L_LIST_TITLE}" style="width: 60px;" />
                            <input type="button" value="1." name="codeOpt" title="{L_LIST_ITEM}" style="width: 30px;" />&nbsp;
                            <input type="button" value="{L_QUOTE_SEL}" name="quoteselected" title="{L_QUOTE_SELECTED}" onmouseout="bbcode.refreshSelection(false);" onmouseover="bbcode.refreshSelection(true);" onclick="bbcode.onclickQuoteSel();" />&nbsp;
                        </div>
                        <script type="text/javascript">
                            var bbcode = new BBCode("message");
                            var ctrl = "ctrl";

                            bbcode.addTag("codeB", "b", null, "B", ctrl);
                            bbcode.addTag("codeI", "i", null, "I", ctrl);
                            bbcode.addTag("codeU", "u", null, "U", ctrl);
                            bbcode.addTag("codeS", "s", null, "S", ctrl);

                            bbcode.addTag("codeQuote", "quote", null, "Q", ctrl);
                            bbcode.addTag("codeImg", "img", null, "R", ctrl);
                            bbcode.addTag("codeUrl", "url", "/url", "", ctrl);
                            bbcode.addTag("codeUrl2", "url=", "/url", "W", ctrl);

                            bbcode.addTag("codeCode", "code", null, "K", ctrl);
                            bbcode.addTag("codeList",  "list", null, "L", ctrl);
                            bbcode.addTag("codeOpt", "*", "", "0", ctrl);
                        </script>

                        <div class="floatR pad_4">
                            <span title="Оправить (Ctrl+Enter)" id="submit_chat" onclick="submit_chat(); return false;">Отправить</span>
                            <span title="Очистить" id="submit_chat" onclick="$('.chat_message').attr('value', ''); $('.chat_message').focus();">&nbsp;X&nbsp;</span>
                            <span title="Смайлы" id="submit_chat" onclick="window.open('posting.php?mode=smilies', '_phpbbsmilies', 'height=540, resizable=yes, scrollbars=yes ,width=620, left=360, top=60'); return false;">&nbsp;:)&nbsp;</span>
                            <!-- IF IS_AM --><span title="Удалялка" id="submit_chat" onclick="del_message_chat();">&#8224;</span><!-- ENDIF -->
                            <img title="Обновить чат" onclick="get_message_chat(1);" src="/styles/images/pic_loading.gif">
                        </div>
                        <div class="clear"></div>
                        <div class="spacer_2"></div>
                        <div class="tLeft w100" id="chat">
                            <!-- BEGIN chat -->{chat.TEXT}<!-- END chat -->
                        </div>
                    </form>
                </div>
            </div>
            <div class="cat_separator"></div>
            <!-- ENDIF -->

    -- bbcode.php
    + в самый конец
    function bbcode_chat ($text)
    {
        global $bbcode;

        if (!isset($bbcode))
        {
            $bbcode = new bbcode();
        }
        $text = $bbcode->new_line2html($text);
        $text = $bbcode->make_clickable($text);
        $text = $bbcode->smilies_pass($text);

        return ($text);
    }

    -- config.php
    + в самый конец
    $bb_cfg['chat']         = true;
    $bb_cfg['chat_message'] = 50;

    -- sql

    CREATE TABLE `bb_chat` (
      `id` int(11) NOT NULL auto_increment,
      `user_id` int(11) NOT NULL default '0',
      `time` int(11) NOT NULL default '0',
      `text` text NOT NULL,
      `text_html` text NOT NULL,
      `ip` char(32) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

    -- ajax.php
    - найти
    switch ($ajax->action)
    {
        case 'view_post':
            require(INC_DIR .'bbcode.php');
        break;
    + заменить на
    switch ($ajax->action)
    {
        case 'chat':
        case 'view_post':
            require(INC_DIR .'bbcode.php');
        break;
    - найти
            'view_post'         => array('guest'),
    + после вставить
            'chat'              => array('guest'),
    - найти
        function manage_user()
        {
            require(AJAX_DIR .'manage_user.php');
        }
    + после вставить
        function chat()
        {
            require(AJAX_DIR .'chat.php');
        }

    Изображения

    1. 1.png
    Morn, assasinfil, Adrenalin4ik и ещё 1-му нравится это.