PageRenderTime 56ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/afsUserManager/actions/actions.class.php

https://github.com/appflower/appflower_studio
PHP | 240 lines | 160 code | 26 blank | 54 comment | 15 complexity | 5f784d36eb58caca8aa533236c7599b1 MD5 | raw file
  1. <?php
  2. /**
  3. * afsUserManager action
  4. *
  5. * @package appFlowerStudio
  6. * @subpackage plugin
  7. * @author Sergey Startsev <startsev.sergey@gmail.com>
  8. */
  9. class afsUserManagerActions extends afsActions
  10. {
  11. /**
  12. * Catching executing ajax queries from direct call
  13. *
  14. * @return void
  15. * @author Sergey Startsev
  16. */
  17. public function preExecute()
  18. {
  19. if (!$this->getRequest()->isXmlHttpRequest() && $this->getActionName() != 'captcha') {
  20. $this->forward404("This action should be used only for ajax requests");
  21. }
  22. }
  23. /**
  24. * Getting user information
  25. *
  26. * @param sfWebRequest $request
  27. * @return string - json
  28. * @author Sergey Startsev
  29. */
  30. public function executeGet(sfWebRequest $request)
  31. {
  32. $username = $request->getParameter('username', afStudioUser::getInstance()->getUsername());
  33. // Catching if current user not admin
  34. if (!afStudioUser::getInstance()->isAdmin() && afStudioUser::getInstance()->getUsername() != $username) {
  35. $this->forward404("You have no rights to execute this action");
  36. }
  37. $user = afStudioUser::getInstance()->retrieve($username);
  38. $user['username'] = $username;
  39. return $this->renderJson(afResponseHelper::create()->success(true)->data(array(), $user, 0)->asArray());
  40. }
  41. /**
  42. * Getting users list
  43. *
  44. * @param sfWebRequest $request
  45. * @return string - json
  46. * @author Sergey Startsev
  47. */
  48. public function executeGetList(sfWebRequest $request)
  49. {
  50. // Catching if current user not admin
  51. if (!afStudioUser::getInstance()->isAdmin()) {
  52. $this->forward404("You have no rights to execute this action");
  53. }
  54. $users = afStudioUser::getCollection();
  55. $aUsers = array();
  56. $i = 1;
  57. foreach ($users as $username => $user) {
  58. $aUsers[] = array(
  59. 'id' => $i++,
  60. 'username' => $username,
  61. 'email' => $user['email'],
  62. 'first_name' => $user['first_name'],
  63. 'last_name' => $user['last_name'],
  64. 'role' => $user['role']
  65. );
  66. }
  67. return $this->renderJson(afResponseHelper::create()->success(true)->data(array(), $aUsers, 0)->asArray());
  68. }
  69. /**
  70. * Updating user
  71. *
  72. * @param sfWebRequest $request
  73. * @return string - json
  74. * @author Sergey Startsev
  75. */
  76. public function executeUpdate(sfWebRequest $request)
  77. {
  78. $response = afResponseHelper::create();
  79. $sUsername = $request->getParameter('username');
  80. $aUser = json_decode($request->getParameter('user'), true);
  81. // Will be passed if user - admin or he trying update his own profile
  82. if (!afStudioUser::getInstance()->isAdmin() && afStudioUser::getInstance()->getUsername() != $sUsername) {
  83. $this->forward404("You have no rights to execute this action");
  84. }
  85. // Retrieve user via username
  86. $user = afStudioUser::retrieve($sUsername);
  87. $errors = array();
  88. if (!$user) return $this->renderJson($response->success(false)->message("This user doesn't exists")->asArray());
  89. $aUserCheck = afStudioUser::retrieveByEmail($aUser['email']);
  90. if ($aUserCheck && $aUserCheck['username'] != $aUser['username']) $aErrors['email'] = "User with this `email` already exists";
  91. $aUpdate = array(
  92. afStudioUser::FIRST_NAME => $aUser['first_name'],
  93. afStudioUser::LAST_NAME => $aUser['last_name'],
  94. afStudioUser::EMAIL => $aUser['email'],
  95. );
  96. if (isset($aUser['role'])) $aUpdate[afStudioUser::ROLE] = $aUser['role'];
  97. if (!empty($aUser['password'])) $aUpdate[afStudioUser::PASSWORD] = $aUser['password'];
  98. // Validate user data
  99. $validate = afStudioUser::validate($aUpdate);
  100. if (is_bool($validate) && $validate === true && empty($aErrors)) {
  101. // if password has been setted encoding using rule
  102. if (!empty($aUser['password'])) $aUpdate[afStudioUser::PASSWORD] = afStudioUser::passwordRule($aUser['password']);
  103. // Update processing
  104. afStudioUser::update($sUsername, $aUpdate);
  105. afsNotificationPeer::log('User has been successfully updated', 'afStudioUser');
  106. // if changes applied for current user
  107. if (afStudioUser::getInstance()->getUsername() == $sUsername) {
  108. if (!empty($aUser['password'])) afStudioUser::set($sUsername, $aUser['password'], false);
  109. // update role of current user - with redirect processing
  110. if (afStudioUser::getInstance()->getRole() != $aUser['role']) {
  111. return $this->renderJson($response->redirect('afsAuthorize/signout')->asArray());
  112. }
  113. }
  114. $response->success(true)->message('User has been successfully updated');
  115. } else {
  116. if (is_array($validate)) $aErrors = afsUserManagerHelper::mergeErrors($aErrors, $validate);
  117. $aErrors = afsUserManagerHelper::prepareErrors($aErrors);
  118. $response->success(false)->message($aErrors);
  119. }
  120. return $this->renderJson($response->asArray());
  121. }
  122. /**
  123. * Creating new user controller
  124. *
  125. * @param sfWebRequest $request
  126. * @return string - json
  127. * @author Sergey Startsev
  128. */
  129. public function executeCreate(sfWebRequest $request)
  130. {
  131. return $this->renderJson(
  132. afsUserManagerHelper::createNewUser($request)
  133. );
  134. }
  135. /**
  136. * Delete User functionality
  137. *
  138. * @param sfWebRequest $request
  139. * @return string - json
  140. * @author Sergey Startsev
  141. */
  142. public function executeDelete(sfWebRequest $request)
  143. {
  144. if (!afStudioUser::getInstance()->isAdmin()) $this->forward404("You have no rights to execute this action");
  145. $response = afResponseHelper::create();
  146. $username = $request->getParameter('username');
  147. if (afStudioUser::getInstance()->getUsername() == $username) {
  148. return $this->renderJson($response->success(false)->message("You can't delete youself")->asArray());
  149. }
  150. if (!afStudioUser::getInstance()->retrieve($username)) {
  151. return $this->renderJson($response->success(false)->message("This user doesn't exists")->asArray());
  152. }
  153. if (!afStudioUser::delete($username)) return $this->renderJson($response->success(false)->message("Can't delete user")->asArray());
  154. afsNotificationPeer::log('User has been deleted', 'afStudioUser');
  155. return $this->renderJson($response->success(true)->message("User has been deleted")->asArray());
  156. }
  157. /**
  158. * Getting captcha image
  159. *
  160. * @param sfWebRequest $request
  161. * @return void
  162. * @author Sergey Startsev
  163. */
  164. public function executeCaptcha(sfWebRequest $request)
  165. {
  166. $width = $request->getParameter('width', 160);
  167. $height = $request->getParameter('height', 50);
  168. $characters = $request->getParameter('characters', 6);
  169. $captcha = new afsCaptcha($width, $height, $characters);
  170. $captcha->CreateImage();
  171. return sfView::NONE;
  172. }
  173. /**
  174. * Check is user exists
  175. *
  176. * todo remove if not used
  177. *
  178. * @param sfWebRequest $request
  179. * @return array
  180. * @author Milos Silni
  181. */
  182. public function executeCheckUserExist(sfWebRequest $request)
  183. {
  184. afStudioUser::getInstance()->authorize();
  185. $sUsername = $request->getParameter('username');
  186. $aUser = json_decode($request->getParameter('user'), true);
  187. $user = afStudioUser::getInstance()->retrieve($sUsername);
  188. $aErrors = array();
  189. if ($user) {
  190. return array('success' => false, 'message' => 'User with this `username` already exists', 'field'=>'username');
  191. }
  192. if (afStudioUser::getInstance()->retrieveByEmail($aUser['email'])) {
  193. return array('success' => false, 'message' => 'User with this `email` already exists', 'field'=>'email');
  194. }
  195. return array('success' => true, 'message' => 'User ok');
  196. }
  197. }