PageRenderTime 61ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 1ms

/source/admincp/admincp_members.php

https://github.com/kuaileshike/upload
PHP | 3279 lines | 2895 code | 378 blank | 6 comment | 734 complexity | fee933808c1b42223764b019fbcb0622 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  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: admincp_members.php 31986 2012-10-30 05:18:16Z chenmengshu $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. @set_time_limit(600);
  12. if($operation != 'export') {
  13. cpheader();
  14. }
  15. require_once libfile('function/delete');
  16. $_G['setting']['memberperpage'] = 20;
  17. $page = max(1, $_G['page']);
  18. $start_limit = ($page - 1) * $_G['setting']['memberperpage'];
  19. $search_condition = array_merge($_GET, $_POST);
  20. if(!is_array($search_condition['groupid']) && $search_condition['groupid']) {
  21. $search_condition['groupid'][0] = $search_condition['groupid'];
  22. }
  23. foreach($search_condition as $k => $v) {
  24. if(in_array($k, array('action', 'operation', 'formhash', 'confirmed', 'submit', 'page', 'deletestart', 'allnum', 'includeuc','includepost','current','pertask','lastprocess','deleteitem')) || $v === '') {
  25. unset($search_condition[$k]);
  26. }
  27. }
  28. $search_condition = searchcondition($search_condition);
  29. $tmpsearch_condition = $search_condition;
  30. unset($tmpsearch_condition['tablename']);
  31. $member = array();
  32. $tableext = '';
  33. if(in_array($operation, array('ban', 'edit', 'group', 'credit', 'medal', 'access'), true)) {
  34. if(empty($_GET['uid']) && empty($_GET['username'])) {
  35. cpmsg('members_nonexistence', 'action=members&operation='.$operation.(!empty($_GET['highlight']) ? "&highlight={$_GET['highlight']}" : ''), 'form', array(), '<input type="text" name="username" value="" class="txt" />');
  36. }
  37. $member = !empty($_GET['uid']) ? C::t('common_member')->fetch($_GET['uid'], false, 1) : C::t('common_member')->fetch_by_username($_GET['username'], 1);
  38. if(!$member) {
  39. cpmsg('members_edit_nonexistence', '', 'error');
  40. }
  41. $tableext = isset($member['_inarchive']) ? '_archive' : '';
  42. }
  43. if($operation == 'search') {
  44. if(!submitcheck('submit', 1)) {
  45. shownav('user', 'nav_members');
  46. showsubmenu('nav_members', array(
  47. array('search', 'members&operation=search', 1),
  48. array('clean', 'members&operation=clean', 0),
  49. array('nav_repeat', 'members&operation=repeat', 0),
  50. ));
  51. showtips('members_admin_tips');
  52. if(!empty($_GET['vid']) && ($_GET['vid'] > 0 && $_GET['vid'] < 8)) {
  53. $_GET['verify'] = array('verify'.intval($_GET['vid']));
  54. }
  55. showsearchform('search');
  56. if($_GET['more']) {
  57. print <<<EOF
  58. <script type="text/javascript">
  59. $('btn_more').click();
  60. </script>
  61. EOF;
  62. }
  63. } else {
  64. $membernum = countmembers($search_condition, $urladd);
  65. $members = '';
  66. if($membernum > 0) {
  67. $multipage = multi($membernum, $_G['setting']['memberperpage'], $page, ADMINSCRIPT."?action=members&operation=search&submit=yes".$urladd);
  68. $usergroups = array();
  69. foreach(C::t('common_usergroup')->range() as $group) {
  70. switch($group['type']) {
  71. case 'system': $group['grouptitle'] = '<b>'.$group['grouptitle'].'</b>'; break;
  72. case 'special': $group['grouptitle'] = '<i>'.$group['grouptitle'].'</i>'; break;
  73. }
  74. $usergroups[$group['groupid']] = $group;
  75. }
  76. $uids = searchmembers($search_condition, $_G['setting']['memberperpage'], $start_limit);
  77. if($uids) {
  78. $allmember = C::t('common_member')->fetch_all($uids);
  79. $allcount = C::t('common_member_count')->fetch_all($uids);
  80. foreach($allmember as $uid=>$member) {
  81. $member = array_merge($member, (array)$allcount[$uid]);
  82. $memberextcredits = array();
  83. if($_G['setting']['extcredits']) {
  84. foreach($_G['setting']['extcredits'] as $id => $credit) {
  85. $memberextcredits[] = $_G['setting']['extcredits'][$id]['title'].': '.$member['extcredits'.$id].' ';
  86. }
  87. }
  88. $lockshow = $member['status'] == '-1' ? '<em class="lightnum">['.cplang('lock').']</em>' : '';
  89. $members .= showtablerow('', array('class="td25"', '', 'title="'.implode("\n", $memberextcredits).'"'), array(
  90. "<input type=\"checkbox\" name=\"uidarray[]\" value=\"$member[uid]\"".($member['adminid'] == 1 ? 'disabled' : '')." class=\"checkbox\">",
  91. ($_G['setting']['connect']['allow'] && $member['conisbind'] ? '<img class="vmiddle" src="static/image/common/connect_qq.gif" /> ' : '')."<a href=\"home.php?mod=space&uid=$member[uid]\" target=\"_blank\">$member[username]</a>",
  92. $member['credits'],
  93. $member['posts'],
  94. $usergroups[$member['adminid']]['grouptitle'],
  95. $usergroups[$member['groupid']]['grouptitle'].$lockshow,
  96. "<a href=\"".ADMINSCRIPT."?action=members&operation=group&uid=$member[uid]\" class=\"act\">$lang[usergroup]</a><a href=\"".ADMINSCRIPT."?action=members&operation=access&uid=$member[uid]\" class=\"act\">$lang[members_access]</a>".
  97. ($_G['setting']['extcredits'] ? "<a href=\"".ADMINSCRIPT."?action=members&operation=credit&uid=$member[uid]\" class=\"act\">$lang[credits]</a>" : "<span disabled>$lang[edit]</span>").
  98. "<a href=\"".ADMINSCRIPT."?action=members&operation=medal&uid=$member[uid]\" class=\"act\">$lang[medals]</a>".
  99. "<a href=\"".ADMINSCRIPT."?action=members&operation=repeat&uid=$member[uid]\" class=\"act\">$lang[members_repeat]</a>".
  100. "<a href=\"".ADMINSCRIPT."?action=members&operation=edit&uid=$member[uid]\" class=\"act\">$lang[detail]</a>".
  101. "<a href=\"".ADMINSCRIPT."?action=members&operation=ban&uid=$member[uid]\" class=\"act\">$lang[members_ban]</a>"
  102. ), TRUE);
  103. }
  104. }
  105. }
  106. shownav('user', 'nav_members');
  107. showsubmenu('nav_members');
  108. showtips('members_export_tips');
  109. foreach($search_condition as $k => $v) {
  110. if($k == 'username') {
  111. $v = explode(',', $v);
  112. $tmpv = array();
  113. foreach($v as $subvalue) {
  114. $tmpv[] = rawurlencode($subvalue);
  115. }
  116. $v = implode(',', $tmpv);
  117. }
  118. if(is_array($v)) {
  119. foreach($v as $value ) {
  120. $condition_str .= '&'.$k.'[]='.$value;
  121. }
  122. } else {
  123. $condition_str .= '&'.$k.'='.$v;
  124. }
  125. }
  126. showformheader("members&operation=clean".$condition_str);
  127. showtableheader(cplang('members_search_result', array('membernum' => $membernum)).'<a href="'.ADMINSCRIPT.'?action=members&operation=search" class="act lightlink normal">'.cplang('research').'</a>&nbsp;&nbsp;&nbsp;<a href='.ADMINSCRIPT.'?action=members&operation=export'.$condition_str.'>'.$lang['members_search_export'].'</a>');
  128. if($membernum) {
  129. showsubtitle(array('', 'username', 'credits', 'posts', 'admingroup', 'usergroup', ''));
  130. echo $members;
  131. $condition_str = str_replace('&tablename=master', '', $condition_str);
  132. showsubmit('deletesubmit', cplang('delete'), ($tmpsearch_condition ? '<input type="checkbox" name="chkall" onclick="checkAll(\'prefix\', this.form, \'uidarray\');if(this.checked){$(\'deleteallinput\').style.display=\'\';}else{$(\'deleteall\').checked = false;$(\'deleteallinput\').style.display=\'none\';}" class="checkbox">'.cplang('select_all') : ''), ' &nbsp;&nbsp;&nbsp;<span id="deleteallinput" style="display:none"><input id="deleteall" type="checkbox" name="deleteall" class="checkbox">'.cplang('members_search_deleteall', array('membernum' => $membernum)).'</span>', $multipage);
  133. }
  134. showtablefooter();
  135. showformfooter();
  136. }
  137. } elseif($operation == 'export') {
  138. $uids = searchmembers($search_condition, 10000);
  139. $detail = '';
  140. if($uids && is_array($uids)) {
  141. $allprofile = C::t('common_member_profile')->fetch_all($uids);
  142. $allusername = C::t('common_member')->fetch_all_username_by_uid($uids);
  143. foreach($allprofile as $uid=>$profile) {
  144. unset($profile['uid']);
  145. $profile = array_merge(array('uid'=>$uid, 'username'=>$allusername[$uid]),$profile);
  146. foreach($profile as $key => $value) {
  147. $value = preg_replace('/\s+/', ' ', $value);
  148. if($key == 'gender') $value = lang('space', 'gender_'.$value);
  149. $detail .= strlen($value) > 11 && is_numeric($value) ? '['.$value.'],' : $value.',';
  150. }
  151. $detail = $detail."\n";
  152. }
  153. }
  154. $title = array('realname' => '', 'gender' => '', 'birthyear' => '', 'birthmonth' => '', 'birthday' => '', 'constellation' => '',
  155. 'zodiac' => '', 'telephone' => '', 'mobile' => '', 'idcardtype' => '', 'idcard' => '', 'address' => '', 'zipcode' => '','nationality' => '',
  156. 'birthprovince' => '', 'birthcity' => '', 'birthdist' => '', 'birthcommunity' => '', 'resideprovince' => '', 'residecity' => '', 'residedist' => '',
  157. 'residecommunity' => '', 'residesuite' => '', 'graduateschool' => '', 'education' => '', 'company' => '', 'occupation' => '',
  158. 'position' => '', 'revenue' => '', 'affectivestatus' => '', 'lookingfor' => '', 'bloodtype' => '', 'height' => '', 'weight' => '',
  159. 'alipay' => '', 'icq' => '', 'qq' => '', 'yahoo' => '', 'msn' => '', 'taobao' => '', 'site' => '', 'bio' => '', 'interest' => '',
  160. 'field1' => '', 'field2' => '', 'field3' => '', 'field4' => '', 'field5' => '', 'field6' => '', 'field7' => '', 'field8' => '');
  161. foreach(C::t('common_member_profile_setting')->range() as $value) {
  162. if(isset($title[$value['fieldid']])) {
  163. $title[$value['fieldid']] = $value['title'];
  164. }
  165. }
  166. foreach($title as $k => $v) {
  167. $subject .= ($v ? $v : $k).",";
  168. }
  169. $detail = "UID,".$lang['username'].",".$subject."\n".$detail;
  170. $filename = date('Ymd', TIMESTAMP).'.csv';
  171. ob_end_clean();
  172. header('Content-Encoding: none');
  173. header('Content-Type: application/octet-stream');
  174. header('Content-Disposition: attachment; filename='.$filename);
  175. header('Pragma: no-cache');
  176. header('Expires: 0');
  177. if($_G['charset'] != 'gbk') {
  178. $detail = diconv($detail, $_G['charset'], 'GBK');
  179. }
  180. echo $detail;
  181. exit();
  182. } elseif($operation == 'repeat') {
  183. if(empty($_GET['uid']) && empty($_GET['username']) && empty($_GET['ip'])) {
  184. shownav('user', 'nav_members');
  185. showsubmenu('nav_members', array(
  186. array('search', 'members&operation=search', 0),
  187. array('clean', 'members&operation=clean', 0),
  188. array('nav_repeat', 'members&operation=repeat', 1),
  189. ));
  190. showformheader("members&operation=repeat");
  191. showtableheader();
  192. showsetting('members_search_repeatuser', 'username', '', 'text');
  193. showsetting('members_search_uid', 'uid', '', 'text');
  194. showsetting('members_search_repeatip', 'ip', $_GET['inputip'], 'text');
  195. showsubmit('submit', 'submit');
  196. showtablefooter();
  197. showformfooter();
  198. } else {
  199. $ips = array();
  200. $urladd = '';
  201. if(!empty($_GET['username'])) {
  202. $uid = C::t('common_member')->fetch_uid_by_username($_GET['username']);
  203. $searchmember = $uid ? C::t('common_member_status')->fetch($uid) : '';
  204. $searchmember['username'] = $_GET['username'];
  205. $urladd .= '&username='.$_GET['username'];
  206. } elseif(!empty($_GET['uid'])) {
  207. $searchmember = C::t('common_member_status')->fetch($_GET['uid']);
  208. $themember = C::t('common_member')->fetch($_GET['uid']);
  209. $searchmember['username'] = $themember['username'];
  210. $urladd .= '&uid='.$_GET['uid'];
  211. unset($_GET['uid']);
  212. } elseif(!empty($_GET['ip'])) {
  213. $regip = $lastip = $_GET['ip'];
  214. $ips[] = $_GET['ip'];
  215. $search_condition['lastip'] = $_GET['ip'];
  216. $urladd .= '&ip='.$_GET['ip'];
  217. }
  218. if($searchmember) {
  219. $ips = array();
  220. foreach(array('regip', 'lastip') as $iptype) {
  221. if($searchmember[$iptype] != '' && $searchmember[$iptype] != 'hidden') {
  222. $ips[] = $searchmember[$iptype];
  223. }
  224. }
  225. $ips = !empty($ips) ? array_unique($ips) : array('unknown');
  226. }
  227. $searchmember['username'] .= ' (IP '.dhtmlspecialchars($ids).')';
  228. $membernum = !empty($ips) ? C::t('common_member_status')->count_by_ip($ips) : C::t('common_member_status')->count();
  229. $members = '';
  230. if($membernum) {
  231. $usergroups = array();
  232. foreach(C::t('common_usergroup')->range() as $group) {
  233. switch($group['type']) {
  234. case 'system': $group['grouptitle'] = '<b>'.$group['grouptitle'].'</b>'; break;
  235. case 'special': $group['grouptitle'] = '<i>'.$group['grouptitle'].'</i>'; break;
  236. }
  237. $usergroups[$group['groupid']] = $group;
  238. }
  239. $uids = searchmembers($search_condition, $_G['setting']['memberperpage'], $start_limit);
  240. $conditions = 'm.uid IN ('.dimplode($uids).')';
  241. $_G['setting']['memberperpage'] = 100;
  242. $start_limit = ($page - 1) * $_G['setting']['memberperpage'];
  243. $multipage = multi($membernum, $_G['setting']['memberperpage'], $page, ADMINSCRIPT."?action=members&operation=repeat&submit=yes".$urladd);
  244. $allstatus = !empty($ips) ? C::t('common_member_status')->fetch_all_by_ip($ips, $start_limit, $_G['setting']['memberperpage'])
  245. : C::t('common_member_status')->range($start_limit, $_G['setting']['memberperpage']);
  246. $allcount = C::t('common_member_count')->fetch_all(array_keys($allstatus));
  247. $allmember = C::t('common_member')->fetch_all(array_keys($allstatus));
  248. foreach($allstatus as $uid => $member) {
  249. $member = array_merge($member, (array)$allcount[$uid], (array)$allmember[$uid]);
  250. $memberextcredits = array();
  251. foreach($_G['setting']['extcredits'] as $id => $credit) {
  252. $memberextcredits[] = $_G['setting']['extcredits'][$id]['title'].': '.$member['extcredits'.$id];
  253. }
  254. $members .= showtablerow('', array('class="td25"', '', 'title="'.implode("\n", $memberextcredits).'"'), array(
  255. "<input type=\"checkbox\" name=\"uidarray[]\" value=\"$member[uid]\"".($member['adminid'] == 1 ? 'disabled' : '')." class=\"checkbox\">",
  256. "<a href=\"home.php?mod=space&uid=$member[uid]\" target=\"_blank\">$member[username]</a>",
  257. $member['credits'],
  258. $member['posts'],
  259. $usergroups[$member['adminid']]['grouptitle'],
  260. $usergroups[$member['groupid']]['grouptitle'],
  261. "<a href=\"".ADMINSCRIPT."?action=members&operation=group&uid=$member[uid]\" class=\"act\">$lang[usergroup]</a><a href=\"".ADMINSCRIPT."?action=members&operation=access&uid=$member[uid]\" class=\"act\">$lang[members_access]</a>".
  262. ($_G['setting']['extcredits'] ? "<a href=\"".ADMINSCRIPT."?action=members&operation=credit&uid=$member[uid]\" class=\"act\">$lang[credits]</a>" : "<span disabled>$lang[edit]</span>").
  263. "<a href=\"".ADMINSCRIPT."?action=members&operation=medal&uid=$member[uid]\" class=\"act\">$lang[medals]</a>".
  264. "<a href=\"".ADMINSCRIPT."?action=members&operation=repeat&uid=$member[uid]\" class=\"act\">$lang[members_repeat]</a>".
  265. "<a href=\"".ADMINSCRIPT."?action=members&operation=edit&uid=$member[uid]\" class=\"act\">$lang[detail]</a>"
  266. ), TRUE);
  267. }
  268. }
  269. shownav('user', 'nav_repeat');
  270. showsubmenu($lang['nav_repeat'].' - '.$searchmember['username']);
  271. showformheader("members&operation=clean");
  272. $searchadd = '';
  273. if(is_array($ips)) {
  274. foreach($ips as $ip) {
  275. $searchadd .= '<a href="'.ADMINSCRIPT.'?action=members&operation=repeat&inputip='.rawurlencode($ip).'" class="act lightlink normal">'.cplang('search').'IP '.dhtmlspecialchars($ip).'</a>';
  276. }
  277. }
  278. showtableheader(cplang('members_search_result', array('membernum' => $membernum)).'<a href="'.ADMINSCRIPT.'?action=members&operation=repeat" class="act lightlink normal">'.cplang('research').'</a>'.$searchadd);
  279. showsubtitle(array('', 'username', 'credits', 'posts', 'admingroup', 'usergroup', ''));
  280. echo $members;
  281. showtablerow('', array('class="td25"', 'class="lineheight" colspan="7"'), array('', cplang('members_admin_comment')));
  282. showsubmit('submit', 'submit', '<input type="checkbox" name="chkall" onclick="checkAll(\'prefix\', this.form, \'uidarray\')" class="checkbox">'.cplang('del'), '', $multipage);
  283. showtablefooter();
  284. showformfooter();
  285. }
  286. } elseif($operation == 'clean') {
  287. if(!submitcheck('submit', 1) && !submitcheck('deletesubmit', 1)) {
  288. shownav('user', 'nav_members');
  289. showsubmenu('nav_members', array(
  290. array('search', 'members&operation=search', 0),
  291. array('clean', 'members&operation=clean', 1),
  292. array('nav_repeat', 'members&operation=repeat', 0),
  293. ));
  294. showsearchform('clean');
  295. } else {
  296. if((!$tmpsearch_condition && empty($_GET['uidarray'])) || (submitcheck('deletesubmit', 1) && empty($_GET['uidarray']))) {
  297. cpmsg('members_no_find_deluser', '', 'error');
  298. }
  299. if(!empty($_GET['deleteall'])) {
  300. unset($search_condition['uidarray']);
  301. $_GET['uidarray'] = '';
  302. }
  303. $uids = 0;
  304. $extra = '';
  305. $delmemberlimit = 300;
  306. $deletestart = intval($_GET['deletestart']);
  307. if(!empty($_GET['uidarray'])) {
  308. $uids = array();
  309. $allmember = C::t('common_member')->fetch_all($_GET['uidarray']);
  310. $count = count($allmember);
  311. $membernum = 0;
  312. foreach($allmember as $uid => $member) {
  313. if($member['adminid'] !== 1 && $member['groupid'] !== 1) {
  314. if($count < 2000 || !empty($_GET['uidarray'])) {
  315. $extra .= '<input type="hidden" name="uidarray[]" value="'.$member['uid'].'" />';
  316. }
  317. $uids[] = $member['uid'];
  318. $membernum ++;
  319. }
  320. }
  321. } elseif($tmpsearch_condition) {
  322. $membernum = countmembers($search_condition, $urladd);
  323. $uids = searchmembers($search_condition, $delmemberlimit, 0);
  324. }
  325. $allnum = intval($_GET['allnum']);
  326. $conditions = $uids ? 'm.uid IN ('.dimplode($uids).')' : '0';
  327. if((empty($membernum) || empty($uids))) {
  328. if($deletestart) {
  329. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $allnum));
  330. }
  331. cpmsg('members_no_find_deluser', '', 'error');
  332. }
  333. if(!$_GET['confirmed']) {
  334. cpmsg('members_delete_confirm', "action=members&operation=clean&submit=yes&confirmed=yes".$urladd, 'form', array('membernum' => $membernum), $extra.'<br /><label><input type="checkbox" name="includepost" value="1" class="checkbox" />'.$lang['members_delete_all'].'</label>'.($isfounder ? '&nbsp;<label><input type="checkbox" name="includeuc" value="1" class="checkbox" />'.$lang['members_delete_ucdata'].'</label>' : ''), '');
  335. } else {
  336. if(empty($_GET['includepost'])) {
  337. require_once libfile('function/delete');
  338. $numdeleted = deletemember($uids, 0);
  339. if($isfounder && !empty($_GET['includeuc'])) {
  340. loaducenter();
  341. uc_user_delete($uids);
  342. $_GET['includeuc'] = 1;
  343. } else {
  344. $_GET['includeuc'] = 0;
  345. }
  346. if($_GET['uidarray']) {
  347. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $numdeleted));
  348. } else {
  349. $allnum += $membernum < $delmemberlimit ? $membernum : $delmemberlimit;
  350. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&allnum=$allnum&deletestart=".($deletestart+$delmemberlimit).$urladd;
  351. cpmsg(cplang('members_delete_user_processing_next', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)), $nextlink, 'loadingform', array());
  352. }
  353. } else {
  354. if(empty($uids)) {
  355. cpmsg('members_no_find_deluser', '', 'error');
  356. }
  357. $numdeleted = $numdeleted ? $numdeleted : count($uids);
  358. $pertask = 1000;
  359. $current = $_GET['current'] ? intval($_GET['current']) : 0;
  360. $deleteitem = $_GET['deleteitem'] ? trim($_GET['deleteitem']) : 'post';
  361. $nextdeleteitem = $deleteitem;
  362. $next = $current + $pertask;
  363. if($deleteitem == 'post') {
  364. $threads = $fids = $threadsarray = array();
  365. foreach(C::t('forum_thread')->fetch_all_by_authorid($uids, $pertask) as $thread) {
  366. $threads[$thread['fid']][] = $thread['tid'];
  367. }
  368. if($threads) {
  369. require_once libfile('function/post');
  370. foreach($threads as $fid => $tids) {
  371. deletethread($tids);
  372. }
  373. if($_G['setting']['globalstick']) {
  374. require_once libfile('function/cache');
  375. updatecache('globalstick');
  376. }
  377. } else {
  378. $next = 0;
  379. $nextdeleteitem = 'blog';
  380. }
  381. }
  382. if($deleteitem == 'blog') {
  383. $blogs = array();
  384. $query = C::t('home_blog')->fetch_blogid_by_uid($uids, 0, $pertask);
  385. foreach($query as $blog) {
  386. $blogs[] = $blog['blogid'];
  387. }
  388. if($blogs) {
  389. deleteblogs($blogs);
  390. } else {
  391. $next = 0;
  392. $nextdeleteitem = 'pic';
  393. }
  394. }
  395. if($deleteitem == 'pic') {
  396. $pics = array();
  397. $query = C::t('home_pic')->fetch_all_by_uid($uids, 0, $pertask);
  398. foreach($query as $pic) {
  399. $pics[] = $pic['picid'];
  400. }
  401. if($pics) {
  402. deletepics($pics);
  403. } else {
  404. $next = 0;
  405. $nextdeleteitem = 'doing';
  406. }
  407. }
  408. if($deleteitem == 'doing') {
  409. $doings = array();
  410. $query = C::t('home_doing')->fetch_all_by_uid_doid($uids, '', '', 0, $pertask);
  411. foreach ($query as $doings) {
  412. $doings[] = $doing['doid'];
  413. }
  414. if($doings) {
  415. deletedoings($doings);
  416. } else {
  417. $next = 0;
  418. $nextdeleteitem = 'share';
  419. }
  420. }
  421. if($deleteitem == 'share') {
  422. $shares = array();
  423. foreach(C::t('home_share')->fetch_all_by_uid($uids, $pertask) as $share) {
  424. $shares[] = $share['sid'];
  425. }
  426. if($shares) {
  427. deleteshares($shares);
  428. } else {
  429. $next = 0;
  430. $nextdeleteitem = 'feed';
  431. }
  432. }
  433. if($deleteitem == 'feed') {
  434. C::t('home_follow_feed')->delete_by_uid($uids);
  435. $nextdeleteitem = 'comment';
  436. }
  437. if($deleteitem == 'comment') {
  438. $comments = array();
  439. $query = C::t('home_comment')->fetch_all_by_uid($uids, 0, $pertask);
  440. foreach($query as $comment) {
  441. $comments[] = $comment['cid'];
  442. }
  443. if($comments) {
  444. deletecomments($comments);
  445. } else {
  446. $next = 0;
  447. $nextdeleteitem = 'allitem';
  448. }
  449. }
  450. if($deleteitem == 'allitem') {
  451. require_once libfile('function/delete');
  452. $numdeleted = deletemember($uids);
  453. if($isfounder && !empty($_GET['includeuc'])) {
  454. loaducenter();
  455. uc_user_delete($uids);
  456. }
  457. if(!empty($_GET['uidarray'])) {
  458. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $numdeleted));
  459. } else {
  460. $allnum += $membernum < $delmemberlimit ? $membernum : $delmemberlimit;
  461. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes&includepost=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&allnum=$allnum&deletestart=".($deletestart+$delmemberlimit).$urladd;
  462. cpmsg(cplang('members_delete_user_processing_next', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)), $nextlink, 'loadingform', array());
  463. }
  464. }
  465. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes&includepost=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&current=$next&pertask=$pertask&lastprocess=$processed&allnum=$allnum&deletestart=$deletestart".$urladd;
  466. if(empty($_GET['uidarray'])) {
  467. $deladdmsg = cplang('members_delete_user_processing', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)).'<br>';
  468. } else {
  469. $deladdmsg = '';
  470. }
  471. if($nextdeleteitem != $deleteitem) {
  472. $nextlink .= "&deleteitem=$nextdeleteitem";
  473. cpmsg(cplang('members_delete_processing_next', array('deladdmsg' => $deladdmsg, 'item' => cplang('members_delete_'.$deleteitem), 'nextitem' => cplang('members_delete_'.$nextdeleteitem))), $nextlink, 'loadingform', array(), $extra);
  474. } else {
  475. $nextlink .= "&deleteitem=$deleteitem";
  476. cpmsg(cplang('members_delete_processing', array('deladdmsg' => $deladdmsg, 'item' => cplang('members_delete_'.$deleteitem), 'current' => $current, 'next' => $next)), $nextlink, 'loadingform', array(), $extra);
  477. }
  478. }
  479. }
  480. }
  481. } elseif($operation == 'newsletter') {
  482. if(!submitcheck('newslettersubmit', 1)) {
  483. loadcache('newsletter_detail');
  484. $newletter_detail = get_newsletter('newsletter_detail');
  485. $newletter_detail = dunserialize($newletter_detail);
  486. if($newletter_detail && $newletter_detail['uid'] == $_G['uid']) {
  487. if($_GET['goon'] == 'yes') {
  488. cpmsg("$lang[members_newsletter_send]: ".cplang('members_newsletter_processing', array('current' => $newletter_detail['current'], 'next' => $newletter_detail['next'], 'search_condition' => $newletter_detail['search_condition'])), $newletter_detail['action'], 'loadingform');
  489. } elseif($_GET['goon'] == 'no') {
  490. del_newsletter('newsletter_detail');
  491. } else {
  492. cpmsg('members_edit_continue', '', '', '', '<input type="button" class="btn" value="'.$lang[ok].'" onclick="location.href=\''.ADMINSCRIPT.'?action=members&operation=newsletter&goon=yes\'">&nbsp;&nbsp;<input type="button" class="btn" value="'.$lang[cancel].'" onclick="location.href=\''.ADMINSCRIPT.'?action=members&operation=newsletter&goon=no\';">');
  493. exit;
  494. }
  495. }
  496. if($_GET['do'] == 'mobile') {
  497. shownav('user', 'nav_members_newsletter_mobile');
  498. showsubmenusteps('nav_members_newsletter_mobile', array(
  499. array('nav_members_select', !$_GET['submit']),
  500. array('nav_members_notify', $_GET['submit']),
  501. ));
  502. showtips('members_newsletter_mobile_tips');
  503. } else {
  504. shownav('user', 'nav_members_newsletter');
  505. showsubmenusteps('nav_members_newsletter', array(
  506. array('nav_members_select', !$_GET['submit']),
  507. array('nav_members_notify', $_GET['submit']),
  508. ), array(), array(array('members_grouppmlist', 'members&operation=grouppmlist', 0)));
  509. }
  510. showsearchform('newsletter');
  511. if(submitcheck('submit', 1)) {
  512. $dostr = '';
  513. if($_GET['do'] == 'mobile') {
  514. $search_condition['token_noempty'] = 'token';
  515. $dostr = '&do=mobile';
  516. }
  517. $membernum = countmembers($search_condition, $urladd);
  518. showtagheader('div', 'newsletter', TRUE);
  519. showformheader('members&operation=newsletter'.$urladd.$dostr);
  520. showhiddenfields(array('notifymember' => 1));
  521. echo '<table class="tb tb1">';
  522. if(!$membernum) {
  523. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  524. } else {
  525. showtablerow('class="first"', array('class="th11"'), array(
  526. cplang('members_newsletter_members'),
  527. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('newsletter').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  528. ));
  529. showtablefooter();
  530. shownewsletter();
  531. $search_condition = serialize($search_condition);
  532. showsubmit('newslettersubmit', 'submit', 'td', '<input type="hidden" name="conditions" value=\''.$search_condition.'\' />');
  533. }
  534. showtablefooter();
  535. showformfooter();
  536. showtagfooter('div');
  537. }
  538. } else {
  539. $search_condition = dunserialize($_POST['conditions']);
  540. $membernum = countmembers($search_condition, $urladd);
  541. notifymembers('newsletter', 'newsletter');
  542. }
  543. } elseif($operation == 'grouppmlist') {
  544. if(!empty($_GET['delete']) && ($isfounder || C::t('common_grouppm')->count_by_id_authorid($_GET['delete'], $_G['uid']))) {
  545. if(!empty($_GET['confirm'])) {
  546. C::t('common_grouppm')->delete($_GET['delete']);
  547. C::t('common_member_grouppm')->delete_by_gpmid($_GET['delete']);
  548. } else {
  549. cpmsg('members_grouppm_delete_confirm', 'action=members&operation=grouppmlist&delete='.intval($_GET['delete']).'&confirm=yes', 'form');
  550. }
  551. }
  552. shownav('user', 'nav_members_newsletter');
  553. showsubmenu('nav_members_newsletter', array(
  554. array('members_grouppmlist_newsletter', 'members&operation=newsletter', 0),
  555. array('members_grouppmlist', 'members&operation=grouppmlist', 1)
  556. ));
  557. if($do) {
  558. $unreads = C::t('common_member_grouppm')->count_by_gpmid($do, 0);
  559. }
  560. showtableheader();
  561. $id = empty($do) ? 0 : $do;
  562. $authorid = $isfounder ? 0 : $_G['uid'];
  563. $grouppms = C::t('common_grouppm')->fetch_all_by_id_authorid($id, $authorid);
  564. if(!empty($grouppms)) {
  565. $users = C::t('common_member')->fetch_all(C::t('common_grouppm')->get_uids());
  566. foreach($grouppms as $grouppm) {
  567. showtablerow('', array('valign="top" class="td25"', 'valign="top"'), array(
  568. '<a href="home.php?mod=space&uid='.$grouppm['authorid'].'" target="_blank">'.avatar($grouppm['authorid'], 'small').'</a>',
  569. '<a href="home.php?mod=space&uid='.$grouppm['authorid'].'" target="_blank"><b>'.$users[$grouppm['authorid']]['username'].'</b></a> ('.dgmdate($grouppm['dateline']).'):<br />'.
  570. $grouppm['message'].'<br /><br />'.
  571. (!$do ?
  572. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'">'.cplang('members_grouppmlist_view', array('number' => $grouppm['numbers'])).'</a>' :
  573. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'">'.cplang('members_grouppmlist_view_all').'</a>('.$grouppm['numbers'].') &nbsp; '.
  574. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'&filter=unread">'.cplang('members_grouppmlist_view_unread').'</a>('.$unreads.') &nbsp; '.
  575. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'&filter=read">'.cplang('members_grouppmlist_view_read').'</a>('.($grouppm['numbers'] - $unreads).')'),
  576. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&delete='.$grouppm['id'].'">'.cplang('delete').'</a>'
  577. ));
  578. }
  579. } else {
  580. showtablerow('', '', cplang('members_newsletter_empty'));
  581. }
  582. showtablefooter();
  583. if($do) {
  584. $_GET['filter'] = in_array($_GET['filter'], array('read', 'unread')) ? $_GET['filter'] : '';
  585. $filteradd = $_GET['filter'] ? '&filter='.$_GET['filter'] : '';
  586. $ppp = 100;
  587. $start_limit = ($page - 1) * $ppp;
  588. if($_GET['filter'] != 'unread') {
  589. $count = C::t('common_member_grouppm')->count_by_gpmid($do, 1);
  590. } else {
  591. $count = $unreads;
  592. }
  593. $multipage = multi($count, $ppp, $page, ADMINSCRIPT."?action=members&operation=grouppmlist&do=$do".$filteradd);
  594. $alldata = C::t('common_member_grouppm')->fetch_all_by_gpmid($gpmid, $_GET['filter'] == 'read' ? 1 : 0, $start_limit, $ppp);
  595. $allmember = $gpmuser ? C::t('common_member')->fetch_all_username_by_uid(array_keys($gpmuser)) : array();
  596. foreach($alldata as $uid => $gpmuser) {
  597. echo '<div style="margin-bottom:5px;float:left;width:24%"><b><a href="home.php?mod=space&uid='.$uid.'" target="_blank">'.$allmember[$uid].'</a></b><br />&nbsp;';
  598. if($gpmuser['status'] == 0) {
  599. echo '<span class="lightfont">'.cplang('members_grouppmlist_status_0').'</span>';
  600. } else {
  601. echo dgmdate($gpmuser['dateline'], 'u').' '.cplang('members_grouppmlist_status_1');
  602. if($gpmuser['status'] == -1) {
  603. echo ', <span class="error">'.cplang('members_grouppmlist_status_-1').'</span>';
  604. }
  605. }
  606. echo '</div>';
  607. }
  608. echo $multipage;
  609. }
  610. } elseif($operation == 'reward') {
  611. if(!submitcheck('rewardsubmit', 1)) {
  612. shownav('user', 'nav_members_reward');
  613. showsubmenusteps('nav_members_reward', array(
  614. array('nav_members_select', !$_GET['submit']),
  615. array('nav_members_reward', $_GET['submit']),
  616. ));
  617. showsearchform('reward');
  618. if(submitcheck('submit', 1)) {
  619. $membernum = countmembers($search_condition, $urladd);
  620. showtagheader('div', 'reward', TRUE);
  621. showformheader('members&operation=reward'.$urladd);
  622. echo '<table class="tb tb1">';
  623. if(!$membernum) {
  624. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  625. showtablefooter();
  626. } else {
  627. $creditscols = array('credits_title');
  628. $creditsvalue = $resetcredits = array();
  629. $js_extcreditids = '';
  630. for($i=1; $i<=8; $i++) {
  631. $js_extcreditids .= (isset($_G['setting']['extcredits'][$i]) ? ($js_extcreditids ? ',' : '').$i : '');
  632. $creditscols[] = isset($_G['setting']['extcredits'][$i]) ? $_G['setting']['extcredits'][$i]['title'] : 'extcredits'.$i;
  633. $creditsvalue[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="text" class="txt" size="3" id="addextcredits['.$i.']" name="addextcredits['.$i.']" value="0"> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="text" class="txt" size="3" value="N/A" disabled>';
  634. $resetcredits[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="checkbox" id="resetextcredits['.$i.']" name="resetextcredits['.$i.']" value="1" class="radio" disabled> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="checkbox" disabled class="radio">';
  635. }
  636. $creditsvalue = array_merge(array('<input type="radio" name="updatecredittype" id="updatecredittype0" value="0" class="radio" onclick="var extcredits = new Array('.$js_extcreditids.'); for(k in extcredits) {$(\'resetextcredits[\'+extcredits[k]+\']\').disabled = true; $(\'addextcredits[\'+extcredits[k]+\']\').disabled = false;}" checked="checked" /><label for="updatecredittype0">'.$lang['members_reward_value'].'</label>'), $creditsvalue);
  637. $resetcredits = array_merge(array('<input type="radio" name="updatecredittype" id="updatecredittype1" value="1" class="radio" onclick="var extcredits = new Array('.$js_extcreditids.'); for(k in extcredits) {$(\'addextcredits[\'+extcredits[k]+\']\').disabled = true; $(\'resetextcredits[\'+extcredits[k]+\']\').disabled = false;}" /><label for="updatecredittype1">'.$lang['members_reward_clean'].'</label>'), $resetcredits);
  638. showtablerow('class="first"', array('class="th11"'), array(
  639. cplang('members_reward_members'),
  640. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('reward').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  641. ));
  642. echo '<tr><td class="th12">'.cplang('nav_members_reward').'</td><td>';
  643. showtableheader('', 'noborder');
  644. showsubtitle($creditscols);
  645. showtablerow('', array('class="td23"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $creditsvalue);
  646. showtablerow('', array('class="td23"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $resetcredits);
  647. showtablefooter();
  648. showtablefooter();
  649. showtagheader('div', 'messagebody');
  650. shownewsletter();
  651. showtagfooter('div');
  652. showsubmit('rewardsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="credits_notify" /><label for="credits_notify">'.cplang('members_reward_notify').'</label>');
  653. }
  654. showtablefooter();
  655. showformfooter();
  656. showtagfooter('div');
  657. }
  658. } else {
  659. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  660. $membernum = countmembers($search_condition, $urladd);
  661. notifymembers('reward', 'creditsnotify');
  662. }
  663. } elseif($operation == 'confermedal') {
  664. $medals = '';
  665. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  666. $medals .= showtablerow('', array('class="td25"', 'class="td23"'), array(
  667. "<input class=\"checkbox\" type=\"checkbox\" name=\"medals[$medal[medalid]]\" value=\"1\" />",
  668. "<img src=\"static/image/common/$medal[image]\" />",
  669. $medal['name']
  670. ), TRUE);
  671. }
  672. if(!$medals) {
  673. cpmsg('members_edit_medals_nonexistence', 'action=medals', 'error');
  674. }
  675. if(!submitcheck('confermedalsubmit', 1)) {
  676. shownav('extended', 'nav_medals', 'nav_members_confermedal');
  677. showsubmenusteps('nav_members_confermedal', array(
  678. array('nav_members_select', !$_GET['submit']),
  679. array('nav_members_confermedal', $_GET['submit']),
  680. ), array(
  681. array('admin', 'medals', 0),
  682. array('nav_medals_confer', 'members&operation=confermedal', 1),
  683. array('nav_medals_mod', 'medals&operation=mod', 0)
  684. ));
  685. showsearchform('confermedal');
  686. if(submitcheck('submit', 1)) {
  687. $membernum = countmembers($search_condition, $urladd);
  688. showtagheader('div', 'confermedal', TRUE);
  689. showformheader('members&operation=confermedal'.$urladd);
  690. echo '<table class="tb tb1">';
  691. if(!$membernum) {
  692. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  693. showtablefooter();
  694. } else {
  695. showtablerow('class="first"', array('class="th11"'), array(
  696. cplang('members_confermedal_members'),
  697. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('confermedal').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  698. ));
  699. echo '<tr><td class="th12">'.cplang('members_confermedal').'</td><td>';
  700. showtableheader('', 'noborder');
  701. showsubtitle(array('medals_grant', 'medals_image', 'name'));
  702. echo $medals;
  703. showtablefooter();
  704. showtablefooter();
  705. showtagheader('div', 'messagebody');
  706. shownewsletter();
  707. showtagfooter('div');
  708. showsubmit('confermedalsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="grant_notify"/><label for="grant_notify">'.cplang('medals_grant_notify').'</label>');
  709. }
  710. showtablefooter();
  711. showformfooter();
  712. showtagfooter('div');
  713. }
  714. } else {
  715. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  716. $membernum = countmembers($search_condition, $urladd);
  717. notifymembers('confermedal', 'medalletter');
  718. }
  719. } elseif($operation == 'confermagic') {
  720. $magics = '';
  721. foreach(C::t('common_magic')->fetch_all_data(1) as $magic) {
  722. $magics .= showtablerow('', array('class="td25"', 'class="td23"', 'class="td25"', ''), array(
  723. "<input class=\"checkbox\" type=\"checkbox\" name=\"magic[]\" value=\"$magic[magicid]\" />",
  724. "<img src=\"static/image/magic/$magic[identifier].gif\" />",
  725. $magic['name'],
  726. '<input class="txt" type="text" name="magicnum['.$magic['magicid'].']" value="1" size="3">'
  727. ), TRUE);
  728. }
  729. if(!$magics) {
  730. cpmsg('members_edit_magics_nonexistence', 'action=magics', 'error');
  731. }
  732. if(!submitcheck('confermagicsubmit', 1)) {
  733. shownav('extended', 'nav_magics', 'nav_members_confermagic');
  734. showsubmenusteps('nav_members_confermagic', array(
  735. array('nav_members_select', !$_GET['submit']),
  736. array('nav_members_confermagic', $_GET['submit']),
  737. ), array(
  738. array('admin', 'magics&operation=admin', 0),
  739. array('nav_magics_confer', 'members&operation=confermagic', 1)
  740. ));
  741. showsearchform('confermagic');
  742. if(submitcheck('submit', 1)) {
  743. $membernum = countmembers($search_condition, $urladd);
  744. showtagheader('div', 'confermedal', TRUE);
  745. showformheader('members&operation=confermagic'.$urladd);
  746. echo '<table class="tb tb1">';
  747. if(!$membernum) {
  748. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  749. showtablefooter();
  750. } else {
  751. showtablerow('class="first"', array('class="th11"'), array(
  752. cplang('members_confermagic_members'),
  753. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('confermedal').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  754. ));
  755. echo '<tr><td class="th12">'.cplang('members_confermagic').'</td><td>';
  756. showtableheader('', 'noborder');
  757. showsubtitle(array('nav_magics_confer', 'nav_magics_image', 'nav_magics_name', 'nav_magics_num'));
  758. echo $magics;
  759. showtablefooter();
  760. showtablefooter();
  761. showtagheader('div', 'messagebody');
  762. shownewsletter();
  763. showtagfooter('div');
  764. showsubmit('confermagicsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="grant_notify"/><label for="grant_notify">'.cplang('magics_grant_notify').'</label>');
  765. }
  766. showtablefooter();
  767. showformfooter();
  768. showtagfooter('div');
  769. }
  770. } else {
  771. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  772. $membernum = countmembers($search_condition, $urladd);
  773. notifymembers('confermagic', 'magicletter');
  774. }
  775. } elseif($operation == 'add') {
  776. if(!submitcheck('addsubmit', 1)) {
  777. $groupselect = array();
  778. $query = C::t('common_usergroup')->fetch_all_by_not_groupid(array(5, 6, 7));
  779. foreach($query as $group) {
  780. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  781. if($group['type'] == 'member' && $group['creditshigher'] == 0) {
  782. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\" selected>$group[grouptitle]</option>\n";
  783. } else {
  784. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\">$group[grouptitle]</option>\n";
  785. }
  786. }
  787. $groupselect = '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  788. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  789. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  790. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup>';
  791. shownav('user', 'nav_members_add');
  792. showsubmenu('members_add');
  793. showformheader('members&operation=add');
  794. showtableheader();
  795. showsetting('username', 'newusername', '', 'text');
  796. showsetting('password', 'newpassword', '', 'text');
  797. showsetting('email', 'newemail', '', 'text');
  798. showsetting('usergroup', '', '', '<select name="newgroupid">'.$groupselect.'</select>');
  799. showsetting('members_add_email_notify', 'emailnotify', '', 'radio');
  800. showsubmit('addsubmit');
  801. showtablefooter();
  802. showformfooter();
  803. } else {
  804. $newusername = trim($_GET['newusername']);
  805. $newpassword = trim($_GET['newpassword']);
  806. $newemail = strtolower(trim($_GET['newemail']));
  807. if(!$newusername || !isset($_GET['confirmed']) && !$newpassword || !isset($_GET['confirmed']) && !$newemail) {
  808. cpmsg('members_add_invalid', '', 'error');
  809. }
  810. if(C::t('common_member')->fetch_uid_by_username($newusername) || C::t('common_member_archive')->fetch_uid_by_username($newusername)) {
  811. cpmsg('members_add_username_duplicate', '', 'error');
  812. }
  813. loaducenter();
  814. $uid = uc_user_register(addslashes($newusername), $newpassword, $newemail);
  815. if($uid <= 0) {
  816. if($uid == -1) {
  817. cpmsg('members_add_illegal', '', 'error');
  818. } elseif($uid == -2) {
  819. cpmsg('members_username_protect', '', 'error');
  820. } elseif($uid == -3) {
  821. if(empty($_GET['confirmed'])) {
  822. cpmsg('members_add_username_activation', 'action=members&operation=add&addsubmit=yes&newgroupid='.$_GET['newgroupid'].'&newusername='.rawurlencode($newusername), 'form');
  823. } else {
  824. list($uid,, $newemail) = uc_get_user(addslashes($newusername));
  825. }
  826. } elseif($uid == -4) {
  827. cpmsg('members_email_illegal', '', 'error');
  828. } elseif($uid == -5) {
  829. cpmsg('members_email_domain_illegal', '', 'error');
  830. } elseif($uid == -6) {
  831. cpmsg('members_email_duplicate', '', 'error');
  832. }
  833. }
  834. $group = C::t('common_usergroup')->fetch($_GET['newgroupid']);
  835. $newadminid = in_array($group['radminid'], array(1, 2, 3)) ? $group['radminid'] : ($group['type'] == 'special' ? -1 : 0);
  836. if($group['radminid'] == 1) {
  837. cpmsg('members_add_admin_none', '', 'error');
  838. }
  839. if(in_array($group['groupid'], array(5, 6, 7))) {
  840. cpmsg('members_add_ban_all_none', '', 'error');
  841. }
  842. $profile = $verifyarr = array();
  843. loadcache('fields_register');
  844. $init_arr = explode(',', $_G['setting']['initcredits']);
  845. $password = md5(random(10));
  846. C::t('common_member')->insert($uid, $newusername, $password, $newemail, 'Manual Acting', $_GET['newgroupid'], $init_arr, $newadminid);
  847. if($_GET['emailnotify']) {
  848. if(!function_exists('sendmail')) {
  849. include libfile('function/mail');
  850. }
  851. $add_member_subject = lang('email', 'add_member_subject');
  852. $add_member_message = lang('email', 'add_member_message', array(
  853. 'newusername' => $newusername,
  854. 'bbname' => $_G['setting']['bbname'],
  855. 'adminusername' => $_G['member']['username'],
  856. 'siteurl' => $_G['siteurl'],
  857. 'newpassword' => $newpassword,
  858. ));
  859. if(!sendmail("$newusername <$newemail>", $add_member_subject, $add_member_message)) {
  860. runlog('sendmail', "$newemail sendmail failed.");
  861. }
  862. }
  863. updatecache('setting');
  864. cpmsg('members_add_succeed', '', 'succeed', array('username' => $newusername, 'uid' => $uid));
  865. }
  866. } elseif($operation == 'group') {
  867. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  868. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  869. $member = array_merge($member, (array)$membermf, $membergroup);
  870. if(!submitcheck('editsubmit')) {
  871. $checkadminid = array(($member['adminid'] >= 0 ? $member['adminid'] : 0) => 'checked');
  872. $member['groupterms'] = dunserialize($member['groupterms']);
  873. if($member['groupterms']['main']) {
  874. $expirydate = dgmdate($member['groupterms']['main']['time'], 'Y-n-j');
  875. $expirydays = ceil(($member['groupterms']['main']['time'] - TIMESTAMP) / 86400);
  876. $selecteaid = array($member['groupterms']['main']['adminid'] => 'selected');
  877. $selectegid = array($member['groupterms']['main']['groupid'] => 'selected');
  878. } else {
  879. $expirydate = $expirydays = '';
  880. $selecteaid = array($member['adminid'] => 'selected');
  881. $selectegid = array(($member['type'] == 'member' ? 0 : $member['groupid']) => 'selected');
  882. }
  883. $extgroups = $expgroups = '';
  884. $radmingids = 0;
  885. $extgrouparray = explode("\t", $member['extgroupids']);
  886. $groups = array('system' => '', 'special' => '', 'member' => '');
  887. $group = array('groupid' => 0, 'radminid' => 0, 'type' => '', 'grouptitle' => $lang['usergroups_system_0'], 'creditshigher' => 0, 'creditslower' => '0');
  888. $query = array_merge(array($group), (array)C::t('common_usergroup')->fetch_all_not(array(6, 7)));
  889. foreach($query as $group) {
  890. if($group['groupid'] && !in_array($group['groupid'], array(4, 5, 6, 7, 8)) && ($group['type'] == 'system' || $group['type'] == 'special')) {
  891. $extgroups .= showtablerow('', array('class="td27"', 'style="width:70%"'), array(
  892. '<input class="checkbox" type="checkbox" name="extgroupidsnew[]" value="'.$group['groupid'].'" '.(in_array($group['groupid'], $extgrouparray) ? 'checked' : '').' id="extgid_'.$group['groupid'].'" /><label for="extgid_'.$group['groupid'].'"> '.$group['grouptitle'].'</label>',
  893. '<input type="text" class="txt" size="9" name="extgroupexpirynew['.$group['groupid'].']" value="'.(in_array($group['groupid'], $extgrouparray) && !empty($member['groupterms']['ext'][$group['groupid']]) ? dgmdate($member['groupterms']['ext'][$group['groupid']], 'Y-n-j') : '').'" onclick="showcalendar(event, this)" />'
  894. ), TRUE);
  895. }
  896. if($group['groupid'] && $group['type'] == 'member' && !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower']) && $member['groupid'] != $group['groupid']) {
  897. continue;
  898. }
  899. $expgroups .= '<option name="expgroupidnew" value="'.$group['groupid'].'" '.$selectegid[$group['groupid']].'>'.$group['grouptitle'].'</option>';
  900. if($group['groupid'] != 0) {
  901. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  902. $groups[$group['type']] .= '<option value="'.$group['groupid'].'"'.($member['groupid'] == $group['groupid'] ? 'selected="selected"' : '').' gtype="'.$group['type'].'">'.$group['grouptitle'].'</option>';
  903. if($group['type'] == 'special' && !$group['radminid']) {
  904. $radmingids .= ','.$group['groupid'];
  905. }
  906. }
  907. }
  908. if(!$groups['member']) {
  909. $group = C::t('common_usergroup')->fetch_new_groupid(true);
  910. $groups['member'] = '<option value="'.$group['groupid'].'" gtype="member">'.$group['grouptitle'].'</option>';
  911. }
  912. shownav('user', 'members_group');
  913. showsubmenu('members_group_member', array(), '', array('username' => $member['username']));
  914. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  915. showformheader("members&operation=group&uid=$member[uid]");
  916. showtableheader('usergroup', 'nobottom');
  917. showsetting('members_group_group', '', '', '<select name="groupidnew" onchange="if(in_array(this.value, ['.$radmingids.'])) {$(\'relatedadminid\').style.display = \'\';$(\'adminidnew\').name=\'adminidnew[\' + this.value + \']\';} else {$(\'relatedadminid\').style.display = \'none\';$(\'adminidnew\').name=\'adminidnew[0]\';}"><optgroup label="'.$lang['usergroups_system'].'">'.$groups['system'].'<optgroup label="'.$lang['usergroups_special'].'">'.$groups['special'].'<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groups['specialadmin'].'<optgroup label="'.$lang['usergroups_member'].'">'.$groups['member'].'</select>');
  918. showtagheader('tbody', 'relatedadminid', $member['type'] == 'special' && !$member['radminid'], 'sub');
  919. showsetting('members_group_related_adminid', '', '', '<select id="adminidnew" name="adminidnew['.$member['groupid'].']"><option value="0"'.($member['adminid'] == 0 ? ' selected' : '').'>'.$lang['none'].'</option><option value="3"'.($member['adminid'] == 3 ? ' selected' : '').'>'.$lang['usergroups_system_3'].'</option><option value="2"'.($member['adminid'] == 2 ? ' selected' : '').'>'.$lang['usergroups_system_2'].'</option><option value="1"'.($member['adminid'] == 1 ? ' selected' : '').'>'.$lang['usergroups_system_1'].'</option></select>');
  920. showtagfooter('tbody');
  921. showsetting('members_group_validity', 'expirydatenew', $expirydate, 'calendar');
  922. showsetting('members_group_orig_adminid', '', '', '<select name="expgroupidnew">'.$expgroups.'</select>');
  923. showsetting('members_group_orig_groupid', '', '', '<select name="expadminidnew"><option value="0" '.$selecteaid[0].'>'.$lang['usergroups_system_0'].'</option><option value="1" '.$selecteaid[1].'>'.$lang['usergroups_system_1'].'</option><option value="2" '.$selecteaid[2].'>'.$lang['usergroups_system_2'].'</option><option value="3" '.$selecteaid[3].'>'.$lang['usergroups_system_3'].'</option></select>');
  924. showtablefooter();
  925. showtableheader('members_group_extended', 'noborder fixpadding');
  926. showsubtitle(array('usergroup', 'validity'));
  927. echo $extgroups;
  928. showtablerow('', 'colspan="2"', cplang('members_group_extended_comment'));
  929. showtablefooter();
  930. showtableheader('members_edit_reason', 'notop');
  931. showsetting('members_group_ban_reason', 'reason', '', 'textarea');
  932. showsubmit('editsubmit');
  933. showtablefooter();
  934. showformfooter();
  935. } else {
  936. $group = C::t('common_usergroup')->fetch($_GET['groupidnew']);
  937. if(!$group) {
  938. cpmsg('undefined_action', '', 'error');
  939. }
  940. if(strlen(is_array($_GET['extgroupidsnew']) ? implode("\t", $_GET['extgroupidsnew']) : '') > 30) {
  941. cpmsg('members_edit_groups_toomany', '…

Large files files are truncated, but you can click here to view the full file