Файл: InstantSocial/uploud/components/users/includes/usercore.php
Строк: 467
<?php
/******************************************************************************/
// //
// InstantCMS v1.9 //
// http://www.instantcms.ru/ //
// //
// written by InstantCMS Team, 2007-2011 //
// produced by InstantSoft, (www.instantsoft.ru) //
// //
// LICENSED BY GNU/GPL v2 //
// //
/******************************************************************************/
if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
function usrBlog($user_id){
return dbGetFields('cms_blogs', 'owner="user" AND user_id = '.$user_id, 'id, seolink', 'owner');
}
function usrLink($title, $user_login){
return '<a href="'.cmsUser::getProfileURL($user_login).'" title="'.strip_tags($title).'">'.$title.'</a>';
}
function usrFilesSize($user_id){
$inDB = cmsDatabase::getInstance();
$sql = "SELECT SUM(filesize) as totalsize FROM cms_user_files WHERE user_id = $user_id GROUP BY user_id";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)){
$data = $inDB->fetch_assoc($result);
$size = $data['totalsize'];
} else {
$size = 0;
}
return $size;
}
function usrPhotoCount($user_id, $with_public=true){
$inDB = cmsDatabase::getInstance();
$inUser = cmsUser::getInstance();
$my_profile = ($inUser->id == $user_id);
$filter = '';
if (!$my_profile){
$we_friends = (int)usrIsFriends($user_id, $inUser->id);
$filter = "AND ( allow_who='all' OR (allow_who='registered' AND ({$inUser->id}>0)) OR (allow_who='friends' AND ({$we_friends}=1)) )";
}
$private_count = $inDB->rows_count('cms_user_photos', "user_id={$user_id} $filter");
$public_count = $inDB->rows_count('cms_photo_files', "user_id={$user_id} AND published = 1");
$total_count = $with_public ? ($private_count + $public_count) : $private_count;
return $total_count;
}
function usrMsg($user_id, $table){
$inDB = cmsDatabase::getInstance();
$sql = "SELECT id
FROM $table
WHERE user_id = $user_id
";
$result = $inDB->query($sql) ;
return $inDB->num_rows($result);
}
function usrAwards($user_id){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$inUser = cmsUser::getInstance();
global $_LANG;
$html = '';
$sql = "SELECT *
FROM cms_user_awards
WHERE user_id = $user_id
ORDER BY pubdate DESC
";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)>0){
$is_admin = false;
if ($inUser->id && ($inUser->id==$user_id || $inCore->userIsAdmin($inUser->id))){
$is_admin = true;
}
$aws = array();
while ($aw = $inDB->fetch_assoc($result)){
$aw['pubdate'] = $inCore->dateFormat($aw['pubdate']);
$aws[] = $aw;
}
}
ob_start();
$smarty = $inCore->initSmarty('components', 'com_users_awards.tpl');
$smarty->assign('aws', $aws);
$smarty->assign('is_admin', $is_admin);
$smarty->display('com_users_awards.tpl');
return ob_get_clean();
}
function usrImage($user_id, $small='small'){
$inDB = cmsDatabase::getInstance();
if ($user_id == -1) { return '<img border="0" class="usr_img" src="/images/messages/update.jpg" />'; }
if ($user_id == -2) { return '<img border="0" class="usr_img" src="/images/messages/massmail.jpg" />'; }
$sql = "SELECT p.imageurl, u.is_deleted as is_deleted
FROM cms_user_profiles p, cms_users u
WHERE p.user_id = $user_id AND p.user_id = u.id
LIMIT 1
";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)>0){
$usr = $inDB->fetch_assoc($result);
if($usr['is_deleted']){
if ($small=='small'){
return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/noprofile.jpg" />';
} else {
return '<img border="0" class="usr_img" src="/images/users/avatars/noprofile.jpg" />';
}
} else {
if ($usr['imageurl'] && @file_exists(PATH.'/images/users/avatars/'.$usr['imageurl'])){
if ($small=='small'){
return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/'.$usr['imageurl'].'" />';
} else {
return '<img border="0" class="usr_img" src="/images/users/avatars/'.$usr['imageurl'].'" />';
}
} else {
if ($small=='small'){ return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/nopic.jpg" />';
} else { return '<img border="0" class="usr_img" src="/images/users/avatars/nopic.jpg" />'; }
}
}
} else {
if ($small=='small'){ return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/nopic.jpg" />';
} else { return '<img border="0" class="usr_img" src="/images/users/avatars/nopic.jpg" />'; }
}
}
function usrImageNOdb($user_id, $small='small', $usr_imageurl, $usr_is_deleted){
if ($user_id == -1) { return '<img border="0" class="usr_img_small" src="/images/messages/update.jpg" />'; }
if ($user_id == -2) { return '<img border="0" class="usr_img_small" src="/images/messages/massmail.jpg" />'; }
if ($usr_imageurl){
if($usr_is_deleted){
if ($small=='small'){
return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/noprofile.jpg" />';
} else {
return '<img border="0" class="usr_img" src="/images/users/avatars/noprofile.jpg" />';
}
} else {
if ($usr_imageurl && @file_exists(PATH.'/images/users/avatars/'.$usr_imageurl)){
if ($small=='small'){
return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/'.$usr_imageurl.'" />';
} else {
return '<img border="0" class="usr_img" src="/images/users/avatars/'.$usr_imageurl.'" />';
}
} else {
if ($small=='small'){ return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/nopic.jpg" />';
} else { return '<img border="0" class="usr_img" src="/images/users/avatars/nopic.jpg" />'; }
}
}
} else {
if ($small=='small'){ return '<img border="0" class="usr_img_small" src="/images/users/avatars/small/nopic.jpg" />';
} else { return '<img border="0" class="usr_img" src="/images/users/avatars/nopic.jpg" />'; }
}
}
function usrCanKarma($to, $from){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
if($to == $from) { return false; }
$cfg = $inCore->loadComponentConfig('users');
if (!isset($cfg['karmatime'])) { $cfg['karmatime'] = 3; }
if (!isset($cfg['karmaint'])) { $cfg['karmaint'] = 'HOUR'; }
$sql = "SELECT id FROM cms_user_karma WHERE user_id = $to AND sender_id = $from AND senddate >= DATE_SUB(NOW(), INTERVAL ".$cfg['karmatime']." ".$cfg['karmaint'].")";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)==0) { return true; } else { return false; }
}
function usrStatus($user_id, $logdate='', $online=false, $gender='m'){
$inDB = cmsDatabase::getInstance();
global $_LANG;
if ($online===false){
$is_online = $inDB->rows_count('cms_online', "user_id = '$user_id'");
} else {
$is_online = $online;
}
if ($is_online){
return '<span class="online">'.$_LANG['ONLINE'].'</span>';
} else {
if ($logdate){
if (!strstr(strtolower($logdate), $_LANG['YESTERDAY']) && !strstr(strtolower($logdate), $_LANG['TODAY'])){
$logdate = cmsCore::dateDiffNow($logdate);
if (!strstr($logdate, 'не известно')) { $logdate .= ' '.$_LANG['BACK']; }
}
return '<span class="offline">'.$logdate.'</span>';
} else {
return '<span class="offline">'.$_LANG['OFFLINE'].'</span>';
}
}
}
function usrStatusList($user_id, $logdate='', $online=false, $gender='m'){
$inDB = cmsDatabase::getInstance();
global $_LANG;
if ($online===false){
$is_online = $inDB->rows_count('cms_online', "user_id = '$user_id'");
} else {
$is_online = $online;
}
if ($is_online){
return '<span class="online">'.$_LANG['ONLINE'].'</span>';
} else {
if ($logdate){
return '<span class="offline">'.$logdate.'</span>';
} else {
return '<span class="offline">'.$_LANG['OFFLINE'].'</span>';
}
}
}
function usrCheckAuth(){
$inUser = cmsUser::getInstance();
return (bool)$inUser->id;
}
function usrNeedReg(){
global $_LANG;
$inCore = cmsCore::getInstance();
ob_start();
$smarty = $inCore->initSmarty('components', 'com_error.tpl');
$smarty->assign('err_title', $_LANG['ACCESS_DENIED']);
$smarty->assign('err_content', $_LANG['ACCESS_ONLY_REGISTERED']);
$smarty->display('com_error.tpl');
return ob_get_clean();
}
function usrFriendOnly(){
global $_LANG;
$inCore = cmsCore::getInstance();
ob_start();
$smarty = $inCore->initSmarty('components', 'com_error.tpl');
$smarty->assign('err_title', $_LANG['ACCESS_DENIED']);
$smarty->assign('err_content', $_LANG['ACCESS_ONLY_FRIENDS']);
$smarty->display('com_error.tpl');
return ob_get_clean();
}
function usrAccessDenied(){
global $_LANG;
$inCore = cmsCore::getInstance();
ob_start();
$smarty = $inCore->initSmarty('components', 'com_error.tpl');
$smarty->assign('err_title', $_LANG['ACCESS_DENIED']);
$smarty->assign('err_content', $_LANG['ACCESS_NEED_AVTOR']);
$smarty->display('com_error.tpl');
return ob_get_clean();
}
function usrNotAllowed(){
global $_LANG;
$inCore = cmsCore::getInstance();
ob_start();
$smarty = $inCore->initSmarty('components', 'com_error.tpl');
$smarty->assign('err_title', $_LANG['ACCESS_BLOCK']);
$smarty->assign('err_content', $_LANG['ACCESS_SECURITY']);
$smarty->display('com_error.tpl');
return ob_get_clean();
}
function usrIsFriends($to_id, $my_id, $is_accepted = true){
if (!$is_accepted) {
$inDB = cmsDatabase::getInstance();
$total = $inDB->rows_count('cms_user_friends', "(to_id = '$to_id' AND from_id = '$my_id') OR (to_id = '$my_id' AND from_id = '$to_id')");
return $total ? true : false;
}
$my_friends = cmsUser::getFriends($my_id);
if (!$my_friends) { return false; }
foreach($my_friends as $friend){
if($friend['id'] == $to_id){
$is_friend = true;
break;
}else{
$is_friend = false;
}
}
return $is_friend;
}
function usrFriends($user_id, &$total, $perpage=10, $page=1){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$inUser = cmsUser::getInstance();
$ses_friends = cmsUser::getFriends($inUser->id);
// общее количество моих друзей выбирается из сессии, начиная со 2-й страницы
$total = (($page > 1) && ($user_id == $inUser->id)) ? sizeof($ses_friends) : $inDB->rows_count('cms_user_friends', "(from_id = '$user_id' OR to_id = '$user_id') AND is_accepted =1");
// если нет друзей, выходим
if(!$total) { return false; }
// очищать сессию друзей если в своем профиле и количество друзей из базы не совпадает с количеством друзей в сессии
if (($user_id == $inUser->id) && sizeof($ses_friends) != $total) { cmsUser::clearSessionFriends(); }
$sql = "SELECT
CASE
WHEN f.from_id = $user_id
THEN f.to_id
WHEN f.to_id = $user_id
THEN f.from_id
END AS id_friends, u.id as id, u.nickname as nickname, u.login as login, u.is_deleted as is_deleted, u.status, p.imageurl as avatar, u.logdate as flogdate, o.id as online
FROM cms_user_friends f
LEFT JOIN cms_users u ON u.id = CASE WHEN f.from_id = $user_id THEN f.to_id WHEN f.to_id = $user_id THEN f.from_id END
LEFT JOIN cms_user_profiles p ON p.user_id = u.id
LEFT JOIN cms_online o ON p.user_id = o.user_id
WHERE (from_id = '$user_id' OR to_id = '$user_id') AND is_accepted =1
LIMIT ".(($page-1)*$perpage).", $perpage";
$result = $inDB->query($sql) ;
$friends = array();
while ($friend = $inDB->fetch_assoc($result)){
$friend['flogdate'] = usrStatus($friend['id'], $friend['flogdate'], (int)$friend['online']);
$friend['avatar'] = usrImageNOdb($friend['id'], 'small', $friend['avatar'], $friend['is_deleted']);
$friends[$friend['id']] = $friend;
}
return $friends;
}
function usrAllowed($allow_who, $owner_id){
$inCore = cmsCore::getInstance();
$inUser = cmsUser::getInstance();
$user_id = $inUser->id;
if ($owner_id == $user_id) { return true; }
if ($allow_who == 'all') { return true; }
if ($allow_who == 'registered') { return usrCheckAuth(); }
if ($allow_who == 'friends') {
if (usrCheckAuth()){
return (usrIsFriends($user_id, $owner_id) || $inCore->userIsAdmin($user_id));
}
}
}
function usrAwardsList($selected = 'aw.gif'){
$html = '';
if ($handle = opendir(PATH.'/images/users/awards')) {
while (false !== ($file = readdir($handle))) {
$html .= '<div style="float:left;margin:4px">';
$html .= '<table border="0" cellspacing="0" cellpadding="4"><tr>';
if ($file != '.' && $file != '..' && strstr($file, '.gif')){
$tag = str_replace('.gif', '', $file);
$dir = '/images/users/awards/';
if ($selected != $file){
$html .= '<td align="center" valign="middle"><img src="'.$dir.$file.'" alt="'.htmlspecialchars($file).'"/><br/><input type="radio" name="imageurl" value="'.htmlspecialchars($file).'"/></td>';
} else {
$html .= '<td align="center" valign="middle"><img src="'.$dir.$file.'" alt="'.htmlspecialchars($file).'"/><br/><input type="radio" name="imageurl" value="'.htmlspecialchars($file).'" checked="checked"/></td>';
}
}
$html .= '</tr></table></div>';
}
closedir($handle);
}
return $html;
}
function usrGenderStats($total_usr){
$inDB = cmsDatabase::getInstance();
$stat = array();
//male
$sql = "SELECT u.id
FROM cms_users u
LEFT JOIN cms_user_profiles p ON p.user_id = u.id
WHERE u.is_locked = 0 AND u.is_deleted = 0 AND p.gender = 'm'";
$rs = $inDB->query($sql); $stat['male'] = $inDB->num_rows($rs);
//female
$sql = "SELECT u.id
FROM cms_users u
LEFT JOIN cms_user_profiles p ON p.user_id = u.id
WHERE u.is_locked = 0 AND u.is_deleted = 0 AND p.gender = 'f'";
$rs = $inDB->query($sql); $stat['female'] = $inDB->num_rows($rs);
//unknown
$stat['unknown'] = $total_usr - $stat['male'] - $stat['female'];
return $stat;
}
function usrCityStats(){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
global $_LANG;
$stat = array();
$empty = $_LANG['NOT_DECIDE'];
$sql = "SELECT IF (p.city != '', p.city, '$empty') city, COUNT( p.user_id ) count
FROM cms_users u
LEFT JOIN cms_user_profiles p ON p.user_id = u.id
WHERE u.is_locked =0 AND u.is_deleted =0
GROUP BY p.city";
$rs = $inDB->query($sql);
if ($inDB->num_rows($rs)){
while($row = $inDB->fetch_assoc($rs)){
if ($row['city'] != $empty) { $row['href'] = '/users/city/'.urlencode($row['city']); } else { $row['href'] = ''; }
$row['city'] = ucfirst(strtolower($row['city']));
$stat[] = $row;
}
}
return $stat;
}
?>