Вход Регистрация
Файл: style/themes/justweb/functions.php
Строк: 436
<?php 

define
('THEME_VERSION''1.0.3'); 
define('LANGUAGE_DOMAIN''justweb'); 

require 
dirname(__FILE__) . '/includes/template-functions.php'

add_event('init_head_theme''justweb_styles_init'); 
function 
justweb_styles_init() 
{
    
ds_theme_style_add('https://fonts.googleapis.com/css?family=Roboto''justweb-fonts''''all'); 
    
ds_theme_style_add(get_theme_uri() . '/css/icons.css''justweb-icons'THEME_VERSION'all'); 
    
ds_theme_style_add(get_theme_uri() . '/icons/flaticon.css''justweb-flaticon'THEME_VERSION'all'); 
    
ds_theme_style_add(get_theme_uri() . '/css/audio-player.css''justweb-audio-player'THEME_VERSION'all'); 
    
ds_theme_style_add(get_theme_uri() . '/css/nprogress.css''justweb-nprogress'THEME_VERSION'all'); 
}

add_event('ds_theme_scripts_init''justweb_add_scripts'); 
function 
justweb_add_scripts() { 
    
ds_theme_script_add(get_theme_uri() . '/js/nprogress.min.js''justweb-nprogress'THEME_VERSION);
    
ds_theme_script_add(get_theme_uri() . '/js/jquery.ajaxpage.js''justweb-ajaxpage'THEME_VERSION);
    
ds_theme_script_add(get_theme_uri() . '/js/main.js''justweb-main'THEME_VERSION);
}

add_event('ds_pre_redirect''ds_ajax_redirect'); 
function 
ds_ajax_redirect($url$status
{
    if (
is_ajax()) {
        die(
'<div id="ajax-meta" style="display: none;" data-redirect="' $url '" data-title="" data-body=""></div>'); 
    }
}

add_filter('ds_files_file_mask_list_item''justweb_files_list_mask_file'102); 
function 
justweb_files_list_mask_file($mask$file
{
    if (
strpos($file['mimetype'], 'audio') !== false) {
        
$mask['%after_item%'] = '<div class="list-item-player">' get_audio_player($file) . '</div>';
    }

    return 
$mask
}

function 
justweb_counters() 
{
    
$counters ds_get('justweb_counters', array()); 

    if (
is_user()) {
        
$counters get_user_counters(); 
    }

    if (!isset(
$counters['users_online'])) {
        
$counters['users_online'] = array(
            
'count' => db::count("SELECT COUNT(id) FROM `user` WHERE `date_last` > " . ( time() - 180 ) . ""),
        ); 
        
ds_set('justweb_counters'$counters); 
    }

    return 
$counters
}

/** Отключаем обновление данных юзера если не активен **/ 
add_filter('update_user_information''jw_disable_update_user'1001);
function 
jw_disable_update_user($data) {
    if (isset(
$_POST['user']['active'])) {
        
$us $_POST['user']; 

        if (
$us['active'] == || $us['update'] >= 20) {
            
$data = array(); 
        }
    }
    return 
$data
}

/** Обновление счетчиков **/ 
add_filter('ds_events_counters_ajax', function($data) {
    return 
justweb_counters(); 
}); 

/** Обновление индикаторов онлайна **/ 
add_filter('ds_events_users_is_online_ajax', function($data$us) {
    
$users = array(); 

    if (
$us['update'] >= 180) {
        return 
$users
    }

    foreach(
array_unique($data) AS $user_id) {
        
$user get_user($user_id); 

        if (
$user['date_last'] + 60 time()) {
            
$active 'on'
        } elseif (
$user['date_last'] + 180 time()) {
            
$active 'out'
        } else {
            
$active 'off'
        }

        
$users[] = array(
            
'user_id' => $user_id
            
'active' => $active
            
'browser' => $user['browser'], 
        ); 
    }

    return 
$users
}, 
102); 

/** Загрузка плейлиста **/ 
add_filter('ds_events_playlist_ajax', function($data) {
    
$query = new DB_Files(array(
        
'p_str' => 30
        
'file_type' => 'music'
        
'user_id' => get_user_id(), 
    )); 

    
$music = array(); 
    if (
$query->total) {
        foreach(
$query->files AS $key => $file) {
            
$download_url get_file_download_url($file); 
            
$music[] = array(
                
'id' => $file['id'], 
                
'title' => text($file['title']), 
                
'url' => get_file_link($file), 
                
'src' => $download_url
                
'hash' => md5($download_url), 
                
'uniquie' => md5($download_url mt_rand(19999999)), 
                
'thumbnail' => get_file_thumbnail_url($file'thumbnail'), 
            ); 
        }
    }

    return array(
        
'title' => 'Моя музыка'
        
'list' => $music
    ); 
}); 

/** Обновление контактов **/
add_filter('ds_events_contacts_ajax', function($data$us) {
    
$user get_user(); 

    
$mls $ids = array(); 
    foreach(
$data AS $contact) {
        
$ids[] = $contact['user_id']; 
        
$mls[] = $contact['last_id']; 
    }

    if (empty(
$ids)) return array(); 

    
$q db::query("SELECT * FROM user WHERE `id` IN(" join(','$ids) . ") AND `date_last` > '" . (time() - 60) . "'"); 

    
$array = array(); 
    while(
$ank $q->fetch_assoc()) {
        
$id $ank['id']; 
        
$array[$id] = array(
            
'is_contact_mail' => 0
            
'is_contact_print' => 0
            
'last_msg_read' => 0
        ); 

        
$contact_uri get_user_meta($id'__location'); 
        
$array[$id]['is_contact_mail'] = (strpos($contact_uri'/mail.php?id=' $user['id']) !== false 0); 

        if (
$array[$id]['is_contact_mail'] == 1) {
            
$time get_user_meta($id'__textarea_prints');

            if ((
time() - $time) < 2) {
                
$array[$id]['is_contact_print'] = 1;
            }

            
$last db::fetch("SELECT * FROM `mail` WHERE (`user_id` = '" $id "' AND `contact_id` = '" $user['id'] . "') OR (`user_id` = '" $user['id'] . "' AND `contact_id` = '" $id "') AND unlink = '0' ORDER BY id DESC LIMIT 1"ARRAY_A); 

            if (isset(
$last['id']) && !in_array($last['id'], $mls)) {
                
$array[$id]['last'] = array(
                    
'id' => $last['id'], 
                    
'msg' => $last['msg'], 
                );     
                
$array[$id]['is_contact_print'] = 0;
            }

            if (isset(
$last['id'])) {
                
$array[$id]['last_msg_read'] = $last['read'];
            }
        }
    }

    return 
$array
}, 
102); 

/** Подгрузка почты **/
add_filter('ds_events_mail_ajax', function($data$us) {
    
$user get_user(); 
    
$ajax = array(); 

    if (
is_user() && $us['prints'] > && $us['prints'] <= 1000) {
        
update_user_meta($user['id'], '__textarea_prints'time()); 
    }

    
$contact_id = (int) $data['contact_id']; 
    
$first_id = (int) $data['first_id']; 
    
$last_id = (int) $data['last_id']; 
    
$toread = (int) $data['toread']; 
    
$previus = (int) $data['previus']; 

    if (
$toread && $us['update'] <= 20 && $us['active'] == 1) {
        
update_mail_read($contact_id$user['id']); 
        
$toread = -1
    }

    
$unread db::count("SELECT COUNT(id) FROM `mail` WHERE `user_id` = '" $user['id'] . "' AND `contact_id` = '" $contact_id "' AND `read` = '0'"); 
    
$lastCount db::count("SELECT COUNT(id) FROM `mail` WHERE `contact_id` = '" $user['id'] . "' AND `user_id` = '" $contact_id "' AND `read` = '0' AND `id` > '" $last_id "'"); 

    
$messages = array(); 
    
    if (
$lastCount) {
        
$q db::query("SELECT * FROM mail WHERE `contact_id` = '" $user['id'] . "' AND `user_id` = '" $contact_id "' AND `read` = '0' AND `id` > '" $last_id "'"); 

        while(
$post $q->fetch_assoc()) {
            
$messages[] = justweb_template_message($post); 

            if (
$post['id'] > $last_id) {
                
$last_id $post['id']; 
            }
        }
    }

    
$ank get_user($contact_id); 

    
$json = array(
        
'toread' => $toread
        
'unread' => $unread
        
'first_id' => $first_id
        
'last_id' => $last_id
        
'messages' => $messages
        
'prev' => array(), 
        
'is_contact_mail' => 0
        
'is_contact_print' => 0
    ); 

    
// Эффект печатания и присутствия
    
if (count($messages) > 0) {
        
update_user_meta($contact_id'__textarea_prints'time() - 600); 
    }
        
    elseif ((
time() - $ank['date_last']) < 30) {
        
$contact_uri get_user_meta($contact_id'__location'); 
        
$json['is_contact_mail'] = (strpos($contact_uri'/mail.php?id=' $user['id']) !== false 0); 

        if (
$json['is_contact_mail'] == 1) {
            
$time get_user_meta($contact_id'__textarea_prints');

            if ((
time() - $time) < 3) {
                
$json['is_contact_print'] = 1;
            }
        }
    }

    if (
$previus == 1) {
        
$q db::query("SELECT * FROM mail WHERE (`contact_id` = '" $user['id'] . "' AND `user_id` = '" $contact_id "' OR `contact_id` = '" $contact_id "' AND `user_id` = '" $user['id'] . "') AND `id` < '" $first_id "' ORDER BY id DESC LIMIT 20"); 

        while(
$post $q->fetch_assoc()) {
            
array_push($json['prev'], justweb_template_message($post));

            if (
$post['id'] < $json['first_id']) {
                
$json['first_id'] = (int) $post['id']; 
            }
        }
    }

    return 
$json
}, 
102); 

/** Подгрузка комментариев **/
add_filter('ds_events_comments_ajax', function($data$us) {
    
$array = array();     

    
$comments_hash = array(); 

    foreach(
$data AS $key => $elem) {
        
$attr explode(':'base64_decode($elem['hash'])); 
        
$comment_table use_filters('ds_comment_table''comments'$attr[0], $attr[1]); 

        
$comments = new DB_Comments(array(
            
'db_table' => $comment_table
            
'object' => $attr[0], 
            
'object_id' => $attr[1],  
            
'last' => $elem['last_id'],   
        )); 
        
        
$array[$key]['hash'] = $elem['hash']; 

        if (
$comments->is_posts()) {
            foreach(
$comments->items() AS $post) {
                
$classes = array(
                    
'ds-messages-item'
                    
'comment comment-' $post['id'], 
                ); 

                
$args = array(
                    
'classes' => join(' '$classes), 
                    
'image' => get_avatar($post['user_id']), 
                    
'title' => '<a href="' get_user_url($post['user_id']) . '">' get_user_nick($post['user_id']) . '</a>'
                    
'time' => vremja($post['time']), 
                    
'content' => output_text($post['msg']), 
                    
'reply' => '?reply_to=' $post['user_id'] . '&comment_id=' $post['id'], 
                    
'actions' => array(), 
                );     

                
$array[$key]['container'] = '[data-comments="' $elem['hash'] . '"]'
                
$array[$key]['count'] = get_comments_count($attr[0], $attr[1]); 

                if (
$post['id'] > $elem['last_id']) {
                    
$array[$key]['last_id'] = $post['id']; 
                }
                
                
$array[$key]['messages'][] = array(
                    
'id' => $post['id'], 
                    
'append' => 'first'
                    
'content' => get_comment_template($args), 
                );
            }
        }

        
$comments_hash[] = "'" $elem['hash'] . "'"
        
$array[$key]['prints'] = array(); 
    }

    if (
is_user()) {
        if (
$us['prints'] > && $us['prints'] <= 1000) {
            
update_user_meta(get_user_id(), '__textarea_prints'time()); 
        }

        
$q db::query("SELECT a1.user_id, a2.meta_value AS print_time, a3.meta_value AS hash, u1.nick AS nick
            FROM user_meta AS a1 
            LEFT JOIN user AS u1 ON a1.user_id = u1.id
            RIGHT JOIN user_meta AS a2 ON a1.user_id = a2.user_id AND a2.meta_key = '__textarea_prints' 
            RIGHT JOIN user_meta AS a3 ON a1.user_id = a3.user_id AND a3.meta_key = '__prints_hash' 
            WHERE a1.meta_key = '__location' AND a1.meta_value = '" 
db::esc($us['request']) . "' AND u1.date_last > '" . (time() - 60) . "' LIMIT 10"); 

        
$prints = array(); 

        while(
$ank $q->fetch_assoc()) {
            
$uid = ($ank['hash'] ? $ank['hash'] : $key); 
            
$diff = (time() - $ank['print_time']); 
            
$result = array(
                
'user_id' => $ank['user_id'], 
                
'nick' => $ank['nick'], 
                
'print' => ($diff <= && get_user_id() != $ank['user_id'] ? 0), 
                
'avatar' => get_avatar($ank['user_id']), 
            ); 

            
$prints[$uid][] = $result
        }
        
        foreach(
$data AS $k => $e) {
            if (!isset(
$prints[$e['hash']])) 
                continue; 
            
            
$array[$k] = array(
                
'prints' => $prints[$e['hash']], 
            ); 
        }    
        
    }

    if (empty(
$array)) {
        return 
false
    }

    return 
$array
}, 
102); 

/**
* Сортируем сообщения в почте
* Т.к. новые сообщения внизу, то в обратном порядке
*/
add_filter('ds_mail_messages''justweb_sort_mail_messages'); 
function 
justweb_sort_mail_messages($array) {
    
krsort($array); 
    return 
$array;  
}

function 
justweb_template_message($post
{
    global 
$user

    
$classes = array(
        
'ds-messages-item'
        
$post['user_id'] == $user['id'] ? 'ds-msg-user' 'ds-msg-ank'
        
$post['read'] == 'no-read' 'read',  
        
'post-' $post['id'], 
    ); 
    
$msg '<div class="' join(' '$classes) . '">'
    
$msg .= '<div class="ds-messages-post">'
    
$msg .= '<div class="ds-message-photo">' get_avatar($post['user_id']) . '</div>'
    
$msg .= '<div class="ds-message-content">'
    
$msg .= '<a class="ds-message-user" href="' get_user_url($post['user_id']) . '">' get_user_nick($post['user_id']) . '</a><span class="ds-message-time">' vremja($post['time']) . '</span>'
    
$msg .= '<div class="ds-message-text">' output_text($post['msg']) . '</div>'
    
$msg .= '</div>'
    
$msg .= '</div>'
    
$msg .= '</div>'

    return 
$msg
}

add_event('ds_comments_box_title''justweb_comments_box_title'104); 
function 
justweb_comments_box_title($html$hash$object$object_id
{
    if (
is_user()) {
        
$html .= '<span class="comments-readers" data-hash="' $hash '">1</span>'
    }
    
    return 
$html
}

add_event('ds_comment_form_after''justweb_comment_form_after'102); 
function 
justweb_comment_form_after($hash$args
{
    if (
is_user()) {
        echo 
'<div class="comments-prints" data-prints="0">'
        echo 
'<span class="mc-print" data-single="' __t('пишет'LANGUAGE_DOMAIN) . '" data-multiple="' __t('пишут'LANGUAGE_DOMAIN) . '"><span class="mc-print-animate"></span></span>';
        echo 
'</div>';         
    }
}

add_event('ds_mail_posted''justweb_mail_posted_json'); 
function 
justweb_mail_posted_json($post_id) {
    global 
$user
    
$post get_mail_message($post_id); 
    
$json = array(
        
'id' => $post_id
        
'append' => 'last'
        
'container' => '.ds-messages'
        
'msg' => justweb_template_message($post), 
    ); 

    
update_user_meta($user['id'], '__textarea_prints'time() - 600); 

    
justweb_output_json($json); 
}

add_event('ds_comment_send''justweb_comment_posted_json'103); 
function 
justweb_comment_posted_json($post_id$object_type$object_id
{
    
update_user_meta(get_user_id(), '__textarea_prints'time() - 600); 

    
$comment_table use_filters('ds_comment_table''comments'$object_type$object_id); 
    
$post db::fetch("SELECT * FROM `" $comment_table "` WHERE id = '" $post_id "' LIMIT 1"); 

    
$args = array(
        
'classes' => 'comment-' $post['id'], 
        
'image' => get_avatar($post['user_id']), 
        
'title' => '<a href="' get_user_url($post['user_id']) . '">' get_user_nick($post['user_id']) . '</a>'
        
'time' => vremja($post['time']), 
        
'content' => output_text($post['msg']), 
    ); 
    
    
$json = array(
        
'id' => $post_id
        
'append' => 'first'
        
'hash' => get_comments_hash($object_type$object_id), 
        
'container' => '[data-comments="' get_comments_hash($object_type$object_id) . '"]'
        
'msg' => get_comment_template($args), 
        
'count' => get_comments_count($object_type$object_id), 
    ); 

    
justweb_output_json($json); 
}

add_event('ds_comment_error''justweb_error_json'); 
add_event('ds_mail_error''justweb_error_json'); 
function 
justweb_error_json() {
    
$json = array(
        
'errors' => get_errors(), 
    ); 

    
justweb_output_json($json); 
}

function 
justweb_output_json($json) {
    die(
json_encode($json)); 
}

add_filter('ds_contact_msg''justweb_contact_msg'103); 
function 
justweb_contact_msg($html$post$ank) {
    return 
'<div><span class="mc-print" data-typing="0">' __t('Печатает'LANGUAGE_DOMAINget_user_nick($ank['id'])) . '<span class="mc-print-animate"></span></span>' $html '</div>'
}

add_event('ds_messages_pre_output''justweb_messages_contact'); 
function 
justweb_messages_contact($ank) {
    
?>
    <div class="wrap-mail-contact">
        <a class="mc" href="<?php echo get_user_url($ank['id']); ?>">
            <?php echo get_avatar($ank['id']); ?>
            <span class="mc-text">
                <span class="mc-nick"><?php echo get_user_nick($ank['id']); ?></span>
                <span class="mc-print" data-typing="0">
                    <?php echo __t('печатает'LANGUAGE_DOMAIN); ?><span class="mc-print-animate"></span>
                </span>
            </span>
        </a>
    </div>
    <?
}

add_event('ds_messages_helper_before''justweb_messages_helper_before'); 
function 
justweb_messages_helper_before($ank) {
    echo 
'<div class="mail_Pagination-helper"></div>'
    echo 
''
}

add_event('ds_messages_helper_after''justweb_messages_helper_after'); 
function 
justweb_messages_helper_after($ank) {
    echo 
'<div class="mail_Scroll-helper"><span class="mc-print" data-typing="0">' __t('%s печатает'LANGUAGE_DOMAINget_user_nick($ank['id'])) . '<span class="mc-print-animate"></span></span></div>'
}

add_filter('filter_message_form_args', function($args) {
    
$args['strings']['send_title'] = '<span class="icon-comment-send"></span>'
    return 
$args
}); 

add_event('ds_comment_textarea_after''justweb_bbpanel_toggle'102); 
function 
justweb_bbpanel_toggle($hash$args) {
    echo 
'<div class="textarea-panel"><span class="bb-panel-toggle" data-toggle="bbpanel"><i class="fa fa-font"></i></span> <span data-toggle="smiles" class="smile-panel-toggle"><i class="fa fa-smile-o"></i></span></div>'
}
Онлайн: 1
Реклама