Чат 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_idtexttype) {
                        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(!
    idsalert('Вы не выбрали сообщения.');
                        else 
    ajax.exec({action 'chat'mode'delete'idsids});
                    }
                    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 {
                        
    margin3px;
                        
    padding4px;
                        
    bordersolid 1px #b7c0c5;
                        
    border-radius5px;
                        -
    moz-border-radius5px;
                        -
    webkit-border-radius5px;
                    }
                    
    textarea.chat_message {
                        
    height40px;
                        
    margin4px;
                        
    border-radius0px;
                        -
    moz-border-radius0px;
                        -
    webkit-border-radius0px;
                        
    font-size11px;
                    }
                    
    #submit_chat {
                        
    border1px solid #b7c0c5;
                        
    padding2px;
                        
    background-color#EFEFEF;
                        
    font-size10px;
                        
    font-weightbold;
                    }
                    
    #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` (
      `
    idint(11NOT NULL auto_increment,
      `
    user_idint(11NOT NULL default '0',
      `
    timeint(11NOT NULL default '0',
      `
    texttext NOT NULL,
      `
    text_htmltext NOT NULL,
      `
    ipchar(32NOT 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-му нравится это.