2 /* This file is part of Syj, Copyright (c) 2010-2011 Arnaud Renevier,
3 and is published under the AGPL license. */
5 class Syj_Controller_Action_Helper_SyjUserManager extends Zend_Controller_Action_Helper_Abstract
7 // -1 for undeterminated, null for non logged, Syj_Model_User for a logged user
8 protected static $_current = -1;
10 static public function validate($username, $hash, $rememberme = false) {
14 // TODO: try to make only one sql request
15 $adapter = Zend_Db_Table_Abstract::getDefaultAdapter();
16 $authAdapter = new Zend_Auth_Adapter_DbTable($adapter, 'users', 'pseudo', 'password');
17 $authAdapter->setIdentity($username)->setCredential($hash);
18 $auth = Zend_Auth::getInstance();
19 $result = $auth->authenticate($authAdapter);
20 if (!$result->isValid()) {
21 self::$_current = null;
24 $userid = $authAdapter->getResultRowObject('id')->id;
25 $userMapper = new Syj_Model_UserMapper();
26 $user = new Syj_Model_User();
27 if (!$userMapper->find($userid, $user)) {
28 throw new Zend_Exception();
31 $request = Zend_Controller_Front::getInstance()->getRequest();
32 if (!$request->getCookie('syj_user') or !$request->getCookie('syj_hashpass')) {
34 // cookie will be valid for 2 weeks
35 $time = time () + 14 * 60 * 24 * 60;
39 setcookie("syj_user", $username, $time, "", "", false, true);
40 setcookie("syj_hashpass", $hash, $time, "", "", false, true);
42 self::$_current = $user;
46 static public function logout() {
47 self::$_current = null;
48 $request = Zend_Controller_Front::getInstance()->getRequest();
49 if ($request->getCookie('syj_user')) {
50 setcookie ('syj_user', "", time() - 3600, "" , "",false, true);
52 if ($request->getCookie('syj_hashpass')) {
53 setcookie ('syj_hashpass', "", time() - 3600, "" , "",false, true);
57 static public function current() {
58 if (self::$_current === -1) {
59 $request = Zend_Controller_Front::getInstance()->getRequest();
60 if (!self::validate($request->getCookie('syj_user'), $request->getCookie('syj_hashpass'))) {
64 return self::$_current;
67 public function needsLogin() {
68 if (self::current()) {
72 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
73 $view = $viewRenderer->view;
74 $request = $this->getRequest();
76 $encodeduri = $view->UriPath(true);
77 $loginurl = $view->addParamToUrl($view->baseUrl() . '/' . 'login', 'redirect', $encodeduri);
78 $translator = Zend_Registry::get('Zend_Translate');
79 $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));