github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/index.go (about) 1 package pageactions 2 3 import ( 4 "net/http" 5 6 "github.com/fragmenta/auth/can" 7 "github.com/fragmenta/mux" 8 "github.com/fragmenta/server" 9 "github.com/fragmenta/view" 10 11 "github.com/fragmenta/fragmenta-cms/src/lib/session" 12 "github.com/fragmenta/fragmenta-cms/src/pages" 13 ) 14 15 // HandleIndex displays a list of pages. 16 func HandleIndex(w http.ResponseWriter, r *http.Request) error { 17 18 // Authorise list page 19 user := session.CurrentUser(w, r) 20 err := can.List(pages.New(), user) 21 if err != nil { 22 return server.NotAuthorizedError(err) 23 } 24 25 // Get the params 26 params, err := mux.Params(r) 27 if err != nil { 28 return server.InternalError(err) 29 } 30 31 // Build a query 32 q := pages.Query() 33 34 // Order by required order, or default to id asc 35 switch params.Get("order") { 36 37 case "1": 38 q.Order("created_at desc") 39 40 case "2": 41 q.Order("updated_at desc") 42 43 default: 44 q.Order("id asc") 45 } 46 47 // Filter if requested 48 filter := params.Get("filter") 49 if len(filter) > 0 { 50 q.Where("name ILIKE ?", filter) 51 } 52 53 // Fetch the pages 54 results, err := pages.FindAll(q) 55 if err != nil { 56 return server.InternalError(err) 57 } 58 59 // Render the template 60 view := view.NewRenderer(w, r) 61 view.AddKey("filter", filter) 62 view.AddKey("pages", results) 63 view.AddKey("currentUser", user) 64 return view.Render() 65 }