<?php
class B2cRules extends B2cBase
{
	/**
	 * @method    保存职员
	 * @param     [array]        $data
	 * @author     廖
	 * @copyright 2018-02-27
	 * @return    ['true','xxx']
	 */
	public function saveRulesUser($data)
	{
		if(!empty($data) && LibFc::Int($data['userId']))
		{
			$rulesArr = array_filter(explode(',', $data['userRules']),'LibFc::Escape');

			$ugIdArr = array_filter(explode(',',$data['ugId']));
			if($data['order']=='add')
			{
				//查询是否已存在
				$res = $this->get('an_user',['count(*) count'],'and au_uid='.$data['userId'],true);
				if($res['data']['count']==0)
				{
					$this->B2CDb->Begin();
					$dataArr['au_uid'] = $data['userId'];
					$dataArr['au_status'] = $data['openRules']?1:0;
					$dataArr['au_name'] = $data['au_name'];
					$dataArr['au_atime'] = time();
					//$dataArr['au_group'] = $data['au_group'];
					// $dataArr['au_crmyw'] = $data['au_crmyw'];
					$dataArr['au_pjsys'] = $data['au_pjsys'];
					$dataArr['au_pjcrmsys'] = $data['au_pjcrmsys'];
					$dataArr['au_modelsys_cfg'] = json_encode($data['au_modelsys_cfg']?:[]);
					if($data['au_enter']){$dataArr['au_enter'] = $data['au_enter'];}
					if($data['au_out']){$dataArr['au_out'] = $data['au_out'];}
					$dataArr['au_modelsys'] = $data['au_modelsys'];
					$dataArr['au_yewu'] = $data['au_yewu'];
					$dataArr['au_fenpei'] = $data['au_fenpei'];
					$this->add('an_user', $dataArr);
					if(!empty($rulesArr))
					{
						foreach ($rulesArr as $key => $value)
						{
							$arr['aur_au_uid'] = $data['userId'];
							$arr['aur_arule_id'] = $value;
							$this->add('an_user_rule', $arr);
						}
					}

					if(!empty($ugIdArr)){
						$arr = [];
						foreach ($ugIdArr as $key => $val)
						{
							$arr[] = ['ugl_uid'=>$data['userId'],'ugl_ugid'=>$val];
						}
						$this->addAny('an_user_group_link',array_keys($arr[0]) ,$arr);
					}
					$PjlBase = new PjlBase();
					$pjlData = [
						'usr_name'=>$data['au_name'],
						'usr_status'=>1,
						'usr_seq' => 50,  
						'usr_istar' => 0,
					];
					$PjlBase->add('bu_user',$pjlData);
					$this->B2CDb->End();
				}
			}
			if($data['order']=='edit')
			{
				$this->B2CDb->Begin();
				$dataArr['au_status'] = $data['openRules']?1:0;
				$dataArr['au_name'] = $data['au_name'];
                $dataArr['au_group'] = $data['au_group'];
                // $dataArr['au_crmyw'] = $data['au_crmyw'];
                $dataArr['au_pjsys'] = $data['au_pjsys'];
                $dataArr['au_pjcrmsys'] = $data['au_pjcrmsys'];
				$dataArr['au_enter'] = $data['au_enter']?:'#@NULL';
				$dataArr['au_out'] = $data['au_out']?:'#@NULL';
				$dataArr['au_modelsys'] = $data['au_modelsys'];
				$dataArr['au_modelsys_cfg'] = json_encode($data['au_modelsys_cfg']?:[]);
				$dataArr['au_yewu'] = $data['au_yewu'];
				$dataArr['au_fenpei'] = $data['au_fenpei'];
				$this->set('an_user', $dataArr,'and au_uid='.$data['userId']);
				$this->del('an_user_rule','and aur_au_uid='.$data['userId']);
				if(!empty($rulesArr))
				{
					foreach ($rulesArr as $key => $value)
					{
						$arr['aur_au_uid'] = $data['userId'];
						$arr['aur_arule_id'] = $value;

						$this->add('an_user_rule', $arr);
					}
				}
				$this->del('an_user_group_link','and ugl_uid='.$data['userId']);
				if(!empty($ugIdArr)){
					$arr = [];
					foreach ($ugIdArr as $key => $val)
					{
						$arr[] = ['ugl_uid'=>$data['userId'],'ugl_ugid'=>$val];
					}
					$this->addAny('an_user_group_link',array_keys($arr[0]) ,$arr);
				}
				$this->B2CDb->End();
			}
			return LibFc::ReturnData(true,true);
		}
		else
		{
			return LibFc::ReturnData(false, '参数不正确!');
		}
	}






	/**
	 * @method    系统权限更新
	 * @param     [int] $userId [用户ID]
	 * @param     [arr] $nodes [所有权限节点]
	 * @author     xu
	 * @copyright 2018-04-24
	 * @return    array('status'=>true,'data'=>[0=>['proid'=>xxx,'proName'=>xxx]],'code'=>0)
	 */
	public function updateRules($userId,$nodes)
	{
		// 参数
		if(!LibFc::Int($userId) || empty($nodes) || !is_array($nodes))
			return LibFc::ReturnData(false,'参数不正确');

		// 权限

		// 处理节点
		$new  = array();
		$old  = array();
		$leves = array();
		$code = array();
		// [level]
		foreach ($nodes as $k => $v) {
			$temp = explode(',', $v);
			if($temp[0]!='0000'){
				$leves[] = $temp[3];

				// 依据ID判定是否为新增
				if(!LibFc::Int($temp[0]))
				{
					// 修改权限
					if(count(explode(':', $temp[2]))!=2)
						return LibFc::ReturnData(false,'修改权限填写格式错误，请填写"权限码:权限名称"格式的名称！');
					if($temp[0] != current(explode(':', $temp[2])))
						return LibFc::ReturnData(false,'权限码不得修改！');
					$old[$temp[3]][$k]['id'] = $temp[0];
					$old[$temp[3]][$k]['pId'] = $temp[1];
					$old[$temp[3]][$k]['name'] = end(explode(':', $temp[2])) ;
					$code[] = $temp[0];
				}
				else
				{
					// 新增权限
					if(count(explode(":", $temp[2]))!=2)
					{
						return LibFc::ReturnData(false,'新增权限名称填写错误！');
					}
					$id = current(explode(":", $temp[2]));
					if(LibFc::Int($id))
						return LibFc::ReturnData(false,'新增权限权限码不能全为数字！');
					$new[$temp[3]][$k]['id'] = $id;
					$new[$temp[3]][$k]['pId'] = $temp[1];
					$new[$temp[3]][$k]['name'] = end(explode(":", $temp[2]));
					$code[] = $id;
				}
			}
		}

		// 校验权限码唯一
		if(count($code)!=count(array_filter($code)))
			return LibFc::ReturnData(false,'权限码不唯一，请重新填写！');


		$this->B2CDb->Begin();
		// 获取被删除的权限
		$res = $this->get('an_rule',['arule_id'],"");
		$res = array_column($res['data'], 'arule_id');
		$del = array_diff($res, $code);
		if(!empty($del))
			$this->del('an_rule',sprintf("and arule_id in ('%s')",implode("','", $del)));

		// 按层级入库
		$leves = array_unique($leves);
		sort($leves);
		foreach ($leves as $level) {
			// 入库新权限
			if(!empty($new[$level]))
			{
				foreach ($new[$level] as $kk => $vv) {
					// 获取当前pid的路径
					$res = $this->get('an_rule',['arule_path'],sprintf(" and arule_id='%s'",$vv['pId']),true);
					$temp = [
						'arule_id'=>$vv['id'],
						'arule_name'=>$vv['name'],
						'arule_parent'=>$vv['pId'],
						'arule_path'=>empty($res['data']['arule_path'])?$vv['pId']:$res['data']['arule_path'].','.$vv['pId'],
					];
					$this->add('an_rule',$temp);
				}
			}
			// 更新旧权限
			if(!empty($old[$level]))
			{
				foreach ($old[$level] as $kk => $vv) {
					// 获取当前pid的路径
					$res = $this->get('an_rule',['arule_path'],sprintf(" and arule_id='%s'",$vv['pId']),true);
					$temp = [
						'arule_name'=>$vv['name'],
						'arule_parent'=>$vv['pId'],
						'arule_path'=>empty($res['data']['arule_path'])?$vv['pId']:$res['data']['arule_path'].','.$vv['pId'],
					];
					$this->set('an_rule',$temp,sprintf(" and arule_id='%s'",$vv['id']));
				}
			}
		}

		$this->B2CDb->End();

		return LibFc::ReturnData(true,true);
	}



	/**
	 * @method    店铺权限更新
	 * @param     [int] $userId [用户ID]
	 * @param     [arr] $nodes [所有权限节点]
	 * @author     xu
	 * @copyright 2018-04-24
	 * @return    array('status'=>true,'data'=>[0=>['proid'=>xxx,'proName'=>xxx]],'code'=>0)
	 */
	public function updateShopRules($userId,$nodes)
	{
		// 参数
		if(!LibFc::Int($userId) || empty($nodes) || !is_array($nodes))
			return LibFc::ReturnData(false,'参数不正确');

		// 权限

		// 处理节点
		$new  = array();
		$old  = array();
		$leves = array();
		$code = array();
		// [level]
		foreach ($nodes as $k => $v) {
			$temp = explode(',', $v);
			if($temp[0]!='0000'){
				$leves[] = $temp[3];

				// 依据ID判定是否为新增
				if(!LibFc::Int($temp[0]))
				{
					// 修改权限
					if(count(explode(':', $temp[2]))!=2)
						return LibFc::ReturnData(false,'修改权限填写格式错误，请填写"权限码:权限名称"格式的名称！');
					if($temp[0] != current(explode(':', $temp[2])))
						return LibFc::ReturnData(false,'权限码不得修改！');
					$old[$temp[3]][$k]['id'] = $temp[0];
					$old[$temp[3]][$k]['pId'] = $temp[1];
					$old[$temp[3]][$k]['name'] = end(explode(':', $temp[2])) ;
					$code[] = $temp[0];
				}
				else
				{
					// 新增权限
					if(count(explode(":", $temp[2]))!=2)
					{
						return LibFc::ReturnData(false,'新增权限名称填写错误！');
					}
					$id = current(explode(":", $temp[2]));
					if(LibFc::Int($id))
						return LibFc::ReturnData(false,'新增权限权限码不能全为数字！');
					$new[$temp[3]][$k]['id'] = $id;
					$new[$temp[3]][$k]['pId'] = $temp[1];
					$new[$temp[3]][$k]['name'] = end(explode(":", $temp[2]));
					$code[] = $id;
				}
			}
		}

		// 校验权限码唯一
		if(count($code)!=count(array_filter($code)))
			return LibFc::ReturnData(false,'权限码不唯一，请重新填写！');


		$this->B2CDb->Begin();
		// 获取被删除的权限
		$res = $this->get('sh_rule',['rule_id'],"");
		$res = array_column($res['data'], 'rule_id');
		$del = array_diff($res, $code);
		if(!empty($del))
			$this->del('sh_rule',sprintf("and rule_id in (%s)",implode(',', $del)));

		// 按层级入库
		$leves = array_unique($leves);
		sort($leves);
		foreach ($leves as $level) {
			// 入库新权限
			if(!empty($new[$level]))
			{
				foreach ($new[$level] as $kk => $vv) {
					// 获取当前pid的路径
					$res = $this->get('sh_rule',['rule_path'],sprintf(" and rule_id='%s'",$vv['pId']),true);
					$temp = [
						'rule_id'=>$vv['id'],
						'rule_name'=>$vv['name'],
						'rule_parent'=>$vv['pId'],
						'rule_path'=>empty($res['data']['rule_path'])?$vv['pId']:$res['data']['rule_path'].','.$vv['pId'],
					];
					$this->add('sh_rule',$temp);
				}
			}
			// 更新旧权限
			if(!empty($old[$level]))
			{
				foreach ($old[$level] as $kk => $vv) {
					// 获取当前pid的路径
					$res = $this->get('sh_rule',['rule_path'],sprintf(" and rule_id='%s'",$vv['pId']),true);
					$temp = [
						'rule_name'=>$vv['name'],
						'rule_parent'=>$vv['pId'],
						'rule_path'=>empty($res['data']['rule_path'])?$vv['pId']:$res['data']['rule_path'].','.$vv['pId'],
					];
					$this->set('sh_rule',$temp,sprintf(" and rule_id='%s'",$vv['id']));
				}
			}
		}

		$this->B2CDb->End();

		return LibFc::ReturnData(true,true);
	}



}
