]> dev.renevier.net Git - syj.git/blob - application/controllers/UserController.php
version 0.1
[syj.git] / application / controllers / UserController.php
1 <?php
2 /*  This file is part of Syj, Copyright (c) 2010 Arnaud Renevier,
3     and is published under the AGPL license. */
4
5 class UserController extends Zend_Controller_Action
6 {
7
8     public function userAction() {
9         $formData = $this->_helper->SyjPostData->getPostData('Syj_Form_User');
10
11         // XXX: we validate email server side *only* so we don't want to
12         // validate in SyjPostData. Then, we validate email outside Syj_Form_User
13         $emailValidator = new Syj_Validate_EmailAddress();
14         if (!$emailValidator->isValid($formData['user_email'])) {
15             throw new Syj_Exception_InvalidEmail();
16         }
17
18         $user = new Syj_Model_User();
19         $user->pseudo = $formData["user_pseudo"];
20         $user->password = sha1($formData["user_password"]);
21         $user->email = $formData["user_email"];
22         $user->creationAddr = $this->getRequest()->getClientIp(true);
23
24         if (Zend_Registry::isRegistered('Zend_Translate')) {
25             $translator = Zend_Registry::get('Zend_Translate');
26             $adapter = $translator->getAdapter();
27             $locale = new Zend_Locale($adapter->getLocale());
28             $user->lang = $locale->getLanguage();
29         }
30
31         $userMapper = new Syj_Model_UserMapper();
32
33         try {
34             $userMapper->save ($user);
35         } catch(Zend_Db_Statement_Exception $e) {
36             if ($e->getCode() == 23505) { // 23505: Unique violation throw new Syj_Exception_Request();
37                 $message = $e->getMessage();
38                 if (strpos($message, 'users_pseudo_key') !== false) {
39                     throw new Syj_Exception_Request("uniquepseudo");
40                 } else if (strpos($message, 'users_email_key') !== false) {
41                     throw new Syj_Exception_Request("uniqueemail");
42                 } else {
43                     throw $e;
44                 }
45             } else {
46                 throw $e;
47             }
48         }
49
50         $auth = Zend_Auth::getInstance();
51         $auth->getStorage()->write(array('user' => $user->id));
52         Zend_Session::rememberMe(); // zend default expiration delay is 2 weeks. Ok, use that value
53         $this->_helper->SyjApi->setCode(200);
54     }
55 }