2 /* This file is part of Syj, Copyright (c) 2010 Arnaud Renevier,
3 and is published under the AGPL license. */
5 class Syj_Controller_Action_Helper_SyjSession extends Zend_Controller_Action_Helper_Abstract
7 protected static $cache = array();
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();
16 $storage = Zend_Auth::getInstance()->getStorage();
18 $storage->write(array('user' => $user->id));
19 Zend_Session::rememberMe(); // zend default expiration delay is 2 weeks. Ok, use that value
22 static public function logout() {
23 Zend_Session::start();
24 Zend_Session::destroy();
27 static public function user() {
29 $sessionStorage = Zend_Auth::getInstance()->getStorage();
30 } catch(Exception $e) {
33 $sessionData = $sessionStorage->read();
34 if ($sessionStorage->isEmpty()) {
38 $id = $sessionData['user'];
42 if (isset (self::$cache[$id])) {
43 return self::$cache[$id];
46 $userMapper = new Syj_Model_UserMapper();
47 $user = new Syj_Model_User();
48 if ($userMapper->find($id, $user)) {
49 self::$cache[$id] = $user;
57 public function needsLogin() {
62 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
63 $view = $viewRenderer->view;
64 $request = $this->getRequest();
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');
71 $adapter = $translator->getAdapter();
72 if ($adapter->isAvailable($lang)) {
73 $loginurl = $view->addParamToUrl($loginurl, 'lang', $lang);
76 $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));