Вход Регистрация
Файл: sys/inc/functions/ds-user.php
Строк: 611
<?php 

/** 
* Склонение строк по полу
* $m       - Строка Муж. 
* $w       - Строка Жен. 
* $user_id - ID пользователя
* @return string
*/ 

function strsex($m$w$user null
{
    if (
$user === null
        
$user get_user_id(); 

    if (
is_numeric($user)) {
        
$user get_user($user); 
    }
    
    return (
$user['pol'] == $m $w); 
}

function 
opsos$ips NULL )
{
    global 
$ip;
    if (
$ips == NULL)
        
$ips $ip;
    
$ipl ip2long$ips );
    if ( 
db::count("SELECT COUNT(*) FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl'") != ) {
        
$opsos db::fetch("SELECT opsos FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl' LIMIT 1"ARRAY_A);
        return 
stripcslasheshtmlspecialchars$opsos['opsos'] ) );
    } else
        return 
false;
}

/**
* Проверяет на существование пользователя в системе
* @return int | false
*/ 
function user_exists($value$field 'nick'
{
    
$ank db::fetch("SELECT id FROM user WHERE `" $field "` = '" db::esc($value) . "' LIMIT 1"); 

    if (isset(
$ank['id'])) {
        return 
$ank['id']; 
    }
    
    return 
false
}

/**
* Получает URL адрес изображения аватара 
* Для замены функции следует использовать хук ds_pre_get_avatar_url
* @return string 
*/ 
function get_avatar_url($user_id$size 'thumbnail')
{
    
$avatar_url use_filters('ds_pre_get_avatar_url'null$user_id$size); 

    if (
$avatar_url !== null) {
        return 
use_filters('ds_get_avatar_url'$avatar_url$user_id$size); 
    }

    
$file_id get_user_meta($user_id'__avatar'); 

    if (!
$file_id) {
        return 
null
    }

    
$file get_file($file_id); 

    if (
$file) {
        
$avatar_url get_file_thumbnail_url($file$size); 
    }

    return 
use_filters('ds_get_avatar_url'$avatar_url); 
}

/**
* Получает HTML код аватара 
* Для замены функции следует использовать хук ds_pre_get_avatar
* @return string 
*/ 
function get_avatar($user_id$size 'thumbnail'$link false
{
    
$avatar use_filters('ds_pre_get_avatar'null$user_id$size); 

    if (
$avatar !== null) {
        return 
use_filters('ds_get_avatar'$avatar$user_id$size); 
    }

    
$classes = array('avatar''avatar-' $size); 
    
$avatar_url get_avatar_url($user_id$size); 

    
$file_id get_user_meta($user_id'__avatar'); 
    
$file get_file($file_id); 

    
/**
    * Используйте фильтр ds_template_avatar чтобы изменить 
    * HTML тег вашего аватара
    * %class% - Классы тега изображения 
    * %src% - Путь к картинке аватара
    */ 

    
$mask = array(
        
'%class%' => join(' '$classes), 
        
'%src%' => $avatar_url,  
    ); 

    if (
$file) {
        
$mask['%href%'] = get_file_link($file);
    }

    if (
$avatar_url) {
        if (
$link === false || empty($mask['%href%'])) {
            
$template use_filters('ds_template_avatar''<img class="%class%" src="%src%" />'); 
        } else {
            
$template use_filters('ds_template_avatar''<a class="avatar-link" href="%href%"><img class="%class%" src="%src%" /></a>'); 
        }
    } else {
        
$classes[] = 'avatar-default';
        
$template use_filters('ds_template_no_avatar''<img class="%class%" src="%src%" />'$user_id$size); 
        
$mask['%src%'] = get_site_url('/style/user/avatar.gif'); 
    }
    
    
$avatar str_replace(array_keys($mask), array_values($mask), $template); 

    if (
$avatar) {
        return 
use_filters('ds_get_avatar'$avatar$user_id$size); 
    }

    return 
''
}

function 
user_collision($massive$im 0)
{
    global 
$user;
    
$new false;

    for (
$i 0$i count($massive); $i++) {
        
$collision_q db::query("SELECT * FROM `user_collision` WHERE `id_user` = '" $massive[$i] . "' OR `id_user2` = '" $massive[$i] . "'");

        while (
$collision $collision_q->fetch_assoc()) {
            if (
$collision['id_user'] == $massive[$i])
                
$coll $collision['id_user2'];
            else 
                
$coll $collision['id_user'];

            
$ank_coll2 get_user($coll);

            if (!
in_array ($coll$massive) && ($user['level'] > $ank_coll2['level']) && ($im == || $user['id'] != $ank_coll2['id'])) {
                
$massive[] = $coll;
                
$new true;
            }
        }
    }

    if (
$new)
        
$massive user_collision($massive);

    return 
$massive;
}

function 
user_access$access$u_id null$exit false )
{
    if ( 
$u_id == null )
        global 
$user;
    else
        
$user get_user$u_id );
    if ( !isset( 
$user['group_access'] ) || $user['group_access'] == null ) {
        if ( 
$exit !== false ) {
            
header'Location: ' $exit );
            exit;
        } else
            return 
false;
    }
    if ( 
$exit !== false ) {
        if ( 
db::count("SELECT COUNT(*) FROM `user_group_access` WHERE `id_group` = '$user[group_access]' AND `id_access` = '" my_esc$access ) . "'") == ) {
            
header"Location: $exit);
            exit;
        }
    } else
        return ( 
db::count("SELECT COUNT(*) FROM `user_group_access` WHERE `id_group` = '$user[group_access]' AND `id_access` = '" my_esc$access ) . "'") == true false );
}

function 
shif$str )
{
    return 
md5(trim($str));
}

function 
cookie_encrypt($data$id 0)
{
    
$key defined('SALT_COOKIE_USER') ? SALT_COOKIE_USER md5(get_user_ip()); 

    
$l strlen($key);
    if (
$l 16)
        
$key str_repeat($keyceil(16/$l));

    if (
$m strlen($data) % 8)
        
$data .= str_repeat("x00",  $m);
    if (
function_exists('openssl_encrypt'))
        
$val openssl_encrypt($data'BF-ECB'$keyOPENSSL_RAW_DATA OPENSSL_NO_PADDING);
    elseif (
function_exists('mcrypt_encrypt'))
        
$val mcrypt_encrypt(MCRYPT_BLOWFISH$key$dataMCRYPT_MODE_ECB);
    else 
        
$val $data

    return 
base64_encode($val);
}

function 
cookie_decrypt($data$id 0)
{
    
$key defined('SALT_COOKIE_USER') ? SALT_COOKIE_USER md5(get_user_ip()); 
    
$data base64_decode($data); 

    
$l strlen($key);
    if (
$l 16)
        
$key str_repeat($keyceil(16/$l));

    if (
function_exists('openssl_encrypt'))
        
$val openssl_decrypt($data'BF-ECB'$keyOPENSSL_RAW_DATA OPENSSL_NO_PADDING);
    elseif (
function_exists('mcrypt_encrypt'))
        
$val mcrypt_decrypt(MCRYPT_BLOWFISH$key$dataMCRYPT_MODE_ECB);
    else 
        
$val $data

    return 
$val;
}

function 
get_salt() 
{
    
$hash md5(SALT_COOKIE_USER);
    return 
$hash
}

function 
online($user NULL)
{
    global 
$set$time;
    static 
$users;
    
    if (!isset(
$users[$user]))
    {
        if (
db::count("SELECT COUNT(id) FROM `user` WHERE `id` = '$user' AND `date_last` > '" . (time()-600) . "' LIMIT 1") == 1)
        {
            if (
$set['show_away'] == 0)$on 'online';
            else
            {
                
$ank db::fetch("SELECT `date_last` FROM `user` WHERE `id` = '$user' LIMIT 1"ARRAY_A);
                if ((
time() - $ank['date_last']) == 0)
                
$on 'online';
                else
                
$on 'away: ' . (time()-$ank['date_last']) . ' сек';
            }
            
$ank db::fetch("SELECT * FROM `user` WHERE `id` = '$user' LIMIT 1"ARRAY_A);

            if (
$ank['browser'] == 'wap')
                
$users[$user] = " <img src='/style/icons/online.gif' alt='*' /> ";
            else
                
$users[$user] = " <img src='/style/icons/online_web.gif' alt='*' /> ";
        }
        else
        {
            
$users[$user]=null;
        }
    }
    return 
$users[$user];
}

// только для зарегистрированых
function only_reg$link NULL )
{
    global 
$user;
    if ( !isset( 
$user ) ) {
        if ( 
$link == NULL )
            
$link '/index.php?' SID;
        
header"Location: $link);
        exit;
    }
}

// только для незарегистрированых
function only_unreg$link NULL )
{
    global 
$user;
    if ( isset( 
$user ) ) {
        if ( 
$link == NULL )
            
$link '/index.php?' SID;
        
header"Location: $link); 
        exit;
    }
}

// только для тех, у кого уровень доступа больше или равен $level
function only_level$level 0$link NULL )
{
    global 
$user;
    if ( !isset( 
$user ) || $user['level'] < $level ) {
        if ( 
$link == NULL )
            
$link '/index.php?' SID;
        
header"Location: $link);
        exit;
    }
}

function 
is_user_access($access$user_id '')
{
    if (
$user_id == '')
        
$user get_user(get_user_id());
    else
        
$user get_user($user_id);

    if (!isset(
$user['group_access']) || $user['group_access'] == null) {
        return 
false
    }

    
$is_group_access db::count("SELECT COUNT(`id_group`) FROM `user_group_access` 
                                WHERE `id_group` = '" 
$user['group_access'] . "' AND `id_access` = '" $access "'"); 

    return (
$is_group_access true false);
}

/**
* Проверяет наличие пользователя по логину и паролю 
* Кеширует данные для дальнейшего их использования
* @return bolean 
*/ 

function is_auth_user($value$password$key 'id'
{
    global 
$ds_users_cache

    if (!
$value || !$password) {
        return 
false
    }

    
$password shif($password); 
    
$user db::fetch("SELECT * FROM `user` WHERE `$key` = '" db::esc($value) . "' AND `pass` = '" $password "' LIMIT 1"ARRAY_A);

    if (isset(
$user['id'])) {
        if (!isset(
$ds_users_cache[$user['group_access']])) {
            
$group_access get_group_access($user['group_access']);

            
$user['level'] = $group_access['level'];
            
$user['group_name'] = $group_access['group_name'];

            
$ds_users_cache[$user['id']] = use_filters('ds_users_cache_add'$user); 
        }
        return 
true
    }
    return 
false
}

function 
is_user() {
    global 
$user
    if (isset(
$user['id'])) {
        return 
true
    }
    return 
false
}

/**
* Проверяет в сети ли указанный пользователь
*/ 
function is_online($user_id false
{
    if (!
$user_id) {
        
$user_id get_user_id(); 
    }

    
$user get_user($user_id); 
    
$time use_filters('is_user_online'60 10); 

    if (isset(
$user['id']) && $user['date_last'] + $time TIME) {
        return 
true
    }
    return 
false
}

/**
* Возвращает ссылку на страницу пользователя
* $user - ID или массив пользователя
* @return string
*/ 
function get_user_url($user false
{
    if (
$user === false) {
        
$user get_user_id(); 
    } 

    if (
is_numeric($user)) {
        
$user get_user($user); 
    }

    if (isset(
$user['id'])) {
        return 
use_filters('get_user_url'get_site_url('/info.php?id=' $user['id']), $user); 
    }
}

function 
get_user_id() 
{
    if (isset(
$_SESSION['id_user'])) {
        return (int) 
$_SESSION['id_user']; 
    }
    return ; 
}

function 
get_ip_address() 
{
    
$ip_keys = array('HTTP_CLIENT_IP''HTTP_X_FORWARDED_FOR''HTTP_X_FORWARDED''HTTP_X_CLUSTER_CLIENT_IP''HTTP_FORWARDED_FOR''HTTP_FORWARDED''REMOTE_ADDR');
    foreach (
$ip_keys as $key) {
        if (
array_key_exists($key$_SERVER) === true) {
            foreach (
explode(','$_SERVER[$key]) as $ip) {
                
$ip trim($ip);
                if (
validate_ip($ip)) {
                    return 
$ip;
                }
            }
        }
    }

    return isset(
$_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
}

function 
validate_ip($ip)
{
    if (
filter_var($ipFILTER_VALIDATE_IPFILTER_FLAG_IPV4 FILTER_FLAG_NO_PRIV_RANGE FILTER_FLAG_NO_RES_RANGE) === false) {
        return 
false;
    }
    return 
true;
}

function 
validate_email($email
{
    if (
filter_var($emailFILTER_VALIDATE_EMAIL)) {
        return 
true
    }
    return 
false
}

function 
validate_login($str
{
    
$validate true
    if (!
preg_match("#^([A-z0-9-_])+$#ui"$str)) {
        
$validate false
    } 
    return 
$validate
}

/**
* Возвращаяет ник пользователя
*/ 
function get_user_nick($user_id false
{
    if (!
$user_id) {
        
$user_id get_user_id(); 
    }

    
$user get_user($user_id); 

    if (isset(
$user['id'])) 
        return 
use_filters('get_user_nick'$user['nick']); 
}

function 
get_user_by_nick($nick
{
    
$user db::fetch("SELECT id FROM user WHERE nick = '" db::esc($nick) . "' LIMIT 1");

    if (empty(
$user)) {
        
$user['id'] = 0
    }

    
$user get_user($user['id']); 
    return 
$user
}

/**
* Получает данные пользователя
* $user_id ID пользователя
* @return array 
*/

function get_user($user_id false)
{
    if (
$user_id === false
        
$user_id get_user_id(); 
    
    
$ds_users ds_get('ds_users', array());

    if ( 
$user_id == ) {
        
$user use_filters('ds_system_user', array(
            
'id' => 0
            
'pol' => 1
            
'level' => 999
            
'nick' => __('Система'), 
            
'group_name' => __('Системный робот'), 
            
'ank_o_sebe' => __('Создан для уведомлений'), 
        )); 
        return 
$user;
    } else {
        
$user_id = (int) $user_id;

        if (!isset(
$ds_users[$user_id])) {
            
$ds_users[$user_id] = db::fetch("SELECT * FROM `user` WHERE `id` = '$user_id' LIMIT 1"ARRAY_A);

            if (isset(
$ds_users[$user_id]['id'])) {
                
$group_access get_group_access($ds_users[$user_id]['group_access']);

                if ( 
$group_access['group_name'] == null ) {
                    
$ds_users[$user_id]['level']      = 0;
                    
$ds_users[$user_id]['group_name'] = 'Пользователь';
                } else {
                    
$ds_users[$user_id]['level']      = $group_access['level'];
                    
$ds_users[$user_id]['group_name'] = $group_access['group_name'];
                }
            } else {
                
$ds_users[$user_id] = false;
            }
        }

        
ds_set('ds_users'$ds_users);

        return 
$ds_users[$user_id];
    }
}

/**
* Получает и кеширует данные анкеты пользователя
* $user_id ID пользователя
* @return array 
*/ 
function get_user_profile($user_id null
{
    if (
$user_id == null
        
$user_id get_user_ID(); 

    
$default use_filters('ds_user_profile_default', array()); 
    
$ds_profiles ds_get('ds_profiles', array());

    if (isset(
$ds_profiles[$user_id])) {
        return 
$ds_profiles[$user_id]; 
    }

    
$ds_profiles[$user_id] = array(); 

    
$array db::select("SELECT * FROM `user_profile` WHERE `user_id` = '" $user_id "'"ARRAY_A);
    if (
$array) {
        foreach(
$array AS $field) {
            
$ds_profiles[$user_id][$field['profile_key']] = $field['profile_value']; 
        }
    }

    
$ds_profiles[$user_id] = array_replace($default$ds_profiles[$user_id]); 
    
$ds_profiles[$user_id] = use_filters('ds_get_user_profile'$ds_profiles[$user_id], $user_id); 

    
ds_set('ds_profiles'$ds_profiles);

    return 
$ds_profiles[$user_id]; 
}

/**
* Получает и кеширует группу пользователя
* $group_id ID группы
* @return array 
*/ 
function get_group_access($group_id
{
    global 
$ds_group_accesses

    if (!isset(
$ds_group_accesses[$group_id])) {
        
$group_access db::fetch("SELECT `level`, `name` AS `group_name` 
                                                        FROM `user_group` 
                                                        WHERE `id` = '" 
. (int) $group_id "' LIMIT 1"ARRAY_A);

        
$ds_group_accesses[$group_id] = $group_access;
    }

    return 
$ds_group_accesses[$group_id]; 
}

/**
* Добавляет или обновляет дополнительные поля пользователя
*/ 
function update_user_meta($user_id$meta_key$meta_value
{
    
$meta db::fetch("SELECT * FROM user_meta WHERE user_id = '" $user_id "' AND `meta_key` = '" $meta_key "' LIMIT 1"); 

    if (
is_array($meta_value)) {
        
$meta_value serialize($meta_value); 
    }

    if (isset(
$meta['meta_id'])) {
        
db::query("UPDATE user_meta SET meta_value = '" $meta_value "' WHERE meta_id = '" $meta['meta_id'] . "' LIMIT 1"); 
    } else {
        
db::insert('user_meta', array(
            
'user_id' => $user_id
            
'meta_key' => $meta_key
            
'meta_value' => $meta_value
        )); 
    }
}

/**
* Получает метаданные пользователя
* @return array | NULL
*/ 
function get_user_meta($user_id$meta_key false
{
    
$metadata ds_get('get_user_meta', array()); 

    if (
$meta_key !== false) {
        if (isset(
$metadata[$user_id][$meta_key])) {
            return 
$metadata[$user_id][$meta_key]; 
        }
    } else {
        if (isset(
$metadata[$user_id])) {
            return 
$metadata[$user_id]; 
        }
    }

    
$meta db::select("SELECT * FROM user_meta WHERE user_id = '" $user_id "'"); 

    foreach(
$meta AS $key => $value) {
        
$metadata[$user_id][$value['meta_key']] = $value['meta_value']; 
    }

    
ds_set('get_user_meta'$metadata); 

    if (
$meta_key) {
        if (isset(
$metadata[$user_id][$meta_key])) {
            return 
$metadata[$user_id][$meta_key]; 
        }
    } else {
        if (isset(
$metadata[$user_id])) {
            return 
$metadata[$user_id]; 
        }
    }
}

/**
* Удаляет метаданные пользователя
*/ 
function delete_user_meta($user_id$meta_key NULL$meta_value NULL)  
{
    if (
$user_id && $meta_key !== NULL && $meta_value !== NULL) {
        
db::query("DELETE FROM user_meta WHERE user_id = '" $user_id "' AND `meta_key` = '" $meta_key "' AND `meta_value` = '" $meta_value "'"); 
    } elseif (
$user_id && $meta_key !== NULL) {
        
db::query("DELETE FROM user_meta WHERE user_id = '" $user_id "' AND `meta_key` = '" $meta_key "'"); 
    } elseif (
$user_id) {
        
db::query("DELETE FROM user_meta WHERE user_id = '" $user_id "'"); 
    }
}


/**
* Генератор пароля
* $k_simb колличество символов
* @return string
*/ 
function passgen($k_simb 8$types 3
{
    
$password '';    
    
$small 'abcdefghijkmnpqrstuvwxyz';    
    
$large 'ABCDEFGHIJKLMNPQRSTUVWXYZ';    
    
$numbers '1234567890';    
    
    
mt_srand((double)microtime()*1000000);     
    
    for (
$i 0$i $k_simb$i++) 
    {        
        
$type mt_rand(1,min($types,3));    
            
        switch (
$type
        {        
            case 
3:        
            
$password .= $large[mt_rand(0strlen($large) - 1)];            
            break;            
            case 
2:            
            
$password .= $small[mt_rand(0strlen($small) - 1)];            
            break;            
            case 
1:            
            
$password .= $numbers[mt_rand(0,9)];            
            break;        
        }    
    }    

    return 
$password;
}

/**
* Обновляет информацию о пользователе
* Хук фильтр: {update_user_information}
*/ 

function update_user_information() 
{
    global 
$user$ds_user_update

    
$ds_user_update['date_last'] = time(); 
    
$ds_user_update use_filters('update_user_information'$ds_user_update); 

    if (isset(
$user['id'])) {
        
db::update('user'$ds_user_update, array(array(
            
'field' => 'id'
            
'value' => $user['id'], 
        ))); 
    }
}


/**
* Добавляет данные о пользователе
*/ 
function add_user_update($key$value
{
    global 
$ds_user_update
    
$ds_user_update[$key] = $value
}

/**
* Счетчики пользователя
* Хук фильтр: {ds_user_counters}
*/ 
function get_user_counters($user_id false
{
    if (
$user_id === false) {
        
$user_id get_user_id(); 
    }

    
$user get_user($user_id); 

    if (!isset(
$user['id'])) {
        return ; 
    }

    
$counter ds_get('ds_user_counters', array()); 
    if (!empty(
$counter[$user_id])) {
        return 
use_filters('ds_user_counters'$counter[$user_id]); 
    }

    
$counter[$user_id]['mail'] = array(
        
'title' => __('Сообщения'), 
        
'count' => db::count("SELECT COUNT(`mail`.`id`) FROM `mail`
             LEFT JOIN `mail_contacts` ON `mail`.`user_id` = `mail_contacts`.`contact_id` AND `mail_contacts`.`user_id` = '" 
$user_id "'
             WHERE `mail`.`contact_id` = '" 
$user_id "' AND `mail_contacts`.`status` != 'ignore' AND `mail`.`read` = '0'"), 
    ); 

    
ds_set('ds_user_counters'$counter); 

    return 
use_filters('ds_user_counters'$counter[$user_id]); 
}

/**
* Выход с сайта
*/ 
function ds_user_logout() 
{
    
setcookie('id_user');
    
setcookie('pass');
    
session_destroy();
    
do_event('ds_user_logout'); 
    
    
ds_redirect(get_site_url()); 
}

/**
* Добавляет область блока в профиле
*/ 
function add_profile_box($name$args = array()) 
{
    
$profile_boxes ds_get('ds_profile_boxes', array()); 
    if (!isset(
$profile_boxes[$name])) {
        
$profile_boxes[$name] = $args
    }
    
ds_set('ds_profile_boxes'use_filters('add_profile_boxes'$profile_boxes)); 
}

/**
* Добавляет область блока в профиле
*/ 
function get_profile_boxes() 
{
    
$profile_boxes ds_get('ds_profile_boxes', array()); 
    return 
$profile_boxes
}

/** 
* Добавляет в область блока содержимое 
*/ 
function add_profile_item($boxId$args
{
    
$profile_items ds_get('ds_profile_items', array()); 
    
    
$profile_items[$boxId][] = $args
    
    
ds_set('ds_profile_items'use_filters('add_profile_items'$profile_items)); 
}

/**
* Функция получает обработанный контент области блока профиля
*/ 
function get_profile_items($user_id$box_id$args
{
    
$profile_items ds_get('ds_profile_items', array());
    
$pre_items = array(); 

    foreach(
$profile_items[$box_id] AS $item)
    {
        
// Шаблон 
        
if (!isset($item['template'])) {
            
$item['template'] = use_filters('ds_template_profile_item''<div class="profile-box-item %class">%content</div>'); 
        }

        
// Хук фильтр (динамический)
        
$filter 'filters_' md5(microtime()); 

        
// Callback функция содержимого
        
if (isset($item['function'])) {
            
add_filter($filter$item['function']); 
        }

        
// Получаем контент в блок области профиля
        
$content use_filters($filter$user_id); 

        if (
$content) {
            
$pre_items[] = str_replace(array('%class''%content'), array($item['class'], $content), $item['template']);
        }
    }

    return 
join(''$pre_items);
}

/**
* Вывод ника пользователя
*/
function get_profile_title($user_id) {
    
$ank get_user($user_id); 
    
$content sprintf('%s %s %s %s'group($ank['id']), use_filters('ds_user_nick'$ank['nick']), medal($ank['id']), online($ank['id']));

    if ((
user_access('user_ban_set') || user_access('user_ban_set_h') || user_access('user_ban_unset')) && $ank['id'] != get_user_id()) {
        
$content .= ' <a class="ds-link-ban" href="' get_site_url('/adm_panel/ban.php?id=' $ank['id']) . '">Бан</a> ';
    }
    
    
$title str_replace('%content'$contentuse_filters('ds_template_profile_title''%content'));
    return 
$title
}

/**
* Вывод аватара пользователя в профиле
*/
function get_profile_avatar($user_id
{
    
$content avatar($user_id1128); 
    
$avatar str_replace('%content'$contentuse_filters('ds_template_profile_avatar''%content'));
    return 
$avatar
}


function 
get_profile_menu($menu
{
    
$counter use_filters('ds_template_profile_menu_counter''<span class="counter">(%count)</span>'); 
    
$template '<a href="%link" class="%class">%icon %title %count</span></a>'

    
$pre_html = array(); 
    foreach(
$menu AS $key => $value
    {
        if (!isset(
$value['template'])) {
            
$value['template'] = use_filters('ds_template_profile_menu_link'$template);
        }

        if (!isset(
$value['template'])) {
            
$value['template'] = use_filters('ds_template_profile_menu_link'$template);
        }

        
$count ''
        if (isset(
$value['count'])) {
            
$count str_replace('%count'$value['count'], $counter);
        }

        
$keys = array('%title''%link''%count''%class''%icon'); 
        
$values = array($value['title'], $value['link'], $count''$value['icon']); 

        
$pre_html[] = str_replace($keys$values$value['template']);
    }

    return 
join(''$pre_html); 
}

/**
* Вывод меню пользователя в профиле
*/
function get_profile_media($user_id

    
$ank get_user($user_id); 

    
$menu['photos'] = array(
        
'link' => get_site_url('/photos/index/' $ank['nick'] . '/'), 
        
'title' => __('Фотографии'), 
        
'icon' => '<img src="' get_site_url('/style/icons/foto.png') . '" alt="Photo" />'
        
'count' => get_count_files_user($user_id'photos'), 
    ); 

    
$menu['files'] = array(
        
'link' => get_site_url('/files/index/' $ank['nick'] . '/'), 
        
'title' => __('Файлы'), 
        
'icon' => '<img src="' get_site_url('/style/icons/files.gif') . '" alt="Files" />'
        
'count' => get_count_files_user($user_id'files'), 
    ); 

    
$menu['music'] = array(
        
'link' => get_site_url('/music/index/' $ank['nick'] . '/'), 
        
'title' => __('Музыка'), 
        
'icon' => '<img src="' get_site_url('/style/icons/foto.png') . '" alt="Music" />'
        
'count' => get_count_files_user($user_id'music'), 
    ); 

    return 
get_profile_menu(use_filters('get_profile_menu_media'$menu)); 
}

function 
get_profile_anketa($user_id
{
    
$menu['anketa'] = array(
        
'link' => get_site_url('/user/anketa/?id=' $user_id), 
        
'title' => __('Анкета'), 
        
'icon' => '<img src="' get_site_url('/style/icons/anketa.gif') . '" alt="Anketa" />'
    ); 

    return 
get_profile_menu(use_filters('get_profile_menu_anketa'$menu)); 
}

function 
get_profile_friends($user_id
{
    
$menu['friends'] = array(
        
'link' => get_friends_link($user_id), 
        
'title' => __('Друзья'), 
        
'icon' => '<img src="' get_site_url('/style/icons/druzya.png') . '" alt="Friends" />'
        
'count' => db::count("SELECT COUNT(*) FROM `frends` WHERE `user` = '$user_id' AND `i` = '1'"), 
    ); 

    return 
get_profile_menu(use_filters('get_profile_menu_friends'$menu)); 
}

function 
get_profile_action($user_id
{
    
$ank get_user($user_id); 
    
$menu = array(); 

    if (
get_user_id() && $ank['id'] != get_user_id()) 
    {
        
$menu['message'] = array(
            
'link' => get_site_url('/mail.php?id=' $user_id), 
            
'title' => __('Написать сообщение'), 
            
'icon' => '<img src="' get_site_url('/style/icons/pochta.gif') . '" alt="Message" />'
        );     

        
$labels = array(
            -
100 => __('Ошибка данных'), 
            
'sent' => __('Заявка отправлена'), 
            
'locked' => __('Вы заблокированы'), 
            
'unlock' => __('Разблокировать'), 
            
'add' => __('Добавить в друзья'), 
            
'confirm' => __('Подтвердить дружбу'), 
            
'delete' => __('Удалить из друзей'), 
            
'subscribed' => __('Вы подписаны'), 
            
'read' => __('На вас подписаны'), 
            
'friends' => __('Вы друзья'), 
        );

        
$links get_friends_action_links(get_user_id(), $ank['id']); 

        foreach(
$links AS $key => $link) {
            if (
count($links) == 1) {
                
$menu['friends_' $key] = array(
                    
'link' => $link['url'], 
                    
'title' => $link['title'], 
                    
'icon' => '<img src="' get_site_url('/style/icons/druzya.png') . '" />'
                );               
            } else {
                
$menu['friends_' $key] = array(
                    
'link' => $link['url'], 
                    
'title' => $link['title'], 
                    
'icon' => '<img src="' get_site_url('/style/icons/druzya.png') . '" />'
                ); 
            }
        }
    } 

    elseif (
is_user()) {  
        
$menu['settings'] = array(
            
'link' => get_site_url('/user/settings/'), 
            
'title' => __('Мои настройки'), 
            
'icon' => '<img src="' get_site_url('/style/icons/settings.png') . '" alt="Settings" />'
            
'template' => '<div class="ds-profile-group"><a href="%link" class="%class">%icon %title</span></a> | <a class="%class" href="' get_site_url('/umenu.php') . '">' __('Меню') . '</a></div>'
        );     
    }

    return 
get_profile_menu(use_filters('get_profile_menu_friends'$menu)); 
}

/**
* Функция отвечает за вывод странички пользователя
*/ 
function ds_profile_view($user_id
{
    
$ank get_user($user_id); 

    
// Зарегистрированные области 
    
$boxes get_profile_boxes(); 

    
$pre_html = array(); 
    foreach(
$boxes AS $box_id => $args
    {
        
// Шаблон блока области
        
$template use_filters('ds_template_profile_box''<div class="%class">%content</div>'); 

        
// Содержимое блока области
        
$box_content get_profile_items($user_id$box_id$args); 

        if (!isset(
$args['class'])) {
            
$args['class'] = 'profile-box';
        }

        
// Помещаем сформированный html в шаблон
        
if ($box_content) {
            
$pre_html[] = str_replace(array('%class''%content'), array($args['class'], $box_content), $template); 
        }
    }

    echo 
join(''$pre_html); 
}

/**
* Регистрируем стандартный профиля пользователя
*/ 
function ds_profile_load() 
{
    
// Область заголовка и аватара
    
add_profile_box('ds_profile_head'); 

    
// Вывод ника и времени последнего посещения
    
add_profile_item('ds_profile_head', array(
        
'function' => 'get_profile_title'
        
'class'    => 'ds-profile-title'
    )); 

    
// Аватар пользователя
    
add_profile_item('ds_profile_head', array(
        
'function' => 'get_profile_avatar'
        
'class'    => 'ds-profile-avatar'
    )); 

    
// Область меню пользователя
    
add_profile_box('ds_profile_body'); 

    
// Анкета пользователя
    
add_profile_item('ds_profile_body', array(
        
'function' => 'get_profile_anketa'
        
'class'    => 'ds-profile-menu'
    )); 

    
// Друзья пользователя
    
add_profile_item('ds_profile_body', array(
        
'function' => 'get_profile_friends'
        
'class'    => 'ds-profile-menu'
    )); 

    
// Вывод фото, файлы и музыки
    
add_profile_item('ds_profile_body', array(
        
'function' => 'get_profile_media'
        
'class'    => 'ds-profile-menu'
    )); 

    
add_profile_item('ds_profile_body', array(
        
'function' => 'get_profile_action'
        
'class'    => 'ds-profile-menu',  
    )); 
}
Онлайн: 0
Реклама