]> dev.renevier.net Git - syj.git/blob - application/controllers/UserController.php
allow anonymous routes creation
[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
23         if (Zend_Registry::isRegistered('Zend_Translate')) {
24             $translator = Zend_Registry::get('Zend_Translate');
25             $adapter = $translator->getAdapter();
26             $locale = new Zend_Locale($adapter->getLocale());
27             $user->lang = $locale->getLanguage();
28         }
29
30         $userMapper = new Syj_Model_UserMapper();
31
32         try {
33             $userMapper->save ($user);
34         } catch(Zend_Db_Statement_Exception $e) {
35             if ($e->getCode() == 23505) { // 23505: Unique violation throw new Syj_Exception_Request();
36                 $message = $e->getMessage();
37                 if (strpos($message, 'users_pseudo_key') !== false) {
38                     throw new Syj_Exception_Request("uniquepseudo");
39                 } else if (strpos($message, 'users_email_key') !== false) {
40                     throw new Syj_Exception_Request("uniqueemail");
41                 } else {
42                     throw $e;
43                 }
44             } else {
45                 throw $e;
46             }
47         }
48
49         $this->_helper->SyjSession->login($user->id);
50         $this->_helper->SyjApi->setCode(200);
51     }
52 }