src/view/settings.lisp

DOWNLOAD
(in-package :murja.view.settings)

(named-readtables:in-readtable :murja.ps)

(defroute save-settings ("/settings"
			 :method :post
			 :decorators (@db
				      @ssr-authenticated)) ()

  (let ((abilities (coerce (murja.model.user:abilities *user*) 'list)))
    (when (member "update-settings" abilities :test 'equal)
      (let ((form (lisp-fixup:formdata->hashmap (hunchentoot:raw-post-data :force-text t)))
	    (settings (all-setting-names)))
	(maphash (lambda (key value)
		   (when (member key settings :test 'equal)
		     (let ((accessor (setting-getter key)))
		       (funcall accessor value))))
		 form)
	
	(setf (hunchentoot:return-code*) 204)
	""))))

(deftab settings (:url "/settings"
		  :title "Settings"
		  :require-login t
		  :needed-abilities ("update-settings"))
  (let ((all-settings (all-setting-names)))
    (:form.form-grid :action "/settings" :method "post"
	   (dolist (setting all-settings)
	     (let ((getter (setting-getter setting)))
	       (if getter
		   (progn 
		     (:label ("~a: " setting))
		     (:input :type :text :value (funcall getter) :name setting))
		   (:div.alert ("~s is missing it's getter" setting)))))

	   (:input :type "submit" :value "Save settings"))))