func (c *ArticleController) EditArticle() {
	id, _ := c.GetInt64(":id")
	userId := c.CurrentUserId()
	c.TplName = "article_edit.html"

	beego.Error("id:", id)
	if id <= 0 {
		c.StringError("文章不存在")
		return
	}

	if userId <= 0 {
		c.Redirect("/users/login", 302)
		return
	}

	article, error := services.ArticleByIdAndUserId(id, userId)

	if nil != error {
		c.StringError("文章不存在")
	} else {
		c.Data["article"] = article
		c.SetCategories(article.UserId)
		c.SetKeywords(article.Categories + "," + article.Tags)
		var subLength = services.ParameterIntValue("seo-description-length")
		c.SetDescription(article.ShortContent(subLength)).SetTitle(article.Title)
	}
}
func (c *BaseController) NeedCheckCaptcha() bool {
	sessionId := c.CruSession.SessionID()

	failTimes := services.ParameterIntValue("no_captcha_login_fail_times")

	failTimesCache := redis_util.IncrByWithTimeOut(sessionId, failTimes, int64(time.Second*3))

	return failTimesCache > failTimes
}
func (c *BaseController) RecordLoginFailTimes() {
	sessionId := c.CruSession.SessionID()

	failTimes := services.ParameterIntValue("no_captcha_login_fail_times")

	failTimesCache := redis_util.IncrByWithTimeOut(sessionId, 1, int64(time.Second*3))

	if failTimesCache >= failTimes {
		c.Data["showCaptcha"] = true
	}
}
func (c *ArticleController) ArticleDetail() {

	id, _ := c.GetInt64(":id")
	ip := c.Ip()
	userId, _ := c.GetInt64(":userId")

	c.TplName = "article_detail.html"

	if id <= 0 {
		c.StringError("文章不存在")
		c.Ctx.Redirect(302, "/")
		return
	}

	host := c.Host()
	url := c.Ctx.Request.RequestURI

	reqUri := fmt.Sprintf("%s%s", host, url)

	c.Data["reqUri"] = reqUri

	article, error := services.ArticleById(id)

	if error == nil {
		writer, _ := services.User(article.UserId)
		article.User = writer
	}

	if userId > 0 {
		hasLike, err := services.HasLikeArticle(id, userId, db.NewDB())
		if nil == err {
			article.HasLike = hasLike
		}
	}

	if nil != error {
		c.StringError("文章不存在")
	} else {
		currUserId := c.CurrentUserId()
		success, _ := services.IncrViewCount(id, currUserId, ip)
		if success {
			article.ViewCount = article.ViewCount + 1
		}
		c.Data["article"] = article

		c.SetCategories(article.UserId)

		c.SetKeywords(article.Categories + "," + article.Tags)
		var subLength = services.ParameterIntValue("seo-description-length")
		c.SetDescription(article.ShortContent(subLength)).SetTitle(article.Title)
	}
}