func (form *PostAdminForm) Valid(v *validation.Validation) { user := models.User{Id: form.User} if user.Read() != nil { v.SetError("User", "admin.not_found_by_id") } user.Id = form.LastReply if user.Read() != nil { v.SetError("LastReply", "admin.not_found_by_id") } user.Id = form.LastAuthor if user.Read() != nil { v.SetError("LastReply", "admin.not_found_by_id") } topic := models.Topic{Id: form.Topic} if topic.Read() != nil { v.SetError("Topic", "admin.not_found_by_id") } cat := models.Category{Id: form.Category} if cat.Read() != nil { v.SetError("Category", "admin.not_found_by_id") } if len(i18n.GetLangByIndex(form.Lang)) == 0 { v.SetError("Lang", "Not Found") } }
// Get implemented Get method for HomeRouter. func (this *PostListRouter) Category() { this.TplName = "post/category.html" slug := this.GetString(":slug") cat := models.Category{Slug: slug} if err := cat.Read("Slug"); err != nil { this.Abort("404") return } pers := 25 qs := models.Posts().Filter("Category", &cat) qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Created").Limit(pers, pager.Offset()).RelatedSel() var posts []models.Post models.ListObjects(qs, &posts) this.Data["Posts"] = posts this.Data["Category"] = &cat this.Data["CategorySlug"] = cat.Slug this.Data["IsCategory"] = true var cats []models.Category this.setCategories(&cats) var topics []models.Topic this.setTopicsOfCat(&topics, &cat) }
func (this *PostRouter) NewPost() { this.TplNames = "post/new.html" if this.CheckActiveRedirect() { return } form := post.PostForm{Locale: this.Locale} topicSlug := this.GetString("topic") if len(topicSlug) > 0 { topic := models.Topic{Slug: topicSlug} err := topic.Read("Slug") if err == nil { form.Topic = topic.Id form.Category = topic.Category.Id post.ListTopicsOfCategory(&form.Topics, &models.Category{Id: form.Category}) this.Data["Topic"] = &topic } else { this.Redirect(setting.AppUrl, 302) } } else { catSlug := this.GetString("category") if len(catSlug) > 0 { category := models.Category{Slug: catSlug} category.Read("Slug") form.Category = category.Id post.ListTopicsOfCategory(&form.Topics, &category) this.Data["Category"] = &category } else { this.Redirect(setting.AppUrl, 302) } } this.SetFormSets(&form) }
//Get the posts by category func (this *PostListRouter) Category() { this.TplNames = "post/home.html" //check category slug slug := this.GetString(":slug") cat := models.Category{Slug: slug} if err := cat.Read("Slug"); err != nil { this.Abort("404") return } //get posts by category slug, order by Created desc qs := models.Posts().Filter("Category", &cat) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(setting.PostCountPerPage, cnt) qs = qs.OrderBy("-LastReplied").Limit(setting.PostCountPerPage, pager.Offset()).RelatedSel() var posts []models.Post models.ListObjects(qs, &posts) this.Data["Category"] = &cat this.Data["Posts"] = posts //top nav bar data var cats []models.Category this.setCategories(&cats) var topics []models.Topic this.setTopicsOfCategory(&topics, &cat) this.Data["CategorySlug"] = cat.Slug this.Data["SortSlug"] = "" var newBestPosts []models.Post this.setNewBestPostsOfCategory(&newBestPosts, &cat) //most replys posts var mostReplysPosts []models.Post this.setMostReplysPostsOfCategory(&mostReplysPosts, &cat) this.setSidebarBuilletinInfo() }
func (this *PostRouter) NewPostSubmit() { this.TplNames = "post/new.html" if this.CheckActiveRedirect() { return } form := post.PostForm{Locale: this.Locale} topicSlug := this.GetString("topic") if len(topicSlug) > 0 { topic := models.Topic{Slug: topicSlug} err := topic.Read("Slug") if err == nil { form.Category = topic.Category.Id form.Topic = topic.Id this.Data["Topic"] = &topic } else { beego.Error("Can not find topic by slug:", topicSlug) } } else { topicId, err := this.GetInt("Topic") if err == nil { topic := models.Topic{Id: int(topicId)} err = topic.Read("Id") if err == nil { form.Category = topic.Category.Id form.Topic = topic.Id this.Data["Topic"] = &topic } else { beego.Error("Can not find topic by id:", topicId) } } else { beego.Error("Parse param Topic from request failed", err) } } if categorySlug := this.GetString("category"); categorySlug != "" { beego.Debug("Find category slug:", categorySlug) category := models.Category{Slug: categorySlug} category.Read("Slug") this.Data["Category"] = &category } post.ListTopics(&form.Topics) if !this.ValidFormSets(&form) { return } var post models.Post if err := form.SavePost(&post, &this.User); err == nil { this.JsStorage("deleteKey", "post/new") this.Redirect(post.Link(), 302) } }
func (this *PostListRouter) CatNavs() { this.TplNames = "post/home.html" //check category slug and sort slug catSlug := this.GetString(":catSlug") sortSlug := this.GetString(":sortSlug") cat := models.Category{Slug: catSlug} if err := cat.Read("Slug"); err != nil { this.Abort("404") return } qs := models.Posts().Filter("Category", &cat) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(setting.PostCountPerPage, cnt) switch sortSlug { case "recent": qs = qs.OrderBy("-Created") case "hot": qs = qs.OrderBy("-LastReplied") case "cold": qs = qs.Filter("Replys", 0).OrderBy("-Created") default: this.Abort("404") return } qs = qs.Limit(setting.PostCountPerPage, pager.Offset()).RelatedSel() var posts []models.Post models.ListObjects(qs, &posts) this.Data["Category"] = &cat this.Data["Posts"] = posts //top nav bar data var cats []models.Category this.setCategories(&cats) var topics []models.Topic this.setTopicsOfCategory(&topics, &cat) this.Data["CategorySlug"] = cat.Slug this.Data["SortSlug"] = sortSlug var newBestPosts []models.Post this.setNewBestPostsOfCategory(&newBestPosts, &cat) //most replys posts var mostReplysPosts []models.Post this.setMostReplysPostsOfCategory(&mostReplysPosts, &cat) this.setSidebarBuilletinInfo() }
//Topic Home Page func (this *PostListRouter) Topic() { this.TplNames = "post/topic.html" //check topic slug slug := this.GetString(":slug") topic := models.Topic{Slug: slug} if err := topic.Read("Slug"); err != nil { this.Abort("404") return } //get topic category category := models.Category{Id: topic.Category.Id} if err := category.Read("Id"); err != nil { this.Abort("404") return } //get posts by topic qs := models.Posts().Filter("Topic", &topic) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(setting.PostCountPerPage, cnt) qs = qs.OrderBy("-LastReplied").Limit(setting.PostCountPerPage, pager.Offset()).RelatedSel() var posts []models.Post models.ListObjects(qs, &posts) this.Data["Posts"] = posts this.Data["Topic"] = &topic this.Data["Category"] = &category //check whether added it into favorite list HasFavorite := false if this.IsLogin { HasFavorite = models.FollowTopics().Filter("User", &this.User).Filter("Topic", &topic).Exist() } this.Data["HasFavorite"] = HasFavorite //new best post var newBestPosts []models.Post this.setNewBestPostsOfTopic(&newBestPosts, &topic) //most replys posts var mostReplysPosts []models.Post this.setMostReplysPostsOfTopic(&mostReplysPosts, &topic) this.setSidebarBuilletinInfo() }