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  }