// Get implemented Get method for HomeRouter. 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() }
func (this *UserRouter) Home() { this.TplName = "user/home.html" var user models.User if this.getUser(&user) { return } limit := 5 var posts []*models.Post var comments []*models.Comment user.RecentPosts().Limit(limit).RelatedSel().All(&posts) user.RecentComments().Limit(limit).RelatedSel().All(&comments) var ftopics []*models.FollowTopic var topics []*models.Topic nums, _ := models.FollowTopics().Filter("User", &user.Id).Limit(8).OrderBy("-Created").RelatedSel("Topic").All(&ftopics, "Topic") if nums > 0 { topics = make([]*models.Topic, 0, nums) for _, ft := range ftopics { topics = append(topics, ft.Topic) } } this.Data["TheUserTopics"] = topics this.Data["TheUserTopicsMore"] = nums >= 8 this.Data["TheUserPosts"] = posts this.Data["TheUserComments"] = comments }
func (this *UserRouter) Home() { this.Data["IsUserHomePage"] = true this.TplNames = "user/home.html" var user models.User if this.getUser(&user) { return } //recent posts and comments limit := 5 var posts []*models.Post var comments []*models.Comment user.RecentPosts().Limit(limit).RelatedSel().All(&posts) user.RecentComments().Limit(limit).RelatedSel().All(&comments) this.Data["TheUserPosts"] = posts this.Data["TheUserComments"] = comments //follow topics var ftopics []*models.FollowTopic var topics []*models.Topic ftNums, _ := models.FollowTopics().Filter("User", &user.Id).Limit(8).OrderBy("-Created").RelatedSel("Topic").All(&ftopics, "Topic") if ftNums > 0 { topics = make([]*models.Topic, 0, ftNums) for _, ft := range ftopics { topics = append(topics, ft.Topic) } } this.Data["TheUserFollowTopics"] = topics this.Data["TheUserFollowTopicsMore"] = ftNums >= 8 //favorite posts var favPostIds orm.ParamsList var favPosts []models.Post favNums, _ := user.FavoritePosts().Limit(8).OrderBy("-Created").ValuesFlat(&favPostIds, "Post") if favNums > 0 { qs := models.Posts().Filter("Id__in", favPostIds) qs = qs.OrderBy("-Created").RelatedSel() models.ListObjects(qs, &favPosts) } this.Data["TheUserFavoritePosts"] = favPosts this.Data["TheUserFavoritePostsMore"] = favNums >= 8 }
func (this *UserRouter) FollowTopics() { this.TplNames = "user/follow-topics.html" var user models.User if this.getUser(&user) { return } var ftopics []*models.FollowTopic var topics []*models.Topic nums, _ := models.FollowTopics().Filter("User", &user.Id).OrderBy("-Created").RelatedSel("Topic").All(&ftopics, "Topic") if nums > 0 { topics = make([]*models.Topic, 0, nums) for _, ft := range ftopics { topics = append(topics, ft.Topic) } } this.Data["TheUserFollowTopics"] = topics }
//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() }
// Get implemented Get method for HomeRouter. func (this *PostListRouter) Topic() { slug := this.GetString(":slug") switch slug { default: // View topic. this.TplName = "post/topic.html" topic := models.Topic{Slug: slug} if err := topic.Read("Slug"); err != nil { this.Abort("404") return } pers := 25 qs := models.Posts().Filter("Topic", &topic) 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["Topic"] = &topic this.Data["IsTopic"] = true HasFavorite := false if this.IsLogin { HasFavorite = models.FollowTopics().Filter("User", &this.User).Filter("Topic", &topic).Exist() } this.Data["HasFavorite"] = HasFavorite } }
// Get implemented Get method for HomeRouter. func (this *PostListRouter) Navs() { slug := this.GetString(":slug") switch slug { case "favs", "follow": if this.CheckLoginRedirect() { return } } this.Data["CategorySlug"] = slug this.TplName = fmt.Sprintf("post/navs/%s.html", slug) pers := 25 var posts []models.Post switch slug { case "recent": qs := models.Posts() qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Updated").Limit(pers, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) var cats []models.Category this.setCategories(&cats) case "best": qs := models.Posts().Filter("IsBest", true) qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Created").Limit(pers, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) var cats []models.Category this.setCategories(&cats) case "cold": qs := models.Posts().Filter("Replys", 0) qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Created").Limit(pers, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) var cats []models.Category this.setCategories(&cats) case "favs": var topicIds orm.ParamsList nums, _ := models.FollowTopics().Filter("User", &this.User.Id).OrderBy("-Created").ValuesFlat(&topicIds, "Topic") if nums > 0 { qs := models.Posts().Filter("Topic__in", topicIds) qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Created").Limit(pers, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) var topics []models.Topic nums, _ = models.Topics().Filter("Id__in", topicIds).Limit(8).All(&topics) this.Data["Topics"] = topics this.Data["TopicsMore"] = nums >= 8 } case "follow": var userIds orm.ParamsList nums, _ := this.User.FollowingUsers().OrderBy("-Created").ValuesFlat(&userIds, "FollowUser") if nums > 0 { qs := models.Posts().Filter("User__in", userIds) qs = this.postsFilter(qs) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(pers, cnt) qs = qs.OrderBy("-Created").Limit(pers, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) } } this.Data["Posts"] = posts }