github.com/saadullahsaeed/fragmenta-cms@v1.5.4/src/pages/actions/update.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  	"github.com/fragmenta/fragmenta-cms/src/users"
    14  )
    15  
    16  // HandleUpdateShow renders the form to update a page.
    17  func HandleUpdateShow(w http.ResponseWriter, r *http.Request) error {
    18  
    19  	// Fetch the  params
    20  	params, err := mux.Params(r)
    21  	if err != nil {
    22  		return server.InternalError(err)
    23  	}
    24  
    25  	// Find the page
    26  	page, err := pages.Find(params.GetInt(pages.KeyName))
    27  	if err != nil {
    28  		return server.NotFoundError(err)
    29  	}
    30  
    31  	// Authorise update page
    32  	user := session.CurrentUser(w, r)
    33  	err = can.Update(page, user)
    34  	if err != nil {
    35  		return server.NotAuthorizedError(err)
    36  	}
    37  
    38  	// Fetch the users
    39  	authors, err := users.FindAll(users.Where("role=?", users.Admin))
    40  	if err != nil {
    41  		return server.InternalError(err)
    42  	}
    43  
    44  	// Render the template
    45  	view := view.NewRenderer(w, r)
    46  	view.AddKey("page", page)
    47  	view.AddKey("authors", authors)
    48  	view.AddKey("currentUser", user)
    49  	return view.Render()
    50  }
    51  
    52  // HandleUpdate handles the POST of the form to update a page
    53  func HandleUpdate(w http.ResponseWriter, r *http.Request) error {
    54  
    55  	// Fetch the  params
    56  	params, err := mux.Params(r)
    57  	if err != nil {
    58  		return server.InternalError(err)
    59  	}
    60  
    61  	// Find the page
    62  	page, err := pages.Find(params.GetInt(pages.KeyName))
    63  	if err != nil {
    64  		return server.NotFoundError(err)
    65  	}
    66  
    67  	// Check the authenticity token
    68  	err = session.CheckAuthenticity(w, r)
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	// Authorise update page
    74  	user := session.CurrentUser(w, r)
    75  	err = can.Update(page, user)
    76  	if err != nil {
    77  		return server.NotAuthorizedError(err)
    78  	}
    79  
    80  	// Validate the params, removing any we don't accept
    81  	pageParams := page.ValidateParams(params.Map(), pages.AllowedParams())
    82  
    83  	err = page.Update(pageParams)
    84  	if err != nil {
    85  		return server.InternalError(err)
    86  	}
    87  
    88  	// Redirect to page
    89  	return server.Redirect(w, r, page.ShowURL())
    90  }