PageRenderTime 178ms CodeModel.GetById 6ms RepoModel.GetById 0ms app.codeStats 0ms

/application/modules/geocontexter/controllers/UserEditController.php

http://geocontexter.googlecode.com/
PHP | 226 lines | 154 code | 39 blank | 33 comment | 24 complexity | 7fc4707041ad1cc7e09b9a4a154362b4 MD5 | raw file
  1. <?php
  2. /**
  3. * GeoContexter
  4. * @link http://code.google.com/p/geocontexter/
  5. * @package GeoContexter
  6. */
  7. /**
  8. * user edit
  9. *
  10. * @package GeoContexter
  11. * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
  12. * @author Armand Turpel <geocontexter@gmail.com>
  13. * @version $Rev: 828 $ / $LastChangedDate: 2011-02-27 10:30:28 +0100 (Sun, 27 Feb 2011) $ / $Author: armand.turpel $
  14. */
  15. class Geocontexter_UserEditController extends Mozend_Controller_Action_AbstractAdmin
  16. {
  17. public function preDispatch()
  18. {
  19. // set view. we keep the index view instead of add
  20. //
  21. $this->_helper->viewRenderer->setScriptAction('index');
  22. $this->view->partialData['active_page'] = 'edit';
  23. $this->view->timezone_identifiers = DateTimeZone::listIdentifiers();
  24. $this->view->error = array();
  25. $this->view->user_result = array();
  26. $languages = new Geocontexter_Model_LanguagesGet;
  27. $params = array('enable' => 'true');
  28. $lang_result = $languages->get( $params );
  29. if($lang_result instanceof Mozend_ModelError)
  30. {
  31. return $this->error( $lang_result->getErrorString(), __file__, __line__ );
  32. }
  33. else
  34. {
  35. $this->view->languages = $lang_result;
  36. }
  37. }
  38. public function indexAction()
  39. {
  40. $this->view->id_user = $this->id_user =$this->request->getParam('id_user');
  41. if((null === $this->id_user) || (0 == $this->id_user))
  42. {
  43. $this->id_user = 0;
  44. $this->view->headTitle('Edit user', 'PREPEND');
  45. }
  46. else
  47. {
  48. // get current context
  49. //
  50. $user = new Geocontexter_Model_UserGet;
  51. $params = array('id_user' => $this->id_user);
  52. $result = $user->get( $params );
  53. if($result instanceof Mozend_ModelError)
  54. {
  55. return $this->error( $result->getErrorString(), __file__, __line__ );
  56. }
  57. else
  58. {
  59. $this->view->headTitle('Edit user ' . $result['user_forename'] . ' ' . $result['user_lastname'], 'PREPEND');
  60. $this->view->user_result = $result;
  61. }
  62. }
  63. }
  64. /**
  65. * add new group action
  66. */
  67. public function updateAction()
  68. {
  69. // check on cancel action
  70. //
  71. $cancel = $this->request->getPost('cancel');
  72. if($cancel !== null)
  73. {
  74. $this->_redirect($this->view->adminAreaToken .
  75. '/geocontexter/user/index');
  76. }
  77. $params = array();
  78. $this->view->error = array();
  79. $this->view->id_user = $this->id_user = $this->request->getPost('id_user');
  80. $this->view->user_result['user_login'] = $this->request->getPost('user_login');
  81. $this->view->user_result['id_status'] =
  82. $params['id_status'] = $this->request->getPost('id_status');
  83. $this->view->user_result['id_group'] =
  84. $params['id_group'] = $this->request->getPost('id_group');
  85. $this->view->user_result['user_lastname'] =
  86. $params['user_lastname'] = $this->request->getPost('user_lastname');
  87. $this->view->user_result['user_forename'] =
  88. $params['user_forename'] = $this->request->getPost('user_forename');
  89. $this->view->user_result['user_lang'] =
  90. $params['lang'] = $this->request->getPost('user_lang');
  91. $this->view->user_result['user_email'] =
  92. $params['user_email'] = $this->request->getPost('user_email');
  93. $this->view->user_result['user_url'] =
  94. $params['user_url'] = $this->request->getPost('user_url');
  95. $this->view->user_result['user_timezone'] =
  96. $params['user_timezone'] = $this->request->getPost('user_timezone');
  97. $this->view->user_result['user_description'] =
  98. $params['description'] = $this->request->getPost('user_description');
  99. $user_password = $this->request->getPost('user_password');
  100. $user_password2 = $this->request->getPost('user_password2');
  101. if(!empty($user_password))
  102. {
  103. if($user_password != $user_password2)
  104. {
  105. $this->view->error[] = 'Both user password must be equal';
  106. }
  107. else
  108. {
  109. $params['user_password'] = md5($user_password);
  110. }
  111. }
  112. // if status is trash then check if there is no related project
  113. //
  114. if($params['id_status'] == 0)
  115. {
  116. $user_related_content_check = new Geocontexter_Model_UserRelatedContentCheck;
  117. $result = $user_related_content_check->check( $this->id_user );
  118. if($result instanceof Mozend_ModelError)
  119. {
  120. return $this->error( $result->getErrorString(), __file__, __line__ );
  121. }
  122. else if(count($result) > 0)
  123. {
  124. $message = 'Couldnt move this user to trash. There are some records related to this user.';
  125. $this->view->error[] = $message;
  126. $this->view->headTitle($message, 'PREPEND');
  127. return;
  128. }
  129. }
  130. // basic check if user dosent modify its own status
  131. // or modify other administrators account
  132. //
  133. if(false === $this->_check( $params ))
  134. {
  135. $this->view->error[] = 'Unexpected error';
  136. }
  137. if(empty($params['user_lastname']))
  138. {
  139. $this->view->error[] = 'User lastname is empty';
  140. }
  141. if(empty($params['user_forename']))
  142. {
  143. $this->view->error[] = 'User forename is empty';
  144. }
  145. if(empty($params['user_email']))
  146. {
  147. $this->view->error[] = 'User email is empty';
  148. }
  149. if(count($this->view->error) > 0)
  150. {
  151. $this->view->headTitle('Error: User data failure', 'PREPEND');
  152. return;
  153. }
  154. $user = new Geocontexter_Model_UserUpdate;
  155. // add item attribute
  156. //
  157. $result = $user->update( array('id_user' => $this->id_user,
  158. 'data' => $params ));
  159. if($result instanceof Mozend_ModelError)
  160. {
  161. return $this->error( $result->getErrorString(), __file__, __line__ );
  162. }
  163. else
  164. {
  165. $this->_redirect($this->view->adminAreaToken .
  166. '/geocontexter/user/index');
  167. }
  168. }
  169. private function _check( $params )
  170. {
  171. $identity = $this->request->getParam('identity');
  172. // cannot modify ouwn account status
  173. //
  174. if(($params['id_status'] < 200) &&
  175. ($identity->id_user == $params['id_user']))
  176. {
  177. return false;
  178. }
  179. // cannot modify account of user of the same or higher rights group
  180. //
  181. if(($identity->id_group > 0) && ($identity->id_group >= $params['id_group']))
  182. {
  183. return false;
  184. }
  185. return true;
  186. }
  187. }