]> dev.renevier.net Git - syj.git/blob - application/controllers/helpers/SyjSession.php
interface to manage list of created routes
[syj.git] / application / controllers / helpers / SyjSession.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 Syj_Controller_Action_Helper_SyjSession extends Zend_Controller_Action_Helper_Abstract
6 {
7     protected static $cache = array();
8
9     static public function login($userid) {
10         $userMapper = new Syj_Model_UserMapper();
11         $user = new Syj_Model_User();
12         if (!$userMapper->find($userid, $user)) {
13             throw new Zend_Exception();
14         }
15
16         $storage = Zend_Auth::getInstance()->getStorage();
17         $storage->clear();
18         $storage->write(array('user' => $user->id));
19         Zend_Session::rememberMe(); // zend default expiration delay is 2 weeks. Ok, use that value
20     }
21
22     static public function logout() {
23         Zend_Session::start();
24         Zend_Session::destroy();
25     }
26
27     static public function user() {
28         try {
29             $sessionStorage = Zend_Auth::getInstance()->getStorage();
30         } catch(Exception $e) {
31             return null;
32         }
33         $sessionData = $sessionStorage->read();
34         if ($sessionStorage->isEmpty()) {
35             return null;
36         }
37
38         $id = $sessionData['user'];
39         if (!isset($id)) {
40             return null;
41         }
42         if (isset (self::$cache[$id])) {
43             return self::$cache[$id];
44         }
45
46         $userMapper = new Syj_Model_UserMapper();
47         $user = new Syj_Model_User();
48         if ($userMapper->find($id, $user)) {
49             self::$cache[$id] = $user;
50             return $user;
51         } else {
52             self::logout();
53             return null;
54         }
55     }
56
57     public function needsLogin() {
58         $user = self::user();
59         if ($user) {
60             return;
61         }
62         $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
63         $view = $viewRenderer->view;
64         $request = $this->getRequest();
65
66         $encodeduri = implode('/', array_map('urlencode', explode('/', $request->getRequestUri())));
67         $loginurl = $view->addParamToUrl($view->baseUrl() . '/' . 'login', 'redirect', $encodeduri);
68         $translator = Zend_Registry::get('Zend_Translate');
69         $lang = $request->getQuery('lang');
70         if ($lang) {
71             $adapter = $translator->getAdapter();
72             if ($adapter->isAvailable($lang)) {
73                 $loginurl = $view->addParamToUrl($loginurl, 'lang', $lang);
74             }
75         }
76         $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));
77     }
78 }