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


/**
 * 新規会員テーブル関連
 *
 * @package     Onedepo.Db.Member.Member
 * @author      FUCO Tominaga
 * @access      public
 */
class Onedepo_Db_Member_Moremember
{
    var $dbaccess;

    function get_cnt($MemberCd)
    {
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);
        
        $params = array($MemberCd);
        $sql = "select UpdCnt from t_member_basic_attr where MemberCd=?;";
        
        $res = $db->getone($sql, $params);
        if(DB::isError($res) || !$res)
        {
            $this->dbaccess->doClose($db);
            return false;
        }
        else
        {
            $this->dbaccess->doClose($db);
            return $res;
        }
    }

    function getBasicAttr($MemberCd)
    {
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);
        
        $params = array($MemberCd);
        
        $data = $db->getRow("SELECT * FROM t_member_basic_attr WHERE membercd=?;",$params);
        if (DB::isError($data)) {
            die($data->getMessage());
        }
        
        $this->dbaccess->doClose($db);
        return $data;
    }
    
    function getGenreMember($MemberCd)
    {
        $log =& LogFactory::getLog();
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);
        
        $checkarr = array($MemberCd);
        $check = $db->getAll("select * from t_member_basic_attr where delflg=false and membercd=?;",$checkarr);
        if (count($check) <= 0) {
		    $null = "";
		    $this->dbaccess->doClose($db);
		    return $null;
		}
		
		$params = array($MemberCd);
		$data = $db->getAll("SELECT genrecd FROM t_genre_member WHERE membercd=? and delflg=false;",$params);
        if (DB::isError($data)) {
            die($data->getMessage());
        }
        
        
		$temparray = array();
		foreach($data as $row) {
		    $tail = $row['genrecd'];
		    array_push($temparray,$tail);
		}
		
		return $temparray;
		
		/*
		//頭から順にペケがついてるジャンルのコードから10000を引いたものが入っていくex:[0]=1[1]=3[2]=4[3]=6
		//よって今度は[0]=1[1]=0[2]=3[3]=4[4]=0[5]=6というように配列の位置と入る数字が一致するようにする
		//こうすると全ジャンルについてペケがあるか否かの配列ができる…はず
		$genrecnt = $db->getOne("select count(*) from t_genre where delflg=false;");
		if (DB::isError($genrecnt)) {
            die($genrecnt->getMessage());
        }
		$tempcnt  = count($temparray);
		$retarray = array();
		for($i=0;$i<$genrecnt;$i++) {
		    $pushnum    = 0;
		    $checkvalue = $i + 1;
		    for($j=0;$j<$tempcnt;$j++){
		        //チェックされているジャンル配列の中に
		        //ジャンル全体で見た場合の現在位置のものが含まれているか
		        if ($temparray[$j] == $checkvalue) {
		            //含まれていたのでその値を配列に入れる
		            $pushnum = $checkvalue;
		        }
		    }
		    //配列にpush
		    array_push($retarray,$pushnum);
		}
		$this->dbaccess->doClose($db);
        return $retarray;
		*/
    }
    
    // ユーザの好むジャンルコード取得
    function getGenrecdForMembercd($membercd)
    {
        $log =& LogFactory::getLog();
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);
        
        $params = array($membercd);
        $data = $db->getAll("SELECT genrecd FROM t_genre_member WHERE membercd=? and delflg=false;",$params);
        if (DB::isError($data)) {
            die($data->getMessage());
        }
        return $data;
    }
    
    
    function update($MemberCd, $date)
    {
        $ret = true;
        $log =& LogFactory::getLog();
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);

        $params = array($date->nickname,
                        $date->select_year."-".$date->select_month."-".$date->select_day,
                        $date->introduce_myself,
                        date("Y-m-d H:i:s"),
                        $_SERVER['REMOTE_ADDR'],
                        ($this->get_cnt($MemberCd) + 1),
                        $MemberCd);
        $sql = "update t_member_basic_attr set " .
               "NickNm=?, BirthDate=?, Selfintro=?, UpdDate=?, UpdUsrNm='test', UpdPcNm=?, UpdCnt=? where MemberCd=?;";

        $res = $db->query($sql, $params);
        if (DB::isError($res) || !$res) {
            $log->trace("update rollback", "Onedepo_Db_Member_Moremember#update");

            $db->rollback();
            $ret = false;
        }
        $log->trace("commit", "Onedepo_Db_Member_Moremember#update");
        $db->commit();
        $this->dbaccess->doClose($db);
        return $ret;
    }
    
    function updateGenreMember($category, $id)
    {
        //対応するユーザidの行をいったん全部削除し、
        //新たに選択されたカテゴリ分だけ挿入する。
        $ret = true;
        $log =& LogFactory::getLog();
        $db = $this->dbaccess->doConnect();
        $db->setFetchMode(DB_FETCHMODE_ASSOC);

        $checkarr = array($id);
        $check = $db->getAll("select * from t_member_basic_attr where delflg=false and membercd=?;",$checkarr);
        if (count($check) <= 0) {
		    $ret = false;
		    $this->dbaccess->doClose($db);
		    return $ret;
		}

        $delarr = array($id);
        $del   = $db->query("delete from t_genre_member where membercd=?;",$delarr);
        if (DB::isError($del) || !$del) {
            $log->trace("delete rollback", "Onedepo_Db_Member_Moremember#update");

            $db->rollback();
            $ret = false;
            $this->dbaccess->doClose($db);
            return $ret;
        }
        
        //配列が飛び飛びになっているのでarray_keysでキーの値の配列を作る
        $catkeys   = array_keys($category);
        $looplimit = count($catkeys) - 1;
        //配列は0から始まるので-1する
        for($i = 0; $i <= $looplimit; $i++) {
            $j      = $catkeys[$i];
            $genre  = $category[$j];
            $params = array($genre,$id,FALSE,date("Y-m-d H:i:s"),"",$_SERVER['REMOTE_ADDR'],0);
            $res    = $db->query("insert into t_genre_member(" . 
                                 "genrecd, membercd, delflg, adddate, updusrnm, updpcnm, updcnt)" . 
                                 "values(?,?,?,?,?,?,?);",$params);
                                 if (DB::isError($res) || !$res) {
                                     $log->trace("insert rollback", "Onedepo_Db_Member_Moremember#update");

                                     $db->rollback();
                                     $ret = false;
                                     $this->dbaccess->doClose($db);
                                     return $ret;
                                 }
        }
        
        $log->trace("commit", "Onedepo_Db_Member_Moremember#update");
        $db->commit();
        $this->dbaccess->doClose($db);
        return $ret;
    }
}
?>
