moderate_member.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: moderate_member.php 33688 2013-08-02 03:00:15Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. $do = empty($do) ? 'mod' : $do;
  12. if($do == 'mod') {
  13. if(!submitcheck('modsubmit')) {
  14. $count = C::t('common_member_validate')->fetch_all_status_by_count();
  15. $sendemail = isset($_GET['sendemail']) ? $_GET['sendemail'] : 0;
  16. $checksendemail = $sendemail ? 'checked' : '';
  17. $start_limit = ($page - 1) * $_G['setting']['memberperpage'];
  18. $validatenum = C::t('common_member_validate')->count_by_status(0);
  19. $members = '';
  20. if($validatenum) {
  21. $multipage = multi($validatenum, $_G['setting']['memberperpage'], $page, ADMINSCRIPT.'?action=moderate&operation=members&sendemail='.$sendemail);
  22. $vuids = array();
  23. loadcache('fields_register');
  24. require_once libfile('function/profile');
  25. loadcache('usergroups');
  26. $allvalidate = C::t('common_member_validate')->fetch_all_invalidate($start_limit, $_G['setting']['memberperpage']);
  27. $uids = array_keys($allvalidate);
  28. $allmember = C::t('common_member')->fetch_all($uids, false, 0);
  29. $allmemberstatus = C::t('common_member_status')->fetch_all($uids, false, 0);
  30. $allmemberprofile = C::t('common_member_profile')->fetch_all($uids, false, 0);
  31. foreach($allvalidate as $uid => $member) {
  32. $member = array_merge((array)$member, (array)$allmember[$uid], (array)$allmemberstatus[$uid], (array)$allmemberprofile[$uid]);
  33. if($member['groupid'] != 8 && $member['freeze'] != 2) {
  34. $vuids[$uid] = $uid;
  35. continue;
  36. }
  37. $fields = !empty($member['field']) ? dunserialize($member['field']) : array();
  38. $str = '';
  39. foreach($_G['cache']['fields_register'] as $field) {
  40. if(!$field['available'] || in_array($field['fieldid'], array('uid', 'constellation', 'zodiac', 'birthmonth', 'birthyear', 'birthprovince', 'birthdist', 'birthcommunity', 'resideprovince', 'residedist', 'residecommunity'))) {
  41. continue;
  42. }
  43. $member[$field['fieldid']] = !empty($member[$field['fieldid']]) ? $member[$field['fieldid']] : $fields[$field['fieldid']];
  44. if($member[$field['fieldid']]) {
  45. $fieldstr = profile_show($field['fieldid'], $member);
  46. $str .= $field['title'].':'.$fieldstr."<br/>";
  47. }
  48. }
  49. $str = !empty($str) ? '<br/>'.$str : '';
  50. $member['regdate'] = dgmdate($member['regdate']);
  51. $member['submitdate'] = dgmdate($member['submitdate']);
  52. $member['moddate'] = $member['moddate'] ? dgmdate($member['moddate']) : $lang['none'];
  53. $member['admin'] = $member['admin'] ? "<a href=\"home.php?mod=space&username=".rawurlencode($member['admin'])."\" target=\"_blank\">$member[admin]</a>" : $lang['none'];
  54. $members .= "<tr class=\"hover\" id=\"mod_uid_{$member[uid]}\"><td class=\"rowform\" style=\"width:80px;\"><ul class=\"nofloat\"><li><input id=\"mod_uid_{$member[uid]}_1\" class=\"radio\" type=\"radio\" name=\"modtype[$member[uid]]\" value=\"invalidate\" onclick=\"set_bg('invalidate', $member[uid]);\"><label for=\"mod_uid_{$member[uid]}_1\">$lang[invalidate]</label></li><li><input id=\"mod_uid_{$member[uid]}_2\" class=\"radio\" type=\"radio\" name=\"modtype[$member[uid]]\" value=\"validate\" onclick=\"set_bg('validate', $member[uid]);\"><label for=\"mod_uid_{$member[uid]}_2\">$lang[validate]</label></li>\n".
  55. "<li>".($member['groupid'] == 8 ? "<input id=\"mod_uid_{$member[uid]}_3\" class=\"radio\" type=\"radio\" name=\"modtype[$member[uid]]\" value=\"delete\" onclick=\"set_bg('delete', $member[uid]);\"><label for=\"mod_uid_{$member[uid]}_3\">$lang[delete]</label>" : "<input disabled class=\"radio\" type=\"radio\" />$lang[delete]")."</li><li><input id=\"mod_uid_{$member[uid]}_4\" class=\"radio\" type=\"radio\" name=\"modtype[$member[uid]]\" value=\"ignore\" onclick=\"set_bg('ignore', $member[uid]);\"><label for=\"mod_uid_{$member[uid]}_4\">$lang[ignore]</label></li></ul></td><td><b><a href=\"home.php?mod=space&uid=$member[uid]\" target=\"_blank\">$member[username]</a></b>\n".$_G['cache']['usergroups'][$member['groupid']]['grouptitle'].
  56. "<br />$lang[members_edit_regdate]: $member[regdate]<br />$lang[members_edit_regip]: $member[regip] ".convertip($member['regip'])."<br />$lang[members_edit_lastip]: $member[lastip] ".convertip($member['lastip'])."<br />Email: $member[email]$str</td>\n".
  57. "<td align=\"center\"><textarea rows=\"4\" name=\"userremark[$member[uid]]\" style=\"width: 95%; word-break: break-all\">$member[message]</textarea></td>\n".
  58. "<td>$lang[moderate_members_submit_times]: $member[submittimes]<br />$lang[moderate_members_submit_time]: $member[submitdate]<br />$lang[moderate_members_admin]: $member[admin]<br />\n".
  59. "$lang[moderate_members_mod_time]: $member[moddate]</td><td><textarea rows=\"4\" id=\"remark[$member[uid]]\" name=\"remark[$member[uid]]\" style=\"width: 95%; word-break: break-all\">$member[remark]</textarea></td></tr>\n";
  60. }
  61. }
  62. shownav('user', 'nav_modmembers');
  63. showsubmenu('nav_moderate_users', array(
  64. array('nav_moderate_users_mod', 'moderate&operation=members&do=mod', 1),
  65. array('clean', 'moderate&operation=members&do=del', 0)
  66. ));
  67. showtips('moderate_members_tips');
  68. $moderate_members_bad_reason = cplang('moderate_members_bad_reason');
  69. $moderate_members_succeed = cplang('moderate_members_succeed');
  70. echo <<<EOT
  71. <script type="text/javascript">
  72. function set_bg(operation, uid) {
  73. if(operation == 'invalidate') {
  74. $('mod_uid_' + uid).className = "mod_invalidate";
  75. $('remark[' + uid + ']').value = '$moderate_members_bad_reason';
  76. } else if(operation == 'validate') {
  77. $('mod_uid_' + uid).className = "mod_validate";
  78. $('remark[' + uid + ']').value = '$moderate_members_succeed';
  79. } else if(operation == 'ignore') {
  80. $('mod_uid_' + uid).className = "mod_ignore";
  81. $('remark[' + uid + ']').value = '';
  82. } else if(operation == 'delete') {
  83. $('mod_uid_' + uid).className = "mod_delete";
  84. $('remark[' + uid + ']').value = '';
  85. }
  86. $('chk_apply_all').disabled = true;
  87. $('chk_apply_all').checked = false;
  88. }
  89. function set_bg_all(operation) {
  90. var trs = $('cpform').getElementsByTagName('TR');
  91. for(var i in trs) {
  92. if(trs[i].id && trs[i].id.substr(0, 8) == 'mod_uid_') {
  93. uid = trs[i].id.substr(8);
  94. if(operation == 'invalidate') {
  95. trs[i].className = 'mod_invalidate';
  96. $('remark[' + uid + ']').value = '$moderate_members_bad_reason';
  97. } else if(operation == 'validate') {
  98. trs[i].className = 'mod_validate';
  99. $('remark[' + uid + ']').value = '$moderate_members_succeed';
  100. } else if(operation == 'ignore') {
  101. trs[i].className = 'mod_ignore';
  102. $('remark[' + uid + ']').value = '';
  103. } else if(operation == 'delete') {
  104. trs[i].className = 'mod_delete';
  105. $('remark[' + uid + ']').value = '';
  106. }else if(operation == 'cancel') {
  107. trs[i].className = '';
  108. $('remark[' + uid + ']').value = '';
  109. }
  110. }
  111. }
  112. if(operation != 'cancel') {
  113. $('chk_apply_all').disabled = false;
  114. $('chk_apply_all').value = operation;
  115. } else {
  116. $('chk_apply_all').disabled = true;
  117. $('chk_apply_all').checked = false;
  118. }
  119. }
  120. function cancelallcheck() {
  121. var form = $('cpform');
  122. var checkall = 'chkall';
  123. for(var i = 0; i < form.elements.length; i++) {
  124. var e = form.elements[i];
  125. if(e.type == 'radio') {
  126. e.checked = '';
  127. }
  128. }
  129. }
  130. </script>
  131. EOT;
  132. showformheader('moderate&operation=members&do=mod');
  133. showtableheader('moderate_members', 'fixpadding');
  134. showsubtitle(array('operation', 'members_edit_info', 'moderate_members_message', 'moderate_members_info', 'moderate_members_remark'));
  135. echo $members;
  136. showsubmit('modsubmit', 'submit', '', '<a href="#all" onclick="checkAll(\'option\', $(\'cpform\'), \'invalidate\');set_bg_all(\'invalidate\');">'.cplang('moderate_all_invalidate').'</a> &nbsp;<a href="#all" onclick="checkAll(\'option\', $(\'cpform\'), \'validate\');set_bg_all(\'validate\');">'.cplang('moderate_all_validate').'</a> &nbsp;<a href="#all" onclick="checkAll(\'option\', $(\'cpform\'), \'delete\');set_bg_all(\'delete\');">'.cplang('moderate_all_delete').'</a> &nbsp;<a href="#all" onclick="checkAll(\'option\', $(\'cpform\'), \'ignore\');set_bg_all(\'ignore\');">'.cplang('moderate_all_ignore').'</a> &nbsp;<a href="#all" onclick="cancelallcheck();set_bg_all(\'cancel\');">'.cplang('moderate_all_cancel').'</a><input class="checkbox" type="checkbox" name="apply_all" id="chk_apply_all" value="1" disabled="disabled" />'.cplang('moderate_apply_all').' &nbsp;<input class="checkbox" type="checkbox" name="sendemail" id="sendemail" value="1" '.$checksendemail.' /><label for="sendemail"> '.cplang('moderate_members_email').'</label>', $multipage);
  137. showtablefooter();
  138. showformfooter();
  139. } else {
  140. $moderation = array('invalidate' => array(), 'validate' => array(), 'delete' => array(), 'ignore' => array());
  141. $uids = array();
  142. $uidsql = '';
  143. if(!$_GET['apply_all']) {
  144. if(is_array($_GET['modtype'])) {
  145. foreach($_GET['modtype'] as $uid => $act) {
  146. $uid = intval($uid);
  147. $uids[$uid] = $uid;
  148. $moderation[$act][$uid] = $uid;
  149. }
  150. $uidsql = 'v.uid IN ('.dimplode($uids).') AND';
  151. }
  152. }
  153. $members = array();
  154. $allmembervalidate = $uids ? C::t('common_member_validate')->fetch_all($uids) : C::t('common_member_validate')->range();
  155. foreach(C::t('common_member')->fetch_all(array_keys($allmembervalidate), false, 0) as $uid => $member) {
  156. if($member['groupid'] == 8 || $member['freeze'] == 2) {
  157. $members[$uid] = $member;
  158. }
  159. }
  160. $alluids = array_keys($members);
  161. if($_GET['apply_all']) {
  162. $moderation[$_GET['apply_all']] = array_merge($alluids, $moderation[$_GET['apply_all']]);
  163. }
  164. if(!empty($members)) {
  165. $numdeleted = $numinvalidated = $numvalidated = 0;
  166. if(!empty($moderation['delete']) && is_array($moderation['delete'])) {
  167. $deluids = array_intersect($moderation['delete'], $alluids);
  168. $numdeleted = count($deluids);
  169. C::t('common_member')->delete_no_validate($deluids);
  170. loaducenter();
  171. uc_user_delete($deluids);
  172. } else {
  173. $moderation['delete'] = array();
  174. }
  175. if(!empty($moderation['validate']) && is_array($moderation['validate'])) {
  176. $validateuids = array_intersect($moderation['validate'], $alluids);
  177. C::t('common_member')->update($validateuids, array('adminid' => 0, 'groupid' => $_G['setting']['newusergroupid'], 'freeze' => 0));
  178. $numvalidated = count($validateuids);
  179. C::t('common_member_validate')->delete($validateuids);
  180. } else {
  181. $moderation['validate'] = array();
  182. }
  183. if(!empty($moderation['invalidate']) && is_array($moderation['invalidate'])) {
  184. $invalidateuids = array_intersect($moderation['invalidate'], $alluids);
  185. $numinvalidated = count($invalidateuids);
  186. foreach($invalidateuids as $uid) {
  187. C::t('common_member_validate')->update($uid, array('moddate' => $_G['timestamp'], 'admin' => $_G['username'], 'status' => '1', 'remark' => dhtmlspecialchars($_GET['remark'][$uid])));
  188. }
  189. } else {
  190. $moderation['invalidate'] = array();
  191. }
  192. foreach(array('validate', 'invalidate') as $o) {
  193. foreach($moderation[$o] as $uid) {
  194. if($_GET['remark'][$uid]) {
  195. switch($o) {
  196. case 'validate':
  197. notification_add($uid, 'mod_member', 'member_moderate_validate', array('remark' => $_GET['remark'][$uid]));
  198. break;
  199. case 'invalidate':
  200. notification_add($uid, 'mod_member', 'member_moderate_invalidate', array('remark' => $_GET['remark'][$uid]));
  201. break;
  202. }
  203. } else {
  204. switch($o) {
  205. case 'validate':
  206. notification_add($uid, 'mod_member', 'member_moderate_validate_no_remark');
  207. break;
  208. case 'invalidate':
  209. notification_add($uid, 'mod_member', 'member_moderate_invalidate_no_remark');
  210. break;
  211. }
  212. }
  213. }
  214. }
  215. if($_GET['sendemail']) {
  216. if(!function_exists('sendmail')) {
  217. include libfile('function/mail');
  218. }
  219. foreach(array('delete', 'validate', 'invalidate') as $o) {
  220. foreach($moderation[$o] as $uid) {
  221. if(isset($members[$uid])) {
  222. $member = $members[$uid];
  223. $member['regdate'] = dgmdate($member['regdate']);
  224. $member['submitdate'] = dgmdate($member['submitdate']);
  225. $member['moddate'] = dgmdate(TIMESTAMP);
  226. $member['operation'] = $o;
  227. $member['remark'] = $_GET['remark'][$uid] ? dhtmlspecialchars($_GET['remark'][$uid]) : $lang['none'];
  228. $moderate_member_message = lang('email', 'moderate_member_message', array(
  229. 'username' => $member['username'],
  230. 'bbname' => $_G['setting']['bbname'],
  231. 'regdate' => $member['regdate'],
  232. 'submitdate' => $member['submitdate'],
  233. 'submittimes' => $member['submittimes'],
  234. 'message' => $member['message'],
  235. 'modresult' => lang('email', 'moderate_member_'.$member['operation']),
  236. 'moddate' => $member['moddate'],
  237. 'adminusername' => $_G['member']['username'],
  238. 'remark' => $member['remark'],
  239. 'siteurl' => $_G['siteurl'],
  240. ));
  241. if(!sendmail("$member[username] <$member[email]>", lang('email', 'moderate_member_subject'), $moderate_member_message)) {
  242. runlog('sendmail', "$member[email] sendmail failed.");
  243. }
  244. }
  245. }
  246. }
  247. }
  248. }
  249. cpmsg('moderate_members_op_succeed', "action=moderate&operation=members&page=$page", 'succeed', array('numvalidated' => $numvalidated, 'numinvalidated' => $numinvalidated, 'numdeleted' => $numdeleted));
  250. }
  251. } elseif($do == 'del') {
  252. if(!submitcheck('prunesubmit', 1)) {
  253. shownav('user', 'nav_modmembers');
  254. showsubmenu('nav_moderate_users', array(
  255. array('nav_moderate_users_mod', 'moderate&operation=members&do=mod', 0),
  256. array('clean', 'moderate&operation=members&do=del', 1)
  257. ));
  258. showtips('moderate_members_tips');
  259. showformheader('moderate&operation=members&do=del');
  260. showtableheader('moderate_members_prune');
  261. showsetting('moderate_members_prune_submitmore', 'submitmore', '5', 'text');
  262. showsetting('moderate_members_prune_regbefore', 'regbefore', '30', 'text');
  263. showsetting('moderate_members_prune_modbefore', 'modbefore', '15', 'text');
  264. showsetting('moderate_members_prune_regip', 'regip', '', 'text');
  265. showsubmit('prunesubmit');
  266. showtablefooter();
  267. showformfooter();
  268. } else {
  269. $uids = C::t('common_member_validate')->fetch_all_validate_uid($_GET['submitmore'], $_GET['regbefore'], $_GET['modbefore'], $_GET['regip']);
  270. if((!$membernum = count($uids))) {
  271. cpmsg('members_search_noresults', '', 'error');
  272. } elseif(!$_GET['confirmed']) {
  273. cpmsg('members_delete_confirm', "action=moderate&operation=members&do=del&submitmore=".rawurlencode($_GET['submitmore'])."&regbefore=".rawurlencode($_GET['regbefore'])."&regip=".rawurlencode($_GET['regip'])."&prunesubmit=yes", 'form', array('membernum' => $membernum));
  274. } else {
  275. $numdeleted = C::t('common_member')->delete_no_validate(array_keys($uids));
  276. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $numdeleted));
  277. }
  278. }
  279. }
  280. ?>