PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/application/modules/users/models/Users/Manager.php

https://code.google.com/p/zfcore/
PHP | 258 lines | 162 code | 22 blank | 74 comment | 15 complexity | fd5d589717949aa5b24f2308d974a985 MD5 | raw file
  1. <?php
  2. /**
  3. * This is the DbTable class for the users table.
  4. *
  5. * @category Application
  6. * @package Model
  7. * @subpackage DbTable
  8. *
  9. * @version $Id: Manager.php 163 2010-07-12 16:30:02Z AntonShevchuk $
  10. */
  11. class Users_Model_Users_Manager extends Core_Model_Manager
  12. {
  13. /**
  14. * Zend_Auth_Result
  15. *
  16. * @param string $login
  17. * @param string $password
  18. *
  19. * @return bool
  20. */
  21. public static function authenticate($login, $password)
  22. {
  23. $authAdapter = new Zend_Auth_Adapter_DbTable(
  24. Zend_Db_Table::getDefaultAdapter(),
  25. 'users',
  26. 'login',
  27. 'password',
  28. 'MD5(CONCAT(salt, ?)) AND ' .
  29. 'status = "'.Users_Model_User::STATUS_ACTIVE.'"'
  30. );
  31. $auth = Zend_Auth::getInstance();
  32. // set the input credential values to authenticate against
  33. $authAdapter->setIdentity($login);
  34. $authAdapter->setCredential($password);
  35. // do the authentication
  36. $result = $auth->authenticate($authAdapter);
  37. if ($result->isValid()) {
  38. // success: store database row to auth's storage system
  39. $users = new Users_Model_Users_Table();
  40. $auth->getStorage()->write($users->getByLogin($login));
  41. return true;
  42. }
  43. return false;
  44. }
  45. /**
  46. * Login user
  47. *
  48. * @param array $data
  49. * @return bool
  50. */
  51. public function login($data)
  52. {
  53. if ($this->authenticate($data['login'], $data['password'])) {
  54. $user = $this->getDbTable()->getByLogin($data['login']);
  55. $user->login();
  56. if (!empty($data['remember'])) {
  57. Zend_Session::rememberMe(60*60*24*14);
  58. }
  59. return true;
  60. }
  61. return false;
  62. }
  63. /**
  64. * Logout user
  65. */
  66. public static function logout()
  67. {
  68. Zend_Auth::getInstance()->clearIdentity();
  69. }
  70. /**
  71. * Register new user
  72. *
  73. * @param array $data
  74. * @return bool|Users_Model_User
  75. */
  76. public function register($data)
  77. {
  78. $data = array_merge(
  79. $data,
  80. array(
  81. 'role' => Users_Model_User::ROLE_USER,
  82. 'status' => Users_Model_User::STATUS_REGISTER,
  83. 'hashCode' => md5($data['login'] . uniqid()),
  84. )
  85. );
  86. $user = $this->getDbTable()->createRow($data);
  87. if ($user->save()) {
  88. return $user;
  89. }
  90. return false;
  91. }
  92. /**
  93. * Confirm registration
  94. *
  95. * @param string $aHash
  96. * @return bool
  97. */
  98. public function confirmRegistration($aHash)
  99. {
  100. $user = $this->getDbTable()->getByHashcodeAndStatus(
  101. $aHash,
  102. Users_Model_User::STATUS_REGISTER
  103. );
  104. if ($user) {
  105. if ($user->id) {
  106. $user->hashCode = null;
  107. $user->status = Users_Model_User::STATUS_ACTIVE;
  108. $user->save();
  109. return true;
  110. }
  111. }
  112. return false;
  113. }
  114. /**
  115. * Forget password
  116. *
  117. * @param string $aEmail
  118. * @return bool
  119. */
  120. public function forgetPassword($aEmail)
  121. {
  122. $user = $this->getDbTable()->getByEmail($aEmail);
  123. if ($user) {
  124. if ($user->id) {
  125. $user->hashCode = md5($user->login . uniqid());
  126. $user->save();
  127. return $user;
  128. }
  129. }
  130. return false;
  131. }
  132. /**
  133. * Set user password
  134. * @param string $userHash
  135. * @param string $userPassword
  136. * @return bool
  137. */
  138. public function setPassword($userHash, $userPassword)
  139. {
  140. $user = $this->getDbTable()->getByHashcode($userHash);
  141. if ($user) {
  142. if ($user->id) {
  143. if ($userPassword) { //confirm to change password
  144. $user->password = $userPassword;
  145. $user->hashCode = null;
  146. $user->save();
  147. return true;
  148. }
  149. }
  150. }
  151. return false;
  152. }
  153. /**
  154. * Clear user hash
  155. * @param string $userHash
  156. * @return bool
  157. */
  158. public function clearHash($userHash)
  159. {
  160. $user = $this->getDbTable()->getByHashcode($userHash);
  161. if ($user) {
  162. if ($user->id) {
  163. $user->hashCode = null;
  164. $user->save();
  165. return true;
  166. }
  167. }
  168. return false;
  169. }
  170. /**
  171. * Generate random password
  172. *
  173. * @return string
  174. */
  175. public function generatePassword()
  176. {
  177. $randStr = '';
  178. $feed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  179. for ($i = 0; $i < Users_Model_User::MIN_PASSWORD_LENGTH; $i++) {
  180. $randStr .= substr($feed, rand(0, strlen($feed) - 1), 1);
  181. }
  182. return $randStr;
  183. }
  184. /**
  185. * is set hash
  186. *
  187. * @return bool
  188. */
  189. public function isSetUserHash($aHash)
  190. {
  191. return $this->getDbTable()->getByHashcode($aHash);
  192. }
  193. /**
  194. * Get filter
  195. *
  196. * @param array $aParams
  197. * @return array
  198. */
  199. public function getFilter($aParams)
  200. {
  201. switch($aParams['filter']) {
  202. case 'to all':
  203. $filter = '1';
  204. break;
  205. case 'to all active':
  206. $filter = 'status = "'.Users_Model_User::STATUS_ACTIVE.'"';
  207. break;
  208. case 'to all disabled':
  209. $filter = 'status = "'.Users_Model_User::STATUS_BLOCKED.'"';
  210. break;
  211. case 'to all not active last month':
  212. $filter = 'logined < DATE_SUB(NOW(), INTERVAL 1 MONTH)';
  213. break;
  214. case 'custom email':
  215. $filterInput = (isset($aParams['filterInput']))
  216. ? $aParams['filterInput'] : "";
  217. preg_match_all(
  218. '/[\S]+\@[\S]+\.\w+/',
  219. $filterInput,
  220. $matches
  221. );
  222. $filter = 'email in ("'.join('","', $matches['0']).'")';
  223. break;
  224. default:
  225. throw new Exception('no such filter ' . $aParams['filter']);
  226. break;
  227. }
  228. $select = $this->getDbTable()->select()
  229. ->from(array('users'), array('email', 'login'))
  230. ->where($filter);
  231. if (!$aParams['ignore']) {
  232. $select->where('inform=?', 'true');
  233. }
  234. return $this->getDbTable()->fetchAll($select)->toArray();
  235. }
  236. }