<?php

if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;

class User_EmailLogin extends XCube_ActionFilter
{
    function preFilter()
    {
        $root = XCube_Root::getSingleton();
        $root->mDelegateManager->add('Site.CheckLogin', array($this , 'checkLogin') ) ;
    }

    function checkLogin(&$xoopsUser)
    {
        if (is_object($xoopsUser)) {
            return;
        }

        $root = XCube_Root::getSingleton();
        $root->mLanguageManager->loadModuleMessageCatalog('user');

        $userHandler = xoops_getmodulehandler('users', 'user');
        
        $criteria = new CriteriaCompo();
        $criteria->add(new Criteria('email', xoops_getrequest('uname')));
        $userArr = $userHandler->getObjects($criteria);
        if (count($userArr) != 1) {
            return;
        }

        $pass = xoops_getrequest('pass');
        $hash = $userArr[0]->get('pass');
        if (! User_Utils::passwordVerify($pass, $hash)) {
            return;
        }
        
        if ($userArr[0]->get('level') == 0) {
            // TODO We should use message "_MD_USER_LANG_NOACTTPADM"
            return;
        }
        
        $handler =& xoops_gethandler('user');
        $user =& $handler->get($userArr[0]->get('uid'));
        
        if (is_callable(array($user, "getNumGroups"))) { // Compatible for replaced handler.
            if ($user->getNumGroups() == 0) {
                return;
            }
        } else {
            $groups = $user->getGroups();
            if (count($groups) == 0) {
                return;
            }
        }
        
        // auto re-hash
        if (User_Utils::passwordNeedsRehash($hash)) {
            $user->set('pass', User_Utils::encryptPassword($pass), true);
            if (!$handler->insert($user, true)) {
                // set $passwordNeedsRehash
                User_LegacypageFunctions::$passwordNeedsRehash = ture;
            }
        }

        $xoopsUser = $user;

        //
        // Regist to session
        //
        $root->mSession->regenerate();
        $_SESSION = array();
        $_SESSION['xoopsUserId'] = $xoopsUser->get('uid');
        $_SESSION['xoopsUserGroups'] = $xoopsUser->getGroups();
    }
}
