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) }
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") } if len(i18n.GetLangByIndex(form.Lang)) == 0 { v.SetError("Lang", "Not Found") } }
// Add this topic into favorite list func (this *PostListRouter) TopicSubmit() { slug := this.GetString(":slug") topic := models.Topic{Slug: slug} if err := topic.Read("Slug"); err != nil { this.Abort("404") return } result := map[string]interface{}{ "success": false, } if this.IsAjax() { action := this.GetString("action") switch action { case "favorite": if this.IsLogin { qs := models.FollowTopics().Filter("User", &this.User).Filter("Topic", &topic) if qs.Exist() { qs.Delete() } else { fav := models.FollowTopic{User: &this.User, Topic: &topic} fav.Insert() } topic.RefreshFollowers() this.User.RefreshFavTopics() result["success"] = true } } } this.Data["json"] = result this.ServeJson() }
// view for new object save func (this *TopicAdminRouter) Save() { form := post.TopicAdminForm{Create: true} if this.ValidFormSets(&form) == false { return } var topic models.Topic form.SetToTopic(&topic) if err := topic.Insert(); err == nil { this.FlashRedirect(fmt.Sprintf("/admin/topic/%d", topic.Id), 302, "CreateSuccess") return } else { beego.Error(err) this.Data["Error"] = err } }
func (form *TopicAdminForm) SetToTopic(topic *models.Topic) { utils.SetFormValues(form, topic, "Id") if topic.Category != nil { topic.Category.Id = form.Category } else { topic.Category = &models.Category{Id: form.Category} } }
//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() }
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) } }