﻿/**********************************************************************************
 * 程序说明：     评论类(业务逻辑层)
 * 创建日期：     2009.6.13
 * 修改日期：     2013.07.15
 * 程序制作：     agui
 * 联系方式：     mailto:354990393@qq.com  
 * 版权申明：     http://www.plugnet.cn/copyright.html
 * ********************************************************************************/
using System;
using System.Collections;
using System.Text;
using System.Data;
using System.Security.Cryptography;

using PlugNT.Database;
using PlugNT.Cms.Custom;
using PlugNT.Cms.Model;

namespace PlugNT.Cms.BLL
{
    public class Comment
    {

        private readonly PlugNT.Cms.DAL.Comment dal = new PlugNT.Cms.DAL.Comment();




        /// <summary>
        /// 根据id获取模型
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public CommentInfo GetCommentInfo(int id)
        {
            return dal.GetCommentInfo(id);
        }



        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool Add(CommentInfo model)
        {
            return dal.Add(model);
        }

        /// <summary>
        /// 更新内容
        /// </summary>
        /// <param name="id"></param>
        /// <param name="layer"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public bool UpdateContent(int id, int layer, string content)
        {
            return dal.UpdateContent(id, layer, content);
        }


        /// <summary>
        /// 更新回帖
        /// </summary>
        /// <param name="id"></param>
        /// <param name="reply"></param>
        /// <returns></returns>
        public bool UpdateReply(int id, string reply)
        {
            return dal.UpdateReply(id, reply);
        }


        /// <summary>
        /// 更新顶贴
        /// </summary>
        /// <param name="id"></param>
        /// <param name="tip"></param>
        /// <returns></returns>
        public bool UpdateTip(int id, int tip)
        {
            return dal.UpdateTip(id, tip);
        }

        /// <summary>
        /// 更新锁定
        /// </summary>
        /// <param name="id"></param>
        /// <param name="locked"></param>
        /// <returns></returns>
        public bool UpdateLocked(int id, bool locked)
        {
            return dal.UpdateLocked(id, locked);
        }

        /// <summary>
        /// 添加顶贴
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool AddTip(int id)
        {
            return dal.AddTip(id);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool Delete(int id)
        {
            return dal.Delete(id);
        }


        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="andWhere"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, string andWhere)
        {
            return dal.GetList(sysModelId,  andWhere);
        }


        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="topCount"></param>
        /// <param name="articleId"></param>
        /// <param name="locked"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int topCount, int articleId, int locked)
        {
            StringBuilder andWhere = new StringBuilder();
            if (articleId > 0)
            {
                andWhere.Append(" and [article_id]=" + articleId.ToString());
            }
            //是否锁定
            if (locked  >= 0)
            {
                andWhere.Append(" and [locked]= " + (locked == 1 ? "1" : "0"));
            }
            return dal.GetList(sysModelId, topCount, andWhere.ToString());
        }


        /// <summary>
        /// 获取列表（前台）
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="topCount"></param>
        /// <param name="articleId"></param>
        /// <param name="locked"></param>
        /// <param name="userColumns"></param>
        /// <param name="andWhere"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int topCount, int articleId, int locked, string userColumns, string andWhere)
        {
            StringBuilder sbAndWhere = new StringBuilder(andWhere);
            if (articleId  >0)
            {
                sbAndWhere.Append(" and [article_id]=" + articleId.ToString());
            }
            //是否锁定
            if (locked >=0)
            {
                sbAndWhere.Append(" and [locked]= " + (locked == 1 ? "1" : "0"));
            }
            return dal.GetList(sysModelId, topCount, userColumns, sbAndWhere.ToString());
        }

        /// <summary>
        /// 获取列表（前台）
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="topCount"></param>
        /// <param name="articleId"></param>
        /// <param name="locked"></param>
        /// <param name="userColumns"></param>
        /// <param name="articleColumns"></param>
        /// <param name="andWhere"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int topCount, int articleId, int locked, string userColumns, string articleColumns, string andWhere)
        {
            StringBuilder sbAndWhere = new StringBuilder(andWhere);
            if (articleId > 0)
            {
                sbAndWhere.Append(" and [article_id]=" + articleId.ToString());
            }
            //是否锁定
            if (locked >= 0)
            {
                sbAndWhere.Append(" and [locked]= " + (locked == 1 ? "1" : "0"));
            }
            return dal.GetList(sysModelId, topCount, userColumns, articleColumns, sbAndWhere.ToString());
        }


        /// <summary>
        /// 得到列表(后台)
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="pageSize"></param>
        /// <param name="currPage"></param>
        /// <param name="idOrKeyword"></param>
        /// <param name="isexact"></param>
        /// <param name="locked"></param>
        /// <param name="isReverse">是否反序</param>
        /// <param name="recordCount"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int pageSize, int currPage, string idOrKeyword, bool isexact, bool locked, bool isReverse, out int recordCount)
        {
            StringBuilder andWhere = new StringBuilder();
            //标题或ID
            if (idOrKeyword != "")
            {
                if (PlugNT.Common.Utils.IsNumeric(idOrKeyword))
                {
                    andWhere.Append(" and [article_id]=" + idOrKeyword);
                }
                else
                {
                    if (isexact)
                    {
                        andWhere.Append(" and [title]='" + SqlHelper.Filter(idOrKeyword) + "'");
                    }
                    else
                    {
                        andWhere.Append(" and [title] like '%" + SqlHelper.Filter(idOrKeyword) + "%'");
                    }
                }
            }
            //是否锁定
            if (locked)
            {
                andWhere.Append(" and [locked]=1 ");
            }
            recordCount = dal.GetCount(sysModelId, andWhere.ToString());
            return dal.GetList(sysModelId, pageSize, currPage, andWhere.ToString(), isReverse);
        }


        /// <summary>
        /// 得到列表(前台)
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="pageSize"></param>
        /// <param name="currPage"></param>
        /// <param name="articleId"></param>
        /// <param name="locked">-1为全部，0为假，1为真</param>
        /// <param name="isReverse">是否反序</param>
        /// <param name="userColumns">userColumns</param>
        /// <param name="andWhere">andWhere</param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int pageSize, int currPage, int articleId, int locked, bool isReverse,string userColumns ,string andWhere)
        {
            StringBuilder sbAndWhere = new StringBuilder();
            if (articleId > 0)
            {
                sbAndWhere.Append(" and [article_id]=" + articleId.ToString());
            }
            //是否锁定
            if (locked >=0)
            {
                sbAndWhere.Append(" and [locked]= " + (locked == 1 ? "1" : "0"));
            }

            LeftJoinInfo joinUser = new LeftJoinInfo(SiteConfig.UsersTableName, userColumns, "username", SiteConfig.GetUserField("username"), "");
            return dal.GetList(sysModelId, pageSize, currPage, "*", sbAndWhere.ToString() + andWhere, isReverse, joinUser);
        }


        /// <summary>
        /// 通用
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="pageSize"></param>
        /// <param name="currPage"></param>
        /// <param name="andWhere"></param>
        /// <param name="isReverse"></param>
        /// <param name="recordCount"></param>
        /// <returns></returns>
        public DataTable GetList(int sysModelId, int pageSize, int currPage,string andWhere, bool isReverse,  out int recordCount)
        {
            recordCount = dal.GetCount(sysModelId, andWhere.ToString());
            return dal.GetList(sysModelId, pageSize, currPage, andWhere, isReverse);
        }


        /// <summary>
        /// 获取总数
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="aid"></param>
        /// <param name="andWhere"></param>
        /// <returns></returns>
        public int GetCount(int sysModelId, int aid, string andWhere)
        {
            return dal.GetCount(sysModelId, (aid > 0 ? " and article_id=" + aid : "") + andWhere);
        }
        

        /// <summary>
        /// 获取评分
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="aid"></param>
        /// <param name="andWhere"></param>
        /// <returns></returns>
        public int GetScore(int sysModelId, int aid, string andWhere)
        {
            return dal.GetScore(sysModelId, (aid > 0 ? " and article_id=" + aid : "") + andWhere);
        }


        /// <summary>
        /// 获取顶贴总数
        /// </summary>
        /// <param name="sysModelId"></param>
        /// <param name="rid"></param>
        /// <returns></returns>
        public int GetTipCount(int sysModelId, int rid)
        {
            return dal.GetTipCount(sysModelId, " and id=" + rid);
        }



    }
}
