PageRenderTime 58ms CodeModel.GetById 32ms RepoModel.GetById 1ms app.codeStats 0ms

/modcp/members.inc.php

https://github.com/AlexChien/EY_BBS
PHP | 259 lines | 195 code | 58 blank | 6 comment | 100 complexity | 435eb9ea6bce83da369a0b646e4e7402 MD5 | raw file
Possible License(s): Apache-2.0
  1. <?php
  2. /*
  3. [Discuz!] (C)2001-2009 Comsenz Inc.
  4. This is NOT a freeware, use is subject to license terms
  5. $Id: members.inc.php 16746 2008-11-17 07:59:46Z tiger $
  6. */
  7. if(!defined('IN_DISCUZ') || !defined('IN_MODCP')) {
  8. exit('Access Denied');
  9. }
  10. if($op == 'edit') {
  11. $member = loadmember($uid, $username, $error);
  12. $usernameenc = rawurlencode($member['username']);
  13. if($member && submitcheck('editsubmit') && !$error) {
  14. $sql = 'uid=uid';
  15. if($allowedituser) {
  16. if(!empty($clearavatar)) {
  17. require_once DISCUZ_ROOT.'./uc_client/client.php';
  18. uc_user_deleteavatar($member['uid']);
  19. }
  20. require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
  21. if($bionew) {
  22. $bionew = censor($bionew);
  23. $biohtmlnew = addslashes(discuzcode(stripslashes($bionew), 1, 0, 0, 0, $member['allowbiobbcode'], $member['allowbioimgcode'], 0, 0, 1));
  24. } else {
  25. $biohtmlnew = '';
  26. }
  27. if($biotradenew) {
  28. $biotradenew = censor($biotradenew);
  29. $biohtmlnew .= "\t\t\t".addslashes(discuzcode(stripslashes($biotradenew), 1, 0, 0, 0, 1, 1, 0, 0, 1));
  30. }
  31. if($signaturenew) {
  32. $signaturenew = censor($signaturenew);
  33. $sightmlnew = addslashes(discuzcode(stripslashes($signaturenew), 1, 0, 0, 0, $member['allowsigbbcode'], $member['allowsigimgcode'], 0, 0, 1));
  34. } else {
  35. $sightmlnew = '';
  36. }
  37. $locationnew && $locationnew = dhtmlspecialchars($locationnew);
  38. $sql .= ', sigstatus=\''.($signaturenew ? 1 : 0).'\'';
  39. $db->query("UPDATE {$tablepre}memberfields SET location='$locationnew', bio='$biohtmlnew', sightml='$sightmlnew' WHERE uid='$member[uid]'");
  40. }
  41. $db->query("UPDATE {$tablepre}members SET $sql WHERE uid='$member[uid]'");
  42. acpmsg('members_edit_succeed', "$cpscript?action=$action&op=$op");
  43. } elseif($member) {
  44. require_once DISCUZ_ROOT.'./include/editor.func.php';
  45. $bio = explode("\t\t\t", $member['bio']);
  46. $member['bio'] = html2bbcode($bio[0]);
  47. $member['biotrade'] = html2bbcode($bio[1]);
  48. $member['signature'] = html2bbcode($member['sightml']);
  49. $username = !empty($username) ? $member['username'] : '';
  50. }
  51. } elseif($op == 'ban' && $allowbanuser) {
  52. $member = loadmember($uid, $username, $error);
  53. $usernameenc = rawurlencode($member['username']);
  54. if($member && submitcheck('bansubmit') && !$error) {
  55. $sql = 'uid=uid';
  56. $reason = trim($reason);
  57. if(!$reason && ($reasonpm == 1 || $reasonpm == 3)) {
  58. acpmsg('admin_reason_invalid');
  59. }
  60. if($bannew == 4 || $bannew == 5) {
  61. $groupidnew = $bannew;
  62. $banexpirynew = !empty($banexpirynew) ? $timestamp + $banexpirynew * 86400 : 0;
  63. $banexpirynew = $banexpirynew > $timestamp ? $banexpirynew : 0;
  64. if($banexpirynew) {
  65. $member['groupterms'] = $member['groupterms'] && is_array($member['groupterms']) ? $member['groupterms'] : array();
  66. $member['groupterms']['main'] = array('time' => $banexpirynew, 'adminid' => $member['adminid'], 'groupid' => $member['groupid']);
  67. $member['groupterms']['ext'][$groupidnew] = $banexpirynew;
  68. $sql .= ', groupexpiry=\''.groupexpiry($member['groupterms']).'\'';
  69. } else {
  70. $sql .= ', groupexpiry=0';
  71. }
  72. $adminidnew = -1;
  73. } elseif($member['groupid'] == 4 || $member['groupid'] == 5) {
  74. if(!empty($member['groupterms']['main']['groupid'])) {
  75. $groupidnew = $member['groupterms']['main']['groupid'];
  76. $adminidnew = $member['groupterms']['main']['adminid'];
  77. unset($member['groupterms']['main']);
  78. unset($member['groupterms']['ext'][$member['groupid']]);
  79. $sql .= ', groupexpiry=\''.groupexpiry($member['groupterms']).'\'';
  80. } else {
  81. $query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND creditshigher<='$member[credits]' AND creditslower>'$member[credits]'");
  82. $groupidnew = $db->result($query, 0);
  83. $adminidnew = 0;
  84. }
  85. } else {
  86. $groupidnew = $member['groupid'];
  87. $adminidnew = $member['adminid'];
  88. }
  89. $sql .= ", adminid='$adminidnew', groupid='$groupidnew'";
  90. $db->query("UPDATE {$tablepre}members SET $sql WHERE uid='$member[uid]'");
  91. if($db->affected_rows($query)) {
  92. savebanlog($member['username'], $member['groupid'], $groupidnew, $banexpirynew, $reason);
  93. }
  94. $db->query("UPDATE {$tablepre}memberfields SET groupterms='".($member['groupterms'] ? addslashes(serialize($member['groupterms'])) : '')."' WHERE uid='$member[uid]'");
  95. acpmsg('modcp_member_ban_successed', "$cpscript?action=$action&op=$op");
  96. }
  97. } elseif($op == "ipban" && $allowbanip) {
  98. require_once DISCUZ_ROOT.'./include/misc.func.php';
  99. $iptoban = isset($ip) ? dhtmlspecialchars(explode('.', $ip)) : array('','','','');
  100. $updatecheck = $addcheck = $deletecheck = $adderror = 0;
  101. if(submitcheck('ipbansubmit')) {
  102. if($ids = implodeids($delete)) {
  103. $db->query("DELETE FROM {$tablepre}banned WHERE id IN ($ids) AND ('$adminid'='1' OR admin='$discuz_user')");
  104. $deletecheck = $db->affected_rows();
  105. }
  106. if($ip1new != '' && $ip2new != '' && $ip3new != '' && $ip4new != '') {
  107. $addcheck = ipbanadd($ip1new, $ip2new, $ip3new, $ip4new, $validitynew, $adderror);
  108. if(!$addcheck) {
  109. $iptoban = array($ip1new, $ip2new, $ip3new, $ip4new);
  110. }
  111. }
  112. if(!empty($expirationnew) && is_array($expirationnew)) {
  113. foreach($expirationnew as $id => $expiration) {
  114. $db->query("UPDATE {$tablepre}banned SET expiration='".strtotime($expiration)."' WHERE id='$id' AND ('$adminid'='1' OR admin='$discuz_user')");
  115. empty($updatecheck) && $updatecheck = $db->affected_rows();
  116. }
  117. }
  118. if($deletecheck || $addcheck || $updatecheck) {
  119. require_once(DISCUZ_ROOT.'./include/cache.func.php');
  120. updatecache('ipbanned');
  121. }
  122. }
  123. $iplist = array();
  124. $query = $db->query("SELECT * FROM {$tablepre}banned ORDER BY dateline");
  125. while($banned = $db->fetch_array($query)) {
  126. for($i = 1; $i <= 4; $i++) {
  127. if($banned["ip$i"] == -1) {
  128. $banned["ip$i"] = '*';
  129. }
  130. }
  131. $banned['disabled'] = $adminid != 1 && $banned['admin'] != $discuz_userss ? 'disabled' : '';
  132. $banned['dateline'] = gmdate($dateformat, $banned['dateline'] + $timeoffset * 3600);
  133. $banned['expiration'] = gmdate($dateformat, $banned['expiration'] + $timeoffset * 3600);
  134. $banned['theip'] = "$banned[ip1].$banned[ip2].$banned[ip3].$banned[ip4]";
  135. $banned['location'] = convertip($banned['theip']);
  136. $iplist[$banned['id']] = $banned;
  137. }
  138. } else {
  139. showmessage('undefined_action');
  140. }
  141. function loadmember(&$uid, &$username, &$error) {
  142. global $db, $tablepre, $timeoffset;
  143. $uid = !empty($uid) && is_numeric($uid) && $uid > 0 ? $uid : '';
  144. $username = isset($username) && $username != '' ? dhtmlspecialchars(trim($username)) : '';
  145. $member = array();
  146. if($uid || $username != '') {
  147. $query = $db->query("SELECT m.uid, m.username, m.groupid, m.adminid, mf.groupterms, mf.location, mf.bio, mf.sightml, u.type AS grouptype, u.allowsigbbcode, u.allowsigimgcode, u.allowcusbbcode, u.allowbiobbcode, u.allowbioimgcode, u.allowcusbbcode FROM {$tablepre}members m
  148. LEFT JOIN {$tablepre}memberfields mf ON mf.uid=m.uid
  149. LEFT JOIN {$tablepre}usergroups u ON u.groupid=m.groupid
  150. WHERE ".($uid ? "m.uid='$uid'" : "m.username='$username'"));
  151. if(!$member = $db->fetch_array($query)) {
  152. $error = 2;
  153. } elseif(($member['grouptype'] == 'system' && in_array($member['groupid'], array(1, 2, 3, 6, 7, 8))) || $member['grouptype'] == 'special') {
  154. $error = 3;
  155. } else {
  156. $member['groupterms'] = unserialize($member['groupterms']);
  157. $member['banexpiry'] = !empty($member['groupterms']['main']['time']) && ($member['groupid'] == 4 || $member['groupid'] == 5) ? gmdate('Y-n-j', $member['groupterms']['main']['time'] + $timeoffset * 3600) : '';
  158. $error = 0;
  159. }
  160. } else {
  161. $error = 1;
  162. }
  163. return $member;
  164. }
  165. function ipbanadd($ip1new, $ip2new, $ip3new, $ip4new, $validitynew, &$error) {
  166. global $db, $tablepre, $timestamp, $adminid, $onlineip, $discuz_user;
  167. if($ip1new != '' && $ip2new != '' && $ip3new != '' && $ip4new != '') {
  168. $own = 0;
  169. $ip = explode('.', $onlineip);
  170. for($i = 1; $i <= 4; $i++) {
  171. if(!is_numeric(${'ip'.$i.'new'}) || ${'ip'.$i.'new'} < 0) {
  172. if($adminid != 1) {
  173. $error = 1;
  174. return FALSE;
  175. }
  176. ${'ip'.$i.'new'} = -1;
  177. $own++;
  178. } elseif(${'ip'.$i.'new'} == $ip[$i - 1]) {
  179. $own++;
  180. }
  181. ${'ip'.$i.'new'} = intval(${'ip'.$i.'new'}) > 255 ? 255 : intval(${'ip'.$i.'new'});
  182. }
  183. if($own == 4) {
  184. $error = 2;
  185. return FALSE;
  186. }
  187. $query = $db->query("SELECT * FROM {$tablepre}banned WHERE (ip1='$ip1new' OR ip1='-1') AND (ip2='$ip2new' OR ip2='-1') AND (ip3='$ip3new' OR ip3='-1') AND (ip4='$ip4new' OR ip4='-1')");
  188. if($banned = $db->fetch_array($query)) {
  189. $error = 3;
  190. return FALSE;
  191. }
  192. $expiration = $validitynew > 1 ? ($timestamp + $validitynew * 86400) : $timestamp + 86400;
  193. $db->query("UPDATE {$tablepre}sessions SET groupid='6' WHERE ('$ip1new'='-1' OR ip1='$ip1new') AND ('$ip2new'='-1' OR ip2='$ip2new') AND ('$ip3new'='-1' OR ip3='$ip3new') AND ('$ip4new'='-1' OR ip4='$ip4new')");
  194. $db->query("INSERT INTO {$tablepre}banned (ip1, ip2, ip3, ip4, admin, dateline, expiration)
  195. VALUES ('$ip1new', '$ip2new', '$ip3new', '$ip4new', '$discuz_user', '$timestamp', '$expiration')");
  196. return TRUE;
  197. }
  198. return FALSE;
  199. }
  200. ?>