<?php
/**
 * @copyright ONE/DEPO Project
 * @license   PHP License 3.01 <http://www.php.net/license/3_01.txt>
 */


/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * 会員登録・変更確認
 *
 * @package     Customer.Mypage.Member.Insert.Check
 * @author      netnee <mail@example.com>
 * @access      public
 */
class Customer_Mypage_Member_Insert_Check
{
    var $ba;                //backAction ログイン前に閲覧していたページのID(?) 
    
    var $title;
    
    var $c_member;
    var $c_secquestion;
    var $c_genre;          //ジャンル情報用ＤＢクラス
    
    var $questionlist;
    var $genrelist;        //foreachで並べるためのジャンル名の配列
    
    var $yearloopcnt;      //年を選択するリストのsectionループ回数
    
    var $questionname;
    var $newmember;        //新規会員登録情報
    var $newmember_serial; //新規会員登録情報のシリアライズ化情報
    var $pass_number;      //パスワードの文字数
    
    var $actionChain;
    
    /**
     * execute
     *
     * @access  public
     */
    function execute()
    {
        $log =& LogFactory::getLog();
        $log->debug("Customer_Mypage_Member_Insert_Checkが実行されました", "Customer_Mypage_Member_Insert_Check#execute");
        
        $mobile = &Net_UserAgent_Mobile::isMobile();
        $re_str = ($mobile) ? "mobile_" : "";
        
        $errorList =& $this->actionChain->getCurErrorList();
        
        $check = false;
        
        //秘密の質問の内容出し用
        if($this->newmember->question != ""){
            $namearray = $this->c_secquestion->selectKey($this->newmember->question);
            $this->questionname = $namearray['secquestionnm'];
        }
        
        // ループ回数の決定 下限が1900 上限が「今年」
        $this->yearloopcnt = date('Y') - 1900 + 1;
        
        // ジャンル情報の取得
        $this->genrelist   = $this->c_genre->selectAll();
        
        if($this->newmember->mailaddress_user == "") $check = true;
        if($this->newmember->mailaddress_domain == "") $check = true;
        if($this->newmember->lastname == "") $check = true;
        if($this->newmember->lastname_kana == "") $check = true;
        if($this->newmember->frontname == "") $check = true;
        if($this->newmember->frontname_kana == "") $check = true;
        
        if($this->newmember->select_year == "") $check = true;
        if($this->newmember->select_month == "") $check = true;
        if($this->newmember->select_day == "") $check = true;
        if($this->newmember->sex == "") $check = true;
        
        if($this->newmember->answer == "") $check = true;
        if($this->newmember->question == "") $check = true;
        //MemberCdが無い場合 つまり、新規登録の場合はパスワードとパスワード確認の未入力は許さない
        if(!$this->newmember->memberCd){
            if($this->newmember->password == "") $check = true;
            if($this->newmember->pass_confirm == "") $check = true;
        }
        if($this->newmember->password != $this->newmember->pass_confirm) $check = true;
        
        // 文字数チェック
        if ($this->newmember->password != ""){  // 最低文字数指定があるので入力がある時のみチェック
            if(mb_strwidth($this->newmember->password) < 4) $check = true;
            if(mb_strwidth($this->newmember->password) > 20) $check = true;
        }
        if(mb_strwidth($this->newmember->answer) > 40) $check = true;
        if(mb_strwidth($this->newmember->nickname) > 40) $check = true;
        
        // メールアドレスマッチ
        if ($this->newmember->mailaddress_user != ""){      // 入力時のみチェック
            if(preg_match("/^[0-9a-z.\-_]+$/", $this->newmember->mailaddress_user) < 1) $check = true;
        }
        if ($this->newmember->mailaddress_domain != ""){    // 入力時のみチェック
            if(preg_match("/^[0-9a-z.\-_]+$/", $this->newmember->mailaddress_domain) < 1) $check = true;
        }
        
        // メール区分未選択時は拒否側をセット
        if($this->newmember->mail_accept == "") {
            $this->newmember->mail_accept = ($mobile) ? 2 : 0;
        }
        
        
        if($check){
            if($this->newmember->mailaddress_user == "")  $errorList -> add(1, "メールアドレス（前）を入力してください。");
            if($this->newmember->mailaddress_domain == "")  $errorList -> add(1, "メールアドレス（後）を入力してください。");
            if($this->newmember->lastname == "")  $errorList -> add(1, "姓を入力してください。");
            if($this->newmember->lastname_kana == "")  $errorList -> add(1, "姓のかなを入力してください。");
            if($this->newmember->frontname == "")  $errorList -> add(1, "名を入力してください。");
            if($this->newmember->frontname_kana == "")  $errorList -> add(1, "名のかなを入力してください。");
            if($this->newmember->nickname == "")  $errorList -> add(1, "ニックネームを入力してください。");
            if($this->newmember->question == "")  $errorList -> add(1, "秘密の質問を選択してください。");
            if($this->newmember->answer == "")  $errorList -> add(1, "秘密の質問に対する答えを入力してください。");
            if($this->newmember->select_year == "" || $this->newmember->select_month == "" || $this->newmember->select_day == "") $errorList -> add(1, "生年月日を入力してください。");
            if($this->newmember->sex == "") $errorList -> add(1, "性別を選択してください。");
            //MemberCdが無い場合 つまり、新規登録の場合はパスワードとパスワード確認の未入力は許さない
            if(!$this->newmember->memberCd){
                if($this->newmember->password == "")  $errorList -> add(1, "パスワードを入力してください。");
                if($this->newmember->pass_confirm == "")  $errorList -> add(1, "確認用のパスワードを入力してください。");
            }
            if($this->newmember->password != $this->newmember->pass_confirm) $errorList -> add(1, "パスワードと確認用のパスワードが一致していません。");
            
            // 文字数チェック
            if ($this->newmember->password != ""){  // 最低文字数指定があるので入力がある時のみチェック
                if(mb_strwidth($this->newmember->password) < 4) $errorList -> add(1, "パスワードは4文字以上にしてください。");
                if(mb_strwidth($this->newmember->password) > 20) $errorList -> add(1, "パスワードは20文字以内にしてください。");
            }
            if(mb_strwidth($this->newmember->answer) > 40) $errorList -> add(1, "秘密の質問に対する答えは半角40文字以内、または全角20文字以内にしてください。");
            if(mb_strwidth($this->newmember->nickname) > 40) $errorList -> add(1, "ニックネームは全角20文字以内にしてください。");
            
            // メールアドレスマッチ
            if ($this->newmember->mailaddress_user != ""){      // 入力時のみチェック
                if(preg_match("/^[0-9a-z.\-_]+$/", $this->newmember->mailaddress_user) < 1) $errorList -> add(1, "メールアドレス（前）は半角英数字にしてください。");
            }
            if ($this->newmember->mailaddress_domain != ""){    // 入力時のみチェック
                if(preg_match("/^[0-9a-z.\-_]+$/", $this->newmember->mailaddress_domain) < 1) $errorList -> add(1, "メールアドレス（後）は半角英数字にしてください。");
            }
            
            return $re_str .'input';
        } else {
            if(!$this->newmember->memberCd){
                //メールアドレスがすでに登録されたものであるかどうか
                $mail = $this->newmember->mailaddress_user . "@" . $this->newmember->mailaddress_domain;
                $res  = $this->c_member->checkMailAddr($mail);
                if(!$res) {
                    $errorList -> add(1, "そのメールアドレスは既に登録されています。");
                   return $re_str .'input';
                }
            }
            //パスワードを伏字にするため、パスワードの文字数を取得
            $this -> pass_number = strlen($this->newmember->password);
            return $re_str .'success';   
        }
    }
    
    
    function getSecQuestionData()
    {
        //秘密の質問データをとっておく
        $this->questionlist = $this->c_secquestion->selectAll();
        return $this->questionlist;
    }
    
    function getSecQuestionName()
    {
        $res = $this->questionname;
        return $res;
    }
    
    function getNewmember()
    {
        return $this -> newmember;
    }
    
    function setNewmember_serial($value)
    {
        $value = urldecode($value);
        $this -> newmember_serial = $value;
        $this -> newmember = unserialize($value);
    }
    
    function getNewmember_serial()
    {
        return urlencode(serialize($this->newmember));
    }
    
    function setActionChain(&$value)
    {
        $this -> actionChain =& $value;
    }
    
    function getPass_number()
    {
        return $this -> pass_number;
    }
    
    function getBa()
    {
        if($this -> ba){
            return $this -> ba;
        } else {
            return "general_portal";
        }        
    }
    
    function getGenreList()
    {
        return $this -> genrelist;
    }
    
    function getYearLoopCount()
    {
        return $this -> yearloopcnt;
    }
    
    function getGenreExists($var)
    {
        $genrecd = $var["genrecd"];
        
        foreach($this->newmember->category as $selectGenre){
        
            if($selectGenre == $genrecd) return true;
        }
        
        return false;
        
    }
    
    function getUpdCnt()
    {
        return $this->newmember->updCnt;
    }
    
}
?>
