<?php
/**
* @method 文章栏目的管理
* @author 廖
* @copyright 2017/6/13
*/
class B2cArticle extends B2cBase
{
    /**
    * @method    返回文章状态
    * @author     廖
    * @copyright 2017-07-29
    * @return  [array]  ['wait'=>xxx,...]
    */
    function getArticleStatus()
    {
        $status = [
        	'wait'=>'待审核',
            'fail'=>'审核不通过',
            'pass'=>'审核通过',
            'off'=>'未发布'
        	];
        return $status;
    }

    /**
    * @method 获取所有栏目的信息
    * @param  $FieldArr         [array]  需取字段
    * @param  $where            [string] 条件
    * @author 廖
    * @copyright 2017/6/13
    * @return 
    *     成功：['status'=>true, 'data'=>['cat_id'=>xxx,....,'son'=>['cat_id'=>xxx,....]], 'code'=>'']
          失败：['status'=>false, 'data'=>失败信息, 'code'=>失败代码]
    */
    public function columnSelect($FieldArr=[],$where='') 
    {
        $FieldArr = array_unique(array_merge(['cat_id','cat_name','cat_pcat_id','cat_path'],$FieldArr));
        $res = $this->get('cm_category left join cm_category_tree on cat_id=cat_cat_id',$FieldArr,$where.' order by cat_seq asc',false);
        //一级的所有数组
        if(!empty($res['data']))
        {
            $new_data = array();
            //一级的所有数组
            foreach ($res['data'] as $k => $v)
            {
                if($v['cat_pcat_id'] == 0)
                {
                    $new_data[$v['cat_id']] = $v;
                    unset($res['data'][$k]);
                    continue;
                }
                $res['data'][$k]['paths'] = explode(',', $v['cat_path']);
            }
            //二级的所有数组
            foreach($res['data'] as $k=>$v)
            {
                if(count($v['paths']) == 2)
                {
                    $new_data[$v['paths'][1]]['son'][$v['cat_id']] = $v;
                    unset($res['data'][$k]);
                }
            }
            //三级的所有数组
            foreach($res['data'] as $k=>$v)
            {
                if(count($v['paths']) == 3)
                {
                    $new_data[$v['paths'][1]]['son'][$v['paths'][2]]['son'][$v['cat_id']] = $v;
                    unset($res['data']['paths']);
                }
            }
            return LibFc::ReturnData(true, $new_data);       
        }
        return LibFc::ReturnData(true, $data['data']);
    }

    /**
     *@method 保存文章分类
     *@param  $data['cat_id'=>[['name']=>XXX,...],....] 二维数组
     *@return LibFc::ReturnData(true, true);
     *@author 廖 2017/6/22
    */
    public function saveArtSort($dataArr)
    {
        //事务开启
        $this->B2CDb->begin();
        $table = 'cm_category';
        $table2 = 'cm_category_tree';
        foreach ($dataArr as $key => $value)
        {   
            //更新数据，就是仅仅保存具有ID的数据
            if($key>0)
            {
                $new_data = array(
                    'cat_name'=>$value['name'],
                    'cat_seq'=>(int)$value['seq']+1
                    );
                $Where =sprintf(' and cat_id =%d',$key);
                $this->set($table,$new_data,$Where);
            }
            //新增的数据进行入库
            if($key<0)
            {   
                if($value['pid'] == 0)
                {
                    //此时入库第一级的新子类
                    $new_data = array(
                        'cat_name'=>$value['name'],
                        'cat_seq'=>(int)$value['seq']
                        ); 
                    $data = $this->add($table,$new_data);

					$new_data2 = array(
                        'cat_cat_id'=>$data['data'],
                        'cat_pcat_id'=>'0',
                        'cat_path'=>'0'
                      );

                    $this->add($table2,$new_data2);
                    //往下遍历
                    foreach ($dataArr as $kk=>$vv) 
                    {
                        if($kk<0 && $vv['pid'] == $key)
                        {
                            //此时入库第二级的新子类
                            $new_vv_data = array(
                                'cat_name'=>$vv['name'],
                                'cat_seq'=>(int)$vv['seq']
                                );
                                              
                            $vv_data = $this->add($table,$new_vv_data);
							$new_vv_data2 = array(
                                'cat_cat_id'=>$vv_data['data'],
                                'cat_pcat_id'=>$data['data'],
                                'cat_path'=>'0,'.$data['data']
                            );  

                            $this->add($table2,$new_vv_data2);
                            foreach ($dataArr as $kkk=>$vvv) 
                            {
                                if($kkk<0 && $vvv['pid'] == $kk)
                                {
                                    //此时入库第三级的新子类
                                    $new_vvv_data = array(
                                        'cat_name'=>$vvv['name'],
                                        'cat_seq'=>(int)$vvv['seq']                                   
                                    );
                                                    
                                    $vvv_data = $this->add($table,$new_vvv_data);
									$new_vvv_data2 = array(
                                        'cat_cat_id'=>$vvv_data['data'],
                                        'cat_pcat_id'=>$vv_data['data'],
                                        'cat_path'=>'0,'.$data['data'].','.$vv_data['data']
                                    ); 
                                    $this->add($table2,$new_vvv_data2);
                                }
                            }
                        }
                    }
                }else if($value['pid'] > 0)
                {
                    $new_data = array(
                        'cat_name'=>$value['name'],
                        'cat_seq'=>(int)$value['seq']
                        ); 
                    
                    $data =$this->add($table,$new_data);
					$new_data2 = array(
                        'cat_cat_id'=>$data['data'],
                        'cat_pcat_id'=>$value['pid'],
                        'cat_path'=>$value['path'].','.$value['pid']
                      );
                    $this->add($table2,$new_data2);
                    foreach ($dataArr as $k=>$v) 
                    {
                        if($k<0 && $v['pid'] == $key)
                        {
                          //此时入库第三级的新子类
                          $new_data = array(
                              'cat_name'=>$v['name'],
                              'cat_seq'=>(int)$v['seq']                                   
                              );
                                          
                          $data_id =  $this->add($table,$new_data);
						  $new_data2 = array(
                              'cat_cat_id'=>$data_id['data'],
                              'cat_pcat_id'=>$data['data'],
                              'cat_path'=>$value['path'].','.$value['pid'].','.$data['data']
                           );    
                          $this->add($table2,$new_data2);
                         }
                    }
                }
            }
        }
        //事务结束
        $this->B2CDb->End();
        return LibFc::ReturnData(true, true);
    }

    /**
     * @method    保存新增文章
     * @param     [array]     $dataArr ['title'=>xxx,'catId'=>xxx...]
     * @param     [int]         当前登陆用户的id
     * @author     廖
     * @copyright 2017-07-13
     * @return    LibFc::ReturnData(true, true);      
     */
    public function saveArtNew($uid,$dataArr)
    {
        if(LibFc::Int($uid) && !empty($dataArr['artInfo']))
        {
            $table = 'cm_article';
            $table2 = 'cm_article_category';
            if(LibFc::Int($dataArr['artId']))
            {
                $this->B2CDb->Begin();
                $artArr = array(
                    'art_status'=>$dataArr['status'],
                    'art_title'=>$dataArr['artTitle'],
                    'art_short_des'=>$dataArr['desc'],
                    'art_keyword'=>$dataArr['keyword'],
                    'art_txt'=>$dataArr['artInfo'],
                    'art_seq'=>empty($dataArr['artSeqNum'])?0:$dataArr['artSeqNum'],
                    'art_last_uid'=>$uid,
                    'art_fail_msg'=>$dataArr['status']=='fail'?$dataArr['failMsg']:'',
                    'art_last_time'=>time()
                );
                $res = $this->Set($table,$artArr,' and art_id='.$dataArr['artId']);
                $del = $this->Del($table2,' and arc_art_id='.$dataArr['artId']);
                $artSortId = explode(',',rtrim($dataArr['artSortId'],','));
                if(!empty($artSortId))
                {
                    foreach ($artSortId as $key => $value) 
                    {
                        if(LibFc::Int($value))
                        {
                            $Arr = array(
                                'arc_art_id'=>$dataArr['artId'],
                                'arc_cat_id'=>$value
                            );
                            $this->add($table2,$Arr);
                        }
                    }
                }
                $this->B2CDb->End();
                return LibFc::ReturnData(true, true); 
            }
            else
            {
                $this->B2CDb->Begin();
                $artArr = array(
                    'art_status'=>$dataArr['status'],
                    'art_title'=>$dataArr['artTitle'],
                    'art_short_des'=>$dataArr['desc'],
                    'art_keyword'=>$dataArr['keyword'],
                    'art_txt'=>$dataArr['artInfo'],
                    'art_seq'=>(int)$dataArr['artSeqNum'],
                    'art_add_uid'=>$uid,
                    'art_fail_msg'=>$dataArr['status']=='fail'?$dataArr['failMsg']:'',
                    'art_add_time'=>time(),
                    'art_last_time'=>time()
                );
                $data = $this->add($table,$artArr);
                $artSortId = explode(',',rtrim($dataArr['artSortId'],','));
                if(!empty($artSortId))
                {
                    foreach ($artSortId as $key => $value) 
                    {
                        if(LibFc::Int($value))
                        {
                            $Arr = array(
                                'arc_art_id'=>$data['data'],
                                'arc_cat_id'=>$value
                            );
                            $this->add($table2,$Arr);
                        }
                    }
                }
                $this->B2CDb->End();
                return LibFc::ReturnData(true, true);    
            }
            
        }
        return LibFc::ReturnData(false,'参数不正确');
    }

    /**
     * @method    删除文章
     * @param     [array]     $artIdArr 文章id
     * @author     廖
     * @copyright 2017-07-14
     * @return    删除成功的id$artIdArr('1'=>0909,...)
     */
    public function delArt($artIdArr)
    {
        if(!empty($artIdArr))
        { 
            $artIdArr = is_array($artIdArr)? $artIdArr: [(int) $artIdArr];
            $artIdArr = array_filter($artIdArr,'LibFc::Int');
            if(!empty($artIdArr))
            {   
                $where = sprintf(' and art_id in (%s)',implode(',',$artIdArr));
                $where2 = sprintf(' and arc_art_id in (%s)',implode(',',$artIdArr));
                $this->B2CDb->Begin();
                $re = $this->Del('cm_article',$where);
                $res = $this->Del('cm_article_category',$where2);
                $this->B2CDb->End();
                if($re['status'] && $res['status'])
                {
                    return LibFc::ReturnData(true,$artIdArr);
                }else
                {
                    return LibFc::ReturnData(false,'参数不正确');
                }
            }
        }else
        {   
            return LibFc::ReturnData(false,'参数不正确');
        }
    }

    /**
     * @method    修改文章状态
     * @param     [array]      $dataArr  修改的字段
     * @param     [array]      $artIdArr 要修改的文章id集
     * @author     廖
     * @copyright 2017-07-14
     * @return    操作成功的id$artIdArr('1'=>0909,...)
     */
    public function changeArtSta($dataArr,$artIdArr)
    {
        if(!empty($artIdArr))
        { 
            $artIdArr = is_array($artIdArr)? $artIdArr: [(int) $artIdArr];
            $artIdArr = array_filter($artIdArr,'LibFc::Int');
            if(!empty($artIdArr))
            {  
                $this->Set('cm_article', $dataArr, sprintf(' and art_id in (%s)', implode(',', $artIdArr)));
                return LibFc::ReturnData(true, $artIdArr);
            }
        }
        return LibFc::ReturnData(false,'参数不正确');
    }

    /**
     * @method    获取文章信息
     * @param     [int]     $nowPage  当前页
     * @param     [int]     $perPage  设置每页显示的条数
     * @param     [string]  $order    条件
     * @param     [string]  $order2   其他添加 如日期区间 状态
     * @author     廖
     * @copyright 2017-07-17
     * @return    array(1=>array('art_id'=>XXX,'art_title'=>XXX,...),...)
     */
    public function getPageArt($nowPage,$perPage,$where='')
    {
        if(LibFc::Int($nowPage) && LibFc::Int($perPage))
        {
            //先拿出文章
            $table = 'cm_article';
            $table2 = 'cm_article_category';
            $selArtData = ['art_id','art_status','art_title','art_add_time','art_last_time','art_seq'];
            $data = $this->get($table, $selArtData, $where.sprintf(" limit %d, %d",($nowPage-1)*$perPage, $perPage));
            if(!empty($data['data']))
            {
                //文章id 集
                $artId = array_column($data['data'], 'art_id');
                if(!empty($artId))
                {
                    $artId = array_filter($artId,'LibFc::Int');
                    if(!empty($artId))
                    {
                        //获取该文章id的所有分类
                        $catIdArr = $this->get('cm_article_category',['arc_art_id','arc_cat_id'],sprintf(' and arc_art_id IN (%s)',implode(',', $artId)));
                        //获取所有的分类
                        $catData = $this->get('cm_category left join cm_category_tree on cat_id=cat_cat_id',['cat_id','cat_pcat_id','cat_name']);
                        $catArr = array_column($catData['data'],'cat_name','cat_id');
                        $pcatArr = array_column($catData['data'],'cat_pcat_id','cat_id');
                        //获取所有的分类
                        if(!empty($catIdArr['data']))
                        {
                            //合并数组
                            $catDataArr = array();
                            $selIdArr = array();
                            foreach ($catIdArr['data'] as $key => $value) 
                            {
                                $selIdArr[$value['arc_art_id']][] = $value['arc_cat_id'];
                                foreach ($catIdArr['data'] as $k => $v)
                                {
                                    if($value['arc_art_id'] == $v['arc_art_id'])
                                    {
                                        // 检查上一级是不是有爸爸
                                        if(LibFc::Int($pcatArr[$value['arc_cat_id']]))
                                        {
                                            //检查上两级是不是有爸爸
                                            if(LibFc::Int($pcatArr[$pcatArr[$value['arc_cat_id']]]))
                                            {
                                                //有三级 1
                                                $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][0] = $catArr[$pcatArr[$pcatArr[$value['arc_cat_id']]]];
                                                //第二级
                                                $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][1] = $catArr[$pcatArr[$value['arc_cat_id']]];
                                                //第三级
                                                $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][2] = $catArr[$value['arc_cat_id']];
                                            }
                                            else
                                            {
                                                //有两级
                                                $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][0] = $catArr[$pcatArr[$value['arc_cat_id']]];
                                                //第二级
                                                $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][1] = $catArr[$value['arc_cat_id']];
                                            }
                                        }
                                        else
                                        {
                                            $catDataArr[$value['arc_art_id']][$value['arc_cat_id']][0] = $catArr[$value['arc_cat_id']];

                                        }
                                    }   
                                }
                            }
                        }
                    }
                    foreach ($data['data'] as $key=>$value) 
                    {
                        $data['data'][$key]['path'] = $catDataArr[$value['art_id']];
                        $data['data'][$key]['sortIdStr'] = implode(',', $selIdArr[$value['art_id']]);
                    }
                }
            }
            return LibFc::ReturnData(true,$data['data']);  
        }
        return LibFc::ReturnData(false,'参数不正确');
    }

    /**
     * @method    获取文章分类的信息
     * @author     廖
     * @copyright 2017-07-17
     * @return   [json]  [{'id':1,'pId':2,'name':xxx},{...},...]
     */
    public function jsonArtSort()
    {
        $artSortArr = $this->get('cm_category left join cm_category_tree on cat_id=cat_cat_id',['cat_id','cat_pcat_id','cat_name'],'',false);
        if(!empty($artSortArr['data']))
        {
            //获取所有的是父的id
            $pIdArr = array_unique(array_column($artSortArr['data'], 'cat_pcat_id'));
            $newArray = array();
            foreach ($artSortArr['data'] as $k => $v)
            {
                if(in_array($v['cat_id'],$pIdArr))
                {
                    $newArray[] = array(
                        'id'=>$v['cat_id'],
                        'pId'=>$v['cat_pcat_id'],
                        'name'=>$v['cat_name'],
                        'open'=>true,
                        'nocheck'=>true
                    );
                }
                else
                {
                    $newArray[] = array(
                        'id'=>$v['cat_id'],
                        'pId'=>$v['cat_pcat_id'],
                        'name'=>$v['cat_name'],
                        'open'=>true
                    );
                }
            }
            // for($i=0;$i<count($artSortArr['data']);$i++)
            // {
            //     $newArray[$i]['id'] = $artSortArr['data'][$i]['cat_id'];
            //     $newArray[$i]['pId'] = $artSortArr['data'][$i]['cat_pcat_id'];
            //     $newArray[$i]['name'] = $artSortArr['data'][$i]['cat_name'];
            // }
            $artSortJson = json_encode($newArray,JSON_UNESCAPED_UNICODE);
            return $artSortJson;
        }
    }

    /**
     * @method    转移文章分类
     * @param     [array]       $artIdArr  文章id
     * @param     [array]       $sortIdArr 分类id
     * @author     廖
     * @copyright 2017-07-21
     * @return    array(1=>array('art_id'=>XXX,'art_title'=>XXX,...),...)
     */
    public function changeSort($artIdArr,$sortIdArr)
    {
        if(!empty($artIdArr) && !empty($sortIdArr))
        {
            $artIdArr = array_filter($artIdArr,'LibFc::Int');
            if(!empty($artIdArr))
            {
                foreach ($sortIdArr as $key => $value)
                {
                    if(!LibFc::Int($value)) unset($sortIdArr[$key]);
                }
                if(!empty($sortIdArr))
                {
                    $this->B2CDb->Begin();
                    $this->del('cm_article_category',sprintf(' and arc_art_id in (%s)',implode(',',$artIdArr)));
                    for($i=0;$i<count($artIdArr);$i++)
                    {
                        for($j=0;$j<count($sortIdArr);$j++)
                        {
                            $this->Add('cm_article_category',array('arc_art_id'=>$artIdArr[$i],'arc_cat_id'=>$sortIdArr[$j]));
                        }
                    }
                    $this->B2CDb->End();
                    return LibFc::ReturnData(true,true);
                }
            }
        }
        return LibFc::ReturnData(false,'参数不正确');
    }
    
    /**
     * @method    删除文章分类
     * @param     [int]          文章id
     * @author     廖
     * @copyright 2017-07-28
     * @return   array('status'=>true,'data'=>xxx) 
     */
    public function delArtCol($catId)
    {
        if(LibFc::Int($catId))
        {
            $this->B2CDb->Begin();
            $this->del('cm_category','and cat_id='.$catId);
            $this->del('cm_category_tree','and cat_cat_id='.$catId);
            $this->B2CDb->End();
            return LibFc::ReturnData(true,true);
        }
        return LibFc::ReturnData(false,'参数不正确');
    }
    /**
     * @method    切换模板样式时复制文章一条记录
     * @param     [arr] []
     * @param    [int] [店铺ID>]
     * @author 卢
     * @copyright 2018-04-17
     */
    function copyArtFromConfig($artIdArr,$shopId)
    {
        if(is_array($artIdArr)&&LibFc::Int($shopId))
        {
            $data=[];
            $res=$this->get('sh_article',['sart_id','sart_shop_id','sart_name','sart_txt'],sprintf(' and sart_id in (%s)',implode(',',$artIdArr)));
            $artArr = array_column($res['data'], null, 'sart_id');
            $this->B2CDb->Begin();
            foreach ($artArr as $k=>$v) 
            {
				$addArr = $v;
				$addArr['sart_shop_id'] = $shopId;
                $addArr['sart_add_time']=time();
                $addArr['sart_last_time']=time();
				unset($v['sart_id']);
                $res = $this->add('sh_article',$addArr);
				$data[$k] = $res['data'];
            }
            $this->B2CDb->End();
            return LibFc::ReturnData(true,$data);
        }
        return LibFc::ReturnData(false,'copyArtFromConfig 参数不正确');
    }
}