PageRenderTime 26ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/discuzx_hacks/discuzx_plus/source/function/function_member.php

https://github.com/bluelovers/Discuz
PHP | 247 lines | 214 code | 27 blank | 6 comment | 37 complexity | 7bdac0beb3806351e33ac65c569ddddb 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: function_login.php 12578 2010-07-09 15:41:43Z zhangguosheng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. function userlogin($username, $password, $questionid, $answer, $loginfield = 'username') {
  12. $return = array();
  13. if($loginfield == 'uid') {
  14. $isuid = 1;
  15. } elseif($loginfield == 'email') {
  16. $isuid = 2;
  17. } elseif($loginfield == 'auto') {
  18. $isuid = 3;
  19. } else {
  20. $isuid = 0;
  21. }
  22. if(!function_exists('uc_user_login')) {
  23. loaducenter();
  24. }
  25. if($isuid == 3) {
  26. if(preg_match('/^[1-9]\d*$/', $username)) {
  27. $return['ucresult'] = uc_user_login($username, $password, 1, 1, $questionid, $answer);
  28. } elseif(isemail($username)) {
  29. $return['ucresult'] = uc_user_login($username, $password, 2, 1, $questionid, $answer);
  30. }
  31. if($return['ucresult'][0] <= 0) {
  32. $return['ucresult'] = uc_user_login($username, $password, 0, 1, $questionid, $answer);
  33. }
  34. } else {
  35. $return['ucresult'] = uc_user_login($username, $password, $isuid, 1, $questionid, $answer);
  36. }
  37. $tmp = array();
  38. $duplicate = '';
  39. list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email'], $duplicate) = daddslashes($return['ucresult'], 1);
  40. $return['ucresult'] = $tmp;
  41. if($duplicate && $return['ucresult']['uid'] > 0) {
  42. if($olduid = DB::result_first("SELECT uid FROM ".DB::table('common_member')." WHERE username='".addslashes($return['ucresult']['username'])."'")) {
  43. require_once libfile('function/membermerge');
  44. if($olduid != $return['ucresult']['uid']) {
  45. membermerge($olduid, $return['ucresult']['uid']);
  46. }
  47. uc_user_merge_remove($return['ucresult']['username']);
  48. } else {
  49. $return['status'] = 0;
  50. return $return;
  51. }
  52. }
  53. if($return['ucresult']['uid'] <= 0) {
  54. $return['status'] = 0;
  55. return $return;
  56. }
  57. $member = DB::fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE uid='".$return['ucresult']['uid']."'");
  58. if(!$member) {
  59. $return['status'] = -1;
  60. return $return;
  61. }
  62. $return['member'] = $member;
  63. $return['status'] = 1;
  64. if(addslashes($member['email']) != $return['ucresult']['email']) {
  65. DB::query("UPDATE ".DB::table('common_member')." SET email='".$return['ucresult']['email']."' WHERE uid='".$return['ucresult']['uid']."'");
  66. }
  67. return $return;
  68. }
  69. function setloginstatus($member, $cookietime) {
  70. global $_G;
  71. $_G['uid'] = $member['uid'];
  72. $_G['username'] = $member['username'];
  73. $_G['adminid'] = $member['adminid'];
  74. $_G['groupid'] = $member['groupid'];
  75. $_G['formhash'] = formhash();
  76. $_G['session']['invisible'] = getuserprofile('invisible');
  77. $_G['member'] = $member;
  78. $_G['core']->session->isnew = 1;
  79. dsetcookie('auth', authcode("{$member['password']}\t{$member['uid']}", 'ENCODE'), $cookietime, 1, true);
  80. dsetcookie('loginuser');
  81. dsetcookie('activationauth');
  82. dsetcookie('pmnum');
  83. }
  84. function logincheck() {
  85. global $_G;
  86. $return = 0;
  87. $login = DB::fetch_first("SELECT count, lastupdate FROM ".DB::table('common_failedlogin')." WHERE ip='$_G[clientip]'");
  88. $return = (!$login || (TIMESTAMP - $login['lastupdate'] > 900)) ? 4 : max(0, 5 - $login['count']);
  89. if(!$login) {
  90. DB::query("REPLACE INTO ".DB::table('common_failedlogin')." (ip, count, lastupdate) VALUES ('$_G[clientip]', '1', '$_G[timestamp]')");
  91. } elseif(TIMESTAMP - $login['lastupdate'] > 900) {
  92. DB::query("REPLACE INTO ".DB::table('common_failedlogin')." (ip, count, lastupdate) VALUES ('$_G[clientip]', '1', '$_G[timestamp]')");
  93. DB::query("DELETE FROM ".DB::table('common_failedlogin')." WHERE lastupdate<$_G[timestamp]-901", 'UNBUFFERED');
  94. }
  95. return $return;
  96. }
  97. function loginfailed() {
  98. global $_G;
  99. DB::query("UPDATE ".DB::table('common_failedlogin')." SET count=count+1, lastupdate='$_G[timestamp]' WHERE ip='$_G[clientip]'");
  100. }
  101. function getuidfields() {
  102. return array(
  103. 'common_credit_log',
  104. 'common_credit_rule_log',
  105. 'common_credit_rule_log_field',
  106. 'common_invite|uid,fuid',
  107. 'common_mailcron|touid',
  108. 'common_member',
  109. 'common_member_count',
  110. 'common_member_field_forum',
  111. 'common_member_field_home',
  112. 'common_member_log',
  113. 'common_member_profile',
  114. 'common_member_security',
  115. 'common_member_status',
  116. 'common_member_validate',
  117. 'common_myinvite|fromuid,touid',
  118. 'forum_access',
  119. 'forum_activity',
  120. 'forum_activityapply',
  121. 'forum_attachment',
  122. 'forum_attachmentfield',
  123. 'forum_creditslog',
  124. 'forum_debate',
  125. 'forum_debatepost',
  126. 'home_favorite',
  127. 'forum_medallog',
  128. 'common_member_magic',
  129. 'forum_memberrecommend|recommenduid',
  130. 'forum_moderator',
  131. 'forum_modwork',
  132. 'common_mytask',
  133. 'forum_order',
  134. 'forum_groupinvite',
  135. 'forum_groupuser',
  136. 'forum_pollvoter',
  137. 'forum_post|authorid',
  138. 'forum_thread|authorid',
  139. 'forum_threadmod',
  140. 'forum_tradecomment|raterid,rateeid',
  141. 'forum_tradelog|sellerid,buyerid',
  142. 'home_album',
  143. 'home_appcreditlog',
  144. 'home_blacklist|uid,buid',
  145. 'home_blog',
  146. 'home_blogfield',
  147. 'home_class',
  148. 'home_clickuser',
  149. 'home_comment|uid,authorid',
  150. 'home_docomment',
  151. 'home_doing',
  152. 'home_feed',
  153. 'home_feed_app',
  154. 'home_friend|uid,fuid',
  155. 'home_friendlog|uid,fuid',
  156. 'home_pic',
  157. 'home_share',
  158. 'home_userapp',
  159. 'home_userappfield',
  160. 'common_admincp_member'
  161. );
  162. }
  163. function membermerge($olduid, $newuid) {
  164. $uidfields = getuidfields();
  165. foreach($uidfields as $value) {
  166. list($table, $field, $stepfield) = explode('|', $value);
  167. $fields = !$field ? array('uid') : explode(',', $field);
  168. foreach($fields as $field) {
  169. DB::query("UPDATE `".DB::table($table)."` SET `$field`='$newuid' WHERE `$field`='$olduid'");
  170. }
  171. }
  172. }
  173. function getinvite() {
  174. global $_G;
  175. $result = array();
  176. $cookies = empty($_G['cookie']['invite_auth'])?array():explode(',', $_G['cookie']['invite_auth']);
  177. $cookiecount = count($cookies);
  178. if($cookiecount == 2) {
  179. $id = intval($cookies[0]);
  180. $code = $cookies[1];
  181. $query = DB::query("SELECT * FROM ".DB::table('common_invite')." WHERE id='$id'");
  182. if($invite = DB::fetch($query)) {
  183. if($invite['code'] == $code && empty($invite['fuid']) && (empty($invite['endtime']) || $_G['timestamp'] < $invite['endtime'])) {
  184. $result['uid'] = $invite['uid'];
  185. $result['id'] = $invite['id'];
  186. $result['appid'] = $invite['appid'];
  187. }
  188. }
  189. } elseif($cookiecount == 3) {
  190. $uid = intval($cookies[0]);
  191. $code = $cookies[1];
  192. $appid = intval($cookies[2]);
  193. $invite_code = space_key($uid, $appid);
  194. if($code == $invite_code) {
  195. $result['uid'] = $uid;
  196. $result['appid'] = $appid;
  197. }
  198. }
  199. if($result['uid']) {
  200. $member = getuserbyuid($result['uid']);
  201. $result['username'] = $member['username'];
  202. } else {
  203. dsetcookie('invite_auth', '');
  204. }
  205. return $result;
  206. }
  207. function replacesitevar($string, $replaces = array()) {
  208. global $_G;
  209. $sitevars = array(
  210. '{sitename}' => $_G['setting']['sitename'],
  211. '{bbname}' => $_G['setting']['bbname'],
  212. '{time}' => dgmdate(TIMESTAMP, 'Y-n-j H:i'),
  213. '{adminemail}' => $_G['setting']['adminemail'],
  214. '{username}' => $_G['member']['username'],
  215. '{myname}' => $_G['member']['username']
  216. );
  217. $replaces = array_merge($sitevars, $replaces);
  218. return str_replace(array_keys($replaces), array_values($replaces), $string);
  219. }
  220. ?>