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) {
11 // TODO: try to make only one sql request
12 $adapter = Zend_Db_Table_Abstract::getDefaultAdapter();
13 $authAdapter = new Zend_Auth_Adapter_DbTable($adapter, 'users', 'pseudo', 'password');
14 $authAdapter->setIdentity($username)->setCredential($hash);
15 $auth = Zend_Auth::getInstance();
16 $result = $auth->authenticate($authAdapter);
17 if (!$result->isValid()) {
18 self::$_current = null;
21 $userid = $authAdapter->getResultRowObject('id')->id;
22 $userMapper = new Syj_Model_UserMapper();
23 $user = new Syj_Model_User();
24 if (!$userMapper->find($userid, $user)) {
25 throw new Zend_Exception();
28 if (!isset ($_COOKIE['syj_user']) or (!isset ($_COOKIE['syj_hashpass']))) {
30 // cookie will be valid for 2 weeks
31 $time = time () + 14 * 60 * 24 * 60;
35 setcookie("syj_user", $username, $time, "", "", false, true);
36 setcookie("syj_hashpass", $hash, $time, "", "", false, true);
38 self::$_current = $user;
42 static public function logout() {
43 self::$_current = null;
44 if (isset ($_COOKIE['syj_user'])) {
45 setcookie ('syj_user', "", time() - 3600, "" , "",false, true);
47 if (isset ($_COOKIE['syj_hashpass'])) {
48 setcookie ('syj_hashpass', "", time() - 3600, "" , "",false, true);
52 static public function current() {
53 if (self::$_current === -1) {
54 if ((!isset ($_COOKIE['syj_user'])) || (!isset ($_COOKIE['syj_hashpass']))
55 || (!self::validate($_COOKIE['syj_user'], $_COOKIE['syj_hashpass']))) {
59 return self::$_current;
62 public function needsLogin() {
63 if (self::current()) {
67 $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
68 $view = $viewRenderer->view;
69 $request = $this->getRequest();
71 $encodeduri = $view->UriPath(true);
72 $loginurl = $view->addParamToUrl($view->baseUrl() . '/' . 'login', 'redirect', $encodeduri);
73 $translator = Zend_Registry::get('Zend_Translate');
74 $this->getActionController()->getHelper('Redirector')->gotoURL($loginurl, array('prependBase' => false));