// 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) }
//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() }
//Get the home page func (this *PostListRouter) Home() { this.TplNames = "post/home.html" //get posts by Created datetime desc order var posts []models.Post qs := models.Posts() cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(setting.PostCountPerPage, cnt) qs = qs.OrderBy("-LastReplied").Limit(setting.PostCountPerPage, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) this.Data["Posts"] = posts //top nav bar data var cats []models.Category this.setCategories(&cats) this.Data["SortSlug"] = "" this.Data["CategorySlug"] = "home" //new best posts var newBestPosts []models.Post this.setNewBestPosts(&newBestPosts) //most replys posts var mostReplysPosts []models.Post this.setMostReplysPosts(&mostReplysPosts) this.setSidebarBuilletinInfo() }
// view for list model data func (this *PostAdminRouter) List() { var posts []models.Post qs := models.Posts().RelatedSel() if err := this.SetObjects(qs, &posts); err != nil { this.Data["Error"] = err beego.Error(err) } }
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 SearchPost(q string, page int) ([]*models.Post, *utils.SphinxMeta, error) { q = filterSearchQ(q) if len(q) == 0 { return nil, nil, fmt.Errorf("empty query") } sdb, err := utils.SphinxPools.GetConn() if err != nil { return nil, nil, err } defer sdb.Close() pers := 20 if page == 0 { page = 1 } offset := (page - 1) * pers var pids orm.ParamsList query := fmt.Sprintf(`SELECT @id AS pid, updated FROM `+setting.SphinxIndex+` WHERE MATCH('`+q+`') ORDER BY @weight DESC, updated DESC LIMIT %d, %d OPTION ranker=bm25`, offset, pers) if _, err = sdb.RawValuesFlat(query, &pids, "pid"); err != nil { return nil, nil, err } var meta *utils.SphinxMeta if meta, err = sdb.ShowMeta(); err != nil { return nil, nil, err } sdb.Close() if len(pids) == 0 { return nil, meta, nil } var posts []*models.Post _, err = models.Posts().Filter("Id__in", pids).RelatedSel().All(&posts) if err != nil { return nil, nil, err } return posts, meta, nil }
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() }
func PostBrowsersAdd(uid int, ip string, post *models.Post) { var key string if uid == 0 { key = ip } else { key = utils.ToStr(uid) } key = fmt.Sprintf("PCA.%d.%s", post.Id, key) if setting.Cache.Get(key) != nil { return } _, err := models.Posts().Filter("Id", post.Id).Update(orm.Params{ "Browsers": orm.ColValue(orm.Col_Add, 1), }) if err != nil { beego.Error("PostCounterAdd ", err) } setting.Cache.Put(key, true, 60) }
func (this *PostRouter) loadPost(post *models.Post, user *models.User) bool { id, _ := this.GetInt(":post") if id > 0 { qs := models.Posts().Filter("Id", id) if user != nil { qs = qs.Filter("User", user.Id) } qs.RelatedSel(1).One(post) } if post.Id == 0 { this.Abort("404") return true } this.Data["Post"] = post return false }
//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) Home() { this.Data["IsHome"] = true this.TplName = "post/home.html" var cats []models.Category this.setCategories(&cats) var posts []models.Post qs := models.Posts().OrderBy("-Created").Limit(25).RelatedSel() qs = this.postsFilter(qs) models.ListObjects(qs, &posts) this.Data["Posts"] = posts this.Data["CategorySlug"] = "hot" var topics []models.Topic post.ListTopics(&topics) this.Data["Topics"] = topics }
func (this *UserRouter) FavoritePosts() { this.TplNames = "user/favorite-posts.html" var user models.User if this.getUser(&user) { return } var postIds orm.ParamsList var posts []models.Post nums, _ := user.FavoritePosts().OrderBy("-Created").ValuesFlat(&postIds, "Post") if nums > 0 { qs := models.Posts().Filter("Id__in", postIds) cnt, _ := models.CountObjects(qs) pager := this.SetPaginator(setting.PostCountPerPage, cnt) qs = qs.OrderBy("-Created").Limit(setting.PostCountPerPage, pager.Offset()).RelatedSel() models.ListObjects(qs, &posts) } this.Data["TheUserFavoritePosts"] = posts }
// view for delete object func (this *TopicAdminRouter) Delete() { if this.FormOnceNotMatch() { return } //check whether there are posts under this topic qs := models.Posts().Filter("Topic__id", this.object.Id) cnt, _ := qs.Count() if cnt > 0 { this.FlashRedirect("/admin/topic", 302, "DeleteNotAllowed") return } else { // delete object if err := this.object.Delete(); err == nil { this.FlashRedirect("/admin/topic", 302, "DeleteSuccess") return } else { beego.Error(err) this.Data["Error"] = err } } }
// 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 } }
func (this *PostListRouter) Navs() { this.TplNames = "post/home.html" sortSlug := this.GetString(":sortSlug") var posts []models.Post qs := models.Posts() 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() models.ListObjects(qs, &posts) this.Data["Posts"] = posts //top nav bar data var cats []models.Category this.setCategories(&cats) this.Data["SortSlug"] = sortSlug this.Data["CategorySlug"] = "home" //new best posts var newBestPosts []models.Post this.setNewBestPosts(&newBestPosts) //most replys posts var mostReplysPosts []models.Post this.setMostReplysPosts(&mostReplysPosts) this.setSidebarBuilletinInfo() }
func ListPostsOfTopic(topic *models.Topic, posts *[]models.Post) (int64, error) { return models.Posts().Filter("Topic", topic).RelatedSel().OrderBy("-Updated").All(posts) }
// 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 }
func (this *PostAdminRouter) ObjectQs() orm.QuerySeter { return models.Posts().RelatedSel() }
//Get new best posts by category func (this *PostListRouter) setNewBestPostsOfCategory(posts *[]models.Post, cat *models.Category) { qs := models.Posts() qs = qs.Filter("IsBest", true).Filter("Category__id", cat.Id).OrderBy("-Created").Limit(10) models.ListObjects(qs, posts) this.Data["NewBestPosts"] = posts }
//Get new best posts by topic func (this *PostListRouter) setNewBestPostsOfTopic(posts *[]models.Post, topic *models.Topic) { qs := models.Posts() qs = qs.Filter("IsBest", true).Filter("Topic__id", topic.Id).OrderBy("-Created").Limit(10) models.ListObjects(qs, posts) this.Data["NewBestPosts"] = posts }
//Get most replys post of topic func (this *PostListRouter) setMostReplysPostsOfTopic(posts *[]models.Post, topic *models.Topic) { qs := models.Posts() qs = qs.Filter("Topic__id", topic.Id).Filter("Replys__gt", 0).OrderBy("-Created", "-Replys").Limit(10) models.ListObjects(qs, posts) this.Data["MostReplysPosts"] = posts }
//Get most replys posts of category func (this *PostListRouter) setMostReplysPostsOfCategory(posts *[]models.Post, cat *models.Category) { qs := models.Posts() qs = qs.Filter("Category__id", cat.Id).Filter("Replys__gt", 0).OrderBy("-Created", "-Replys").Limit(10) models.ListObjects(qs, posts) this.Data["MostReplysPosts"] = posts }
func ListPostsOfCategory(cat *models.Category, posts *[]models.Post) (int64, error) { return models.Posts().Filter("Category", cat).RelatedSel().OrderBy("-Updated").All(posts) }
//Get new best posts func (this *PostListRouter) setNewBestPosts(posts *[]models.Post) { qs := models.Posts() qs = qs.Filter("IsBest", true).OrderBy("-Created").Limit(10) models.ListObjects(qs, posts) this.Data["NewBestPosts"] = posts }