PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/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
  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', '', 'error');
  942. }
  943. if($member['groupid'] != $_GET['groupidnew'] && isfounder($member)) {
  944. cpmsg('members_edit_groups_isfounder', '', 'error');
  945. }
  946. $_GET['adminidnew'] = $_GET['adminidnew'][$_GET['groupidnew']];
  947. switch($group['type']) {
  948. case 'member':
  949. $_GET['groupidnew'] = in_array($_GET['adminidnew'], array(1, 2, 3)) ? $_GET['adminidnew'] : $_GET['groupidnew'];
  950. break;
  951. case 'special':
  952. if($group['radminid']) {
  953. $_GET['adminidnew'] = $group['radminid'];
  954. } elseif(!in_array($_GET['adminidnew'], array(1, 2, 3))) {
  955. $_GET['adminidnew'] = -1;
  956. }
  957. break;
  958. case 'system':
  959. $_GET['adminidnew'] = in_array($_GET['groupidnew'], array(1, 2, 3)) ? $_GET['groupidnew'] : -1;
  960. break;
  961. }
  962. $groupterms = array();
  963. if($_GET['expirydatenew']) {
  964. $maingroupexpirynew = strtotime($_GET['expirydatenew']);
  965. $group = C::t('common_usergroup')->fetch($_GET['expgroupidnew']);
  966. if(!$group) {
  967. $_GET['expgroupidnew'] = in_array($_GET['expadminidnew'], array(1, 2, 3)) ? $_GET['expadminidnew'] : $_GET['expgroupidnew'];
  968. } else {
  969. switch($group['type']) {
  970. case 'special':
  971. if($group['radminid']) {
  972. $_GET['expadminidnew'] = $group['radminid'];
  973. } elseif(!in_array($_GET['expadminidnew'], array(1, 2, 3))) {
  974. $_GET['expadminidnew'] = -1;
  975. }
  976. break;
  977. case 'system':
  978. $_GET['expadminidnew'] = in_array($_GET['expgroupidnew'], array(1, 2, 3)) ? $_GET['expgroupidnew'] : -1;
  979. break;
  980. }
  981. }
  982. if($_GET['expgroupidnew'] == $_GET['groupidnew']) {
  983. cpmsg('members_edit_groups_illegal', '', 'error');
  984. } elseif($maingroupexpirynew > TIMESTAMP) {
  985. if($_GET['expgroupidnew'] || $_GET['expadminidnew']) {
  986. $groupterms['main'] = array('time' => $maingroupexpirynew, 'adminid' => $_GET['expadminidnew'], 'groupid' => $_GET['expgroupidnew']);
  987. } else {
  988. $groupterms['main'] = array('time' => $maingroupexpirynew);
  989. }
  990. $groupterms['ext'][$_GET['groupidnew']] = $maingroupexpirynew;
  991. }
  992. }
  993. if(is_array($_GET['extgroupexpirynew'])) {
  994. foreach($_GET['extgroupexpirynew'] as $extgroupid => $expiry) {
  995. if(is_array($_GET['extgroupidsnew']) && in_array($extgroupid, $_GET['extgroupidsnew']) && !isset($groupterms['ext'][$extgroupid]) && $expiry && ($expiry = strtotime($expiry)) > TIMESTAMP) {
  996. $groupterms['ext'][$extgroupid] = $expiry;
  997. }
  998. }
  999. }
  1000. $grouptermsnew = serialize($groupterms);
  1001. $groupexpirynew = groupexpiry($groupterms);
  1002. $extgroupidsnew = $_GET['extgroupidsnew'] && is_array($_GET['extgroupidsnew']) ? implode("\t", $_GET['extgroupidsnew']) : '';
  1003. C::t('common_member'.$tableext)->update($member['uid'], array('groupid'=>$_GET['groupidnew'], 'adminid'=>$_GET['adminidnew'], 'extgroupids'=>$extgroupidsnew, 'groupexpiry'=>$groupexpirynew));
  1004. if(C::t('common_member_field_forum'.$tableext)->fetch($member['uid'])) {
  1005. C::t('common_member_field_forum'.$tableext)->update($member['uid'], array('groupterms' => $grouptermsnew));
  1006. } else {
  1007. C::t('common_member_field_forum'.$tableext)->insert(array('uid' => $member['uid'], 'groupterms' => $grouptermsnew));
  1008. }
  1009. if($_GET['groupidnew'] != $member['groupid'] && (in_array($_GET['groupidnew'], array(4, 5)) || in_array($member['groupid'], array(4, 5)))) {
  1010. $my_opt = in_array($_GET['groupidnew'], array(4, 5)) ? 'banuser' : 'unbanuser';
  1011. $log_handler = Cloud::loadClass('Cloud_Service_SearchHelper');
  1012. $log_handler->myThreadLog($my_opt, array('uid' => $member['uid']));
  1013. banlog($member['username'], $member['groupid'], $_GET['groupidnew'], $groupexpirynew, $_GET['reason']);
  1014. }
  1015. cpmsg('members_edit_groups_succeed', "action=members&operation=group&uid=$member[uid]", 'succeed');
  1016. }
  1017. } elseif($operation == 'credit' && $_G['setting']['extcredits']) {
  1018. if($tableext) {
  1019. cpmsg('members_edit_credits_failure', '', 'error');
  1020. }
  1021. $membercount = C::t('common_member_count'.$tableext)->fetch($member['uid']);
  1022. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  1023. $member = array_merge($member, $membercount, $membergroup);
  1024. if(!submitcheck('creditsubmit')) {
  1025. eval("\$membercredit = @round({$_G[setting][creditsformula]});");
  1026. if(($jscreditsformula = C::t('common_setting')->fetch('creditsformula'))) {
  1027. $jscreditsformula = str_replace(array('digestposts', 'posts', 'threads'), array($member['digestposts'], $member['posts'],$member['threads']), $jscreditsformula);
  1028. }
  1029. $creditscols = array('members_credit_ranges', 'credits');
  1030. $creditsvalue = array($member['type'] == 'member' ? "$member[creditshigher]~$member[creditslower]" : 'N/A', '<input type="text" class="txt" name="jscredits" id="jscredits" value="'.$membercredit.'" size="6" disabled style="padding:0;width:6em;border:none; background-color:transparent">');
  1031. for($i = 1; $i <= 8; $i++) {
  1032. $jscreditsformula = str_replace('extcredits'.$i, "extcredits[$i]", $jscreditsformula);
  1033. $creditscols[] = isset($_G['setting']['extcredits'][$i]) ? $_G['setting']['extcredits'][$i]['title'] : 'extcredits'.$i;
  1034. $creditsvalue[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="text" class="txt" size="3" name="extcreditsnew['.$i.']" id="extcreditsnew['.$i.']" value="'.$member['extcredits'.$i].'" onkeyup="membercredits()"> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="text" class="txt" size="3" value="N/A" disabled>';
  1035. }
  1036. echo <<<EOT
  1037. <script language="JavaScript">
  1038. var extcredits = new Array();
  1039. function membercredits() {
  1040. var credits = 0;
  1041. for(var i = 1; i <= 8; i++) {
  1042. e = $('extcreditsnew['+i+']');
  1043. if(e && parseInt(e.value)) {
  1044. extcredits[i] = parseInt(e.value);
  1045. } else {
  1046. extcredits[i] = 0;
  1047. }
  1048. }
  1049. $('jscredits').value = Math.round($jscreditsformula);
  1050. }
  1051. </script>
  1052. EOT;
  1053. shownav('user', 'members_credit');
  1054. showsubmenu('members_credit');
  1055. showtips('members_credit_tips');
  1056. showformheader("members&operation=credit&uid={$_GET['uid']}");
  1057. showtableheader('<em class="right"><a href="'.ADMINSCRIPT.'?action=logs&operation=credit&srch_uid='.$_GET['uid'].'&frame=yes" target="_blank">'.cplang('members_credit_logs').'</a></em>'.cplang('members_credit').' - '.$member['username'].'('.$member['grouptitle'].')', 'nobottom');
  1058. showsubtitle($creditscols);
  1059. showtablerow('', array('', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $creditsvalue);
  1060. showtablefooter();
  1061. showtableheader('', 'notop');
  1062. showtitle('members_edit_reason');
  1063. showsetting('members_credit_reason', 'reason', '', 'textarea');
  1064. showsubmit('creditsubmit');
  1065. showtablefooter();
  1066. showformfooter();
  1067. } else {
  1068. $diffarray = array();
  1069. $sql = $comma = '';
  1070. if(is_array($_GET['extcreditsnew'])) {
  1071. foreach($_GET['extcreditsnew'] as $id => $value) {
  1072. if($member['extcredits'.$id] != ($value = intval($value))) {
  1073. $diffarray[$id] = $value - $member['extcredits'.$id];
  1074. $sql .= $comma."extcredits$id='$value'";
  1075. $comma = ', ';
  1076. }
  1077. }
  1078. }
  1079. if($diffarray) {
  1080. foreach($diffarray as $id => $diff) {
  1081. $logs[] = dhtmlspecialchars("$_G[timestamp]\t{$_G[member][username]}\t$_G[adminid]\t$member[username]\t$id\t$diff\t0\t\t{$_GET['reason']}");
  1082. }
  1083. updatemembercount($_GET['uid'], $diffarray);
  1084. writelog('ratelog', $logs);
  1085. }
  1086. cpmsg('members_edit_credits_succeed', "action=members&operation=credit&uid={$_GET['uid']}", 'succeed');
  1087. }
  1088. } elseif($operation == 'medal') {
  1089. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  1090. $member = array_merge($member, $membermf);
  1091. if(!submitcheck('medalsubmit')) {
  1092. $medals = '';
  1093. $membermedals = array();
  1094. loadcache('medals');
  1095. foreach (explode("\t", $member['medals']) as $key => $membermedal) {
  1096. list($medalid, $medalexpiration) = explode("|", $membermedal);
  1097. if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {
  1098. $membermedals[$key] = $medalid;
  1099. } else {
  1100. unset($membermedals[$key]);
  1101. }
  1102. }
  1103. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  1104. $medals .= showtablerow('', array('class="td25"', 'class="td23"'), array(
  1105. "<input class=\"checkbox\" type=\"checkbox\" name=\"medals[$medal[medalid]]\" value=\"1\" ".(in_array($medal['medalid'], $membermedals) ? 'checked' : '')." />",
  1106. "<img src=\"static/image/common/$medal[image]\" />",
  1107. $medal['name']
  1108. ), TRUE);
  1109. }
  1110. if(!$medals) {
  1111. cpmsg('members_edit_medals_nonexistence', '', 'error');
  1112. }
  1113. shownav('user', 'nav_members_confermedal');
  1114. showsubmenu('nav_members_confermedal');
  1115. showformheader("members&operation=medal&uid={$_GET['uid']}");
  1116. showtableheader("$lang[members_confermedal_to] <a href='home.php?mod=space&uid={$_GET['uid']}' target='_blank'>$member[username]</a>", 'fixpadding');
  1117. showsubtitle(array('medals_grant', 'medals_image', 'name'));
  1118. echo $medals;
  1119. showsubmit('medalsubmit');
  1120. showtablefooter();
  1121. showformfooter();
  1122. } else {
  1123. $medalsdel = $medalsadd = $medalsnew = $origmedalsarray = $medalsarray = array();
  1124. if(is_array($_GET['medals'])) {
  1125. foreach($_GET['medals'] as $medalid => $newgranted) {
  1126. if($newgranted) {
  1127. $medalsarray[] = $medalid;
  1128. }
  1129. }
  1130. }
  1131. loadcache('medals');
  1132. foreach($member['medals'] = explode("\t", $member['medals']) as $key => $modmedalid) {
  1133. list($medalid, $medalexpiration) = explode("|", $modmedalid);
  1134. if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {
  1135. $origmedalsarray[] = $medalid;
  1136. }
  1137. }
  1138. foreach(array_unique(array_merge($origmedalsarray, $medalsarray)) as $medalid) {
  1139. if($medalid) {
  1140. $orig = in_array($medalid, $origmedalsarray);
  1141. $new = in_array($medalid, $medalsarray);
  1142. if($orig != $new) {
  1143. if($orig && !$new) {
  1144. $medalsdel[] = $medalid;
  1145. } elseif(!$orig && $new) {
  1146. $medalsadd[] = $medalid;
  1147. }
  1148. }
  1149. }
  1150. }
  1151. if(!empty($medalsarray)) {
  1152. foreach(C::t('forum_medal')->fetch_all_by_id($medalsarray) as $modmedal) {
  1153. if(empty($modmedal['expiration'])) {
  1154. $medalsnew[] = $modmedal[medalid];
  1155. $medalstatus = 0;
  1156. } else {
  1157. $modmedal['expiration'] = TIMESTAMP + $modmedal['expiration'] * 86400;
  1158. $medalsnew[] = $modmedal[medalid].'|'.$modmedal['expiration'];
  1159. $medalstatus = 1;
  1160. }
  1161. if(in_array($modmedal['medalid'], $medalsadd)) {
  1162. $data = array(
  1163. 'uid' => $_GET['uid'],
  1164. 'medalid' => $modmedal['medalid'],
  1165. 'type' => 0,
  1166. 'dateline' => $_G['timestamp'],
  1167. 'expiration' => $modmedal['expiration'],
  1168. 'status' => $medalstatus,
  1169. );
  1170. C::t('forum_medallog')->insert($data);
  1171. C::t('common_member_medal')->insert(array('uid' => $_GET['uid'], 'medalid' => $modmedal['medalid']), 0, 1);
  1172. }
  1173. }
  1174. }
  1175. if(!empty($medalsdel)) {
  1176. C::t('forum_medallog')->update_type_by_uid_medalid(4, $_GET['uid'], $medalsdel);
  1177. C::t('common_member_medal')->delete_by_uid_medalid($_GET['uid'], $medalsdel);
  1178. }
  1179. $medalsnew = implode("\t", $medalsnew);
  1180. C::t('common_member_field_forum'.$tableext)->update($_GET['uid'], array('medals' => $medalsnew));
  1181. cpmsg('members_edit_medals_succeed', "action=members&operation=medal&uid={$_GET['uid']}", 'succeed');
  1182. }
  1183. } elseif($operation == 'ban') {
  1184. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  1185. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  1186. $membergroupfield = C::t('common_usergroup_field')->fetch($member['groupid']);
  1187. $member = array_merge($member, $membermf, $membergroup, $membergroupfield);
  1188. if(($member['type'] == 'system' && in_array($member['groupid'], array(1, 2, 3, 6, 7, 8))) || $member['type'] == 'special') {
  1189. cpmsg('members_edit_illegal', '', 'error', array('grouptitle' => $member['grouptitle'], 'uid' => $member['uid']));
  1190. }
  1191. if($member['allowadmincp']) {
  1192. cpmsg('members_edit_illegal_portal', '', 'error',array('uid' => $member['uid']));
  1193. }
  1194. $member['groupterms'] = dunserialize($member['groupterms']);
  1195. $member['banexpiry'] = !empty($member['groupterms']['main']['time']) && ($member['groupid'] == 4 || $member['groupid'] == 5) ? dgmdate($member['groupterms']['main']['time'], 'Y-n-j') : '';
  1196. if(!submitcheck('bansubmit')) {
  1197. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  1198. shownav('user', 'members_ban_user');
  1199. showsubmenu($lang['members_ban_user'].($member['username'] ? ' - '.$member['username'] : ''));
  1200. showtips('members_ban_tips');
  1201. showformheader('members&operation=ban');
  1202. showtableheader();
  1203. showsetting('members_ban_username', 'username', $member['username'], 'text', null, null, '<input type="button" id="crimebtn" class="btn" style="margin-top:-1px;display:none;" onclick="getcrimerecord();" value="'.$lang['crime_checkrecord'].'" />', 'onkeyup="showcrimebtn(this);" id="banusername"');
  1204. if($member) {
  1205. showtagheader('tbody', 'member_status', 1);
  1206. showtablerow('', 'class="td27" colspan="2"', cplang('members_edit_current_status').'<span class="normal">: '.($member['groupid'] == 4 ? $lang['members_ban_post'] : ($member['groupid'] == 5 ? $lang['members_ban_visit'] : ($member['status'] == -1 ? $lang['members_ban_status'] : $lang['members_ban_none']))).'</span>');
  1207. include_once libfile('function/member');
  1208. $clist = crime('getactionlist', $member['uid']);
  1209. if($clist) {
  1210. echo '<tr><td class="td27" colspan="2">'.$lang[members_ban_crime_record].':</td></tr>';
  1211. echo '<tr><td colspan="2" style="padding:0 !important;border-top:none;"><table style="width:100%;">';
  1212. showtablerow('class="partition"', array('width="15%"', 'width="10%"', 'width="20%"', '', 'width="15%"'), array($lang['crime_user'], $lang['crime_action'], $lang['crime_dateline'], $lang['crime_reason'], $lang['crime_operator']));
  1213. foreach($clist as $crime) {
  1214. showtablerow('', '', array('<a href="home.php?mod=space&uid='.$member['uid'].'">'.$member['username'], $lang[$crime['action']], date('Y-m-d H:i:s', $crime['dateline']), $crime['reason'], '<a href="home.php?mod=space&uid='.$crime['operatorid'].'" target="_blank">'.$crime['operator'].'</a>'));
  1215. }
  1216. echo '</table></td></tr>';
  1217. }
  1218. showtagfooter('tbody');
  1219. }
  1220. showsetting('members_ban_type', array('bannew', array(
  1221. array('', $lang['members_ban_none'], array('validity' => 'none')),
  1222. array('post', $lang['members_ban_post'], array('validity' => '')),
  1223. array('visit', $lang['members_ban_visit'], array('validity' => '')),
  1224. array('status', $lang['members_ban_status'], array('validity' => 'none'))
  1225. )), '', 'mradio');
  1226. showtagheader('tbody', 'validity', false, 'sub');
  1227. showsetting('members_ban_validity', '', '', selectday('banexpirynew', array(0, 1, 3, 5, 7, 14, 30, 60, 90, 180, 365)));
  1228. showtagfooter('tbody');
  1229. print <<<EOF
  1230. <tr>
  1231. <td class="td27" colspan="2">$lang[members_ban_clear_content]:</td>
  1232. </tr>
  1233. <tr>
  1234. <td colspan="2">
  1235. <ul class="dblist" onmouseover="altStyle(this);">
  1236. <li style="width: 100%;"><input type="checkbox" name="chkall" onclick="checkAll('prefix', this.form, 'clear')" class="checkbox">&nbsp;$lang[select_all]</li>
  1237. <li style="width: 8%;"><input type="checkbox" value="post" name="clear[post]" class="checkbox">&nbsp;$lang[members_ban_delpost]</li>
  1238. <li style="width: 8%;"><input type="checkbox" value="follow" name="clear[follow]" class="checkbox">&nbsp;$lang[members_ban_delfollow]</li>
  1239. <li style="width: 8%;"><input type="checkbox" value="postcomment" name="clear[postcomment]" class="checkbox">&nbsp;$lang[members_ban_postcomment]</li>
  1240. <li style="width: 8%;"><input type="checkbox" value="doing" name="clear[doing]" class="checkbox">&nbsp;$lang[members_ban_deldoing]</li>
  1241. <li style="width: 8%;"><input type="checkbox" value="blog" name="clear[blog]" class="checkbox">&nbsp;$lang[members_ban_delblog]</li>
  1242. <li style="width: 8%;"><input type="checkbox" value="album" name="clear[album]" class="checkbox">&nbsp;$lang[members_ban_delalbum]</li>
  1243. <li style="width: 8%;"><input type="checkbox" value="share" name="clear[share]" class="checkbox">&nbsp;$lang[members_ban_delshare]</li>
  1244. <li style="width: 8%;"><input type="checkbox" value="avatar" name="clear[avatar]" class="checkbox">&nbsp;$lang[members_ban_delavatar]</li>
  1245. <li style="width: 8%;"><input type="checkbox" value="comment" name="clear[comment]" class="checkbox">&nbsp;$lang[members_ban_delcomment]</li>
  1246. </ul>
  1247. </td>
  1248. </tr>
  1249. EOF;
  1250. showsetting('members_ban_reason', 'reason', '', 'textarea');
  1251. showsubmit('bansubmit');
  1252. showtablefooter();
  1253. showformfooter();
  1254. $basescript = ADMINSCRIPT;
  1255. print <<<EOF
  1256. <script type="text/javascript">
  1257. var oldbanusername = '$member[username]';
  1258. function showcrimebtn(obj) {
  1259. if(oldbanusername == obj.value) {
  1260. return;
  1261. }
  1262. oldbanusername = obj.value;
  1263. $('crimebtn').style.display = '';
  1264. if($('member_status')) {
  1265. $('member_status').style.display = 'none';
  1266. }
  1267. }
  1268. function getcrimerecord() {
  1269. if($('banusername').value) {
  1270. window.location.href = '$basescript?action=members&operation=ban&username=' + $('banusername').value;
  1271. }
  1272. }
  1273. </script>
  1274. EOF;
  1275. } else {
  1276. if(empty($member)) {
  1277. cpmsg('members_edit_nonexistence');
  1278. }
  1279. $setarr = array();
  1280. $reason = trim($_GET['reason']);
  1281. if(!$reason && ($_G['group']['reasonpm'] == 1 || $_G['group']['reasonpm'] == 3)) {
  1282. cpmsg('members_edit_reason_invalid', '', 'error');
  1283. }
  1284. $my_data = array();
  1285. $mylogtype = '';
  1286. if(in_array($_GET['bannew'], array('post', 'visit', 'status'))) {
  1287. $my_data = array('uid' => $member['uid']);
  1288. if($_GET['delpost']) {
  1289. $my_data['otherid'] = 1;
  1290. }
  1291. $mylogtype = 'banuser';
  1292. } elseif($member['groupid'] == 4 || $member['groupid'] == 5 || $member['status'] == '-1') {
  1293. $my_data = array('uid' => $member['uid']);
  1294. $mylogtype = 'unbanuser';
  1295. }
  1296. if($_GET['bannew'] == 'post' || $_GET['bannew'] == 'visit') {
  1297. $groupidnew = $_GET['bannew'] == 'post' ? 4 : 5;
  1298. $_GET['banexpirynew'] = !empty($_GET['banexpirynew']) ? TIMESTAMP + $_GET['banexpirynew'] * 86400 : 0;
  1299. $_GET['banexpirynew'] = $_GET['banexpirynew'] > TIMESTAMP ? $_GET['banexpirynew'] : 0;
  1300. if($_GET['banexpirynew']) {
  1301. $member['groupterms']['main'] = array('time' => $_GET['banexpirynew'], 'adminid' => $member['adminid'], 'groupid' => $member['groupid']);
  1302. $member['groupterms']['ext'][$groupidnew] = $_GET['banexpirynew'];
  1303. $setarr['groupexpiry'] = groupexpiry($member['groupterms']);
  1304. } else {
  1305. $setarr['groupexpiry'] = 0;
  1306. }
  1307. $adminidnew = -1;
  1308. $my_data['expiry'] = groupexpiry($member['groupterms']);
  1309. $postcomment_cache_pid = array();
  1310. foreach(C::t('forum_postcomment')->fetch_all_by_authorid($member['uid']) as $postcomment) {
  1311. $postcomment_cache_pid[$postcomment['pid']] = $postcomment['pid'];
  1312. }
  1313. C::t('forum_postcomment')->delete_by_authorid($member['uid'], false, true);
  1314. if($postcomment_cache_pid) {
  1315. C::t('forum_postcache')->delete($postcomment_cache_pid);
  1316. }
  1317. } elseif($member['groupid'] == 4 || $member['groupid'] == 5) {
  1318. if(!empty($member['groupterms']['main']['groupid'])) {
  1319. $groupidnew = $member['groupterms']['main']['groupid'];
  1320. $adminidnew = $member['groupterms']['main']['adminid'];
  1321. unset($member['groupterms']['main']);
  1322. unset($member['groupterms']['ext'][$member['groupid']]);
  1323. $setarr['groupexpiry'] = groupexpiry($member['groupterms']);
  1324. }
  1325. $groupnew = C::t('common_usergroup')->fetch_by_credits($member['credits']);
  1326. $groupidnew = $groupnew['groupid'];
  1327. $adminidnew = 0;
  1328. } else {
  1329. $update = false;
  1330. $groupidnew = $member['groupid'];
  1331. $adminidnew = $member['adminid'];
  1332. if(in_array('avatar', $_GET['clear'])) {
  1333. $setarr['avatarstatus'] = 0;
  1334. loaducenter();
  1335. uc_user_deleteavatar($member['uid']);
  1336. }
  1337. }
  1338. if(!empty($my_data) && !empty($mylogtype)) {
  1339. $log_handler = Cloud::loadClass('Cloud_Service_SearchHelper');
  1340. $log_handler->myThreadLog($mylogtype, $my_data);
  1341. }
  1342. $setarr['adminid'] = $adminidnew;
  1343. $setarr['groupid'] = $groupidnew;
  1344. $setarr['status'] = $_GET['bannew'] == 'status' ? -1 : 0;
  1345. C::t('common_member'.$tableext)->update($member['uid'], $setarr);
  1346. if($_G['group']['allowbanuser'] && (DB::affected_rows())) {
  1347. banlog($member['username'], $member['groupid'], $groupidnew, $_GET['banexpirynew'], $reason, $_GET['bannew'] == 'status' ? -1 : 0);
  1348. }
  1349. C::t('common_member_field_forum'.$tableext)->update($member['uid'],array('groupterms' => ($member['groupterms'] ? serialize($member['groupterms']) : '')));
  1350. $crimeaction = $noticekey = '';
  1351. include_once libfile('function/member');
  1352. if($_GET['bannew'] == 'post') {
  1353. $crimeaction = 'crime_banspeak';
  1354. $noticekey = 'member_ban_speak';
  1355. $from_idtype = 'banspeak';
  1356. } elseif($_GET['bannew'] == 'visit') {
  1357. $crimeaction = 'crime_banvisit';
  1358. $noticekey = 'member_ban_visit';
  1359. $from_idtype = 'banvisit';
  1360. } elseif($_GET['bannew'] == 'status') {
  1361. $crimeaction = 'crime_banstatus';
  1362. $noticekey = 'member_ban_status';
  1363. $from_idtype = 'banstatus';
  1364. }
  1365. if($crimeaction) {
  1366. crime('recordaction', $member['uid'], $crimeaction, lang('forum/misc', 'crime_reason', array('reason' => $reason)));
  1367. }
  1368. if($noticekey) {
  1369. $notearr = array(
  1370. 'user' => "<a href=\"home.php?mod=space&uid=$_G[uid]\">$_G[username]</a>",
  1371. 'day' => intval($_POST['banexpirynew']),
  1372. 'reason' => $reason,
  1373. 'from_id' => 0,
  1374. 'from_idtype' => $from_idtype
  1375. );
  1376. notification_add($member['uid'], 'system', $noticekey, $notearr, 1);
  1377. }
  1378. if($_G['adminid'] == 1 && !empty($_GET['clear']) && is_array($_GET['clear'])) {
  1379. require_once libfile('function/delete');
  1380. $membercount = array();
  1381. if(in_array('post', $_GET['clear'])) {
  1382. if($member['uid']) {
  1383. require_once libfile('function/post');
  1384. $tidsdelete = array();
  1385. loadcache('posttableids');
  1386. $posttables = empty($_G['cache']['posttableids']) ? array(0) : $_G['cache']['posttableids'];
  1387. foreach($posttables as $posttableid) {
  1388. $pidsthread = $pidsdelete = array();
  1389. $postlist = C::t('forum_post')->fetch_all_by_authorid($posttableid, $member['uid'], false);
  1390. if($postlist) {
  1391. foreach($postlist as $post) {
  1392. $prune['forums'][] = $post['fid'];
  1393. $prune['thread'][$post['tid']]++;
  1394. if($post['first']) {
  1395. $tidsdelete[] = $post['tid'];
  1396. }
  1397. $pidsdelete[] = $post['pid'];
  1398. $pidsthread[$post['pid']] = $post['tid'];
  1399. }
  1400. foreach($pidsdelete as $key=>$pid) {
  1401. if(in_array($pidsthread[$pid], $tidsdelete)) {
  1402. unset($pidsdelete[$key]);
  1403. unset($prune['thread'][$pidsthread[$pid]]);
  1404. updatemodlog($pidsthread[$pid], 'DEL');
  1405. } else {
  1406. updatemodlog($pidsthread[$pid], 'DLP');
  1407. }
  1408. }
  1409. }
  1410. deletepost($pidsdelete, 'pid', false, $posttableid, true);
  1411. }
  1412. unset($postlist);
  1413. if($tidsdelete) {
  1414. deletethread($tidsdelete, true, true, true);
  1415. }
  1416. if(!empty($prune)) {
  1417. foreach($prune['thread'] as $tid => $decrease) {
  1418. updatethreadcount($tid);
  1419. }
  1420. foreach(array_unique($prune['forums']) as $fid) {
  1421. }
  1422. }
  1423. if($_G['setting']['globalstick']) {
  1424. updatecache('globalstick');
  1425. }
  1426. }
  1427. $membercount['posts'] = 0;
  1428. $membercount['threads'] = 0;
  1429. }
  1430. if(in_array('follow', $_GET['clear'])) {
  1431. C::t('home_follow_feed')->delete_by_uid($member['uid']);
  1432. $membercount['feeds'] = 0;
  1433. }
  1434. if(in_array('blog', $_GET['clear'])) {
  1435. $blogids = array();
  1436. $query = C::t('home_blog')->fetch_blogid_by_uid($member['uid']);
  1437. foreach($query as $value) {
  1438. $blogids[] = $value['blogid'];
  1439. }
  1440. if(!empty($blogids)) {
  1441. C::t('common_moderate')->delete($blogids, 'blogid');
  1442. }
  1443. C::t('home_blog')->delete_by_uid($member['uid']);
  1444. C::t('home_blogfield')->delete_by_uid($member['uid']);
  1445. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'blogid');
  1446. $membercount['blogs'] = 0;
  1447. }
  1448. if(in_array('album', $_GET['clear'])) {
  1449. C::t('home_album')->delete_by_uid($member['uid']);
  1450. $picids = array();
  1451. $query = C::t('home_pic')->fetch_all_by_uid($member['uid']);
  1452. foreach($query as $value) {
  1453. $picids[] = $value['picid'];
  1454. deletepicfiles($value);
  1455. }
  1456. if(!empty($picids)) {
  1457. C::t('common_moderate')->delete($picids, 'picid');
  1458. }
  1459. C::t('home_pic')->delete_by_uid($member['uid']);
  1460. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'albumid');
  1461. $membercount['albums'] = 0;
  1462. }
  1463. if(in_array('share', $_GET['clear'])) {
  1464. $shareids = array();
  1465. foreach(C::t('home_share')->fetch_all_by_uid($member['uid']) as $value) {
  1466. $shareids[] = $value['sid'];
  1467. }
  1468. if(!empty($shareids)) {
  1469. C::t('common_moderate')->delete($shareids, 'sid');
  1470. }
  1471. C::t('home_share')->delete_by_uid($member['uid']);
  1472. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'sid');
  1473. $membercount['sharings'] = 0;
  1474. }
  1475. if(in_array('doing', $_GET['clear'])) {
  1476. $doids = array();
  1477. $query = C::t('home_doing')->fetch_all_by_uid_doid(array($member['uid']));
  1478. foreach ($query as $value) {
  1479. $doids[$value['doid']] = $value['doid'];
  1480. }
  1481. if(!empty($doids)) {
  1482. C::t('common_moderate')->delete($doids, 'doid');
  1483. }
  1484. C::t('home_doing')->delete_by_uid($member['uid']);
  1485. C::t('common_member_field_home')->update($member['uid'], array('recentnote' => '', 'spacenote' => ''));
  1486. C::t('home_docomment')->delete_by_doid_uid(($doids ? $doids : null), $member['uid']);
  1487. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'doid');
  1488. $membercount['doings'] = 0;
  1489. }
  1490. if(in_array('comment', $_GET['clear'])) {
  1491. $delcids = array();
  1492. $query = C::t('home_comment')->fetch_all_by_uid($member['uid'], 0, 1);
  1493. foreach($query as $value) {
  1494. $key = $value['idtype'].'_cid';
  1495. $delcids[$key] = $value['cid'];
  1496. }
  1497. if(!empty($delcids)) {
  1498. foreach($delcids as $key => $ids) {
  1499. C::t('common_moderate')->delete($ids, $key);
  1500. }
  1501. }
  1502. C::t('home_comment')->delete_by_uid($member['uid']);
  1503. }
  1504. if(in_array('postcomment', $_GET['clear'])) {
  1505. $postcomment_cache_pid = array();
  1506. foreach(C::t('forum_postcomment')->fetch_all_by_authorid($member['uid']) as $postcomment) {
  1507. $postcomment_cache_pid[$postcomment['pid']] = $postcomment['pid'];
  1508. }
  1509. C::t('forum_postcomment')->delete_by_authorid($member['uid']);
  1510. if($postcomment_cache_pid) {
  1511. C::t('forum_postcache')->delete($postcomment_cache_pid);
  1512. }
  1513. }
  1514. if($membercount) {
  1515. DB::update('common_member_count'.$tableext, $membercount, "uid='$member[uid]'");
  1516. }
  1517. }
  1518. cpmsg('members_edit_succeed', 'action=members&operation=ban&uid='.$member['uid'], 'succeed');
  1519. }
  1520. } elseif($operation == 'access') {
  1521. require_once libfile('function/forumlist');
  1522. $forumlist = '<SELECT name="addfid">'.forumselect(FALSE, 0, 0, TRUE).'</select>';
  1523. loadcache('forums');
  1524. if(!submitcheck('accesssubmit')) {
  1525. shownav('user', 'members_access_edit');
  1526. showsubmenu('members_access_edit');
  1527. showtips('members_access_tips');
  1528. showtableheader(cplang('members_access_now').' - '.$member['username'], 'nobottom fixpadding');
  1529. showsubtitle(array('forum', 'members_access_view', 'members_access_post', 'members_access_reply', 'members_access_getattach', 'members_access_getimage', 'members_access_postattach', 'members_access_postimage', 'members_access_adminuser', 'members_access_dateline'));
  1530. $accessmasks = C::t('forum_access')->fetch_all_by_uid($_GET['uid']);
  1531. $adminuser = C::t('common_member'.$tableext)->fetch($_GET['uid']);
  1532. foreach ($accessmasks as $id => $access) {
  1533. $access['dateline'] = $access['dateline'] ? dgmdate($access['dateline']) : '';
  1534. $forum = $_G['cache']['forums'][$id];
  1535. showtablerow('', '', array(
  1536. ($forum['type'] == 'forum' ? '' : '|-----')."&nbsp;<a href=\"".ADMINSCRIPT."?action=forums&operation=edit&fid=$forum[fid]&anchor=perm\">$forum[name]</a>",
  1537. accessimg($access['allowview']),
  1538. accessimg($access['allowpost']),
  1539. accessimg($access['allowreply']),
  1540. accessimg($access['allowgetattach']),
  1541. accessimg($access['allowgetimage']),
  1542. accessimg($access['allowpostattach']),
  1543. accessimg($access['allowpostimage']),
  1544. $adminuser['username'],
  1545. $access['dateline'],
  1546. ));
  1547. }
  1548. if(empty($accessmasks)) {
  1549. showtablerow('', '', array(
  1550. '-',
  1551. '-',
  1552. '-',
  1553. '-',
  1554. '-',
  1555. '-',
  1556. '-',
  1557. '-',
  1558. '-',
  1559. '-',
  1560. ));
  1561. }
  1562. showtablefooter();
  1563. showformheader("members&operation=access&uid={$_GET['uid']}");
  1564. showtableheader(cplang('members_access_add'), 'notop fixpadding');
  1565. showsetting('members_access_add_forum', '', '', $forumlist);
  1566. foreach(array('view', 'post', 'reply', 'getattach', 'getimage', 'postattach', 'postimage') as $perm) {
  1567. showsetting('members_access_add_'.$perm, array('allow'.$perm.'new', array(
  1568. array(0, cplang('default')),
  1569. array(1, cplang('members_access_allowed')),
  1570. array(-1, cplang('members_access_disallowed')),
  1571. ), TRUE), 0, 'mradio');
  1572. }
  1573. showsubmit('accesssubmit', 'submit');
  1574. showtablefooter();
  1575. showformfooter();
  1576. } else {
  1577. $addfid = intval($_GET['addfid']);
  1578. if($addfid && $_G['cache']['forums'][$addfid]) {
  1579. $allowviewnew = !$_GET['allowviewnew'] ? 0 : ($_GET['allowviewnew'] > 0 ? 1 : -1);
  1580. $allowpostnew = !$_GET['allowpostnew'] ? 0 : ($_GET['allowpostnew'] > 0 ? 1 : -1);
  1581. $allowreplynew = !$_GET['allowreplynew'] ? 0 : ($_GET['allowreplynew'] > 0 ? 1 : -1);
  1582. $allowgetattachnew = !$_GET['allowgetattachnew'] ? 0 : ($_GET['allowgetattachnew'] > 0 ? 1 : -1);
  1583. $allowgetimagenew = !$_GET['allowgetimagenew'] ? 0 : ($_GET['allowgetimagenew'] > 0 ? 1 : -1);
  1584. $allowpostattachnew = !$_GET['allowpostattachnew'] ? 0 : ($_GET['allowpostattachnew'] > 0 ? 1 : -1);
  1585. $allowpostimagenew = !$_GET['allowpostimagenew'] ? 0 : ($_GET['allowpostimagenew'] > 0 ? 1 : -1);
  1586. if($allowviewnew == -1) {
  1587. $allowpostnew = $allowreplynew = $allowgetattachnew = $allowgetimagenew = $allowpostattachnew = $allowpostimagenew = -1;
  1588. } elseif($allowpostnew == 1 || $allowreplynew == 1 || $allowgetattachnew == 1 || $allowgetimagenew == 1 || $allowpostattachnew == 1 || $allowpostimagenew == 1) {
  1589. $allowviewnew = 1;
  1590. }
  1591. if(!$allowviewnew && !$allowpostnew && !$allowreplynew && !$allowgetattachnew && !$allowgetimagenew && !$allowpostattachnew && !$allowpostimagenew) {
  1592. C::t('forum_access')->delete_by_fid($addfid, $_GET['uid']);
  1593. if(!C::t('forum_access')->count_by_uid($_GET['uid'])) {
  1594. C::t('common_member'.$tableext)->update($_GET['uid'], array('accessmasks'=>0));
  1595. }
  1596. } else {
  1597. $data = array('uid' => $_GET['uid'], 'fid' => $addfid, 'allowview' => $allowviewnew, 'allowpost' => $allowpostnew, 'allowreply' => $allowreplynew, 'allowgetattach' => $allowgetattachnew, 'allowgetimage' => $allowgetimagenew, 'allowpostattach' => $allowpostattachnew, 'allowpostimage' => $allowpostimagenew, 'adminuser' => $_G['uid'], 'dateline' => $_G['timestamp']);
  1598. C::t('forum_access')->insert($data, 0, 1);
  1599. C::t('common_member'.$tableext)->update($_GET['uid'], array('accessmasks'=>1));
  1600. }
  1601. updatecache('forums');
  1602. }
  1603. cpmsg('members_access_succeed', 'action=members&operation=access&uid='.$_GET['uid'], 'succeed');
  1604. }
  1605. } elseif($operation == 'edit') {
  1606. $uid = $member['uid'];
  1607. if(!empty($_G['setting']['connect']['allow']) && $do == 'bindlog') {
  1608. $member = array_merge($member, C::t('#qqconnect#common_member_connect')->fetch($uid));
  1609. showsubmenu("$lang[members_edit] - $member[username]", array(
  1610. array('connect_member_info', 'members&operation=edit&uid='.$uid, 0),
  1611. array('connect_member_bindlog', 'members&operation=edit&do=bindlog&uid='.$uid, 1),
  1612. ));
  1613. if($member['conopenid']) {
  1614. showtableheader();
  1615. showtitle('connect_member_bindlog_uin');
  1616. showsubtitle(array('connect_member_bindlog_username', 'connect_member_bindlog_date', 'connect_member_bindlog_type'));
  1617. $bindlogs = $bindloguids = $usernames = array();
  1618. foreach(C::t('#qqconnect#connect_memberbindlog')->fetch_all_by_openids($member['conopenid']) as $bindlog) {
  1619. $bindlogs[$bindlog['dateline']] = $bindlog;
  1620. $bindloguids[] = $bindlog['uid'];
  1621. }
  1622. $usernames = C::t('common_member')->fetch_all_username_by_uid($bindloguids);
  1623. foreach($bindlogs as $k => $v) {
  1624. showtablerow('', array(), array(
  1625. $usernames[$v['uid']],
  1626. dgmdate($k),
  1627. cplang('connect_member_bindlog_type_'.$v['type']),
  1628. ));
  1629. }
  1630. showtablefooter();
  1631. }
  1632. showtableheader();
  1633. showtitle('connect_member_bindlog_uid');
  1634. showsubtitle(array('connect_member_bindlog_date', 'connect_member_bindlog_type'));
  1635. foreach(C::t('#qqconnect#connect_memberbindlog')->fetch_all_by_uids($member['uid']) as $bindlog) {
  1636. showtablerow('', array(), array(
  1637. dgmdate($bindlog['dateline']),
  1638. cplang('connect_member_bindlog_type_'.$bindlog['type']),
  1639. ));
  1640. }
  1641. showtablefooter();
  1642. exit;
  1643. }
  1644. $member = array_merge($member, C::t('common_member_field_forum'.$tableext)->fetch($uid),
  1645. C::t('common_member_field_home'.$tableext)->fetch($uid),
  1646. C::t('common_member_count'.$tableext)->fetch($uid),
  1647. C::t('common_member_status'.$tableext)->fetch($uid),
  1648. C::t('common_member_profile'.$tableext)->fetch($uid),
  1649. C::t('common_usergroup')->fetch($member['groupid']),
  1650. C::t('common_usergroup_field')->fetch($member['groupid']));
  1651. if(!empty($_G['setting']['connect']['allow'])) {
  1652. $member = array_merge($member, C::t('#qqconnect#common_member_connect')->fetch($uid));
  1653. $uin = C::t('common_uin_black')->fetch_by_uid($uid);
  1654. $member = array_merge($member, array('uinblack'=>$uin['uin']));
  1655. }
  1656. loadcache(array('profilesetting'));
  1657. $fields = array();
  1658. foreach($_G['cache']['profilesetting'] as $fieldid=>$field) {
  1659. if($field['available']) {
  1660. $_G['cache']['profilesetting'][$fieldid]['unchangeable'] = 0;
  1661. $fields[$fieldid] = $field['title'];
  1662. }
  1663. }
  1664. if(!submitcheck('editsubmit')) {
  1665. require_once libfile('function/editor');
  1666. $styleselect = "<select name=\"styleidnew\">\n<option value=\"\">$lang[use_default]</option>";
  1667. foreach(C::t('common_style')->fetch_all_data() as $style) {
  1668. $styleselect .= "<option value=\"$style[styleid]\" ".($style['styleid'] == $member['styleid'] ? 'selected="selected"' : '').">$style[name]</option>\n";
  1669. }
  1670. $styleselect .= '</select>';
  1671. $tfcheck = array($member['timeformat'] => 'checked');
  1672. $gendercheck = array($member['gender'] => 'checked');
  1673. $pscheck = array($member['pmsound'] => 'checked');
  1674. $member['regdate'] = dgmdate($member['regdate'], 'Y-n-j h:i A');
  1675. $member['lastvisit'] = dgmdate($member['lastvisit'], 'Y-n-j h:i A');
  1676. $member['bio'] = html2bbcode($member['bio']);
  1677. $member['signature'] = html2bbcode($member['sightml']);
  1678. shownav('user', 'members_edit');
  1679. showsubmenu("$lang[members_edit] - $member[username]", array(
  1680. array('connect_member_info', 'members&operation=edit&uid='.$uid, 1),
  1681. !empty($_G['setting']['connect']['allow']) ? array('connect_member_bindlog', 'members&operation=edit&do=bindlog&uid='.$uid, 0) : array(),
  1682. ));
  1683. showformheader("members&operation=edit&uid=$uid", 'enctype');
  1684. showtableheader();
  1685. $status = array($member['status'] => ' checked');
  1686. showsetting('members_edit_username', '', '', ($_G['setting']['connect']['allow'] && $member['conisbind'] ? ' <img class="vmiddle" src="static/image/common/connect_qq.gif" />' : '').' '.$member['username']);
  1687. showsetting('members_edit_avatar', '', '', ' <img src="'.avatar($uid, 'middle', true, false, true).'?random='.random(2).'" onerror="this.onerror=null;this.src=\''.$_G['setting']['ucenterurl'].'/images/noavatar_middle.gif\'" /><br /><br /><input name="clearavatar" class="checkbox" type="checkbox" value="1" /> '.$lang['members_edit_avatar_clear']);
  1688. $hrefext = "&detail=1&users=$member[username]&searchsubmit=1&perpage=50&fromumanage=1";
  1689. showsetting('members_edit_statistics', '', '', "<a href=\"".ADMINSCRIPT."?action=prune$hrefext\" class=\"act\">$lang[posts]($member[posts])</a>".
  1690. "<a href=\"".ADMINSCRIPT."?action=doing$hrefext\" class=\"act\">$lang[doings]($member[doings])</a>".
  1691. "<a href=\"".ADMINSCRIPT."?action=blog$hrefext\" class=\"act\">$lang[blogs]($member[blogs])</a>".
  1692. "<a href=\"".ADMINSCRIPT."?action=album$hrefext\" class=\"act\">$lang[albums]($member[albums])</a>".
  1693. "<a href=\"".ADMINSCRIPT."?action=share$hrefext\" class=\"act\">$lang[shares]($member[sharings])</a> <br>&nbsp;$lang[setting_styles_viewthread_userinfo_oltime]: $member[oltime]$lang[hourtime]");
  1694. showsetting('members_edit_password', 'passwordnew', '', 'text');
  1695. if(!empty($_G['setting']['connect']['allow']) && (!empty($member['conopenid']) || !empty($member['uinblack']))) {
  1696. if($member['conisbind'] && !$member['conisregister']) {
  1697. showsetting('members_edit_unbind', 'connectunbind', 0, 'radio');
  1698. }
  1699. showsetting('members_edit_uinblack', 'uinblack', $member['uinblack'], 'radio', '', 0, cplang('members_edit_uinblack_comment').($member['conisregister'] ? cplang('members_edit_uinblack_notice') : ''));
  1700. }
  1701. showsetting('members_edit_clearquestion', 'clearquestion', 0, 'radio');
  1702. showsetting('members_edit_status', 'statusnew', $member['status'], 'radio');
  1703. showsetting('members_edit_email', 'emailnew', $member['email'], 'text');
  1704. showsetting('members_edit_email_emailstatus', 'emailstatusnew', $member['emailstatus'], 'radio');
  1705. showsetting('members_edit_posts', 'postsnew', $member['posts'], 'text');
  1706. showsetting('members_edit_digestposts', 'digestpostsnew', $member['digestposts'], 'text');
  1707. showsetting('members_edit_regip', 'regipnew', $member['regip'], 'text');
  1708. showsetting('members_edit_regdate', 'regdatenew', $member['regdate'], 'text');
  1709. showsetting('members_edit_lastvisit', 'lastvisitnew', $member['lastvisit'], 'text');
  1710. showsetting('members_edit_lastip', 'lastipnew', $member['lastip'], 'text');
  1711. showsetting('members_edit_addsize', 'addsizenew', $member['addsize'], 'text');
  1712. showsetting('members_edit_addfriend', 'addfriendnew', $member['addfriend'], 'text');
  1713. showsetting('members_edit_timeoffset', 'timeoffsetnew', $member['timeoffset'], 'text');
  1714. showsetting('members_edit_invisible', 'invisiblenew', $member['invisible'], 'radio');
  1715. showtitle('members_edit_option');
  1716. showsetting('members_edit_cstatus', 'cstatusnew', $member['customstatus'], 'text');
  1717. showsetting('members_edit_signature', 'signaturenew', $member['signature'], 'textarea');
  1718. if($fields) {
  1719. showtitle('members_profile');
  1720. include_once libfile('function/profile');
  1721. foreach($fields as $fieldid=>$fieldtitle) {
  1722. $html = profile_setting($fieldid, $member);
  1723. if($html) {
  1724. showsetting($fieldtitle, '', '', $html);
  1725. }
  1726. }
  1727. }
  1728. showsubmit('editsubmit');
  1729. showtablefooter();
  1730. showformfooter();
  1731. } else {
  1732. loaducenter();
  1733. require_once libfile('function/discuzcode');
  1734. $questionid = $_GET['clearquestion'] ? 0 : '';
  1735. $ucresult = uc_user_edit(addslashes($member['username']), $_GET['passwordnew'], $_GET['passwordnew'], addslashes(strtolower(trim($_GET['emailnew']))), 1, $questionid);
  1736. if($ucresult < 0) {
  1737. if($ucresult == -4) {
  1738. cpmsg('members_email_illegal', '', 'error');
  1739. } elseif($ucresult == -5) {
  1740. cpmsg('members_email_domain_illegal', '', 'error');
  1741. } elseif($ucresult == -6) {
  1742. cpmsg('members_email_duplicate', '', 'error');
  1743. }
  1744. }
  1745. if($_GET['clearavatar']) {
  1746. C::t('common_member'.$tableext)->update($_GET['uid'], array('avatarstatus'=>0));
  1747. uc_user_deleteavatar($uid);
  1748. }
  1749. $creditsnew = intval($creditsnew);
  1750. $regdatenew = strtotime($_GET['regdatenew']);
  1751. $lastvisitnew = strtotime($_GET['lastvisitnew']);
  1752. $secquesadd = $_GET['clearquestion'] ? ", secques=''" : '';
  1753. $signaturenew = censor($_GET['signaturenew']);
  1754. $sigstatusnew = $signaturenew ? 1 : 0;
  1755. $sightmlnew = discuzcode($signaturenew, 1, 0, 0, 0, ($member['allowsigbbcode'] ? ($member['allowcusbbcode'] ? 2 : 1) : 0), $member['allowsigimgcode'], 0);
  1756. $oltimenew = round($_GET['totalnew'] / 60);
  1757. $fieldadd = '';
  1758. $fieldarr = array();
  1759. include_once libfile('function/profile');
  1760. foreach($_POST as $field_key=>$field_val) {
  1761. if(isset($fields[$field_key]) && (profile_check($field_key, $field_val) || $_G['adminid'] == 1)) {
  1762. $fieldarr[$field_key] = $field_val;
  1763. }
  1764. }
  1765. if($_GET['deletefile'] && is_array($_GET['deletefile'])) {
  1766. foreach($_GET['deletefile'] as $key => $value) {
  1767. if(isset($fields[$key])) {
  1768. @unlink(getglobal('setting/attachdir').'./profile/'.$member[$key]);
  1769. $fieldarr[$key] = '';
  1770. }
  1771. }
  1772. }
  1773. if($_FILES) {
  1774. $upload = new discuz_upload();
  1775. foreach($_FILES as $key => $file) {
  1776. if(isset($fields[$key])) {
  1777. $upload->init($file, 'profile');
  1778. $attach = $upload->attach;
  1779. if(!$upload->error()) {
  1780. $upload->save();
  1781. if(!$upload->get_image_info($attach['target'])) {
  1782. @unlink($attach['target']);
  1783. continue;
  1784. }
  1785. $attach['attachment'] = dhtmlspecialchars(trim($attach['attachment']));
  1786. @unlink(getglobal('setting/attachdir').'./profile/'.$member[$key]);
  1787. $fieldarr[$key] = $attach['attachment'];
  1788. }
  1789. }
  1790. }
  1791. }
  1792. $memberupdate = array();
  1793. if($ucresult >= 0) {
  1794. $memberupdate['email'] = strtolower(trim($_GET['emailnew']));
  1795. }
  1796. if($ucresult >= 0 && !empty($_GET['passwordnew'])) {
  1797. $memberupdate['password'] = md5(random(10));
  1798. }
  1799. $addsize = intval($_GET['addsizenew']);
  1800. $addfriend = intval($_GET['addfriendnew']);
  1801. $status = intval($_GET['statusnew']) ? -1 : 0;
  1802. $emailstatusnew = intval($_GET['emailstatusnew']);
  1803. if(!empty($_G['setting']['connect']['allow'])) {
  1804. if($member['uinblack'] && empty($_GET['uinblack'])) {
  1805. C::t('common_uin_black')->delete($member['uinblack']);
  1806. updatecache('connect_blacklist');
  1807. } elseif(!$member['uinblack'] && !empty($_GET['uinblack'])) {
  1808. connectunbind($member);
  1809. C::t('common_uin_black')->insert(array('uin' => $member['conopenid'], 'uid' => $uid, 'dateline' => TIMESTAMP), false, true);
  1810. updatecache('connect_blacklist');
  1811. }
  1812. if($member['conisbind'] && !$member['conisregister'] && !empty($_GET['connectunbind'])) {
  1813. connectunbind($member);
  1814. }
  1815. }
  1816. $memberupdate = array_merge($memberupdate, array('regdate'=>$regdatenew, 'emailstatus'=>$emailstatusnew, 'status'=>$status, 'timeoffset'=>$_GET['timeoffsetnew']));
  1817. C::t('common_member'.$tableext)->update($uid, $memberupdate);
  1818. C::t('common_member_field_home'.$tableext)->update($uid, array('addsize' => $addsize, 'addfriend' => $addfriend));
  1819. C::t('common_member_count'.$tableext)->update($uid, array('posts' => $_GET['postsnew'], 'digestposts' => $_GET['digestpostsnew']));
  1820. C::t('common_member_status'.$tableext)->update($uid, array('regip' => $_GET['regipnew'], 'lastvisit' => $lastvisitnew, 'lastip' => $_GET['lastipnew'], 'invisible' => $_GET['invisiblenew']));
  1821. C::t('common_member_field_forum'.$tableext)->update($uid, array('customstatus' => $_GET['cstatusnew'], 'sightml' => $sightmlnew));
  1822. if(!empty($fieldarr)) {
  1823. C::t('common_member_profile'.$tableext)->update($uid, $fieldarr);
  1824. }
  1825. manyoulog('user', $uid, 'update');
  1826. cpmsg('members_edit_succeed', 'action=members&operation=edit&uid='.$uid, 'succeed');
  1827. }
  1828. } elseif($operation == 'ipban') {
  1829. if(!submitcheck('ipbansubmit')) {
  1830. require_once libfile('function/misc');
  1831. $iptoban = explode('.', getgpc('ip'));
  1832. $ipbanned = '';
  1833. foreach(C::t('common_banned')->fetch_all_order_dateline() as $banned) {
  1834. for($i = 1; $i <= 4; $i++) {
  1835. if($banned["ip$i"] == -1) {
  1836. $banned["ip$i"] = '*';
  1837. }
  1838. }
  1839. $disabled = $_G['adminid'] != 1 && $banned['admin'] != $_G['member']['username'] ? 'disabled' : '';
  1840. $banned['dateline'] = dgmdate($banned['dateline'], 'Y-m-d');
  1841. $banned['expiration'] = dgmdate($banned['expiration'], 'Y-m-d');
  1842. $theip = "$banned[ip1].$banned[ip2].$banned[ip3].$banned[ip4]";
  1843. $ipbanned .= showtablerow('', array('class="td25"'), array(
  1844. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[$banned[id]]\" value=\"$banned[id]\" $disabled />",
  1845. $theip,
  1846. convertip($theip, "./"),
  1847. $banned[admin],
  1848. $banned[dateline],
  1849. "<input type=\"text\" class=\"txt\" size=\"10\" name=\"expirationnew[$banned[id]]\" value=\"$banned[expiration]\" $disabled />"
  1850. ), TRUE);
  1851. }
  1852. shownav('user', 'nav_members_ipban');
  1853. showsubmenu('nav_members_ipban');
  1854. showtips('members_ipban_tips');
  1855. showformheader('members&operation=ipban');
  1856. showtableheader();
  1857. showsubtitle(array('', 'ip', 'members_ipban_location', 'operator', 'start_time', 'end_time'));
  1858. echo $ipbanned;
  1859. showtablerow('', array('', 'class="td28" colspan="3"', 'class="td28" colspan="2"'), array(
  1860. $lang['add_new'],
  1861. '<input type="text" class="txt" name="ip1new" value="'.$iptoban[0].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip2new" value="'.$iptoban[1].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip3new" value="'.$iptoban[2].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip4new" value="'.$iptoban[3].'" size="3" maxlength="3">',
  1862. $lang['validity'].': <input type="text" class="txt" name="validitynew" value="30" size="3"> '.$lang['days']
  1863. ));
  1864. showsubmit('ipbansubmit', 'submit', 'del');
  1865. showtablefooter();
  1866. showformfooter();
  1867. } else {
  1868. if(!empty($_GET['delete'])) {
  1869. C::t('common_banned')->delete_by_id($_GET['delete'], $_G['adminid'], $_G['username']);
  1870. }
  1871. if($_GET['ip1new'] != '' && $_GET['ip2new'] != '' && $_GET['ip3new'] != '' && $_GET['ip4new'] != '') {
  1872. $own = 0;
  1873. $ip = explode('.', $_G['clientip']);
  1874. for($i = 1; $i <= 4; $i++) {
  1875. if(!is_numeric($_GET['ip'.$i.'new']) || $_GET['ip'.$i.'new'] < 0) {
  1876. if($_G['adminid'] != 1) {
  1877. cpmsg('members_ipban_nopermission', '', 'error');
  1878. }
  1879. $_GET['ip'.$i.'new'] = -1;
  1880. $own++;
  1881. } elseif($_GET['ip'.$i.'new'] == $ip[$i - 1]) {
  1882. $own++;
  1883. }
  1884. $_GET['ip'.$i.'new'] = intval($_GET['ip'.$i.'new']);
  1885. }
  1886. if($own == 4) {
  1887. cpmsg('members_ipban_illegal', '', 'error');
  1888. }
  1889. foreach(C::t('common_banned')->fetch_all_order_dateline() as $banned) {
  1890. $exists = 0;
  1891. for($i = 1; $i <= 4; $i++) {
  1892. if($banned["ip$i"] == -1) {
  1893. $exists++;
  1894. } elseif($banned["ip$i"] == ${"ip".$i."new"}) {
  1895. $exists++;
  1896. }
  1897. }
  1898. if($exists == 4) {
  1899. cpmsg('members_ipban_invalid', '', 'error');
  1900. }
  1901. }
  1902. $expiration = TIMESTAMP + $_GET['validitynew'] * 86400;
  1903. C::app()->session->update_by_ipban($_GET['ip1new'], $_GET['ip2new'], $_GET['ip3new'], $_GET['ip4new']);
  1904. $data = array(
  1905. 'ip1' => $_GET['ip1new'],
  1906. 'ip2' => $_GET['ip2new'],
  1907. 'ip3' => $_GET['ip3new'],
  1908. 'ip4' => $_GET['ip4new'],
  1909. 'admin' => $_G['username'],
  1910. 'dateline' => $_G['timestamp'],
  1911. 'expiration' => $expiration,
  1912. );
  1913. C::t('common_banned')->insert($data);
  1914. }
  1915. if(is_array($_GET['expirationnew'])) {
  1916. foreach($_GET['expirationnew'] as $id => $expiration) {
  1917. C::t('common_banned')->update_expiration_by_id($id, strtotime($expiration), $_G['adminid'], $_G['username']);
  1918. }
  1919. }
  1920. updatecache('ipbanned');
  1921. cpmsg('members_ipban_succeed', 'action=members&operation=ipban', 'succeed');
  1922. }
  1923. } elseif($operation == 'profile') {
  1924. $fieldid = $_GET['fieldid'] ? $_GET['fieldid'] : '';
  1925. shownav('user', 'nav_members_profile');
  1926. if($fieldid) {
  1927. $_G['setting']['privacy'] = !empty($_G['setting']['privacy']) ? $_G['setting']['privacy'] : array();
  1928. $_G['setting']['privacy'] = is_array($_G['setting']['privacy']) ? $_G['setting']['privacy'] : dunserialize($_G['setting']['privacy']);
  1929. $field = C::t('common_member_profile_setting')->fetch($fieldid);
  1930. $fixedfields1 = array('uid', 'constellation', 'zodiac');
  1931. $fixedfields2 = array('gender', 'birthday', 'birthcity', 'residecity');
  1932. $field['isfixed1'] = in_array($fieldid, $fixedfields1);
  1933. $field['isfixed2'] = $field['isfixed1'] || in_array($fieldid, $fixedfields2);
  1934. $field['customable'] = preg_match('/^field[1-8]$/i', $fieldid);
  1935. $profilegroup = C::t('common_setting')->fetch('profilegroup', true);
  1936. $profilevalidate = array();
  1937. include libfile('spacecp/profilevalidate', 'include');
  1938. $field['validate'] = $field['validate'] ? $field['validate'] : ($profilevalidate[$fieldid] ? $profilevalidate[$fieldid] : '');
  1939. if(!submitcheck('editsubmit')) {
  1940. showsubmenu($lang['members_profile'].'-'.$field['title'], array(
  1941. array('members_profile_list', 'members&operation=profile', 0),
  1942. array($lang['edit'], 'members&operation=profile&fieldid='.$_GET['fieldid'], 1)
  1943. ));
  1944. showformheader('members&operation=profile&fieldid='.$fieldid);
  1945. showtableheader();
  1946. if($field['customable']) {
  1947. showsetting('members_profile_edit_name', 'title', $field['title'], 'text');
  1948. showsetting('members_profile_edit_desc', 'description', $field['description'], 'text');
  1949. } else {
  1950. showsetting('members_profile_edit_name', '', '', ' '.$field['title']);
  1951. showsetting('members_profile_edit_desc', '', '', ' '.$field['description']);
  1952. }
  1953. if(!$field['isfixed2']) {
  1954. if($field['fieldid'] == 'realname') {
  1955. showsetting('members_profile_edit_form_type', array('formtype', array(
  1956. array('text', $lang['members_profile_edit_text'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>''))
  1957. )), $field['formtype'], 'mradio');
  1958. } else {
  1959. showsetting('members_profile_edit_form_type', array('formtype', array(
  1960. array('text', $lang['members_profile_edit_text'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'')),
  1961. array('textarea', $lang['members_profile_edit_textarea'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'')),
  1962. array('radio', $lang['members_profile_edit_radio'], array('valuenumber' => 'none', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  1963. array('checkbox', $lang['members_profile_edit_checkbox'], array('valuenumber' => '', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  1964. array('select', $lang['members_profile_edit_select'], array('valuenumber' => 'none', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  1965. array('list', $lang['members_profile_edit_list'], array('valuenumber' => '', 'fieldchoices' => '')),
  1966. array('file', $lang['members_profile_edit_file'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'none'))
  1967. )), $field['formtype'], 'mradio');
  1968. }
  1969. showtagheader('tbody', 'valuenumber', !in_array($field['formtype'], array('radio', 'select')), 'sub');
  1970. showsetting('members_profile_edit_value_number', 'size', $field['size'], 'text');
  1971. showtagfooter('tbody');
  1972. showtagheader('tbody', 'fieldchoices', !in_array($field['formtype'], array('file','text', 'textarea')), 'sub');
  1973. showsetting('members_profile_edit_choices', 'choices', $field['choices'], 'textarea');
  1974. showtagfooter('tbody');
  1975. showtagheader('tbody', 'fieldvalidate', in_array($field['formtype'], array('text', 'textarea')), 'sub');
  1976. showsetting('members_profile_edit_validate', 'validate', $field['validate'], 'text');
  1977. showtagfooter('tbody');
  1978. }
  1979. if(!$field['isfixed1']) {
  1980. showsetting('members_profile_edit_available', 'available', $field['available'], 'radio');
  1981. showsetting('members_profile_edit_unchangeable', 'unchangeable', $field['unchangeable'], 'radio');
  1982. showsetting('members_profile_edit_needverify', 'needverify', $field['needverify'], 'radio');
  1983. showsetting('members_profile_edit_required', 'required', $field['required'], 'radio');
  1984. }
  1985. showsetting('members_profile_edit_invisible', 'invisible', $field['invisible'], 'radio');
  1986. $privacyselect = array(
  1987. array('0', cplang('members_profile_edit_privacy_public')),
  1988. array('1', cplang('members_profile_edit_privacy_friend')),
  1989. array('3', cplang('members_profile_edit_privacy_secret'))
  1990. );
  1991. showsetting('members_profile_edit_default_privacy', array('privacy', $privacyselect), $_G['setting']['privacy']['profile'][$fieldid], 'select');
  1992. showsetting('members_profile_edit_showincard', 'showincard', $field['showincard'], 'radio');
  1993. showsetting('members_profile_edit_showinregister', 'showinregister', $field['showinregister'], 'radio');
  1994. showsetting('members_profile_edit_allowsearch', 'allowsearch', $field['allowsearch'], 'radio');
  1995. if(!empty($profilegroup)) {
  1996. $groupstr = '';
  1997. foreach($profilegroup as $key => $value) {
  1998. if($value['available']) {
  1999. if(in_array($fieldid, $value['field'])) {
  2000. $checked = ' checked="checked" ';
  2001. $class = ' class="checked" ';
  2002. } else {
  2003. $class = $checked = '';
  2004. }
  2005. $groupstr .= "<li $class style=\"float: left; width: 10%;\"><input type=\"checkbox\" value=\"$key\" name=\"profilegroup[$key]\" class=\"checkbox\" $checked>&nbsp;$value[title]</li>";
  2006. }
  2007. }
  2008. if(!empty($groupstr)) {
  2009. print <<<EOF
  2010. <tr>
  2011. <td class="td27" colspan="2">$lang[setting_profile_group]:</td>
  2012. </tr>
  2013. <tr>
  2014. <td colspan="2">
  2015. <ul class="dblist" onmouseover="altStyle(this);">
  2016. <li style="width: 100%;"><input type="checkbox" name="chkall" onclick="checkAll('prefix', this.form, 'profilegroup')" class="checkbox">&nbsp;$lang[select_all]</li>
  2017. $groupstr
  2018. </ul>
  2019. </td>
  2020. </tr>
  2021. EOF;
  2022. }
  2023. }
  2024. showsetting('members_profile_edit_display_order', 'displayorder', $field['displayorder'], 'text');
  2025. showsubmit('editsubmit');
  2026. showtablefooter();
  2027. showformfooter();
  2028. } else {
  2029. $setarr = array(
  2030. 'invisible' => intval($_POST['invisible']),
  2031. 'showincard' => intval($_POST['showincard']),
  2032. 'showinregister' => intval($_POST['showinregister']),
  2033. 'allowsearch' => intval($_POST['allowsearch']),
  2034. 'displayorder' => intval($_POST['displayorder'])
  2035. );
  2036. if($field['customable']) {
  2037. $_POST['title'] = dhtmlspecialchars(trim($_POST['title']));
  2038. if(empty($_POST['title'])) {
  2039. cpmsg('members_profile_edit_title_empty_error', 'action=members&operation=profile&fieldid='.$fieldid, 'error');
  2040. }
  2041. $setarr['title'] = $_POST['title'];
  2042. $setarr['description'] = dhtmlspecialchars(trim($_POST['description']));
  2043. }
  2044. if(!$field['isfixed1']) {
  2045. $setarr['required'] = intval($_POST['required']);
  2046. $setarr['available'] = intval($_POST['available']);
  2047. $setarr['unchangeable'] = intval($_POST['unchangeable']);
  2048. $setarr['needverify'] = intval($_POST['needverify']);
  2049. }
  2050. if(!$field['isfixed2']) {
  2051. $setarr['formtype'] = $fieldid == 'realname' ? 'text' : strtolower(trim($_POST['formtype']));
  2052. $setarr['size'] = intval($_POST['size']);
  2053. if($_POST['choices']) {
  2054. $_POST['choices'] = trim($_POST['choices']);
  2055. $ops = explode("\n", $_POST['choices']);
  2056. $parts = array();
  2057. foreach ($ops as $op) {
  2058. $parts[] = dhtmlspecialchars(trim($op));
  2059. }
  2060. $_POST['choices'] = implode("\n", $parts);
  2061. }
  2062. $setarr['choices'] = $_POST['choices'];
  2063. if($_POST['validate'] && $_POST['validate'] != $profilevalidate[$fieldid]) {
  2064. $setarr['validate'] = $_POST['validate'];
  2065. } elseif(empty($_POST['validate'])) {
  2066. $setarr['validate'] = '';
  2067. }
  2068. }
  2069. C::t('common_member_profile_setting')->update($fieldid, $setarr);
  2070. if($_GET['fieldid'] == 'birthday') {
  2071. C::t('common_member_profile_setting')->update('birthmonth', $setarr);
  2072. C::t('common_member_profile_setting')->update('birthyear', $setarr);
  2073. } elseif($_GET['fieldid'] == 'birthcity') {
  2074. C::t('common_member_profile_setting')->update('birthprovince', $setarr);
  2075. $setarr['required'] = 0;
  2076. C::t('common_member_profile_setting')->update('birthdist', $setarr);
  2077. C::t('common_member_profile_setting')->update('birthcommunity', $setarr);
  2078. } elseif($_GET['fieldid'] == 'residecity') {
  2079. C::t('common_member_profile_setting')->update('resideprovince', $setarr);
  2080. $setarr['required'] = 0;
  2081. C::t('common_member_profile_setting')->update('residedist', $setarr);
  2082. C::t('common_member_profile_setting')->update('residecommunity', $setarr);
  2083. } elseif($_GET['fieldid'] == 'idcard') {
  2084. C::t('common_member_profile_setting')->update('idcardtype', $setarr);
  2085. }
  2086. foreach($profilegroup as $type => $pgroup) {
  2087. if(is_array($_GET['profilegroup']) && in_array($type, $_GET['profilegroup'])) {
  2088. $profilegroup[$type]['field'][$fieldid] = $fieldid;
  2089. } else {
  2090. unset($profilegroup[$type]['field'][$fieldid]);
  2091. }
  2092. }
  2093. C::t('common_setting')->update('profilegroup', $profilegroup);
  2094. require_once libfile('function/cache');
  2095. if(!isset($_G['setting']['privacy']['profile']) || $_G['setting']['privacy']['profile'][$fieldid] != $_POST['privacy']) {
  2096. $_G['setting']['privacy']['profile'][$fieldid] = $_POST['privacy'];
  2097. C::t('common_setting')->update('privacy', $_G['setting']['privacy']);
  2098. }
  2099. updatecache(array('profilesetting','fields_required', 'fields_optional', 'fields_register', 'setting'));
  2100. include_once libfile('function/block');
  2101. loadcache('profilesetting', true);
  2102. blockclass_cache();
  2103. cpmsg('members_profile_edit_succeed', 'action=members&operation=profile', 'succeed');
  2104. }
  2105. } else {
  2106. $list = array();
  2107. foreach(C::t('common_member_profile_setting')->range() as $fieldid => $value) {
  2108. $list[$fieldid] = array(
  2109. 'title'=>$value['title'],
  2110. 'displayorder'=>$value['displayorder'],
  2111. 'available'=>$value['available'],
  2112. 'invisible'=>$value['invisible'],
  2113. 'showincard'=>$value['showincard'],
  2114. 'showinregister'=>$value['showinregister']);
  2115. }
  2116. unset($list['birthyear']);
  2117. unset($list['birthmonth']);
  2118. unset($list['birthprovince']);
  2119. unset($list['birthdist']);
  2120. unset($list['birthcommunity']);
  2121. unset($list['resideprovince']);
  2122. unset($list['residedist']);
  2123. unset($list['residecommunity']);
  2124. unset($list['idcardtype']);
  2125. if(!submitcheck('ordersubmit')) {
  2126. $_GET['anchor'] = in_array($_GET['action'], array('members', 'setting')) ? $_GET['action'] : 'members';
  2127. $current = array($_GET['anchor'] => 1);
  2128. $profilenav = array(
  2129. array('members_profile_list', 'members&operation=profile', $current['members']),
  2130. array('members_profile_group', 'setting&operation=profile', $current['setting'])
  2131. );
  2132. showsubmenu($lang['members_profile'], $profilenav);
  2133. showtips('members_profile_tips');
  2134. showformheader('members&operation=profile');
  2135. showtableheader('', '', 'id="profiletable_header"');
  2136. $tdstyle = array('class="td22"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28"', 'class="td28"');
  2137. showsubtitle(array('members_profile_edit_name', 'members_profile_edit_display_order', 'members_profile_edit_available', 'members_profile_edit_profile_view', 'members_profile_edit_card_view', 'members_profile_edit_reg_view', ''), 'header tbm', $tdstyle);
  2138. showtablefooter();
  2139. echo '<script type="text/javascript">floatbottom(\'profiletable_header\');</script>';
  2140. showtableheader('members_profile', 'nobottom', 'id="porfiletable"');
  2141. showsubtitle(array('members_profile_edit_name', 'members_profile_edit_display_order', 'members_profile_edit_available', 'members_profile_edit_profile_view', 'members_profile_edit_card_view', 'members_profile_edit_reg_view', ''), 'header', $tdstyle);
  2142. foreach($list as $fieldid => $value) {
  2143. $value['available'] = '<input type="checkbox" class="checkbox" name="available['.$fieldid.']" '.($value['available'] ? 'checked="checked" ' : '').'value="1">';
  2144. $value['invisible'] = '<input type="checkbox" class="checkbox" name="invisible['.$fieldid.']" '.(!$value['invisible'] ? 'checked="checked" ' : '').'value="1">';
  2145. $value['showincard'] = '<input type="checkbox" class="checkbox" name="showincard['.$fieldid.']" '.($value['showincard'] ? 'checked="checked" ' : '').'value="1">';
  2146. $value['showinregister'] = '<input type="checkbox" class="checkbox" name="showinregister['.$fieldid.']" '.($value['showinregister'] ? 'checked="checked" ' : '').'value="1">';
  2147. $value['displayorder'] = '<input type="text" name="displayorder['.$fieldid.']" value="'.$value['displayorder'].'" size="5">';
  2148. $value['edit'] = '<a href="'.ADMINSCRIPT.'?action=members&operation=profile&fieldid='.$fieldid.'" title="" class="act">'.$lang[edit].'</a>';
  2149. showtablerow('', array(), $value);
  2150. }
  2151. showsubmit('ordersubmit');
  2152. showtablefooter();
  2153. showformfooter();
  2154. } else {
  2155. foreach($_GET['displayorder'] as $fieldid => $value) {
  2156. $setarr = array(
  2157. 'displayorder' => intval($value),
  2158. 'invisible' => intval($_GET['invisible'][$fieldid]) ? 0 : 1,
  2159. 'available' => intval($_GET['available'][$fieldid]),
  2160. 'showincard' => intval($_GET['showincard'][$fieldid]),
  2161. 'showinregister' => intval($_GET['showinregister'][$fieldid]),
  2162. );
  2163. C::t('common_member_profile_setting')->update($fieldid, $setarr);
  2164. if($fieldid == 'birthday') {
  2165. C::t('common_member_profile_setting')->update('birthmonth', $setarr);
  2166. C::t('common_member_profile_setting')->update('birthyear', $setarr);
  2167. } elseif($fieldid == 'birthcity') {
  2168. C::t('common_member_profile_setting')->update('birthprovince', $setarr);
  2169. $setarr['required'] = 0;
  2170. C::t('common_member_profile_setting')->update('birthdist', $setarr);
  2171. C::t('common_member_profile_setting')->update('birthcommunity', $setarr);
  2172. } elseif($fieldid == 'residecity') {
  2173. C::t('common_member_profile_setting')->update('resideprovince', $setarr);
  2174. $setarr['required'] = 0;
  2175. C::t('common_member_profile_setting')->update('residedist', $setarr);
  2176. C::t('common_member_profile_setting')->update('residecommunity', $setarr);
  2177. } elseif($fieldid == 'idcard') {
  2178. C::t('common_member_profile_setting')->update('idcardtype', $setarr);
  2179. }
  2180. }
  2181. require_once libfile('function/cache');
  2182. updatecache(array('profilesetting', 'fields_required', 'fields_optional', 'fields_register', 'setting'));
  2183. include_once libfile('function/block');
  2184. loadcache('profilesetting', true);
  2185. blockclass_cache();
  2186. cpmsg('members_profile_edit_succeed', 'action=members&operation=profile', 'succeed');
  2187. }
  2188. }
  2189. } elseif($operation == 'stat') {
  2190. if($_GET['do'] == 'stepstat' && $_GET['t'] > 0 && $_GET['i'] > 0) {
  2191. $t = intval($_GET['t']);
  2192. $i = intval($_GET['i']);
  2193. $o = $i - 1;
  2194. $value = C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid'], $o, 1);
  2195. if($value) {
  2196. $optionid = intval($value[0]['optionid']);
  2197. $fieldvalue = $value[0]['fieldvalue'];
  2198. } else {
  2199. $optionid = 0;
  2200. $fieldvalue = '';
  2201. }
  2202. $cnt = ($_GET['fieldid'] === 'groupid') ? C::t('common_member')->count_by_groupid($fieldvalue) : C::t('common_member_profile')->count_by_field($_GET['fieldid'], $fieldvalue);
  2203. C::t('common_member_stat_field')->update($optionid, array('users'=>$cnt, 'updatetime'=>TIMESTAMP));
  2204. if($i < $t) {
  2205. cpmsg('members_stat_do_stepstat', 'action=members&operation=stat&fieldid='.$_GET['fieldid'].'&do=stepstat&t='.$t.'&i='.($i+1), '', array('t'=>$t, 'i'=>$i));
  2206. } else {
  2207. cpmsg('members_stat_update_data_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2208. }
  2209. }
  2210. $options = array('groupid'=>cplang('usergroup'));
  2211. $fieldids = array('gender', 'birthyear', 'birthmonth', 'constellation', 'zodiac','birthprovince', 'resideprovince');
  2212. loadcache('profilesetting');
  2213. foreach($_G['cache']['profilesetting'] as $fieldid=>$value) {
  2214. if($value['formtype']=='select'||$value['formtype']=='radio'||in_array($fieldid,$fieldids)) {
  2215. $options[$fieldid] = $value['title'];
  2216. }
  2217. }
  2218. if(!empty($_GET['fieldid']) && !isset($options[$_GET['fieldid']])) {
  2219. cpmsg('members_stat_bad_fieldid', 'action=members&operation=stat', 'error');
  2220. }
  2221. if(!empty($_GET['fieldid']) && $_GET['fieldid'] == 'groupid') {
  2222. $usergroups = array();
  2223. foreach(C::t('common_usergroup')->range() as $value) {
  2224. $usergroups[$value['groupid']] = $value['grouptitle'];
  2225. }
  2226. }
  2227. if(!submitcheck('statsubmit')) {
  2228. shownav('user', 'nav_members_stat');
  2229. showsubmenu('nav_members_stat');
  2230. showtips('members_stat_tips');
  2231. showformheader('members&operation=stat&fieldid='.$_GET['fieldid']);
  2232. showtableheader('members_stat_options');
  2233. $option_html = '<ul>';
  2234. foreach($options as $key=>$value) {
  2235. $extra_style = $_GET['fieldid'] == $key ? ' font-weight: 900;' : '';
  2236. $option_html .= ""
  2237. ."<li style=\"float: left; width: 160px;$extra_style\">"
  2238. . "<a href=\"".ADMINSCRIPT."?action=members&operation=stat&fieldid=$key\">$value</a>"
  2239. . "</li>";
  2240. }
  2241. $option_html .= '</ul><br style="clear: both;" />';
  2242. showtablerow('', array('colspan="5"'), array($option_html));
  2243. if($_GET['fieldid']) {
  2244. $list = array();
  2245. $total = 0;
  2246. foreach(($list = C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid'])) as $value) {
  2247. $total += $value['users'];
  2248. }
  2249. for($i=0, $L=count($list); $i<$L; $i++) {
  2250. if($total) {
  2251. $list[$i]['percent'] = intval(10000 * $list[$i]['users'] / $total) / 100;
  2252. } else {
  2253. $list[$i]['percent'] = 0;
  2254. }
  2255. $list[$i]['width'] = $list[$i]['percent'] ? intval($list[$i]['percent'] * 2) : 1;
  2256. }
  2257. showtablerow('', array('colspan="4"'), array(cplang('members_stat_current_field').$options[$_GET['fieldid']].'; '.cplang('members_stat_members').$total));
  2258. showtablerow('', array('width="200"', '', 'width="160"', 'width="160"'),array(
  2259. cplang('members_stat_option'),
  2260. cplang('members_stat_view'),
  2261. cplang('members_stat_option_members'),
  2262. cplang('members_stat_updatetime')
  2263. ));
  2264. foreach($list as $value) {
  2265. if($_GET['fieldid']=='groupid') {
  2266. $value['fieldvalue'] = $usergroups[$value['fieldvalue']];
  2267. } elseif($_GET['fieldid']=='gender') {
  2268. $value['fieldvalue'] = lang('space', 'gender_'.$value['fieldvalue']);
  2269. } elseif(empty($value['fieldvalue'])) {
  2270. $value['fieldvalue'] = cplang('members_stat_null_fieldvalue');
  2271. }
  2272. showtablerow('', array('width="200"', '', 'width="160"', 'width="160"'),array(
  2273. $value['fieldvalue'],
  2274. '<div style="background-color: yellow; width: 200px; height: 20px;"><div style="background-color: red; height: 20px; width: '.$value['width'].'px;"></div></div>',
  2275. $value['users'].' ('.$value['percent'].'%)',
  2276. !empty($value['updatetime']) ? dgmdate($value['updatetime'], 'u') : 'N/A'
  2277. ));
  2278. }
  2279. showtablefooter();
  2280. $optype_html = '<input type="radio" class="radio" name="optype" id="optype_option" value="option" /><label for="optype_option">'.cplang('members_stat_update_option').'</label>&nbsp;&nbsp;'
  2281. .'<input type="radio" class="radio" name="optype" id="optype_data" value="data" /><label for="optype_data">'.cplang('members_stat_update_data').'</label>';
  2282. showsubmit('statsubmit', 'submit', $optype_html);
  2283. showformfooter();
  2284. } else {
  2285. showtablefooter();
  2286. showformfooter();
  2287. }
  2288. } else {
  2289. if($_POST['optype'] == 'option') {
  2290. $options = $inserts = $hits = $deletes = array();
  2291. foreach(C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid']) as $value) {
  2292. $options[$value['optionid']] = $value['fieldvalue'];
  2293. $hits[$value['optionid']] = false;
  2294. }
  2295. $alldata = $_GET['fieldid'] === 'groupid' ? C::t('common_member')->fetch_all_groupid() : C::t('common_member_profile')->fetch_all_field_value($_GET['fieldid']);
  2296. foreach($alldata as $value) {
  2297. $fieldvalue = $value[$_GET[fieldid]];
  2298. $optionid = array_search($fieldvalue, $options);
  2299. if($optionid) {
  2300. $hits[$optionid] = true;
  2301. } else {
  2302. $inserts[] = array('fieldid'=>$_GET['fieldid'], 'fieldvalue'=>$fieldvalue);
  2303. }
  2304. }
  2305. foreach ($hits as $key=>$value) {
  2306. if($value == false) {
  2307. $deletes[] = $key;
  2308. }
  2309. }
  2310. if($deletes) {
  2311. C::t('common_member_stat_field')->delete($deletes);
  2312. }
  2313. if($inserts) {
  2314. C::t('common_member_stat_field')->insert_batch($inserts);
  2315. }
  2316. cpmsg('members_stat_update_option_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2317. } elseif($_POST['optype'] == 'data') {
  2318. if(($t = C::t('common_member_stat_field')->count_by_fieldid($_GET['fieldid'])) > 0) {
  2319. cpmsg('members_stat_do_stepstat_prepared', 'action=members&operation=stat&fieldid='.$_GET['fieldid'].'&do=stepstat&t='.$t.'&i=1', '', array('t'=>$t));
  2320. } else {
  2321. cpmsg('members_stat_update_data_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2322. }
  2323. } else {
  2324. cpmsg('members_stat_null_operation', 'action=members&operation=stat', 'error');
  2325. }
  2326. }
  2327. }
  2328. function showsearchform($operation = '') {
  2329. global $_G, $lang;
  2330. $groupselect = array();
  2331. $usergroupid = isset($_GET['usergroupid']) && is_array($_GET['usergroupid']) ? $_GET['usergroupid'] : array();
  2332. $medals = isset($_GET['medalid']) && is_array($_GET['medalid']) ? $_GET['medalid'] : array();
  2333. $tagid = isset($_GET['tagid']) && is_array($_GET['tagid']) ? $_GET['tagid'] : array();
  2334. $query = C::t('common_usergroup')->fetch_all_not(array(6, 7), true);
  2335. foreach($query as $group) {
  2336. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  2337. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\" ".(in_array($group['groupid'], $usergroupid) ? 'selected' : '').">$group[grouptitle]</option>\n";
  2338. }
  2339. $groupselect = '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  2340. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  2341. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  2342. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup>';
  2343. $medalselect = $usertagselect = '';
  2344. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  2345. $medalselect .= "<option value=\"$medal[medalid]\" ".(in_array($medal['medalid'], $medals) ? 'selected' : '').">$medal[name]</option>\n";
  2346. }
  2347. $query = C::t('common_tag')->fetch_all_by_status(3);
  2348. foreach($query as $row) {
  2349. $usertagselect .= "<option value=\"$row[tagid]\" ".(in_array($row['tagid'], $tagid) ? 'selected' : '').">$row[tagname]</option>\n";
  2350. }
  2351. showtagheader('div', 'searchmembers', !$_GET['submit']);
  2352. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  2353. echo '<style type="text/css">#residedistrictbox select, #birthdistrictbox select{width: auto;}</style>';
  2354. $formurl = "members&operation=$operation".($_GET['do'] == 'mobile' ? '&do=mobile' : '');
  2355. showformheader($formurl, "onSubmit=\"if($('updatecredittype1') && $('updatecredittype1').checked && !window.confirm('$lang[members_reward_clean_alarm]')){return false;} else {return true;}\"");
  2356. showtableheader();
  2357. if(isset($_G['setting']['membersplit'])) {
  2358. showsetting('members_search_table', '', '', '<select name="tablename" ><option value="master">'.$lang['members_search_table_master'].'</option><option value="archive">'.$lang['members_search_table_archive'].'</option></select>');
  2359. }
  2360. showsetting('members_search_user', 'username', $_GET['username'], 'text');
  2361. showsetting('members_search_uid', 'uid', $_GET['uid'], 'text');
  2362. showsetting('members_search_group', '', '', '<select name="groupid[]" multiple="multiple" size="10">'.$groupselect.'</select>');
  2363. showtablefooter();
  2364. showtableheader();
  2365. showtagheader('tbody', 'advanceoption');
  2366. $_G['showsetting_multirow'] = 1;
  2367. if(empty($medalselect)) {
  2368. $medalselect = '<option value="">'.cplang('members_search_nonemedal').'</option>';
  2369. }
  2370. if(empty($usertagselect)) {
  2371. $usertagselect = '<option value="">'.cplang('members_search_noneusertags').'</option>';
  2372. }
  2373. showsetting('members_search_medal', '', '', '<select name="medalid[]" multiple="multiple" size="10">'.$medalselect.'</select>');
  2374. showsetting('members_search_usertag', '', '', '<select name="tagid[]" multiple="multiple" size="10">'.$usertagselect.'</select>');
  2375. if(!empty($_G['setting']['connect']['allow'])) {
  2376. showsetting('members_search_conisbind', array('conisbind', array(
  2377. array(1, $lang['yes']),
  2378. array(0, $lang['no']),
  2379. ), 1), $_GET['conisbind'], 'mradio');
  2380. showsetting('members_search_uinblacklist', array('uin_low', array(
  2381. array(1, $lang['yes']),
  2382. array(0, $lang['no']),
  2383. ), 1), $_GET['uin_low'], 'mradio');
  2384. }
  2385. showsetting('members_search_online', array('sid_noempty', array(
  2386. array(1, $lang['yes']),
  2387. array(0, $lang['no']),
  2388. ), 1), $_GET['online'], 'mradio');
  2389. showsetting('members_search_lockstatus', array('status', array(
  2390. array(-1, $lang['yes']),
  2391. array(0, $lang['no']),
  2392. ), 1), $_GET['status'], 'mradio');
  2393. showsetting('members_search_emailstatus', array('emailstatus', array(
  2394. array(1, $lang['yes']),
  2395. array(0, $lang['no']),
  2396. ), 1), $_GET['emailstatus'], 'mradio');
  2397. showsetting('members_search_avatarstatus', array('avatarstatus', array(
  2398. array(1, $lang['yes']),
  2399. array(0, $lang['no']),
  2400. ), 1), $_GET['avatarstatus'], 'mradio');
  2401. showsetting('members_search_email', 'email', $_GET['email'], 'text');
  2402. showsetting("$lang[credits] $lang[members_search_between]", array("credits_low", "credits_high"), array($_GET['credits_low'], $_GET['credtis_high']), 'range');
  2403. if(!empty($_G['setting']['extcredits'])) {
  2404. foreach($_G['setting']['extcredits'] as $id => $credit) {
  2405. showsetting("$credit[title] $lang[members_search_between]", array("extcredits$id"."_low", "extcredits$id"."_high"), array($_GET['extcredits'.$id.'_low'], $_GET['extcredits'.$id.'_high']), 'range');
  2406. }
  2407. }
  2408. showsetting('members_search_friendsrange', array('friends_low', 'friends_high'), array($_GET['friends_low'], $_GET['friends_high']), 'range');
  2409. showsetting('members_search_postsrange', array('posts_low', 'posts_high'), array($_GET['posts_low'], $_GET['posts_high']), 'range');
  2410. showsetting('members_search_regip', 'regip', $_GET['regip'], 'text');
  2411. showsetting('members_search_lastip', 'lastip', $_GET['lastip'], 'text');
  2412. showsetting('members_search_oltimerange', array('oltime_low', 'oltime_high'), array($_GET['oltime_low'], $_GET['oltime_high']), 'range');
  2413. showsetting('members_search_regdaterange', array('regdate_after', 'regdate_before'), array($_GET['regdate_after'], $_GET['regdate_before']), 'daterange');
  2414. showsetting('members_search_lastvisitrange', array('lastvisit_after', 'lastvisit_before'), array($_GET['lastvisit_after'], $_GET['lastvisit_before']), 'daterange');
  2415. showsetting('members_search_lastpostrange', array('lastpost_after', 'lastpost_before'), array($_GET['lastpost_after'], $_GET['lastpost_before']), 'daterange');
  2416. showsetting('members_search_group_fid', 'fid', $_GET['fid'], 'text');
  2417. if($_G['setting']['verify']) {
  2418. $verifydata = array();
  2419. foreach($_G['setting']['verify'] as $key => $value) {
  2420. if($value['available']) {
  2421. $verifydata[] = array('verify'.$key, $value['title']);
  2422. }
  2423. }
  2424. if(!empty($verifydata)) {
  2425. showsetting('members_search_verify', array('verify', $verifydata), $_GET['verify'], 'mcheckbox');
  2426. }
  2427. }
  2428. $yearselect = $monthselect = $dayselect = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2429. $yy=dgmdate(TIMESTAMP, 'Y');
  2430. for($y=$yy; $y>=$yy-100; $y--) {
  2431. $y = sprintf("%04d", $y);
  2432. $yearselect .= "<option value=\"$y\" ".($_GET['birthyear'] == $y ? 'selected' : '').">$y</option>\n";
  2433. }
  2434. for($m=1; $m<=12; $m++) {
  2435. $m = sprintf("%02d", $m);
  2436. $monthselect .= "<option value=\"$m\" ".($_GET['birthmonth'] == $m ? 'selected' : '').">$m</option>\n";
  2437. }
  2438. for($d=1; $d<=31; $d++) {
  2439. $d = sprintf("%02d", $d);
  2440. $dayselect .= "<option value=\"$d\" ".($_GET['birthday'] == $d ? 'selected' : '').">$d</option>\n";
  2441. }
  2442. showsetting('members_search_birthday', '', '', '<select class="txt" name="birthyear" style="width:75px; margin-right:0">'.$yearselect.'</select> '.$lang['year'].' <select class="txt" name="birthmonth" style="width:75px; margin-right:0">'.$monthselect.'</select> '.$lang['month'].' <select class="txt" name="birthday" style="width:75px; margin-right:0">'.$dayselect.'</select> '.$lang['day']);
  2443. loadcache('profilesetting');
  2444. unset($_G['cache']['profilesetting']['uid']);
  2445. unset($_G['cache']['profilesetting']['birthyear']);
  2446. unset($_G['cache']['profilesetting']['birthmonth']);
  2447. unset($_G['cache']['profilesetting']['birthday']);
  2448. require_once libfile('function/profile');
  2449. foreach($_G['cache']['profilesetting'] as $fieldid=>$value) {
  2450. if(!$value['available'] || in_array($fieldid, array('birthprovince', 'birthdist', 'birthcommunity', 'resideprovince', 'residedist', 'residecommunity'))) {
  2451. continue;
  2452. }
  2453. if($fieldid == 'gender') {
  2454. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2455. $select .= "<option value=\"0\">".cplang('members_edit_gender_secret')."</option>\n";
  2456. $select .= "<option value=\"1\">".cplang('members_edit_gender_male')."</option>\n";
  2457. $select .= "<option value=\"2\">".cplang('members_edit_gender_female')."</option>\n";
  2458. showsetting($value['title'], '', '', '<select class="txt" name="gender">'.$select.'</select>');
  2459. } elseif($fieldid == 'birthcity') {
  2460. $elems = array('birthprovince', 'birthcity', 'birthdist', 'birthcommunity');
  2461. showsetting($value['title'], '', '', '<div id="birthdistrictbox">'.showdistrict(array(0,0,0,0), $elems, 'birthdistrictbox', 1, 'birth').'</div>');
  2462. } elseif($fieldid == 'residecity') {
  2463. $elems = array('resideprovince', 'residecity', 'residedist', 'residecommunity');
  2464. showsetting($value['title'], '', '', '<div id="residedistrictbox">'.showdistrict(array(0,0,0,0), $elems, 'residedistrictbox', 1, 'reside').'</div>');
  2465. } elseif($fieldid == 'constellation') {
  2466. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2467. for($i=1; $i<=12; $i++) {
  2468. $name = lang('space', 'constellation_'.$i);
  2469. $select .= "<option value=\"$name\">$name</option>\n";
  2470. }
  2471. showsetting($value['title'], '', '', '<select class="txt" name="constellation">'.$select.'</select>');
  2472. } elseif($fieldid == 'zodiac') {
  2473. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2474. for($i=1; $i<=12; $i++) {
  2475. $option = lang('space', 'zodiac_'.$i);
  2476. $select .= "<option value=\"$option\">$option</option>\n";
  2477. }
  2478. showsetting($value['title'], '', '', '<select class="txt" name="zodiac">'.$select.'</select>');
  2479. } elseif($value['formtype'] == 'select' || $value['formtype'] == 'list') {
  2480. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2481. $value['choices'] = explode("\n",$value['choices']);
  2482. foreach($value['choices'] as $option) {
  2483. $option = trim($option);
  2484. $select .= "<option value=\"$option\">$option</option>\n";
  2485. }
  2486. showsetting($value['title'], '', '', '<select class="txt" name="'.$fieldid.'">'.$select.'</select>');
  2487. } else {
  2488. showsetting($value['title'], '', '', '<input class="txt" name="'.$fieldid.'" />');
  2489. }
  2490. }
  2491. showtagfooter('tbody');
  2492. $_G['showsetting_multirow'] = 0;
  2493. showsubmit('submit', $operation == 'clean' ? 'members_delete' : 'search', '', 'more_options');
  2494. showtablefooter();
  2495. showformfooter();
  2496. showtagfooter('div');
  2497. }
  2498. function searchcondition($condition) {
  2499. include_once libfile('class/membersearch');
  2500. $ms = new membersearch();
  2501. return $ms->filtercondition($condition);
  2502. }
  2503. function searchmembers($condition, $limit=2000, $start=0) {
  2504. include_once libfile('class/membersearch');
  2505. $ms = new membersearch();
  2506. return $ms->search($condition, $limit, $start);
  2507. }
  2508. function countmembers($condition, &$urladd) {
  2509. $urladd = '';
  2510. foreach($condition as $k => $v) {
  2511. if(in_array($k, array('formhash', 'submit', 'page')) || $v === '') {
  2512. continue;
  2513. }
  2514. if(is_array($v)) {
  2515. foreach($v as $vk => $vv) {
  2516. if($vv === '') {
  2517. continue;
  2518. }
  2519. $urladd .= '&'.$k.'['.$vk.']='.rawurlencode($vv);
  2520. }
  2521. } else {
  2522. $urladd .= '&'.$k.'='.rawurlencode($v);
  2523. }
  2524. }
  2525. include_once libfile('class/membersearch');
  2526. $ms = new membersearch();
  2527. return $ms->getcount($condition);
  2528. }
  2529. function shownewsletter() {
  2530. global $lang;
  2531. showtableheader();
  2532. showsetting('members_newsletter_subject', 'subject', '', 'text');
  2533. showsetting('members_newsletter_message', 'message', '', 'textarea');
  2534. if($_GET['do'] == 'mobile') {
  2535. showsetting('members_newsletter_system', 'system', 0, 'radio');
  2536. showhiddenfields(array('notifymembers' => 'mobile'));
  2537. } else {
  2538. showsetting('members_newsletter_method', array('notifymembers', array(
  2539. array('email', $lang['email'], array('pmextra' => 'none', 'posttype' => '')),
  2540. array('notice', $lang['notice'], array('pmextra' => 'none', 'posttype' => '')),
  2541. array('pm', $lang['grouppm'], array('pmextra' => '', 'posttype' => 'none'))
  2542. )), 'pm', 'mradio');
  2543. showtagheader('tbody', 'posttype', '', 'sub');
  2544. showsetting('members_newsletter_posttype', array('posttype', array(
  2545. array(0, cplang('members_newsletter_posttype_text')),
  2546. array(1, cplang('members_newsletter_posttype_html')),
  2547. ), TRUE), '0', 'mradio');
  2548. showtagfooter('tbody');
  2549. showtagheader('tbody', 'pmextra', true, 'sub');
  2550. showsetting('members_newsletter_system', 'system', 0, 'radio');
  2551. showtagfooter('tbody');
  2552. }
  2553. showsetting('members_newsletter_num', 'pertask', 100, 'text');
  2554. showtablefooter();
  2555. }
  2556. function notifymembers($operation, $variable) {
  2557. global $_G, $lang, $urladd, $conditions, $search_condition;
  2558. if(!empty($_GET['current'])) {
  2559. $subject = $message = '';
  2560. if($settings = C::t('common_setting')->fetch($variable, true)) {
  2561. $subject = $settings['subject'];
  2562. $message = $settings['message'];
  2563. }
  2564. $setarr = array();
  2565. foreach($_G['setting']['extcredits'] as $id => $value) {
  2566. if(isset($_GET['extcredits'.$id])) {
  2567. if($_GET['updatecredittype'] == 0) {
  2568. $setarr['extcredits'.$id] = $_GET['extcredits'.$id];
  2569. } else {
  2570. $setarr[] = 'extcredits'.$id;
  2571. }
  2572. }
  2573. }
  2574. } else {
  2575. $current = 0;
  2576. $subject = $_GET['subject'];
  2577. $message = $_GET['message'];
  2578. $subject = trim($subject);
  2579. $message = trim(str_replace("\t", ' ', $message));
  2580. $addmsg = '';
  2581. if(($_GET['notifymembers'] && $_GET['notifymember']) && !($subject && $message)) {
  2582. cpmsg('members_newsletter_sm_invalid', '', 'error');
  2583. }
  2584. if($operation == 'reward') {
  2585. $serarr = array();
  2586. if($_GET['updatecredittype'] == 0) {
  2587. if(is_array($_GET['addextcredits']) && !empty($_GET['addextcredits'])) {
  2588. foreach($_GET['addextcredits'] as $key => $value) {
  2589. $value = intval($value);
  2590. if(isset($_G['setting']['extcredits'][$key]) && !empty($value)) {
  2591. $setarr['extcredits'.$key] = $value;
  2592. $addmsg .= $_G['setting']['extcredits'][$key]['title'].": ".($value > 0 ? '<em class="xi1">+' : '<em class="xg1">')."$value</em> ".$_G['setting']['extcredits'][$key]['unit'].' &nbsp; ';
  2593. }
  2594. }
  2595. }
  2596. } else {
  2597. if(is_array($_GET['resetextcredits']) && !empty($_GET['resetextcredits'])) {
  2598. foreach($_GET['resetextcredits'] as $key => $value) {
  2599. $value = intval($value);
  2600. if(isset($_G['setting']['extcredits'][$key]) && !empty($value)) {
  2601. $setarr[] = 'extcredits'.$key;
  2602. $addmsg .= $_G['setting']['extcredits'][$key]['title'].': <em class="xg1">'.cplang('members_reward_clean').'</em> &nbsp; ';
  2603. }
  2604. }
  2605. }
  2606. }
  2607. if($addmsg) {
  2608. $addmsg = ' &nbsp; <br /><br /><b>'.cplang('members_reward_affect').':</b><br \>'.$addmsg;
  2609. }
  2610. if(!empty($setarr)) {
  2611. $limit = 2000;
  2612. set_time_limit(0);
  2613. while(true) {
  2614. $uids = searchmembers($search_condition, $limit, $i*$limit);
  2615. $allcount = C::t('common_member_count')->fetch_all($uids);
  2616. $insertmember = array_diff($uids, array_keys($allcount));
  2617. foreach($insertmember as $uid) {
  2618. C::t('common_member_count')->insert(array('uid' => $uid));
  2619. }
  2620. if($_GET['updatecredittype'] == 0) {
  2621. C::t('common_member_count')->increase($uids, $setarr);
  2622. } else {
  2623. C::t('common_member_count')->clear_extcredits($uids, $setarr);
  2624. }
  2625. if(count($uids) < $limit) break;
  2626. }
  2627. } else {
  2628. cpmsg('members_reward_invalid', '', 'error');
  2629. }
  2630. if(!$_GET['notifymembers']) {
  2631. cpmsg('members_reward_succeed', '', 'succeed');
  2632. }
  2633. } elseif ($operation == 'confermedal') {
  2634. $medals = $_GET['medals'];
  2635. if(!empty($medals)) {
  2636. $medalids = array();
  2637. foreach($medals as $key => $medalid) {
  2638. $medalids[] = $key;
  2639. }
  2640. $medalsnew = $comma = '';
  2641. $medalsnewarray = $medalidarray = array();
  2642. foreach(C::t('forum_medal')->fetch_all_by_id($medalids) as $medal) {
  2643. $medal['status'] = empty($medal['expiration']) ? 0 : 1;
  2644. $medal['expiration'] = empty($medal['expiration'])? 0 : TIMESTAMP + $medal['expiration'] * 86400;
  2645. $medal['medal'] = $medal['medalid'].(empty($medal['expiration']) ? '' : '|'.$medal['expiration']);
  2646. $medalsnew .= $comma.$medal['medal'];
  2647. $medalsnewarray[] = $medal;
  2648. $medalidarray[] = $medal['medalid'];
  2649. $comma = "\t";
  2650. }
  2651. $uids = searchmembers($search_condition);
  2652. if($uids) {
  2653. foreach(C::t('common_member_field_forum')->fetch_all($uids) as $uid => $medalnew) {
  2654. $usermedal = array();
  2655. $addmedalnew = '';
  2656. if(empty($medalnew['medals'])) {
  2657. $addmedalnew = $medalsnew;
  2658. } else {
  2659. foreach($medalidarray as $medalid) {
  2660. $usermedal_arr = explode("\t", $medalnew['medals']);
  2661. foreach($usermedal_arr AS $key => $medalval) {
  2662. list($usermedalid,) = explode("|", $medalval);
  2663. $usermedal[] = $usermedalid;
  2664. }
  2665. if(!in_array($medalid, $usermedal)){
  2666. $addmedalnew .= $medalid."\t";
  2667. }
  2668. }
  2669. $addmedalnew .= $medalnew['medals'];
  2670. }
  2671. C::t('common_member_field_forum')->update($medalnew['uid'], array('medals' => $addmedalnew), true);
  2672. foreach($medalsnewarray as $medalnewarray) {
  2673. $data = array(
  2674. 'uid' => $medalnew['uid'],
  2675. 'medalid' => $medalnewarray['medalid'],
  2676. 'type' => 0,
  2677. 'dateline' => $_G['timestamp'],
  2678. 'expiration' => $medalnewarray['expiration'],
  2679. 'status' => $medalnewarray['status'],
  2680. );
  2681. C::t('forum_medallog')->insert($data);
  2682. C::t('common_member_medal')->insert(array('uid' => $medalnew['uid'], 'medalid' => $medalnewarray['medalid']), 0, 1);
  2683. }
  2684. }
  2685. }
  2686. }
  2687. if(!$_GET['notifymember']) {
  2688. cpmsg('members_confermedal_succeed', '', 'succeed');
  2689. }
  2690. } elseif ($operation == 'confermagic') {
  2691. $magics = $_GET['magic'];
  2692. $magicnum = $_GET['magicnum'];
  2693. if($magics) {
  2694. require_once libfile('function/magic');
  2695. $limit = 200;
  2696. set_time_limit(0);
  2697. for($i=0; $i > -1; $i++) {
  2698. $uids = searchmembers($search_condition, $limit, $i*$limit);
  2699. foreach($magics as $magicid) {
  2700. $uparray = $insarray = array();
  2701. if(empty($magicnum[$magicid])) {
  2702. continue;
  2703. }
  2704. $query = C::t('common_member_magic')->fetch_all($uids ? $uids : -1, $magicid);
  2705. foreach($query as $row) {
  2706. $uparray[] = $row['uid'];
  2707. }
  2708. if($uparray) {
  2709. C::t('common_member_magic')->increase($uparray, $magicid, array('num' => $magicnum[$magicid]));
  2710. }
  2711. $insarray = array_diff($uids, $uparray);
  2712. if($insarray) {
  2713. $sqls = array();
  2714. foreach($insarray as $uid) {
  2715. C::t('common_member_magic')->insert(array(
  2716. 'uid' => $uid,
  2717. 'magicid' => $magicid,
  2718. 'num' => $magicnum[$magicid]
  2719. ));
  2720. }
  2721. }
  2722. foreach($uids as $uid) {
  2723. updatemagiclog($magicid, '3', $magicnum[$magicid], '', $uid);
  2724. }
  2725. }
  2726. if(count($uids) < $limit) break;
  2727. }
  2728. }
  2729. }
  2730. C::t('common_setting')->update($variable, array('subject' => $subject, 'message' => $message));
  2731. }
  2732. $pertask = intval($_GET['pertask']);
  2733. $current = $_GET['current'] ? intval($_GET['current']) : 0;
  2734. $continue = FALSE;
  2735. if(!function_exists('sendmail')) {
  2736. include libfile('function/mail');
  2737. }
  2738. if($_GET['notifymember'] && in_array($_GET['notifymembers'], array('pm', 'notice', 'email', 'mobile'))) {
  2739. $uids = searchmembers($search_condition, $pertask, $current);
  2740. require_once libfile('function/discuzcode');
  2741. $message = in_array($_GET['notifymembers'], array('email','notice')) && $_GET['posttype'] ? discuzcode($message, 1, 0, 1, '', '' ,'' ,1) : discuzcode($message, 1, 0);
  2742. $pmuids = array();
  2743. if($_GET['notifymembers'] == 'pm') {
  2744. $membernum = countmembers($search_condition, $urladd);
  2745. $gpmid = $_GET['gpmid'];
  2746. if(!$gpmid) {
  2747. $pmdata = array(
  2748. 'authorid' => $_G['uid'],
  2749. 'author' => !$_GET['system'] ? $_G['member']['username'] : '',
  2750. 'dateline' => TIMESTAMP,
  2751. 'message' => ($subject ? '<b>'.$subject.'</b><br /> &nbsp; ' : '').$message.$addmsg,
  2752. 'numbers' => $membernum
  2753. );
  2754. $gpmid = C::t('common_grouppm')->insert($pmdata, true);
  2755. }
  2756. $urladd .= '&gpmid='.$gpmid;
  2757. }
  2758. $members = C::t('common_member')->fetch_all($uids);
  2759. if($_GET['notifymembers'] == 'mobile') {
  2760. $toUids = array_keys($members);
  2761. if($_G['setting']['cloud_status'] && !empty($toUids)) {
  2762. try {
  2763. $noticeService = Cloud::loadClass('Service_Client_Notification');
  2764. $fromType = $_GET['system'] ? 1 : 2;
  2765. $noticeService->addSiteMasterUserNotify($toUids, $subject, $message, $_G['uid'], $_G['username'], $fromType, TIMESTAMP);
  2766. } catch (Cloud_Service_Client_RestfulException $e) {
  2767. cpmsg('['.$e->getCode().']'.$e->getMessage(), '', 'error');
  2768. }
  2769. }
  2770. } else {
  2771. foreach($members as $member) {
  2772. if($_GET['notifymembers'] == 'pm') {
  2773. C::t('common_member_grouppm')->insert(array(
  2774. 'uid' => $member['uid'],
  2775. 'gpmid' => $gpmid,
  2776. 'status' => 0
  2777. ), false, true);
  2778. $newpm = setstatus(2, 1, $member['newpm']);
  2779. C::t('common_member')->update($member['uid'], array('newpm'=>$newpm));
  2780. } elseif($_GET['notifymembers'] == 'notice') {
  2781. notification_add($member['uid'], 'system', 'system_notice', array('subject' => $subject, 'message' => $message.$addmsg, 'from_id' => 0, 'from_idtype' => 'sendnotice'), 1);
  2782. } elseif($_GET['notifymembers'] == 'email') {
  2783. if(!sendmail("$member[username] <$member[email]>", $subject, $message.$addmsg)) {
  2784. runlog('sendmail', "$member[email] sendmail failed.");
  2785. }
  2786. }
  2787. $log = array();
  2788. if($_GET['updatecredittype'] == 0) {
  2789. foreach($setarr as $key => $val) {
  2790. if(empty($val)) continue;
  2791. $val = intval($val);
  2792. $id = intval($key);
  2793. $id = !$id && substr($key, 0, -1) == 'extcredits' ? intval(substr($key, -1, 1)) : $id;
  2794. if(0 < $id && $id < 9) {
  2795. $log['extcredits'.$id] = $val;
  2796. }
  2797. }
  2798. $logtype = 'RPR';
  2799. } else {
  2800. foreach($setarr as $val) {
  2801. if(empty($val)) continue;
  2802. $id = intval($val);
  2803. $id = !$id && substr($val, 0, -1) == 'extcredits' ? intval(substr($val, -1, 1)) : $id;
  2804. if(0 < $id && $id < 9) {
  2805. $log['extcredits'.$id] = '-1';
  2806. }
  2807. }
  2808. $logtype = 'RPZ';
  2809. }
  2810. include_once libfile('function/credit');
  2811. credit_log($member['uid'], $logtype, $member['uid'], $log);
  2812. $continue = TRUE;
  2813. }
  2814. }
  2815. }
  2816. $newsletter_detail = array();
  2817. if($continue) {
  2818. $next = $current + $pertask;
  2819. $newsletter_detail = array(
  2820. 'uid' => $_G['uid'],
  2821. 'current' => $current,
  2822. 'next' => $next,
  2823. 'search_condition' => serialize($search_condition),
  2824. 'action' => "action=members&operation=$operation&{$operation}submit=yes&current=$next&pertask=$pertask&system={$_GET['system']}&posttype={$_GET['posttype']}&notifymember={$_GET['notifymember']}&notifymembers=".rawurlencode($_GET['notifymembers']).$urladd
  2825. );
  2826. save_newsletter('newsletter_detail', $newsletter_detail);
  2827. $logaddurl = '';
  2828. foreach($setarr as $k => $v) {
  2829. if($_GET['updatecredittype'] == 0) {
  2830. $logaddurl .= '&'.$k.'='.$v;
  2831. } else {
  2832. $logaddurl .= '&'.$v.'=-1';
  2833. }
  2834. }
  2835. $logaddurl .= '&updatecredittype='.$_GET['updatecredittype'];
  2836. cpmsg("$lang[members_newsletter_send]: ".cplang('members_newsletter_processing', array('current' => $current, 'next' => $next, 'search_condition' => serialize($search_condition))), "action=members&operation=$operation&{$operation}submit=yes&current=$next&pertask=$pertask&system={$_GET['system']}&posttype={$_GET['posttype']}&notifymember={$_GET['notifymember']}&notifymembers=".rawurlencode($_GET['notifymembers']).$urladd.$logaddurl, 'loadingform');
  2837. } else {
  2838. del_newsletter('newsletter_detail');
  2839. if($operation == 'reward' && $_GET['notifymembers'] == 'pm') {
  2840. $message = '';
  2841. } else {
  2842. $message = '_notify';
  2843. }
  2844. cpmsg('members'.($operation ? '_'.$operation : '').$message.'_succeed', '', 'succeed');
  2845. }
  2846. }
  2847. function banlog($username, $origgroupid, $newgroupid, $expiration, $reason, $status = 0) {
  2848. global $_G, $_POST;
  2849. $cloud_apps = dunserialize($_G['setting']['cloud_apps']);
  2850. if (isset($_POST['bannew']) && $_POST['formhash'] && $cloud_apps['security']['status'] == 'normal') {
  2851. $securityService = Cloud::loadClass('Service_Security');
  2852. if ($_POST['bannew']) {
  2853. $securityService->logBannedMember($username, $reason);
  2854. } else {
  2855. $securityService->updateMemberRecover($username);
  2856. }
  2857. }
  2858. writelog('banlog', dhtmlspecialchars("$_G[timestamp]\t{$_G[member][username]}\t$_G[groupid]\t$_G[clientip]\t$username\t$origgroupid\t$newgroupid\t$expiration\t$reason\t$status"));
  2859. }
  2860. function selectday($varname, $dayarray) {
  2861. global $lang;
  2862. $selectday = '<select name="'.$varname.'">';
  2863. if($dayarray && is_array($dayarray)) {
  2864. foreach($dayarray as $day) {
  2865. $langday = $day.'_day';
  2866. $daydate = $day ? '('.dgmdate(TIMESTAMP + $day * 86400).')' : '';
  2867. $selectday .= '<option value='.$day.'>'.$lang[$langday].'&nbsp;'.$daydate.'</option>';
  2868. }
  2869. }
  2870. $selectday .= '</select>';
  2871. return $selectday;
  2872. }
  2873. function accessimg($access) {
  2874. return $access == -1 ? '<img src="static/image/common/access_disallow.gif" />' :
  2875. ($access == 1 ? '<img src="static/image/common/access_allow.gif" />' : '<img src="static/image/common/access_normal.gif" />');
  2876. }
  2877. function connectunbind($member) {
  2878. global $_G;
  2879. if(!$member['conopenid']) {
  2880. return;
  2881. }
  2882. $_G['member'] = array_merge($_G['member'], $member);
  2883. $connectService = Cloud::loadClass('Service_Connect');
  2884. $connectService->connectUserUnbind();
  2885. C::t('#qqconnect#connect_memberbindlog')->insert(array('uid' => $member['uid'], 'uin' => $member['conopenid'], 'type' => '2', 'dateline' => $_G['timestamp']));
  2886. C::t('common_member')->update($member['uid'], array('conisbind'=>0));
  2887. C::t('#qqconnect#common_member_connect')->delete($member['uid']);
  2888. }
  2889. function save_newsletter($cachename, $data) {
  2890. C::t('common_cache')->insert(array('cachekey' => $cachename, 'cachevalue' => serialize($data), 'dateline' => TIMESTAMP), false, true);
  2891. }
  2892. function del_newsletter($cachename) {
  2893. C::t('common_cache')->delete($cachename);
  2894. }
  2895. function get_newsletter($cachename) {
  2896. foreach(C::t('common_cache')->fetch_all($cachename) as $result) {
  2897. $data = $result['cachevalue'];
  2898. }
  2899. return $data;
  2900. }
  2901. ?>