PageRenderTime 47ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/php/xuzhou58/xuzhou58.com/uc_client/model/user.php

http://jqbird.googlecode.com/
PHP | 197 lines | 182 code | 9 blank | 6 comment | 4 complexity | e74efd194622bb7e94449cc8eebe5888 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-3.0, LGPL-2.1, GPL-2.0
  1. <?php
  2. /*
  3. [UCenter] (C)2001-2009 Comsenz Inc.
  4. This is NOT a freeware, use is subject to license terms
  5. $Id: user.php,v 1.1 2009/08/11 03:23:22 blt Exp $
  6. */
  7. !defined('IN_UC') && exit('Access Denied');
  8. class usermodel {
  9. var $db;
  10. var $base;
  11. function __construct(&$base) {
  12. $this->usermodel($base);
  13. }
  14. function usermodel(&$base) {
  15. $this->base = $base;
  16. $this->db = $base->db;
  17. }
  18. function get_user_by_uid($uid) {
  19. $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
  20. return $arr;
  21. }
  22. function get_user_by_username($username) {
  23. $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
  24. return $arr;
  25. }
  26. function check_username($username) {
  27. $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';
  28. $len = strlen($username);
  29. if($len > 15 || $len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|$guestexp/is", $username)) {
  30. return FALSE;
  31. } else {
  32. return TRUE;
  33. }
  34. }
  35. function check_mergeuser($username) {
  36. $data = $this->db->result_first("SELECT count(*) FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->base->app['appid']."' AND username='$username'");
  37. return $data;
  38. }
  39. function check_usernamecensor($username) {
  40. $_CACHE['badwords'] = $this->base->cache('badwords');
  41. $censorusername = $this->base->get_setting('censorusername');
  42. $censorusername = $censorusername['censorusername'];
  43. $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censorusername = trim($censorusername)), '/')).')$/i';
  44. $usernamereplaced = isset($_CACHE['badwords']['findpattern']) && !empty($_CACHE['badwords']['findpattern']) ? @preg_replace($_CACHE['badwords']['findpattern'], $_CACHE['badwords']['replace'], $username) : $username;
  45. if(($usernamereplaced != $username) || ($censorusername && preg_match($censorexp, $username))) {
  46. return FALSE;
  47. } else {
  48. return TRUE;
  49. }
  50. }
  51. function check_usernameexists($username) {
  52. $data = $this->db->result_first("SELECT username FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
  53. return $data;
  54. }
  55. function check_emailformat($email) {
  56. return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
  57. }
  58. function check_emailaccess($email) {
  59. $setting = $this->base->get_setting(array('accessemail', 'censoremail'));
  60. $accessemail = $setting['accessemail'];
  61. $censoremail = $setting['censoremail'];
  62. $accessexp = '/('.str_replace("\r\n", '|', preg_quote(trim($accessemail), '/')).')$/i';
  63. $censorexp = '/('.str_replace("\r\n", '|', preg_quote(trim($censoremail), '/')).')$/i';
  64. if($accessemail || $censoremail) {
  65. if(($accessemail && !preg_match($accessexp, $email)) || ($censoremail && preg_match($censorexp, $email))) {
  66. return FALSE;
  67. } else {
  68. return TRUE;
  69. }
  70. } else {
  71. return TRUE;
  72. }
  73. }
  74. function check_emailexists($email, $username = '') {
  75. $sqladd = $username !== '' ? "AND username<>'$username'" : '';
  76. $email = $this->db->result_first("SELECT email FROM ".UC_DBTABLEPRE."members WHERE email='$email' $sqladd");
  77. return $email;
  78. }
  79. function check_login($username, $password, &$user) {
  80. $user = $this->get_user_by_username($username);
  81. if(empty($user['username'])) {
  82. return -1;
  83. } elseif($user['password'] != md5(md5($password).$user['salt'])) {
  84. return -2;
  85. }
  86. return $user['uid'];
  87. }
  88. function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '') {
  89. $salt = substr(uniqid(rand()), -6);
  90. $password = md5(md5($password).$salt);
  91. $sqladd = $uid ? "uid='".intval($uid)."'," : '';
  92. $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
  93. $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='".$this->base->onlineip."', regdate='".$this->base->time."', salt='$salt'");
  94. $uid = $this->db->insert_id();
  95. $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");
  96. return $uid;
  97. }
  98. function edit_user($username, $oldpw, $newpw, $email, $ignoreoldpw = 0, $questionid = '', $answer = '') {
  99. $data = $this->db->fetch_first("SELECT username, uid, password, salt FROM ".UC_DBTABLEPRE."members WHERE username='$username'");
  100. if($ignoreoldpw) {
  101. $isprotected = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid = '$data[uid]'");
  102. if($isprotected) {
  103. return -8;
  104. }
  105. }
  106. if(!$ignoreoldpw && $data['password'] != md5(md5($oldpw).$data['salt'])) {
  107. return -1;
  108. }
  109. $sqladd = $newpw ? "password='".md5(md5($newpw).$data['salt'])."'" : '';
  110. $sqladd .= $email ? ($sqladd ? ',' : '')." email='$email'" : '';
  111. if($questionid !== '') {
  112. if($questionid > 0) {
  113. $sqladd .= ($sqladd ? ',' : '')." secques='".$this->quescrypt($questionid, $answer)."'";
  114. } else {
  115. $sqladd .= ($sqladd ? ',' : '')." secques=''";
  116. }
  117. }
  118. if($sqladd || $emailadd) {
  119. $this->db->query("UPDATE ".UC_DBTABLEPRE."members SET $sqladd WHERE username='$username'");
  120. return $this->db->affected_rows();
  121. } else {
  122. return -7;
  123. }
  124. }
  125. function delete_user($uidsarr) {
  126. $uidsarr = (array)$uidsarr;
  127. $uids = $this->base->implode($uidsarr);
  128. $arr = $this->db->fetch_all("SELECT uid FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid IN ($uids)");
  129. $puids = array();
  130. foreach((array)$arr as $member) {
  131. $puids[] = $member['uid'];
  132. }
  133. $uids = $this->base->implode(array_diff($uidsarr, $puids));
  134. if($uids) {
  135. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."members WHERE uid IN($uids)");
  136. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."memberfields WHERE uid IN($uids)");
  137. uc_user_deleteavatar($uidsarr);
  138. $this->base->load('note');
  139. $_ENV['note']->add('deleteuser', "ids=$uids");
  140. return $this->db->affected_rows();
  141. } else {
  142. return 0;
  143. }
  144. }
  145. function get_total_num($sqladd = '') {
  146. $data = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."members $sqladd");
  147. return $data;
  148. }
  149. function get_list($page, $ppp, $totalnum, $sqladd) {
  150. $start = $this->base->page_get_start($page, $ppp, $totalnum);
  151. $data = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."members $sqladd LIMIT $start, $ppp");
  152. return $data;
  153. }
  154. function name2id($usernamesarr) {
  155. $usernamesarr = uc_addslashes($usernamesarr, 1, TRUE);
  156. $usernames = $this->base->implode($usernamesarr);
  157. $query = $this->db->query("SELECT uid FROM ".UC_DBTABLEPRE."members WHERE username IN($usernames)");
  158. $arr = array();
  159. while($user = $this->db->fetch_array($query)) {
  160. $arr[] = $user['uid'];
  161. }
  162. return $arr;
  163. }
  164. function quescrypt($questionid, $answer) {
  165. return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';
  166. }
  167. }
  168. ?>