<?php
/**
 * 资讯业务逻辑(为了应付TS的Comment组件,从应用里复制的，纠了个结了)
 * 
 * @version TS3.0 
 * @name NewsModel
 * @author 燕子<e启学>
 *
 */
class NewsModel extends Model
{
    /**
     * 使用的表名称
     *
     * @var string
     */
	protected	$tableName	=	'news';
	
	/**
	 * 字段列表
	 *
	 * @var unknown_type
	 */
	protected	$fields		=	array 
	(
	    0 => 'news_id', 
	    1 => 'type_id', 
	    2 => 'news_title', 
	    3 => 'news_content', 
	    4 => 'image',
	    5 => "state",
	    6 => "is_top",
	    7 => "hits",
	    8 => "is_del",
	    9 => 'created',
	    10 => 'updated',
	    11 => 'uid',
	    '_autoinc' => true, 
	    '_pk' => 'news_id'
	);
	
	/**
	 * 定义自动验证
	 * 
	 * @var array
	 */
    protected $_validate    =   array
    (
        array('news_title','require','信息标题不能为空'),
        array('news_content','require','内容不能为空'),
    );
	
    /**
	 * 自动填充
	 *
	 * @var array
	 */
	protected $_auto = array 
	( 
	    array('created','time',1,'function'), 
        array('updated','time',2,'function'),
    );
    
    /**
     * 获取状态
     *
     * @param int $state 状态ID
     * @return mixed
     */
    public function getState($state = null)
    {
        $states = array
        (
            1 => '显示',
            0 => '不显示',
        );
        if ($state === null) 
        {
        	return $states ;
        }
        return isset($states[$state])?$states[$state]:'' ;
    }
    
	/**
	 * 更新信息
	 *
	 * @param array $data 字段值
	 * @return mixed
	 */
	public function setNews($uid)
	{
	    $ret = array( 'ret' => false, 'msg' => '更新信息失败' );
	    $news   =   D('News');
        if($news->create()) 
        {
            $news->uid = ($uid)?$uid:0 ;
            if ($news->news_id)
            {
                $result = $news->save();
            }else 
            {
                $result = $news->add();
            }
            if($result) 
            {
                $ret = array( 'ret' => true, 'msg' => '成功更新信息' );
            }else 
            {
                $ret['msg'] = $news->getError();
            }
        }else
        {
            $ret['msg'] = $news->getError(); 
        }
        return $ret ;
	}
	
	/**
	 * 获取子分类的ID串
	 *
	 * @param int $pid
	 * @return array
	 */
	private function getChildTids($pid)
	{
	    static $_result = array() ;
	    if (isset($_result[$pid]))
	    {
	        return $_result[$pid] ;
	    }
	    //查找
	    $child = model('CategoryTree')->setTable('news_category')->getNetworkList($pid);
	    $ids = array_keys($child) ;
	    $_result[$pid] = ($ids)?$ids:array();
	    return $ids ;
	}
	
	/**
	 * 前台列表获取
	 *
	 */
	public function getList($limit = 20, $type= 0 , $keywords = '',$order = '',$findPage = true)
	{
	    $map = array();
	    $map['state'] = array('GT',0);
 
	    if ($keywords)
	    {
	        $map['news_title']=array('like','%'.$keywords.'%');
	    }
	    if ($order == '')
	    {
	        $order = 'is_top desc,news_id desc' ;
	    }
	    if ($type)
	    {
	        //获取子分类
	        $childs = $this->getChildTids($type);
	        if ($childs)
	        {
	            $childs[] = $type;
	            $map['type_id'] = array('in',$childs);
	        }else 
	        {
	            $map['type_id'] = $type ;
	        }
	    }
	    $this->where($map)->order( $order ) ;
	    if ($findPage)
	    {
	        $list = $this->findPage($limit);
	        $data = $list['data'];
	    }else
	    {
	        $data = $this->findAll(array('limit' => $limit));
	        
	    }
	    foreach ($data as $k => $v)
	    {
	        $thumb = APPS_URL.'/'.APP_NAME.'/_static/nopic.jpg';
            if ($v['image'])
            {
                $attach = model('Attach')->getAttachById($v['image']);
                if ($attach)
                {
                    $thumb = getImageUrl($attach['save_path']. $attach['save_name'],100,100);   
                }
            }
            $data[$k]['image'] = $thumb ;
            $data[$k]['title_intro'] = msubstr($v['news_title'],0,30);
            $data[$k]['content_intro'] = msubstr(strip_tags($v['news_content']),0,100);
            //获取评论数量 
            $data[$k]['comment_count'] = model('Comment')->where(array('app'=>'news' , 'table' => 'news' ,'is_del' => 0,'row_id' => $v['news_id']))->count();
	    }
	    if ($findPage)
	    {
	        $list['data'] = $data ;
	        return $list ;
	    }else
	    {
	        return $data ;
	    }
	}
	
	/**
	 * 根据ID获取资料
	 *
	 * @param int $id
	 * @param boolean $is_admin 是否是后台
	 * @return array
	 */
	public function getOneyById($id,$is_admin = false,$update_hits = false)
	{
	    $map = array
	    (
	        'news_id' => $id,
	    );
	    if ($is_admin == false) 
	    {
	    	$map['state'] = array('GT',0);
	    }
	    $v = $this->where($map)->find();
	    if ($v)
	    {
	    	$v['attachId'] = $v['image'];
	        $thumb = APPS_URL.'/'.APP_NAME.'/_static/nopic.jpg';
            if ($v['image'])
            {
                $attach = model('Attach')->getAttachById($v['image']);
                if ($attach)
                {
                    $thumb = getImageUrl($attach['save_path']. $attach['save_name'],100,100);   
                }
            }
            $v['image'] = $thumb ;
            //更新浏览量
            if ($is_admin === false && $update_hits == true)
            {
                $this->setInc('hits',array('news_id' => $id),1);
            }
	    }
	    return $v ;
	}
	
	/**
	 * 获取信息
	 * @param int $id 
	 * @return mixed
	 */
	public function getSourceInfo($id)
	{
	    $find = $this->getOneyById($id);
	    if ($find)
	    {
	        $info = array('source_user_info' => '');
	        if ($find['uid'])
	        {
	            $info['source_user_info'] = model('User')->getUserInfo( $find['uid'] );
	        }
	        $info['source_url'] = U('news/Index/detail',array('id'=>$id ));
	        $info['source_body'] = $find['news_title'].'<a class="ico-details" href="'.U('news/Index/show',array('id'=>$id)).'"></a>';
	        return $info;
	    }
	    return false ;
	}
	
	/**
	 * 删除分类后的回调
	 * @param int $cid
	 * @return bool
	 */
	public function deleteAssociatedData( $cid )
	{
		return $this->where(array('type_id' =>$cid))->delete();
	}
	
}