github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/users/actions/index.go (about) 1 package useractions 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/users" 13 ) 14 15 // HandleIndex displays a list of users. 16 func HandleIndex(w http.ResponseWriter, r *http.Request) error { 17 18 // Authorise list user 19 currentUser := session.CurrentUser(w, r) 20 err := can.List(users.New(), currentUser) 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 := users.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 case "3": 44 q.Order("name asc") 45 46 default: 47 q.Order("id asc") 48 49 } 50 51 // Filter if requested 52 filter := params.Get("filter") 53 if len(filter) > 0 { 54 q.Where("name ILIKE ?", filter) 55 } 56 57 // Fetch the users 58 results, err := users.FindAll(q) 59 if err != nil { 60 return server.InternalError(err) 61 } 62 63 // Render the template 64 view := view.NewRenderer(w, r) 65 view.AddKey("currentUser", currentUser) 66 view.AddKey("filter", filter) 67 view.AddKey("users", results) 68 return view.Render() 69 }