<?php
App::uses('AppModel', 'Model');
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth');


/**
 * User Model
 *
 * @property Login $Login
 * @property Program $Program
 */
class User extends AppModel {


/**
 * Validation rules
 *
 * @var array
 */
	public $validate = array(
		'login_id' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'この項目は入力必須です'
			),
            array( 
                'rule' => 'isUnique', 
                'message' => '既に登録されています'
            ),
        ),
        'email' => array(
        	array(
				'rule' => array('notBlank'),
                'message' => 'メールアドレスを入力してください'
            ),
            // メールアドレスであること。
            'isEmail' => array( 
				'rule' => 'Email',
            	'message' => '正しいメールアドレスを入力してください'
            ),
            array(
                'rule' => 'DuplicateEmailCheck', 
                'message' => 'このメールアドレスは既に登録されています'
            ), 
            // 一意性チェック
            // 'emailExists' => array( 'rule' => 'isUnique', 'message' => '既に登録されています'),
        ),
        'email_confirm' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'メールアドレス(確認)を入力してください'
            ), 
            array(
                'rule' => 'emailConfirm', 
                'message' => 'メールアドレスが一致していません'
            ), 

        ),

        'password' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'パスワードを入力してください'
            ), 
            array(
                'rule' => array('minLength', 8), 
                'message' => 'パスワードは8文字以上入力してください', 
            ),
            array(
                'rule' => 'passwordConfirm', 
                'message' => 'パスワードが一致していません'
            ), 
        ),
        'password_confirm' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'パスワード(確認)を入力してください'
            ), 
        ),
		'status' => array(
			'numeric' => array(
				'rule' => array('numeric'),
				//'message' => 'Your custom message here',
				//'allowEmpty' => false,
				//'required' => false,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
		),
	);

	public $reset_pwd_validate = array(
        'email' => array(
        	array(
				'rule' => array('notBlank'),
                'message' => 'メールアドレスを入力してください'
            ),
            // メールアドレスであること。
            'isEmail' => array( 
				'rule' => 'Email',
            	'message' => '正しいメールアドレスを入力してください'
            ),
            array(
                'rule' => 'emailConfirm', 
                'message' => 'メールアドレスが一致していません'
            ), 
            array(
                'rule' => 'NotExistEmailCheck', 
                'message' => 'このメールアドレスは登録されていません'
            ), 

        ),
        'email_confirm' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'メールアドレス(確認)を入力してください'
            ), 

        ),

        'password' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'パスワードを入力してください'
            ), 
            array(
                'rule' => array('minLength', 8), 
                'message' => 'パスワードは8文字以上入力してください', 
            ),
            array(
                'rule' => 'passwordConfirm', 
                'message' => 'パスワードが一致していません'
            ), 
        ),
        'password_confirm' => array(
            array(
				'rule' => array('notBlank'),
                'message' => 'パスワード(確認)を入力してください'
            ), 
        ),
	);
    public $new_pwd_validate = array(

        'password' => array(
            array(
                'rule' => array('notBlank'),
                'message' => 'パスワードを入力してください'
            ), 
            array(
                'rule' => array('minLength', 8), 
                'message' => 'パスワードは8文字以上入力してください', 
            ),
            array(
                'rule' => 'passwordConfirm', 
                'message' => 'パスワードが一致していません'
            ), 
        ),
        'password_confirm' => array(
            array(
                'rule' => array('notBlank'),
                'message' => 'パスワード(確認)を入力してください'
            ), 
        ),
    );
    public $reset_pwd_comp_mail_validate = array(

        'password' => array(
            array(
                'rule' => array('notBlank'),
                'message' => 'パスワードを入力してください'
            ), 
            array(
                'rule' => array('minLength', 8), 
                'message' => 'パスワードは8文字以上入力してください', 
            ),
        ),
    );




	public function DuplicateEmailCheck(){
		$query = array('conditions' => array('User.email' => $this->data['User']['email'],'User.status' => 1));
		$num = $this->find('count',$query);
		if($num > 0){
            return false;	//登録済み		
		} else{
            return true;	//未登録	
		}
	}

    public function passwordConfirm($check){
        //２つのパスワードフィールドが一致する事を確認する
        if($this->data['User']['password'] === $this->data['User']['password_confirm']){
            return true;
        }else{
            return false;
        }

    }

    public function emailConfirm($check){
        //２つのパスワードフィールドが一致する事を確認する
        if($this->data['User']['email'] === $this->data['User']['email_confirm']){
            return true;
        }else{
            return false;
        }

    }

    public function activationHash() {
        // ユーザIDの有無確認
        
        if (!isset($this->id)) {
            return false;
        }
        // 更新日時をハッシュ化
        // return Security::hash( $user_id['User']['updated'], 'md5', true);
        return Security::hash( $this->field('updated'), 'md5', true);
    }
    public function getActivationHash($id) {
        // ユーザIDの有無確認
        $query = array('conditions' => array('User.id' => $id));
        $user_id = $this->find('first',$query);
        if (!isset($user_id['User']['id'])) {
        // if (!isset($this->id)) {
            return false;
        }
        // 更新日時をハッシュ化
        return Security::hash( $user_id['User']['updated'], 'md5', true);
        // return Security::hash( $this->field('updated'), 'md5', true);
    }


	//メールアドレスが登録されていない、またはメールアドレスのstatusが１ではない場合、エラーを出す
	public function NotExistEmailCheck(){
		$query = array('conditions' => array('User.email' => $this->data['User']['email'],'User.status' => 1));
		$num = $this->find('count',$query);
		if($num > 0){
            return true;	//未登録
		} else{
            return false;	//登録済み
		}
	}

	public function beforeSave($options = array()) {
	    if (isset($this->data[$this->alias]['password'])) {
	        $passwordHasher = new BlowfishPasswordHasher();
	        $this->data[$this->alias]['password'] = $passwordHasher->hash(
	            $this->data[$this->alias]['password']
	        );
	    }
	    return true;
	}


}
