Файл: 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'] == 1 ? $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'") != 0 ) {
$opsos = db::fetch("SELECT opsos FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl' LIMIT 1", ARRAY_A);
return stripcslashes( htmlspecialchars( $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 == 0 || $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 ) . "'") == 0 ) {
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 ) . "'") == 1 ? 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($key, ceil(16/$l));
if ($m = strlen($data) % 8)
$data .= str_repeat("x00", 8 - $m);
if (function_exists('openssl_encrypt'))
$val = openssl_encrypt($data, 'BF-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
elseif (function_exists('mcrypt_encrypt'))
$val = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_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($key, ceil(16/$l));
if (function_exists('openssl_encrypt'))
$val = openssl_decrypt($data, 'BF-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING);
elseif (function_exists('mcrypt_encrypt'))
$val = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_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($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
return false;
}
return true;
}
function validate_email($email)
{
if (filter_var($email, FILTER_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 == 0 ) {
$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(0, strlen($large) - 1)];
break;
case 2:
$password .= $small[mt_rand(0, strlen($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', $content, use_filters('ds_template_profile_title', '%content'));
return $title;
}
/**
* Вывод аватара пользователя в профиле
*/
function get_profile_avatar($user_id)
{
$content = avatar($user_id, 1, 128);
$avatar = str_replace('%content', $content, use_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',
));
}