<?php
namespace model;
use \model;
use \model\grid\lrtree;
/**
 * Class collocation
 * @package model
 */
class collocation extends model
{
    public $table = 'object'; 
    public $key = 'o_id'; 
    public $name = LG_NAME;
    public $order = LG_NAME;
	public $lrtree = null;
	public function __construct()
    {
		parent::__construct();
        $this->options = [
			'table'=>'object',
			'id'=>'o_id',
			'parent_id'=>'o_parent_id',
			'left'=>'o_lft',
			'right'=>'o_rgt',
			'level'=>'o_level',
			'ismove'=>'o_ismove',
			'cn_name'=>'cn_name',
			'en_name'=>'en_name',
			'py_name'=>'py_name',
			'code' => 'code',
			'sort' => 'o_sort',
			'create_time'=>'create_time',
			'update_time'=>'update_time'
		];
		$this->lrtree = new lrtree($this->options);
	}

    public function list($key,$where='',$page=0,$pagesize=0,$sidx='',$sord='asc',$orderby='')
    {
        if($key != 0){
            $node =  $this->lrtree->getNode($key);
            $where = '{"groupOp":"AND","rules":[{"field":"o_lft","op":"gt","data":"'.$node['o_lft'].'"},{"field":"o_rgt","op":"lt","data":"'.$node['o_rgt'].'"}]}';
        }
        $where = $this->filter2medoo($where);
        return $this->lrtree->list($where, $page, $pagesize, $sidx, $sord,'o_sort,'.$this->options[LG_NAME]);
    }


    public function getNode($id)
    {
        return $this->lrtree->getNode($id);
    }

    public function getNodesByIds($ids)
    {
        return $this->lrtree->getNodesByIds($ids);
    }

	/**
	 * 模糊查询Object
	 * @param string $value  要查询的值
	 * @return array ID数组
	 */
    public function like($value)
    {
        $where = ['OR'=>[
                    'cn_name[~]'=>$value,
                    'en_name[~]'=>$value,
					"py_name[~]"=>$value,
                    ]
                 ];
        $rows = $this->db->select($this->options['table'],"o_id",$where);
        $rows = array_unique($rows);
        if(count($rows)==1) $rows = $rows[0];
        return $rows;
    }

	/**
	 * 用名称精确查询Object
	 * @param string $value  要查询的值
	 * @return array
	 */
    public function eqname($value)
    {
        $where = ['OR'=>[
                    'cn_name'=>$value,
                    'en_name'=>$value,
					"py_name"=>$value,
                    ]
                 ];
        return $this->db->get($this->options['table'],"o_id",$where);
    }

	/**
	 * 取系统用户信息
	 * @param int $id
	 * @return array 
	 */
    public function getUserRowByID($id)
    {
        $row = $this->db->get('adm_user',"*",['au_id'=>$id]);
        return $row;
    }

    /**
     * @param $
     * @return array
     */
    public function getItem($key, $isCaption=false){
        $row = $this->getRowByKey($key);
        if($isCaption){
            $row = $this->getRowInfo($row);
        }
        return $row;
    }
	/**
	 * 删除记录
	 * @param string|int|array $ids, id集数组或字符串，字符串用 , 号分隔
	 * @return bool
	 */
	function deleteRows($ids){
        if(!is_array($ids)){
            $ids = explode(',',$ids);
        }
		return $this->db->delete($this->table,[$this->key=>$ids,'o_is_init'=>0]);
	}


	/**
	 * 获取某父级的元素【不使用树形】
	 * @param int $parent_id
	 * @return array 
	 */
    public function getParentNodes($parent_id)
    {
		return $this->db->select('object', ['o_id', LG_NAME], ['o_parent_id'=>$parent_id,'ORDER'=>'o_sort']);
    }


	/**
	  * @method 获取和type有关的属性列表
	  * @author type string [必填] number | model
	  * @author soul
	  * @return ['id'=>'name'....]
	  */
	public function getCollItems($type)
	{
		$collFiledArr = [
			'work'=>[1,2,5,6,14,16,17,18,21],
			'number'=>[24,27],
			'pro'=>[1,2,5,6,7,8,9,10,11,12,16,17],
			'other'=>[13],
			'ask'=>[25],
		];
		if(empty($collFiledArr[$type])) return[];
		$collFileds = $collFiledArr[$type];
		$collArr = $this->db->select('object', ['o_parent_id', 'o_id', LG_NAME], ['o_parent_id'=>$collFileds]);
		$collArr = array_column($collArr, LG_NAME, 'o_id');
		return $collArr;
	}


	/**
	  * @method 通过名称和父ID找ID
	  * @author type string [必填] number | model
	  * @author soul
	  * @return ['id'=>'name'....]
	  */
	public function getOidByName($name, $pid)
	{
		if($name == '') return 0;
		$where = [
			"OR" => [
				"cn_name"=>$name,
				"en_name"=>$name,
				"py_name"=>$name,
			],
			'o_parent_id'=>$pid
		];
		return $this->db->get('object', 'o_id', $where);
	}

	/**
	  * @method 检测名称和父ID找名称，用于导入用
	  * @author type string [必填] number | model
	  * @author soul
	  * @return ['id'=>'name'....]
	  */
	public function checkOidByName($name, $pid)
	{
		if(empty($name)) return 0;
		$where = [
			"OR" => [
				"cn_name"=>$name,
				"en_name"=>$name,
				"py_name"=>$name,
			],
			'o_parent_id'=>$pid
		];
		return $this->db->get('object', 'cn_name', $where);
	}
}