func pageList(ctx *web.Context, page string) string { if app.RequireAuthentication(ctx) { return "" } num := app.PageNumber(page) paginator := app.NewPaginator(num, listPageSize) paginator.Link = "/admin/pages/" sort := "url" var p *Page var pages []Page // do a search, if required, of title and content var err error var numObjects int if len(ctx.Params["Search"]) > 0 { term := M{"$regex": ctx.Params["Search"]} search := M{"$or": []M{M{"url": term}, M{"content": term}}} err = db.Find(p, search).Sort(sort).Skip(paginator.Skip).Limit(listPageSize).All(&pages) numObjects, _ = db.Find(p, search).Count() } else { err = db.Find(p, nil).Sort(sort).Skip(paginator.Skip).Limit(listPageSize).All(&pages) numObjects, _ = db.Cursor(p).Count() } if err != nil { fmt.Println(err) } return adminBase.Render("blog/admin/page-list.mandira", M{ "Pages": pages, "Pagination": paginator.Render(numObjects)}) }
func (pp *PagesPanel) Render() string { var pages []Page db.Find(&Page{}, nil).Limit(indexListSize).All(&pages) return template.Render("blog/admin/pages-panel.mandira", M{ "pages": pages, }) }
func blogPage(ctx *web.Context, page string) string { pn := app.PageNumber(page) perPage := 15 paginator := app.NewPaginator(pn, perPage) paginator.Link = "/blog/page/" var post *Post var posts []Post // do a search, if required, of title and content var err error var numObjects int if len(ctx.Params["Search"]) > 0 { term := M{"$regex": ctx.Params["Search"]} search := M{"published": 1, "$or": []M{M{"title": term}, M{"content": term}}} err = db.Latest(post, search).Skip(paginator.Skip).Limit(perPage).All(&posts) numObjects, _ = db.Latest(post, search).Count() } else { err = db.Latest(post, M{"published": 1}).Skip(paginator.Skip). Limit(perPage).Iter().All(&posts) numObjects, _ = db.Find(post, M{"published": 1}).Count() } if err != nil { fmt.Println(err) } return base.Render("blog/index.mandira", M{ "Rss": RssHref, "Atom": AtomHref, "Posts": posts, "Pagination": paginator.Render(numObjects)}, ctx.Params) }
// A shortcut to return the page for a given url (or nil if there isn't one) func GetPage(url string) *Page { var page *Page err := db.Find(page, bson.M{"url": url}).One(&page) if err != nil && err != mgo.ErrNotFound { panic(err) } if err == mgo.ErrNotFound { return nil } return page }
func LoadGalleryConfig() *GalleryConfig { if loaded { return galleryConfig } db.Find(galleryConfig, nil).One(&galleryConfig) if len(galleryConfig.Type) == 0 { galleryConfig.Type = "picasa" } loaded = true return galleryConfig }
func blogDetail(ctx *web.Context, slug string) string { var post = new(Post) err := db.Find(post, M{"slug": slug}).One(&post) if err != nil { fmt.Println(err) ctx.Abort(404, "Page not found") return "" } return template.Render("base.mandira", M{ "body": RenderPost(post), "title": post.Title, "description": post.Summary}) }
func ValidateUser(username, password string) bool { hash := sha1.New() io.WriteString(hash, password) user := new(User) hashstr := fmt.Sprintf("%x", hash.Sum(nil)) err := db.Find(user, bson.M{"username": username}).One(&user) if err == mgo.ErrNotFound { return false } if user.Password != hashstr { return false } return true }
func pageEdit(ctx *web.Context, url string) string { if app.RequireAuthentication(ctx) { return "" } var page *Page err := db.Find(page, M{"url": url}).One(&page) if err != nil { fmt.Println(err) ctx.Redirect(302, "/admin/") return "" } if len(ctx.Params) > 1 { page.FromParams(ctx.Params) db.Upsert(page) } return adminBase.Render("blog/admin/pages-edit.mandira", page) }
func postEdit(ctx *web.Context, slug string) string { if app.RequireAuthentication(ctx) { return "" } var post *Post err := db.Find(post, M{"slug": slug}).One(&post) if err != nil { fmt.Println(err) ctx.Redirect(302, "/admin/") return "" } if len(ctx.Params) > 1 { post.FromParams(ctx.Params) db.Upsert(post) } return adminBase.Render("blog/admin/posts-edit.mandira", post, M{ "IsPublished": post.Published == 1, "IdHex": post.Id.Hex()}) }
// Update all picasa data and keep track of required bookkeeping func (p *PicasaAPI) UpdateAll() error { gc := LoadGalleryConfig() err := gc.Check() if err != nil { return err } err = p.UpdateAlbums() if err != nil { return err } var albums []*PicasaAlbum db.Find(&PicasaAlbum{}, nil).All(&albums) var wg WaitGroupErr for _, album := range albums { wg.Add(1) go func(a *PicasaAlbum) { defer wg.Done() err := p.UpdatePhotos(a) if err != nil { wg.Error(err) } }(album) } wg.Wait() gc.LastRun = time.Now().Unix() gc.Save() err = wg.GetError() if err != nil { return err } return nil }
// List detail for published posts func postList(ctx *web.Context, page string) string { if app.RequireAuthentication(ctx) { return "" } num := app.PageNumber(page) paginator := app.NewPaginator(num, listPageSize) paginator.Link = "/admin/posts/" var posts []Post // do a search, if required, of title and content var err error var numObjects int if len(ctx.Params["Search"]) > 0 { term := M{"$regex": ctx.Params["Search"]} search := M{"published": 1, "$or": []M{ M{"title": term}, M{"content": term}, }} err = db.Latest(&Post{}, search).Skip(paginator.Skip).Limit(listPageSize).All(&posts) numObjects, _ = db.Latest(&Post{}, search).Count() } else { err = db.Latest(&Post{}, M{"published": 1}).Skip(paginator.Skip). Limit(listPageSize).All(&posts) numObjects, _ = db.Find(&Post{}, M{"published": 1}).Count() } if err != nil { fmt.Println(err) } return adminBase.Render("blog/admin/post-list.mandira", M{ "Posts": posts, "Pagination": paginator.Render(numObjects)}) }