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  }