DiscuzX/upload/source/include/spacecp/spacecp_friend.php

533 lines
16 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: spacecp_friend.php 36272 2016-11-23 06:35:37Z nemohou $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
require_once libfile('function/friend');
$op = empty($_GET['op'])?'':$_GET['op'];
$uid = empty($_GET['uid'])?0:intval($_GET['uid']);
$_GET['from'] = preg_match('/^\w+$/', $_GET['from']) ? $_GET['from'] : '';
$space['key'] = space_key($space['uid']);
$actives = array($op=>' class="a"');
if($op == 'add') {
if(!checkperm('allowfriend')) {
showmessage('no_privilege_addfriend');
}
if($uid == $_G['uid']) {
showmessage('friend_self_error');
}
if(friend_check($uid)) {
showmessage('you_have_friends');
}
$tospace = getuserbyuid($uid);
if(empty($tospace)) {
showmessage('space_does_not_exist');
}
if(isblacklist($tospace['uid'])) {
showmessage('is_blacklist');
}
$groups = friend_group_list();
space_merge($space, 'count');
space_merge($space, 'field_home');
$maxfriendnum = checkperm('maxfriendnum');
if($maxfriendnum && $space['friends'] >= $maxfriendnum + $space['addfriend']) {
if($_G['magic']['friendnum']) {
showmessage('enough_of_the_number_of_friends_with_magic');
} else {
showmessage('enough_of_the_number_of_friends');
}
}
if(friend_request_check($uid)) {
if(submitcheck('add2submit')) {
$_POST['gid'] = intval($_POST['gid']);
friend_add($uid, $_POST['gid']);
if(ckprivacy('friend', 'feed')) {
require_once libfile('function/feed');
feed_add('friend', 'feed_friend_title', array('touser'=>"<a href=\"home.php?mod=space&uid=$tospace[uid]\">$tospace[username]</a>"));
}
notification_add($uid, 'friend', 'friend_add');
showmessage('friends_add', dreferer(), array('username' => $tospace['username'], 'uid'=>$uid, 'from' => $_GET['from']), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
}
$op = 'add2';
$groupselect = empty($space['privacy']['groupname']) ? array(1 => ' checked') : array();
$navtitle = lang('core', 'title_friend_add');
include template('home/spacecp_friend');
exit();
} else {
if(C::t('home_friend_request')->count_by_uid_fuid($uid, $_G['uid'])) {
showmessage('waiting_for_the_other_test', '', array(), array('alert' => 'info'));
}
if(submitcheck('addsubmit')) {
$_POST['gid'] = intval($_POST['gid']);
$_POST['note'] = censor(htmlspecialchars(cutstr($_POST['note'], strtolower(CHARSET) == 'utf-8' ? 30 : 20, '')));
friend_add($uid, $_POST['gid'], $_POST['note']);
$note = array(
'uid' => $_G['uid'],
'url' => 'home.php?mod=spacecp&ac=friend&op=add&uid='.$_G['uid'].'&from=notice',
'from_id' => $_G['uid'],
'from_idtype' => 'friendrequest',
'note' => !empty($_POST['note']) ? lang('spacecp', 'friend_request_note', array('note' => $_POST['note'])) : ''
);
notification_add($uid, 'friend', 'friend_request', $note);
require_once libfile('function/mail');
$values = array(
'username' => $tospace['username'],
'url' => getsiteurl().'home.php?mod=spacecp&ac=friend&amp;op=request'
);
sendmail_touser($uid, lang('spacecp', 'friend_subject', $values), '', 'friend_add');
showmessage('request_has_been_sent', dreferer(), array(), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
} else {
include_once template('home/spacecp_friend');
exit();
}
}
} elseif($op == 'ignore') {
if($uid) {
if(submitcheck('friendsubmit')) {
if(friend_check($uid)) {
friend_delete($uid);
} else {
friend_request_delete($uid);
}
showmessage('do_success', 'home.php?mod=spacecp&ac=friend&op=request', array('uid'=>$uid, 'from' => $_GET['from']), array('showdialog' => 1, 'showmsg' => true, 'closetime' => 0));
}
} elseif($_GET['key'] == $space['key']) {
$count = C::t('home_friend_request')->count_by_uid($_G['uid']);
if($count) {
C::t('home_friend_request')->delete_by_uid($_G['uid']);
dsetcookie('promptstate_'.$_G['uid'], $space['newprompt'], 31536000);
}
showmessage('do_success', 'home.php?mod=spacecp&ac=friend&op=request');
}
} elseif($op == 'addconfirm') {
if(!checkperm('allowfriend')) {
showmessage('no_privilege_addfriend');
}
if($_GET['key'] == $space['key']) {
$maxfriendnum = checkperm('maxfriendnum');
space_merge($space, 'field_home');
space_merge($space, 'count');
if($maxfriendnum && $space['friends'] >= $maxfriendnum + $space['addfriend']) {
if($_G['magic']['friendnum']) {
showmessage('enough_of_the_number_of_friends_with_magic');
} else {
showmessage('enough_of_the_number_of_friends');
}
}
if($value = C::t('home_friend_request')->fetch_by_uid($space['uid'])) {
friend_add($value['fuid']);
showmessage('friend_addconfirm_next', 'home.php?mod=spacecp&ac=friend&op=addconfirm&key='.$space['key'], array('username' => $value['fusername']), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
}
}
showmessage('do_success', 'home.php?mod=spacecp&ac=friend&op=request&quickforward=1');
} elseif($op == 'find') {
$maxnum = 36;
$recommenduser = $myfuids = $fuids =array();
$i = 0;
$query = C::t('home_friend')->fetch_all_by_uid($_G['uid'], 0, 0, true);
foreach($query as $value) {
if($i < 100) {
$fuids[$value['fuid']] = $value['fuid'];
}
$myfuids[$value['fuid']] = $value['fuid'];
$i++;
}
$myfuids[$space['uid']] = $space['uid'];
foreach(C::t('home_specialuser')->range() as $value) {
$recommenduser[$value['uid']] = $value;
}
$i = 0;
$nearlist = array();
foreach(C::app()->session->fetch_all_by_ip($_G['clientip'], 200) as $value) {
if($value['uid'] && empty($myfuids[$value['uid']])) {
$nearlist[$value['uid']] = $value;
$i++;
if($i>=$maxnum) break;
}
}
$i = 0;
$friendlist = array();
if($fuids) {
$query = C::t('home_friend')->fetch_all_by_uid($fuids, 0, 200);
$fuids[$space['uid']] = $space['uid'];
foreach($query as $value) {
$value['fuid'] = $value['uid'];
$value['fusername'] = $value['username'];
if(empty($myfuids[$value['uid']])) {
$friendlist[$value['uid']] = $value;
$i++;
if($i>=$maxnum) break;
}
}
}
$i = 0;
$onlinelist = array();
foreach(C::app()->session->fetch_member(1, 2, 200) as $value) {
if(empty($myfuids[$value['uid']]) && !isset($onlinelist[$value['uid']])) {
$onlinelist[$value['uid']] = $value;
$i++;
if($i>=$maxnum) break;
}
}
$navtitle = lang('core', 'title_people_might_know');
} elseif($op == 'changegroup') {
if(submitcheck('changegroupsubmit')) {
C::t('home_friend')->update_by_uid_fuid($_G['uid'], $uid, array('gid'=>intval($_POST['group'])));
friend_cache($_G['uid']);
showmessage('do_success', dreferer(), array('gid'=>intval($_POST['group'])), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
}
$query = C::t('home_friend')->fetch_all_by_uid_fuid($_G['uid'], $uid);
if(!$friend = $query[0]) {
showmessage('specified_user_is_not_your_friend');
}
$groupselect = array($friend['gid'] => ' checked');
$groups = friend_group_list();
} elseif($op == 'editnote') {
if(submitcheck('editnotesubmit')) {
$note = getstr($_POST['note'], 20);
C::t('home_friend')->update_by_uid_fuid($_G['uid'], $uid, array('note'=>$note));
showmessage('do_success', dreferer(), array('uid'=>$uid, 'note'=>$note), array('showdialog'=>1, 'msgtype' => 2, 'closetime' => true));
}
$query = C::t('home_friend')->fetch_all_by_uid_fuid($_G['uid'], $uid);
if(!$friend = $query[0]) {
showmessage('specified_user_is_not_your_friend');
}
} elseif($op == 'changenum') {
if(submitcheck('changenumsubmit')) {
$num = abs(intval($_POST['num']));
if($num > 9999) $num = 9999;
C::t('home_friend')->update_by_uid_fuid($_G['uid'], $uid, array('num'=>$num));
friend_cache($_G['uid']);
showmessage('do_success', dreferer(), array('fuid'=>$uid, 'num'=>$num), array('showmsg' => true, 'timeout' => 3, 'return'=>1));
}
$query = C::t('home_friend')->fetch_all_by_uid_fuid($_G['uid'], $uid);
if(!$friend = $query[0]) {
showmessage('specified_user_is_not_your_friend');
}
} elseif($op == 'group') {
if(submitcheck('groupsubmin')) {
if(empty($_POST['fuids'])) {
showmessage('please_correct_choice_groups_friend', dreferer());
}
$ids = $_POST['fuids'];
$groupid = intval($_POST['group']);
C::t('home_friend')->update_by_uid_fuid($_G['uid'], $ids, array('gid'=>$groupid));
friend_cache($_G['uid']);
showmessage('do_success', dreferer());
}
$perpage = 50;
$perpage = mob_perpage($perpage);
$page = empty($_GET['page'])?1:intval($_GET['page']);
if($page<1) $page = 1;
$start = ($page-1)*$perpage;
$list = array();
$multi = $wheresql = '';
space_merge($space, 'count');
if($space['friends']) {
$groups = friend_group_list();
$theurl = 'home.php?mod=spacecp&ac=friend&op=group';
$group = !isset($_GET['group'])?'-1':intval($_GET['group']);
if($group > -1) {
$wheresql = "AND main.gid='$group'";
$theurl .= "&group=$group";
}
$count = C::t('home_friend')->fetch_all_search($space['uid'], $group, '', true);
if($count) {
$query = C::t('home_friend')->fetch_all_search($space['uid'], $group, '', false, $start, $perpage, true);
foreach($query as $value) {
$value['uid'] = $value['fuid'];
$value['username'] = $value['fusername'];
$value['group'] = $groups[$value['gid']];
$list[] = $value;
}
}
$multi = multi($count, $perpage, $page, $theurl);
}
$actives = array('group'=>' class="a"');
} elseif($op == 'request') {
if(submitcheck('requestsubmin')) {
showmessage('do_success', dreferer());
}
$maxfriendnum = checkperm('maxfriendnum');
if($maxfriendnum) {
$maxfriendnum = $maxfriendnum + $space['addfriend'];
}
$perpage = 20;
$perpage = mob_perpage($perpage);
$page = empty($_GET['page'])?0:intval($_GET['page']);
if($page<1) $page = 1;
$start = ($page-1)*$perpage;
$list = array();
$count = C::t('home_friend_request')->count_by_uid($space['uid']);
if($count) {
$fuids = array();
foreach(C::t('home_friend_request')->fetch_all_by_uid($space['uid'], $start, $perpage) as $value) {
$fuids[$value['fuid']] = $value['fuid'];
$list[$value['fuid']] = $value;
}
} else {
dsetcookie('promptstate_'.$space['uid'], $newprompt, 31536000);
}
$multi = multi($count, $perpage, $page, "home.php?mod=spacecp&ac=friend&op=request");
$navtitle = lang('core', 'title_friend_request');
} elseif($op == 'groupname') {
$groups = friend_group_list();
$group = intval($_GET['group']);
if(!isset($groups[$group])) {
showmessage('change_friend_groupname_error');
}
space_merge($space, 'field_home');
if(submitcheck('groupnamesubmit')) {
$space['privacy']['groupname'][$group] = getstr($_POST['groupname'], 20);
privacy_update();
showmessage('do_success', dreferer(), array('gid'=>$group), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
}
} elseif($op == 'groupignore') {
$groups = friend_group_list();
$group = intval($_GET['group']);
if(!isset($groups[$group])) {
showmessage('change_friend_groupname_error');
}
space_merge($space, 'field_home');
if(submitcheck('groupignoresubmit')) {
if(isset($space['privacy']['filter_gid'][$group])) {
unset($space['privacy']['filter_gid'][$group]);
$ignore = false;
} else {
$space['privacy']['filter_gid'][$group] = $group;
$ignore = true;
}
privacy_update();
friend_cache($_G['uid']);
showmessage('do_success', dreferer(), array('group' => $group, 'ignore' => $ignore), array('showdialog'=>1, 'showmsg' => true, 'closetime' => true));
}
} elseif($op == 'blacklist') {
if($_GET['subop'] == 'delete') {
$_GET['uid'] = intval($_GET['uid']);
C::t('home_blacklist')->delete_by_uid_buid($space['uid'], $_GET['uid']);
$count = C::t('home_blacklist')->count_by_uid_buid($space['uid']);
C::t('common_member_count')->update($_G['uid'], array('blacklist' => $count));
showmessage('do_success', "home.php?mod=space&uid=$_G[uid]&do=friend&view=blacklist&quickforward=1&start=$_GET[start]");
}
if(submitcheck('blacklistsubmit')) {
$_POST['username'] = trim($_POST['username']);
if(!($tospace = C::t('common_member')->fetch_by_username($_POST['username']))) {
showmessage('space_does_not_exist');
}
if($tospace['uid'] == $space['uid']) {
showmessage('unable_to_manage_self');
}
friend_delete($tospace['uid']);
C::t('home_blacklist')->insert(array('uid'=>$space['uid'], 'buid'=>$tospace['uid'], 'dateline'=>$_G['timestamp']), false, false, true);
$count = C::t('home_blacklist')->count_by_uid_buid($space['uid']);
C::t('common_member_count')->update($_G['uid'], array('blacklist' => $count));
showmessage('do_success', "home.php?mod=space&uid=$_G[uid]&do=friend&view=blacklist&quickforward=1&start=$_GET[start]");
}
} elseif($op == 'rand') {
$userlist = $randuids = array();
space_merge($space, 'count');
if($space['friends']<5) {
$userlist = C::app()->session->fetch_member(1, 2, 100);
} else {
$query = C::t('home_friend')->fetch($_G['uid']);
foreach($query as $value) {
$userlist[$value['uid']] = $value['fuid'];
}
}
unset($userlist[$space['uid']]);
$randuids = sarray_rand($userlist, 1);
showmessage('do_success', "home.php?mod=space&quickforward=1&uid=".array_pop($randuids));
} elseif ($op == 'getcfriend') {
$fuid = empty($_GET['fuid']) ? 0 : intval($_GET['fuid']);
$list = array();
if($fuid) {
$friend = $friendlist = array();
$query = C::t('home_friend')->fetch_all_by_uid_common($space['uid'], $fuid);
foreach($query as $value) {
$friendlist[$value['uid']][] = $value['fuid'];
$friend[$value['fuid']] = $value;
}
if($friendlist[$_G['uid']] && $friendlist[$fuid]) {
$cfriend = array_intersect($friendlist[$_G['uid']], $friendlist[$fuid]);
$i = 0;
foreach($cfriend as $key => $uid) {
if(isset($friend[$uid])) {
$list[] = array('uid' => $friend[$uid]['fuid'], 'username' => $friend[$uid]['fusername']);
$i++;
if($i >= 15) break;
}
}
}
}
} elseif($op == 'getinviteuser') {
require_once libfile('function/search');
$perpage = 20;
$username = empty($_GET['username'])?'':searchkey($_GET['username'], "f.fusername LIKE '{text}%'");
$page = empty($_GET['page'])?0:intval($_GET['page']);
$gid = isset($_GET['gid']) ? intval($_GET['gid']) : -1;
if($page<1) $page = 1;
$start = ($page-1) * $perpage;
$json = array();
$wheresql = '';
if($gid > -1) {
$wheresql .= " AND f.gid='$gid'";
}
if(!empty($username)) {
$wheresql .= $username;
}
$count = $count_at = $singlenum = 0;
if($_GET['at'] == 1 && $gid < 0) {
$count_at = C::t('home_follow')->count_by_uid_username($_G['uid'], $_GET['username']);
if($count_at) {
foreach(C::t('home_follow')->fetch_all_by_uid_username($_G['uid'], $_GET['username'], $start, $perpage) as $value) {
$value['fusername'] = daddslashes($value['fusername']);
$value['avatar'] = avatar($value['followuid'], 'small', true);
$singlenum++;
$json[$value['followuid']] = "$value[followuid]:{'uid':$value[followuid], 'username':'$value[fusername]', 'avatar':'$value[avatar]'}";
}
$perpage = $perpage - $singlenum;
$start = max($start - $count_at, 0);
}
}
if($perpage && $gid != -2) {
$count = C::t('home_friend')->fetch_all_search($_G['uid'], $gid, $_GET['username'], true);
if($count) {
$homefriend = C::t('home_friend')->fetch_all_search($_G['uid'], $gid, $_GET['username'], false, $start, $perpage, true);
$usrids = array();
foreach($homefriend as $key=>$usrs) {
$usrids[$key] = $usrs['fuid'];
}
$usernames = C::t('common_member')->fetch_all_username_by_uid($usrids);
foreach($homefriend as $value) {
$value['fusername'] = daddslashes($usernames[$value['fuid']]);
$value['avatar'] = avatar($value['fuid'], 'small', true);
$singlenum++;
$json[$value['fuid']] = "$value[fuid]:{'uid':$value[fuid], 'username':'$value[fusername]', 'avatar':'$value[avatar]'}";
}
}
}
$jsstr = "{'userdata':{".implode(',', $json)."}, 'maxfriendnum':'".($count+$count_at)."', 'singlenum':'$singlenum'}";
} elseif($op == 'search') {
if(strlen($searchkey) < 2) {
showmessage('username_less_two_chars');
}
$list = array();
$list = C::t('common_member')->fetch_all_by_like_username($searchkey, 0, 100);
$navtitle = lang('core', 'title_search_friend');
}
include template('home/spacecp_friend');
?>