<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Home\Model;

use Think\Model;

/**
 * 分类模型
 */
class CategoryModel extends Model {
	var $tableName = 'common_category';
	protected $_validate = array (
			array (
					'title',
					'require',
					'名称不能为空',
					self::MUST_VALIDATE,
					'regex',
					self::MODEL_BOTH 
			) 
	);
	protected $_auto = array (
			array (
					'model',
					'arr2str',
					self::MODEL_BOTH,
					'function' 
			),
			array (
					'model',
					null,
					self::MODEL_BOTH,
					'ignore' 
			),
			array (
					'extend',
					'json_encode',
					self::MODEL_BOTH,
					'function' 
			),
			array (
					'extend',
					null,
					self::MODEL_BOTH,
					'ignore' 
			),
			array (
					'create_time',
					NOW_TIME,
					self::MODEL_INSERT 
			),
			array (
					'update_time',
					NOW_TIME,
					self::MODEL_BOTH 
			) 
	);
	
	/**
	 * 获取分类详细信息
	 *
	 * @param milit $id
	 *        	分类ID或标识
	 * @param boolean $field
	 *        	查询字段
	 * @return array 分类信息
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function info($id, $field = true) {
		/* 获取分类信息 */
		$map = array ();
		if (is_numeric ( $id )) { // 通过ID查询
			$map ['id'] = $id;
		} else { // 通过标识查询
			$map ['name'] = $id;
		}
		return $this->field ( $field )->where ( $map )->find ();
	}
	
	/**
	 * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
	 *
	 * @param integer $id
	 *        	分类ID
	 * @param boolean $field
	 *        	查询字段
	 * @return array 分类树
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function getTree($id = 0, $field = true, $module='') {
		/* 获取当前分类信息 */
		if ($id) {
			$info = $this->info ( $id );
			$id = $info ['id'];
		}
		$map ['module'] = empty($module) ? I ( 'module' ) : $module;
		$map ['token'] = get_token ();
		
		/* 获取所有分类 */
		$list = $this->field ( $field )->where ( $map )->order ( 'sort asc, id asc' )->select ();
		$list = list_to_tree ( $list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id );
		
		/* 获取返回数据 */
		if (isset ( $info )) { // 指定分类则返回当前分类极其子分类
			$info ['_'] = $list;
		} else { // 否则返回所有分类
			$info = $list;
		}
		return $info;
	}
	function getSubUidByMid($tree, $is_sub = false) {
		static $_uids = array ();
	
		foreach ( $tree as $v ) {
			$uidArr = explode ( ',', $v ['admin_uids'] );
			if (empty ( $uidArr ))
				continue;
				
			if ($is_sub) {
				$_uids = array_merge ( $_uids, $uidArr );
			}
				
			if (empty ( $v ['_'] ))
				continue;
				
			if ($is_sub || in_array ( $GLOBALS ['mid'], $uidArr )) {
				$this->getSubUidByMid ( $v ['_'], true );
			} else {
				$this->getSubUidByMid ( $v ['_'], false );
			}
		}
		return $_uids;
	}	
	
	/**
	 * 获取指定分类的同级分类
	 *
	 * @param integer $id
	 *        	分类ID
	 * @param boolean $field
	 *        	查询字段
	 * @return array
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function getSameLevel($id, $field = true) {
		$info = $this->info ( $id, 'pid' );
		$map ['pid'] = $info ['pid'];
		$map ['module'] = I ( 'module' );
		$map ['token'] = get_token ();
		return $this->field ( $field )->where ( $map )->order ( 'sort' )->select ();
	}
	
	/**
	 * 更新分类信息
	 *
	 * @return boolean 更新状态
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function update() {
		$data = $this->create ();
		if (! $data) { // 数据对象创建错误
			return false;
		}
		
		/* 添加或更新数据 */
		return empty ( $data ['id'] ) ? $this->add () : $this->save ();
	}
	
	/**
	 * 获取指定分类子分类ID
	 *
	 * @param string $cate
	 *        	分类ID
	 * @return string id列表
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function getChildrenId($cate) {
		$field = 'id,name,pid,title';
		$category = D ( 'Category' )->getTree ( $cate, $field );
		$ids = array ();
		foreach ( $category ['_'] as $key => $value ) {
			$ids [] = $value ['id'];
		}
		return implode ( ',', $ids );
	}
	
	/**
	 * 查询后解析扩展信息
	 *
	 * @param array $data
	 *        	分类数据
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	protected function _after_find(&$data, $options) {
		/* 分割模型 */
		if (! empty ( $data ['model'] )) {
			$data ['model'] = explode ( ',', $data ['model'] );
		}
		
		/* 分割文档类型 */
		if (! empty ( $data ['type'] )) {
			$data ['type'] = explode ( ',', $data ['type'] );
		}
		
		/* 分割模型 */
		if (! empty ( $data ['reply_model'] )) {
			$data ['reply_model'] = explode ( ',', $data ['reply_model'] );
		}
		
		/* 分割文档类型 */
		if (! empty ( $data ['reply_type'] )) {
			$data ['reply_type'] = explode ( ',', $data ['reply_type'] );
		}
		
		/* 还原扩展数据 */
		if (! empty ( $data ['extend'] )) {
			$data ['extend'] = json_decode ( $data ['extend'], true );
		}
	}
}
