<?php
/**
 * @copyright ICZ Corporation (http://www.icz.co.jp/)
 * @license See the LICENCE file
 * @author <matcha@icz.co.jp>
 * @version $Id$
 */
/**
 * 内容:ログインのcontrollerクラス
 */
class UsersController extends AppController {

	var $name  = "Users";
	var $uses  = array('User');
	var $components = array('Qdmail');
	var $autoLayout = true;
	var $layout = 'login_layout';

	function beforeFilter(){
		$this->Auth->autoRedirect = false;
		$this->Auth->fields = array('username' => 'LOGIN_ID', 'password' => 'PASSWORD');
		if($this->action == 'regist_user') {
			$this->Auth->authenticate = $this->User;
		}

		$this->Auth->allow('reset','reset_end','pass_edit');
		$this->Set_View_Option();
	}

	//ログイン画面用
	function login(){
		$this->set("page_title","ログイン");
		$value = $this->Cookie->read('userid');
		if($value!=NULL){
			$user=$this->Auth->user();
			$this->History->h_logout($value[0]);
			$this->Cookie->delete('userid');
		}
		//認証している場合はマイページにリダイレクト
		if($this->Auth->user())
		{
			$user=$this->Auth->user();
			if($user['User']['STATUS']!=1){
				$this->History->h_login($user['User']['USR_ID']);

				//セッションID書き換え
				App::import('Helper', 'Session');
				$sessionHelper = new SessionHelper();
				$sessionHelper->__regenerateId();

				//ログイン成功
				$this->redirect(array('controller' =>'homes', 'action' => 'index'));
			}
			else{
				$this->Session->setFlash('IDまたはパスワードが不正です。','');
				$this->redirect($this->Auth->logout());
			}
		}elseif(!empty($this->data)){
			//ログイン失敗
			$this->Session->setFlash('IDまたはパスワードが不正です。','');
		}
	}

	//ログアウト用
	function logout(){
		//ログアウトのログを投入
		$user=$this->Auth->user();
		$this->History->h_logout($user['User']['USR_ID']);
		$this->redirect($this->Auth->logout());
	}
	//パスワード再設定
	function reset(){
		if(isset($this->data)){
			$condition = array(
							'conditions' => array(
								'MAIL' => $this->data['User']['MAIL']
							),
						'order' => array(
							'ADD_DATE' => 'DESC',
						),
						'recursive' => 0
					);

			$row = $this->User->find('first',$condition);
			if(!$row){
				$this->Session->setFlash('入力されたメールアドレスは登録されていません','');
				$this->redirect('/users/reset');
			}

			//メール送信
			$key = Security::hash(uniqid().mt_rand());
			$this->data['User']['RANDOM_KEY'] = $key;
			$this->User->id = $row['User']['USR_ID'];
			if($this->User->save($this->data)) {
				$url = Router::url('/users/pass_edit', true);
				$body =  Configure::read('Mail.Txt.PassEdit')."\n".$url.'?k='.$key;
				if(!$this->Common->send_mail($this->data['User']['MAIL'],Configure::read('Mail.Subject.PassEdit'), $body)){
					$this->Session->setFlash('メールの送信に失敗しました','');
					$this->redirect('/users/reset');
				}
			}
			$this->render('reset_end');
		}

	}
	//パスワード作成用
	function pass_edit(){
		$key = isset($this->params['url']['k']) ? $this->params['url']['k'] : $this->data['User']['key'];
		//keyパラメータがない場合は
		if(!isset($key)){
			$this->redirect('/');
		}

		$condition = array(
						'conditions' => array(
								'RANDOM_KEY' => $key
							),
						'order' => array(
							'ADD_DATE' => 'DESC',
						),
						'recursive' => 0
					);

		$row = $this->User->find('first',$condition);
		if(!$row){
			$this->redirect('/');
		}

		$this->set('key',$key);
		if(isset($this->data)){
			//パスワード・ランダムキー削除
			$this->User->id = $row['User']['USR_ID'];
			$this->data['User']['RANDOM_KEY'] = null;
			$this->data['User']['PASSWORD'] = $this->Auth->password($this->data['User']['EDIT_PASSWORD']);
			$this->data['User']['LAST_UPDATE'] = $datetime = date("Y-m-d H:i:s");
			if($this->User->save($this->data)){
				$this->render('pass_edit_end');
			}
		}

	}
}