rhaco: RequestLoginを拡張したRequestLoginExt

RequestLoginクラスは思った以上に拡張性がなかったので拡張しました。
http://api.rhaco-users.jp/d8/dd3/RequestLogin_8php-source.html

データベースにはusersテーブルにemail, passwordが必要という設定です。ログイン状態を保存するという機能を実装するためにsetcookie(checkbox)というRequestを投げてやればよいようになっています。ログインが必要なシステム制作の際に役に立つでしょう。 RequestLoginExtを使う際にはRequestLoginDbExtを必要とします。RequestLoginDbExtも同時にのせときます。

RequestLoginExt

	
	class RequestLoginExt extends RequestLogin{
		
		var $login_session;
		
		function setLoginCookie($value, $expire=''){
			if(!$expire) $expire = time() + Rhaco::constant("COOKIE_EXPIRE_TIME",1209600);
			setcookie( RequestLogin::getSessionLoginName(), $value, $expire,  '/' );
		}
		 function logout($requestLoginCondition){
		 	$this->silent($requestLoginCondition);
		 	unset($_SESSION[RequestLogin::getSessionLoginIdName()]);
			unset($_SESSION[RequestLogin::getSessionLoginName()]);
			$this->clearSession();
			$this->login_session = null;
			setcookie(RequestLogin::getSessionLoginName(),"", time() - 1209600, '/');
		}
		function login_require($requestLoginCondition, $tableObject, $redirect=''){
			$this->logout($requestLoginCondition);
			$this->login(new RequestLoginConditionDbExt($requestLoginCondition, $tableObject));
			if($this->isLogin()) {
				$this->login_session = $this->getLoginSession();
				if( $this->getVariable('setcookie') ){
					$this->setLoginCookie($this->login_session->password);
				}
				// When user has authed.
				$redirect ? Header::redirect($redirect) : Header::redirect(Rhaco::url());
			}
		}
		function login_silent($requestLoginCondition, $tableObject){
			
			$this->silent($requestLoginCondition);
			$this->login_session = $this->getLoginSession();
			if(
				!$this->login_session and 
				$this->isLoginCookie()
			){
				$this->silent($requestLoginCondition);
				$this->logout();
				$this->login(new RequestLoginConditionDbExt($requestLoginCondition, $tableObject));
				$this->login_session = $this->getLoginSession();
				if(!$this->login_session) return false;
				$this->setLoginCookie($this->login_session->password);
			}
		}
	}
	

RequestLoginDbExt

	class RequestLoginConditionDbExt extends RequestLoginConditionDb{
		function invalid($request){
			if(!Variable::istype("Request",$request)){
				$request = new RequestLoginExt();
			}
			$this->_invalidForword($request);
		}
		function _invalidForword($request){
			$htmlParser = new HtmlParser();
			 $login = $request->getVariable("email");
			$request->clearVariable("password","email","args");
			$htmlParser->setVariable("requestvar",$request->getVariable());
			$template = Rhaco::rhacoresource("templates/network/login.html");
			if(FileUtil::exist(Rhaco::templatepath("network/login.html"))) $template = Rhaco::templatepath("network/login.html");
			$htmlParser->write($template);
			Rhaco::end();
		}


	}