<?php
include_once('objectPage.php');
class ctl_member extends objectPage {

    var $workground = 'member';
    var $object = 'member/member';
    var $finder_action_tpl = 'member/finder_action.html'; //默认的动作html模板,可以为null
    var $finder_filter_tpl = 'member/finder_filter.html'; //默认的过滤器html,可以为null
    var $finder_default_cols = 'uname,member_lv_id,name,sex,email,regtime,point,mobile,arearefer_id,remark,remark_type,area';

    function index(){
        $oLev = &$this->system->loadModel("member/level");
        $this->pagedata['member_lv'] = $oLev->getMLevel();
        $messenger = &$this->system->loadModel('system/messenger');
        $this->pagedata['messenger'] = $messenger->getList();
        parent::index();
    }


    function _detail($nMId){

        $oMsg = &$this->system->loadModel("resources/msgbox");
        $oComm= &$this->system->loadModel("comment/comment");
        $oOrder = &$this->system->loadModel("trading/order");
        $messagenum = $oMsg->getTotalMsg($nMId);
        $discussnum = $oComm->getTotalNum($nMId,'discuss');
        $asknum = $oComm->getTotalNum($nMId,'ask');

        return array(
            'show_detail'=>array('label'=>__('会员信息'),'tpl'=>'member/member_items.html'),
            'detailEdit'=>array('label'=>__('编辑会员'),'tpl'=>'member/sub_edit.html'),
            'detailOrders'=>array('label'=>__('订单'),'tpl'=>'member/sub_orders.html'),
            'showModifyPoint'=>array('label'=>__('积分'),'tpl'=>'member/modify_point.html'),
            'showExperience'=>array('label'=>__('经验值'),'tpl'=>'member/modify_experience.html'),
            'showPointHistory'=>array('label'=>__('积分历史'),'tpl'=>'member/sub_point_history.html'),
            'advance'=>array('label'=>__('预存款'),'tpl'=>'member/advance_list.html'),
            'detailMsg'=>array('label'=>__('信件(').$messagenum.')','tpl'=>'member/sub_message.html'),
            'member_ask'=>array('label'=>__('咨询(').$asknum.')','tpl'=>'member/sub_review.html'),
            'member_feedback'=>array('label'=>__('评论(').$discussnum.')','tpl'=>'member/sub_discuss.html'),
            'Remark'=>array('label'=>__('会员备注'),'tpl'=>'member/remark.html'),
            
            );
    }

    function show_detail($nMId) {
        $memattr = &$this->system->loadModel("member/memberattr");
        $oMem = &$this->system->loadModel("member/member");

        $tmpMem = $oMem->getBasicInfoById($nMId);
        if ($tmpMem){
            foreach($tmpMem as $key => $val){
                if ($key == "remark"){
                    $tmpMem[$key]=str_replace("\n","<br>",$val);
                }
            }
        }
        //取自定义注册项
        $attr = $memattr->getCustomValueById($nMId);
        $memberattrvalue = $oMem->getMemberAttrvalue($nMId);
 
        $arrt_count = count($attr);
        $arrtv_count = count($memberattrvalue);
        for($i=0;$i<$arrt_count;$i++){
            for($j=0;$j<$arrtv_count;$j++){
                if($attr[$i]['attr_id'] == $memberattrvalue[$j]['attr_id']){         
                       if($attr[$i]['attr_type'] =='cal'){
                          $attr[$i]['value'] = date('Y-m-d',$memberattrvalue[$j]['value']);
                       }else{
                          $attr[$i]['value'] = $memberattrvalue[$j]['value'];
                       }
                       if($attr[$i]['attr_type'] =='checkbox'){
                            $date = $oMem->getattrvalue($nMId,$attr[$i]['attr_id']);
                                $attr[$i]['value'] = '';
                            foreach($date as $k => $v){      
                                $attr[$i]['value'] .=  $date[$k]['value'].';';
                            }
                       }
                }
            }
        }
        $this->pagedata['custom'] = $attr;

        $this->pagedata['mem'] = $tmpMem;
        $this->pagedata['ordernum'] = 4;//$oOrder->getOrderNumbyMemberId($nMId);
        $this->pagedata['member_id'] = $nMId;
    }

    function showModifyPoint($nMId) {
        $oMemberPoint = &$this->system->loadModel('trading/memberPoint');
        $this->pagedata['point'] = $oMemberPoint->getMemberPoint($nMId);
        $this->pagedata['member_id'] = $nMId;
    }
    function showExperience($nMId){
        $oMemberExp = &$this->system->loadModel('trading/memberExperience');
        $this->pagedata['experience'] = $oMemberExp->getMemberExperience($nMId);
        $this->pagedata['member_id'] = $nMId;
    }
    function modifyPoint() {
        $this->begin('index.php?ctl=member/member&act=detail&p[0]='.$_POST['member_id'].'&p[1]=showModifyPoint');
        if ($_POST['modify_point']){
            if ($_POST['member_id'] > 0) {
                $oMemberPoint = &$this->system->loadModel('trading/memberPoint');
                $this->end($oMemberPoint->chgPoint($_POST['member_id'], $_POST['modify_point'], 'operator_adjust', $this->system->op_id), __('修改成功！'));
            }else{
                $this->end(false, __('会员ID参数丢失'));
            }
        }else{
            $this->end(false, __('输入积分无效'));
        }

    }
    function modifyExperience() {
            $this->begin('index.php?ctl=member/member&act=detail&p[0]='.$_POST['member_id'].'&p[1]=showExperience');
            if ($_POST['modify_experience']){
                if ($_POST['member_id'] > 0) {
                    $oMemberExp = &$this->system->loadModel('trading/memberExperience');
                    $this->end($oMemberExp->chgExperience($_POST['member_id'], $_POST['modify_experience'], 'operator_adjust', $this->system->op_id), __('修改成功！'));
                }else{
                    $this->end(false, __('会员ID参数丢失'));
                }
            }else{
                $this->end(false, __('输入经验值无效'));
            }

        }
    function modifyDeposit() {
        $this->begin('index.php?ctl=member/member&act=detail&p[0]='.$_POST['member_id'].'&p[1]=advance');
        if ($_POST['modify_advance']){
            if ($_POST['member_id'] > 0) {
                $oAdv = &$this->system->loadModel('member/advance');
                if($_POST['modify_advance'] > 0){
                    $this->end($oAdv->add($_POST['member_id'],$_POST['modify_advance'],$_POST['modify_memo'],__('修改成功！'), '', '' ,'' ,$this->system->op_name.__('代充值')));
                }else{
                    $this->end($oAdv->deduct($_POST['member_id'],abs($_POST['modify_advance']),$_POST['modify_memo'],__('修改成功！'), '', '' ,'' ,$this->system->op_name.__('代扣费')));
                }
            }else{
                $this->end(false, __('会员ID参数丢失'));
            }
        }else{
            $this->end(false, __('输入预存款金额无效'));
        }
    }

    function showPointHistory($nMId) {
        $oPointHistory = &$this->system->loadModel('trading/pointHistory');
        $this->pagedata['historys'] = $oPointHistory->getPointHistoryList($nMId);
    }
//review
  function detailExtInfo($nMId){
        $oMem = &$this->system->loadModel("member/member");
        $aItems = $oMem->getExtInfoById($nMId);
        $this->pagedata['mem'] = $aItems;
        $this->display('member/sub_ext_info.html');
    }

    function batchEdit(){
        $filter = $_POST;
        $ret = $this->model->getColumns($filter);
        $to_cfg = array(
                'member_lv_id'=>$ret['member_lv_id'],
                'point'=>$ret['point'],
            );
        $rowCount = $this->model->count($filter);
        $this->pagedata['editInfo'] = array('cols'=>$to_cfg,'count'=>$rowCount);
        $this->pagedata['filter'] = htmlspecialchars(serialize($_POST));
        $this->pagedata['finder'] = $_GET['finder'];
        $this->display('member/batch_edit.html');
    }

    function saveBatchEdit(){
        
        $filter = unserialize($_POST['filter']);
        $set = array();
        foreach($_POST['enable'] as $k=>$v){

            if($k=='member_lv_id' && ($_POST['set'][$k]=="")){
                $this->splash('failed','index.php?ctl=member/member',__('保存失败：您还没选择会员等级'));
                exit;
            }
        if($k=='point' && ($_POST['set'][$k] < 0 || !is_numeric($_POST['set'][$k]))){
                $this->splash('failed','index.php?ctl=member/member',__('保存失败：积分必须是大于等于0的数字'));
                exit;
            }
            $set[$k]= $this->model->columnValue($k,$_POST['set'][$k]);
        }
        ini_set('track_errors','1');
        restore_error_handler();
        if(@$this->model->update($set,$filter)){
            echo 'ok';
        }else{
            echo $GLOBALS['php_errormsg'];
        }
    }

    function detailEdit($nMId,$output=0){
        $oMem = &$this->system->loadModel("member/member");
        $aItems = $oMem->getBasicInfoById($nMId);
        if($aItems){
            foreach($aItems as $key=>$val){
                switch($key){
                    case 'score_rate':
                        $aItems[$key]=dateFormat($val);
                    break;
                    default:
                    break;
                }
            }
        }
        $this->pagedata['member'] = $aItems;
        $this->pagedata['member']['birthday'] = $aItems['b_year'].'-'.$aItems['b_month'].'-'.$aItems['b_day'];
        $aLevel = array();
        $oLev = &$this->system->loadModel("member/level");
        foreach($oLev->getMLevel() as $aItems){
            $aLevel[$aItems['member_lv_id']] = $aItems['name'];
        }
        $this->pagedata['member']['level'] = $aLevel;
        $Memattr = &$this->system->loadModel("member/memberattr");
        $filter['attr_show'] = 'true';
        $attr = $Memattr->getList('*',$filter,0,-1,array('attr_order','asc'));
        $memberinfo = $oMem->getMemberByid($nMId);
        $memberattrvalue = $oMem->getMemberAttrvalue($nMId);
        $attr_count = count($attr);

        for($i=0;$i<$attr_count;$i++){
            if($attr[$i]['attr_type'] =='checkbox'||$attr[$i]['attr_type'] =='select'){
                $attr[$i]['attr_option'] = unserialize($attr[$i]['attr_option']);
            }
            if($attr[$i]['attr_group'] == 'defalut'){
                switch($attr[$i]['attr_type']){
                    case 'area':
                    $attr[$i]['value'] = $memberinfo[0]['area'];
                    $regionId=substr($memberinfo[0]['area'],strrpos($memberinfo[0]['area'],":")+1);
                    $dArea=&$this->system->loadModel('trading/deliveryarea');
                    $row=$dArea->getById($regionId);
                    if ($row)
                        $attr[$i]['rStatus']=true;
                    break;
                    case 'name':
                    $attr[$i]['value'] = $memberinfo[0]['name'];
                    break;
                    case 'mobile':
                    $attr[$i]['value'] = $memberinfo[0]['mobile'];
                    break;
                    case 'tel':
                    $attr[$i]['value'] = $memberinfo[0]['tel'];
                    break;
                    case 'zip':
                    $attr[$i]['value'] = $memberinfo[0]['zip'];
                    break;
                    case 'addr':
                    $attr[$i]['value'] = $memberinfo[0]['addr'];
                    break;
                    case 'sex':
                    $attr[$i]['value'] = $memberinfo[0]['sex'];
                    break;
                    case 'date':
                    $attr[$i]['value'] = $memberinfo[0]['b_year'].'-'.$memberinfo[0]['b_month'].'-'.$memberinfo[0]['b_day'];
                    if($attr[$i]['value']=='--'){
                        $attr[$i]['value']='';
                    }
                    break;
                    case 'pw_answer':
                    $attr[$i]['value'] = $memberinfo[0]['pw_answer'];
                    break;
                    case 'pw_question':
                    $attr[$i]['value'] = $memberinfo[0]['pw_question'];
                    break;
                }
            }else{
                $memvalue_count = count($memberattrvalue);
                for($j=0;$j<$memvalue_count;$j++){
                    if($attr[$i]['attr_id'] == $memberattrvalue[$j]['attr_id']){
                        $attr[$i]['value'] = $memberattrvalue[$j]['value'];
                           if($attr[$i]['attr_type'] =='cal'){
                                $attr[$i]['value'] =  $memberattrvalue[$j]['value'];
                           }
                           if($attr[$i]['attr_type'] =='checkbox'){
                                $date = $oMem->getattrvalue($nMId,$attr[$i]['attr_id']);
                                $attr[$i]['value'] =  $date;
                           }
                      }

                }
            }
        }
        $this->pagedata['tree'] = $attr;
        if($output==1){
            $this->pagedata['title'] = $this->pagedata['member']['uname'];
            $this->pagedata['nosubmit']= true;
            $this->singlepage('member/member_edit.html');
        }
    }

    function detailMsg($nMId){
        $oMsg = &$this->system->loadModel('resources/msgbox');
        $aMsg = $oMsg->getMsgListByMemId($nMId);
        $this->pagedata['itemss'] = $aMsg;
        $this->pagedata['member_id'] = $nMId;
    }

    function member_ask($nMId){
        $this->_detailComm($nMId, 'ask');
    }

    function member_feedback($nMId){
        $this->_detailComm($nMId, 'discuss');
    }

    function _detailComm($nMId, $item){
        $oComm = &$this->system->loadModel('comment/comment');
        $aComm = $oComm->getCommListByMemId($nMId, $item);
        if($item=='ask'){
            $this->pagedata['ask_items'] = $aComm;
        }else{
            $this->pagedata['discuss'] = $aComm;
        }
        $this->pagedata['member_id'] = $nMId;
    }

    function detailOrders($nMId){
        $oOrder = &$this->system->loadModel("trading/order");
        $aOrder = $oOrder->getOrderListByMemberId($nMId);
        $this->pagedata['items'] = $aOrder;
        $this->pagedata['member_id'] = $nMId;
    }

    function advance($nMId){
        $oAdv = &$this->system->loadModel('member/advance');
        $advList = $oAdv->getFrontAdvList($nMId,0,10);

        $this->pagedata['itemstotal'] = $advList['total'];
        $this->pagedata['items_adv'] = $advList['data'];
        $oMem = &$this->system->loadModel("member/member");
        $this->pagedata['member'] = $oMem->getBasicInfoById($nMId);
    }

    function save(){
        $oMem = &$this->system->loadModel("member/member");
        $this->begin('index.php?ctl=member/member&act=detail&p[0]='.$_POST['member_id'].'&p[1]=detailEdit');
        if($_POST['member_id'] > 0){
            if($_POST['birthday']){
                $aTmp = explode('-', $_POST['birthday']);
                $_POST['b_year'] = $aTmp[0];
                $_POST['b_month'] = $aTmp[1];
                $_POST['b_day'] = $aTmp[2];
            }
            $allkeys = array_keys($_POST);
            $count = 0;
            $keys_count = count($allkeys);
            for($i=0;$i<$keys_count;$i++){
                if(is_numeric($allkeys[$i])){
                    if(!is_array($_POST[$allkeys[$i]])){
                        $memattr[$count]['member_id'] = $_POST['member_id'];
                        $memattr[$count]['attr_id'] = $allkeys[$i];
                        $memattr[$count]['value'] = htmlspecialchars($_POST[$allkeys[$i]]);
                        $oMem->updateMemAttr($_POST['member_id'],$allkeys[$i],$memattr[$count]);
                        $count++;
                    }else{
                        $tmp = $_POST[$allkeys[$i]];
                        $oMem->deleteMattrvalues($allkeys[$i],$_POST['member_id']);
                        $tmp_countn = count($tmp);
                        for($j=0;$j<$tmp_countn;$j++){
                            $tmpdate['member_id'] = $_POST['member_id'];
                            $tmpdate['attr_id'] = $allkeys[$i];
                            $tmpdate['value'] = htmlspecialchars($tmp[$j]);
                            $oMem->saveMemAttr($tmpdate);
                        }
                    }
                }
            }
        $this->end($oMem->save($_POST['member_id'],$_POST), __('修改成功！'));
        }else{
            $this->end(false, __('会员信息丢失，保存失败！'));
        }
    }


    function showNew(){
        $oLev = &$this->system->loadModel("member/level");
        $this->pagedata['memLv'] = $oLev->getMLevel();
        $this->pagedata['defLv'] = $oLev->getDefauleLv();

        $mematt = &$this->system->loadModel('member/memberattr');
        $filter['attr_show'] = 'true';
        $tmpdate =$mematt->getList('*',$filter,0,-1,array('attr_order','asc'));
        $t_count = count($tmpdate);
        for($i=0;$i<$t_count;$i++){
            if($tmpdate[$i]['attr_type'] == 'select'||$tmpdate[$i]['attr_type'] == 'checkbox'){
                $tmpdate[$i]['attr_option'] = unserialize($tmpdate[$i]['attr_option']);
            }
        }
        $this->pagedata['tree'] = $tmpdate;
        $this->path[] = array('text'=>__('添加会员'));
        $this->singlepage('member/member_new.html');
    }

    function addMemByAdmin(){
        $this->begin('index.php?ctl=member/member&act=index');
        $oMem = &$this->system->loadModel("member/member");
        $_POST['uname'] = trim(strtolower($_POST['uname']));
        $_POST['sex'] = intval($_POST['sex']);
        if($_POST['birthday']){
                $_POST['birthday']=date("Y-m-d",$_POST['birthday']);
                $aTmp = explode('-', $_POST['birthday']);
                $_POST['b_year'] = $aTmp[0];
                $_POST['b_month'] = $aTmp[1];
                $_POST['b_day'] = $aTmp[2];
        }
        $id = $oMem->addMemberByAdmin($_POST,$message);
        if($id!=''&&$id){
            $allkeys = array_keys($_POST);
            $count = 0;
            $keys_co = count($allkeys);
            for($i=0;$i<$keys_co;$i++){
                if(is_numeric($allkeys[$i])){
                    if(is_array($_POST[$allkeys[$i]])){
                        $ar = $_POST[$allkeys[$i]];
                        $ar_count = count($ar);
                        for($j=0;$j<$ar_count;$j++){
                            $arra[0]['member_id'] = $id;
                            $arra[0]['attr_id'] = $allkeys[$i];
                            $arra[0]['value'] = htmlspecialchars($ar[$j]);
                            $oMem->saveMemAttr($arra[0]);
                        }
                    }else{
                        $memattr['member_id'] = $id;
                        $memattr['attr_id'] = $allkeys[$i];
                        $memattr['value'] = htmlspecialchars($_POST[$allkeys[$i]]);
                        $oMem->saveMemAttr($memattr);
                    }
                }
            }
            $this->end(true, __('添加成功！'));
        }else{
            $this->end(false, $message);
        }
    }
    function Remark($nMId){
        $oMem=&$this->system->loadModel("member/member");
        $tmpdata = $oMem->getRemark($nMId);
        $this->pagedata['member_id']=$nMId;
        $this->pagedata['remark'] = $tmpdata['remark'];
        $this->pagedata['remark_type'] = $tmpdata['remark_type'];
    }
    function addRemark($nMId){
        //$this->begin('index.php?ctl=member/member&act=index');
        $this->begin('index.php?ctl=member/member&act=detail&p[0]='.$nMId.'&p[1]=Remark');
        $oMem=&$this->system->loadModel("member/member");
        $this->end($oMem->addRemark($nMId,$_POST),__('添加成功！'));
    }
    function updatePassword($nMId,$email,$uname,$name){
        $this->pagedata['member_id'] = $nMId;
        $this->pagedata['email'] = $email;
        $this->pagedata['uname'] = $uname;
        $this->pagedata['name'] = $name;
        $this->display('member/sub_password.html');
    }
    function toUpdatePassword($nMId,$email,$uname,$name){
        $name = $_POST['name'];
        $errinfo = "";
        if (strlen($_POST['newPassword'])<4)
            $errinfo = __("新密码不能小于4位");
        elseif (strlen($_POST['confirmPassword'])<4)
            $errinfo = __("确认密码不能小于4位");
        elseif ($_POST['newPassword']<>$_POST['confirmPassword'])
            $errinfo = __("您两次输入的密码不一样，请重新输入。");
        if(!empty($errinfo)){
            $this->splash('failed','index.php?ctl=member/member&act=updatePassword&p[0]='.$nMId.'&p[1]='.$email,__($errinfo));
            exit;
        }
        $oMem = &$this->system->loadModel('member/account');
        if ($oMem->adminUpdateMemberPassword($nMId,array('password'=>md5(trim($_POST['newPassword'])),'passwd'=>$_POST['newPassword'],'email'=>$email,'uname'=>$uname,'name'=>$name),$_POST['sendemail'])){
            echo "<div class='success'>密码修改成功!</div><script>$('editMemberPassword-'+$nMId).retrieve('dialog').close.delay(300,$('editMemberPassword-'+$nMId).retrieve('dialog'))</script>";
        }
        else{
            $this->splash('failed','index.php?ctl=member/member&act=updatePassword&p[0]='.$nMId.'&p[1]='.$email,__('密码更新操作失败！'));
        }
    }

    function recycle(){
        $memberHasAdvanceNums = $this->model->checkMemberHasAdvance($_POST);
        $_POST['minadvance'] = 0;
        $_POST['maxadvance'] = 0.001;
        $returnStr = '';
        if( $memberHasAdvanceNums > 0 ){
            $returnStr = $memberHasAdvanceNums.__('个会员预付款余额不为零，无法删除。请先扣除预付款，再删除会员。');
        }else{
            $rs = $this->model->recycle($_POST);
            if($rs)
                $returnStr = __('选定记录删入回收站');
            else
                $returnStr = __('选定记录无法删入回收站');
        }
        echo $returnStr;
    }

    function delete() {
        $memberHasAdvanceNums = $this->model->checkMemberHasAdvance($_POST,'recycle');
        $_POST['minadvance'] = 0;
        $_POST['maxadvance'] = 0.001;
        $rs = $this->model->delete($_POST);

        $returnStr = '';
        if( $memberHasAdvanceNums > 0 ){
            $returnStr = $memberHasAdvanceNums.__('个会员预付款余额不为零，无法删除。请先扣除预付款，再删除会员。');
        }else{
            if($rs){
                $returnStr = __('选定记录已删除成功!');
            }else{
                $returnStr = __('选定记录无法删除!');
            }
        }
        echo $returnStr;
    }

    function orderInfo($order_id){
        $this->pagedata['order_id'] = $order_id;
        $this->display('member/member_ordertab.html');
    }
}
?>
