400 lines
15 KiB
PHP
400 lines
15 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: block_member.php 32370 2013-01-07 03:00:27Z zhangguosheng $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ')) {
|
|
exit('Access Denied');
|
|
}
|
|
class block_member extends discuz_block {
|
|
var $setting = array();
|
|
function block_member() {
|
|
$this->setting = array(
|
|
'uids' => array(
|
|
'title' => 'memberlist_uids',
|
|
'type' => 'text'
|
|
),
|
|
'groupid' => array(
|
|
'title' => 'memberlist_groupid',
|
|
'type' => 'mselect',
|
|
'value' => array()
|
|
),
|
|
'special' => array(
|
|
'title' => 'memberlist_special',
|
|
'type' => 'mradio',
|
|
'value' => array(
|
|
array('', 'memberlist_special_nolimit'),
|
|
array('0', 'memberlist_special_hot'),
|
|
array('1', 'memberlist_special_default'),
|
|
),
|
|
'default' => ''
|
|
),
|
|
'gender' => array(
|
|
'title' => 'memberlist_gender',
|
|
'type' => 'mradio',
|
|
'value' => array(
|
|
array('1', 'memberlist_gender_male'),
|
|
array('2', 'memberlist_gender_female'),
|
|
array('', 'memberlist_gender_nolimit'),
|
|
),
|
|
'default' => ''
|
|
),
|
|
'birthcity' => array(
|
|
'title' => 'memberlist_birthcity',
|
|
'type' => 'district',
|
|
'value' => array('xbirthprovince', 'xbirthcity', 'xbirthdist', 'xbirthcommunity'),
|
|
),
|
|
'residecity' => array(
|
|
'title' => 'memberlist_residecity',
|
|
'type' => 'district',
|
|
'value' => array('xresideprovince', 'xresidecity', 'xresidedist', 'xresidecommunity')
|
|
),
|
|
'avatarstatus' => array(
|
|
'title' => 'memberlist_avatarstatus',
|
|
'type' => 'radio',
|
|
'default' => ''
|
|
),
|
|
'emailstatus' => array(
|
|
'title' => 'memberlist_emailstatus',
|
|
'type' => 'mcheckbox',
|
|
'value' => array(
|
|
array(1, 'memberlist_yes'),
|
|
),
|
|
'default' => ''
|
|
),
|
|
'verifystatus' => array(
|
|
'title' => 'memberlist_verifystatus',
|
|
'type' => 'mcheckbox',
|
|
'value' => array(),
|
|
'default' => '',
|
|
),
|
|
'orderby' => array(
|
|
'title' => 'memberlist_orderby',
|
|
'type' => 'mradio',
|
|
'value' => array(
|
|
array('credits', 'memberlist_orderby_credits'),
|
|
array('extcredits', 'memberlist_orderby_extcredits'),
|
|
array('threads', 'memberlist_orderby_threads'),
|
|
array('posts', 'memberlist_orderby_posts'),
|
|
array('blogs', 'memberlist_orderby_blogs'),
|
|
array('doings', 'memberlist_orderby_doings'),
|
|
array('albums', 'memberlist_orderby_albums'),
|
|
array('sharings', 'memberlist_orderby_sharings'),
|
|
array('digestposts', 'memberlist_orderby_digestposts'),
|
|
array('regdate', 'memberlist_orderby_regdate'),
|
|
array('show', 'memberlist_orderby_show'),
|
|
array('special', 'memberlist_orderby_special'),
|
|
array('todayposts', 'memberlist_orderby_todayposts'),
|
|
),
|
|
'default' => 'credits'
|
|
),
|
|
'extcredit' => array(
|
|
'title' => 'memberlist_orderby_extcreditselect',
|
|
'type' => 'select',
|
|
'value' => array()
|
|
),
|
|
'lastpost' => array(
|
|
'title' => 'memberlist_lastpost',
|
|
'type' => 'mradio',
|
|
'value' => array(
|
|
array('', 'memberlist_lastpost_nolimit'),
|
|
array('3600', 'memberlist_lastpost_hour'),
|
|
array('86400', 'memberlist_lastpost_day'),
|
|
array('604800', 'memberlist_lastpost_week'),
|
|
array('2592000', 'memberlist_lastpost_month'),
|
|
),
|
|
'default' => ''
|
|
),
|
|
'startrow' => array(
|
|
'title' => 'memberlist_startrow',
|
|
'type' => 'text',
|
|
'default' => 0
|
|
),
|
|
);
|
|
$verifys = getglobal('setting/verify');
|
|
if(!empty($verifys)) {
|
|
foreach($verifys as $key => $value) {
|
|
if($value['title']) {
|
|
$this->setting['verifystatus']['value'][] = array($key, $value['title']);
|
|
}
|
|
}
|
|
}
|
|
if(empty($this->setting['verifystatus']['value'])) {
|
|
unset($this->setting['verifystatus']);
|
|
}
|
|
}
|
|
|
|
function name() {
|
|
return lang('blockclass', 'blockclass_member_script_member');
|
|
}
|
|
|
|
function blockclass() {
|
|
return array('member', lang('blockclass', 'blockclass_member_member'));
|
|
}
|
|
|
|
function fields() {
|
|
global $_G;
|
|
$fields = array(
|
|
'id' => array('name' => lang('blockclass', 'blockclass_field_id'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'url' => array('name' => lang('blockclass', 'blockclass_member_field_url'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
'title' => array('name' => lang('blockclass', 'blockclass_member_field_title'), 'formtype' => 'title', 'datatype' => 'title'),
|
|
'avatar' => array('name' => lang('blockclass', 'blockclass_member_field_avatar'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
'avatar_middle' => array('name' => lang('blockclass', 'blockclass_member_field_avatar_middle'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
'avatar_big' => array('name' => lang('blockclass', 'blockclass_member_field_avatar_big'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
'regdate' => array('name' => lang('blockclass', 'blockclass_member_field_regdate'), 'formtype' => 'date', 'datatype' => 'date'),
|
|
'posts' => array('name' => lang('blockclass', 'blockclass_member_field_posts'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'threads' => array('name' => lang('blockclass', 'blockclass_member_field_threads'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'digestposts' => array('name' => lang('blockclass', 'blockclass_member_field_digestposts'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'credits' => array('name' => lang('blockclass', 'blockclass_member_field_credits'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'reason' => array('name' => lang('blockclass', 'blockclass_member_field_reason'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
'unitprice' => array('name' => lang('blockclass', 'blockclass_member_field_unitprice'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'showcredit' => array('name' => lang('blockclass', 'blockclass_member_field_showcredit'), 'formtype' => 'text', 'datatype' => 'int'),
|
|
'shownote' => array('name' => lang('blockclass', 'blockclass_member_field_shownote'), 'formtype' => 'text', 'datatype' => 'string'),
|
|
);
|
|
foreach($_G['setting']['extcredits'] as $key=>$value) {
|
|
$fields['extcredits'.$key] = array('name'=>$value['title'], 'formtype'=>'text', 'datatype'=>'int');
|
|
}
|
|
loadcache('profilesetting');
|
|
foreach($_G['cache']['profilesetting'] as $key=>$value) {
|
|
if($value['available']) {
|
|
$fields[$key] = array('name'=>$value['title'], 'formtype'=>'text', 'datatype'=>'string');
|
|
}
|
|
}
|
|
return $fields;
|
|
}
|
|
|
|
function getsetting() {
|
|
global $_G;
|
|
$settings = $this->setting;
|
|
|
|
if($settings['extcredit']) {
|
|
foreach($_G['setting']['extcredits'] as $id => $credit) {
|
|
$settings['extcredit']['value'][] = array($id, $credit['title']);
|
|
}
|
|
}
|
|
if($settings['groupid']) {
|
|
$settings['groupid']['value'][] = array(0, lang('portalcp', 'block_all_group'));
|
|
foreach(C::t('common_usergroup')->fetch_all_by_type(array('member', 'special')) as $value) {
|
|
$settings['groupid']['value'][] = array($value['groupid'], $value['grouptitle']);
|
|
}
|
|
}
|
|
return $settings;
|
|
}
|
|
|
|
function getdata($style, $parameter) {
|
|
global $_G;
|
|
|
|
$parameter = $this->cookparameter($parameter);
|
|
|
|
$uids = !empty($parameter['uids']) ? explode(',',$parameter['uids']) : array();
|
|
$groupid = !empty($parameter['groupid']) && !in_array(0, $parameter['groupid']) ? $parameter['groupid'] : array();
|
|
$startrow = !empty($parameter['startrow']) ? intval($parameter['startrow']) : 0;
|
|
$items = !empty($parameter['items']) ? intval($parameter['items']) : 10;
|
|
$orderby = isset($parameter['orderby']) && in_array($parameter['orderby'],array('credits', 'extcredits', 'threads', 'posts', 'digestposts', 'regdate', 'show', 'blogs', 'albums', 'doings', 'sharings', 'special', 'todayposts')) ? $parameter['orderby'] : '';
|
|
$special = isset($parameter['special']) && strlen($parameter['special']) ? intval($parameter['special']) : null;
|
|
$lastpost = !empty($parameter['lastpost']) ? intval($parameter['lastpost']) : '';
|
|
$avatarstatus = !empty($parameter['avatarstatus']) ? 1 : 0;
|
|
$emailstatus = !empty($parameter['emailstatus']) ? 1 : 0;
|
|
$verifystatus = !empty($parameter['verifystatus']) ? $parameter['verifystatus'] : array();
|
|
$profiles = array();
|
|
$profiles['gender'] = !empty($parameter['gender']) ? intval($parameter['gender']) : 0;
|
|
$profiles['resideprovince'] = !empty($parameter['xresideprovince']) ? $parameter['xresideprovince'] : '';
|
|
$profiles['residecity'] = !empty($parameter['xresidecity']) ? $parameter['xresidecity'] : '';
|
|
$profiles['residedist'] = !empty($parameter['xresidedist']) ? $parameter['xresidedist'] : '';
|
|
$profiles['residecommunity'] = !empty($parameter['xresidecommunity']) ? $parameter['xresidecommunity'] : '';
|
|
$profiles['birthprovince'] = !empty($parameter['xbirthprovince']) ? $parameter['xbirthprovince'] : '';
|
|
$profiles['birthcity'] = !empty($parameter['xbirthcity']) ? $parameter['xbirthcity'] : '';
|
|
|
|
$bannedids = !empty($parameter['bannedids']) ? explode(',', $parameter['bannedids']) : array();
|
|
|
|
$list = $todayuids = $todayposts = array();
|
|
$tables = $wheres = array();
|
|
$sqlorderby = '';
|
|
$olditems = $items;
|
|
$tables[] = DB::table('common_member').' m';
|
|
if($groupid) {
|
|
$wheres[] = 'm.groupid IN ('.dimplode($groupid).')';
|
|
}
|
|
if($bannedids) {
|
|
$wheres[] = 'm.uid NOT IN ('.dimplode($bannedids).')';
|
|
}
|
|
if($avatarstatus) {
|
|
$wheres[] = "m.avatarstatus='1'";
|
|
}
|
|
if($emailstatus) {
|
|
$wheres[] = "m.emailstatus='1'";
|
|
}
|
|
if(!empty($verifystatus)) {
|
|
$flag = false;
|
|
foreach($verifystatus as $value) {
|
|
if(isset($_G['setting']['verify'][$value])) {
|
|
$flag = true;
|
|
$wheres[] = "cmv.verify$value='1'";
|
|
}
|
|
}
|
|
if($flag) {
|
|
$tables[] = DB::table('common_member_verify').' cmv';
|
|
$wheres[] = 'cmv.uid=m.uid';
|
|
}
|
|
}
|
|
$tables[] = DB::table('common_member_count').' mc';
|
|
$wheres[] = 'mc.uid=m.uid';
|
|
foreach($profiles as $key=>$value) {
|
|
if($value) {
|
|
$tables[] = DB::table('common_member_profile').' mp';
|
|
$wheres[] = 'mp.uid=m.uid';
|
|
$wheres[] = "mp.$key='$value'";
|
|
}
|
|
}
|
|
|
|
$reason = $show = '';
|
|
if($special !== null) {
|
|
$special = in_array($special, array(-1, 0, 1)) ? $special : -1;
|
|
$tables[] = DB::table('home_specialuser').' su';
|
|
if($special != -1) {
|
|
$wheres[] = "su.status='$special'";
|
|
}
|
|
$wheres[] = 'su.uid=m.uid';
|
|
$reason = ', su.reason';
|
|
}
|
|
if($lastpost && $orderby != 'todayposts') {
|
|
$time = TIMESTAMP - $lastpost;
|
|
$tables[] = DB::table('common_member_status')." ms";
|
|
$wheres[] = "ms.uid=m.uid";
|
|
$wheres[] = "ms.lastpost>'$time'";
|
|
}
|
|
switch($orderby) {
|
|
case 'credits':
|
|
case 'regdate':
|
|
$sqlorderby = " ORDER BY m.$orderby DESC";
|
|
break;
|
|
case 'extcredits':
|
|
$extcredits = 'extcredits'.(in_array($parameter['extcredit'], range(1, 8)) ? $parameter['extcredit'] : '1');
|
|
$sqlorderby = " ORDER BY mc.$extcredits DESC";
|
|
break;
|
|
case 'threads':
|
|
case 'posts':
|
|
case 'blogs':
|
|
case 'albums':
|
|
case 'doings':
|
|
case 'sharings':
|
|
case 'digestposts':
|
|
$sqlorderby = " ORDER BY mc.$orderby DESC";
|
|
break;
|
|
case 'show':
|
|
$show = ', s.unitprice, s.credit as showcredit, s.note as shownote';
|
|
$tables[] = DB::table('home_show')." s";
|
|
$wheres[] = 's.uid=m.uid';
|
|
$sqlorderby = ' ORDER BY s.unitprice DESC, s.credit DESC';
|
|
break;
|
|
case 'special':
|
|
$sqlorderby = $special !== null ? ' ORDER BY su.displayorder, dateline DESC' : '';
|
|
break;
|
|
case 'todayposts':
|
|
$todaytime = strtotime(dgmdate(TIMESTAMP, 'Ymd'));
|
|
$inuids = $uids ? ' AND uid IN ('.dimplode($uids).')' : '';
|
|
$items = $items * 5;
|
|
$query = DB::query('SELECT uid, count(*) as sum FROM '.DB::table('common_member_action_log')."
|
|
WHERE dateline>=$todaytime AND action='".getuseraction('pid')."'$inuids GROUP BY uid ORDER BY sum DESC LIMIT $items");
|
|
while($value = DB::fetch($query)) {
|
|
$todayposts[$value['uid']] = $value['sum'];
|
|
$todayuids[] = $value['uid'];
|
|
}
|
|
if(empty($todayuids)) {
|
|
$todayuids = array(0);
|
|
}
|
|
$uids = $todayuids;
|
|
break;
|
|
}
|
|
|
|
if($uids) {
|
|
$wheres[] = 'm.uid IN ('.dimplode($uids).')';
|
|
}
|
|
$wheres[] = '(m.groupid < 4 OR m.groupid > 8)';
|
|
|
|
$tables = array_unique($tables);
|
|
$wheres = array_unique($wheres);
|
|
$tablesql = implode(',',$tables);
|
|
$wheresql = implode(' AND ',$wheres);
|
|
$query = DB::query("SELECT m.*, mc.*$reason$show FROM $tablesql WHERE $wheresql $sqlorderby LIMIT $startrow,$items");
|
|
$resultuids = array();
|
|
while($data = DB::fetch($query)){
|
|
$resultuids[] = intval($data['uid']);
|
|
$list[] = array(
|
|
'id' => $data['uid'],
|
|
'idtype' => 'uid',
|
|
'title' => $data['username'],
|
|
'url' => 'home.php?mod=space&uid='.$data['uid'],
|
|
'pic' => '',
|
|
'picflag' => 0,
|
|
'summary' => '',
|
|
'fields' => array(
|
|
'avatar' => avatar($data['uid'], 'small', true, false, false, $_G['setting']['ucenterurl']),
|
|
'avatar_middle' => avatar($data['uid'], 'middle', true, false, false, $_G['setting']['ucenterurl']),
|
|
'avatar_big' => avatar($data['uid'], 'big', true, false, false, $_G['setting']['ucenterurl']),
|
|
'credits' => $data['credits'],
|
|
'extcredits1' => $data['extcredits1'],
|
|
'extcredits2' => $data['extcredits2'],
|
|
'extcredits3' => $data['extcredits3'],
|
|
'extcredits4' => $data['extcredits4'],
|
|
'extcredits5' => $data['extcredits5'],
|
|
'extcredits6' => $data['extcredits6'],
|
|
'extcredits7' => $data['extcredits7'],
|
|
'extcredits8' => $data['extcredits8'],
|
|
'regdate' => $data['regdate'],
|
|
'posts' => empty($todayposts[$data['uid']]) ? $data['posts'] : $todayposts[$data['uid']],
|
|
'threads' => $data['threads'],
|
|
'digestposts' => $data['digestposts'],
|
|
'reason' => isset($data['reason']) ? $data['reason'] : '',
|
|
'unitprice' => isset($data['unitprice']) ? $data['unitprice'] : '',
|
|
'showcredit' => isset($data['showcredit']) ? $data['showcredit'] : '',
|
|
'shownote' => isset($data['shownote']) ? $data['shownote'] : '',
|
|
)
|
|
);
|
|
}
|
|
if($resultuids) {
|
|
include_once libfile('function/profile');
|
|
$profiles = array();
|
|
$query = DB::query('SELECT * FROM '.DB::table('common_member_profile')." WHERE uid IN (".dimplode($resultuids).")");
|
|
while($data = DB::fetch($query)) {
|
|
$profile = array();
|
|
foreach($data as $fieldid=>$fieldvalue) {
|
|
$fieldvalue = profile_show($fieldid, $data, true);
|
|
if(false !== $fieldvalue) {
|
|
$profile[$fieldid] = $fieldvalue;
|
|
}
|
|
}
|
|
$profiles[$data['uid']] = $profile;
|
|
}
|
|
for($i=0,$L=count($list); $i<$L; $i++) {
|
|
$uid = $list[$i]['id'];
|
|
if($profiles[$uid]) {
|
|
$list[$i]['fields'] = array_merge($list[$i]['fields'], $profiles[$uid]);
|
|
}
|
|
}
|
|
|
|
if(!empty($todayuids)) {
|
|
$datalist = array();
|
|
foreach($todayuids as $uid) {
|
|
foreach($list as $user) {
|
|
if($user['id'] == $uid) {
|
|
$datalist[] = $user;
|
|
break;
|
|
}
|
|
}
|
|
if(count($datalist) >= $olditems) {
|
|
break;
|
|
}
|
|
}
|
|
$list = $datalist;
|
|
}
|
|
}
|
|
return array('html' => '', 'data' => $list);
|
|
}
|
|
}
|
|
|
|
?>
|