diff of 42f99b308ba587dba2e9b30a9d19740ca3f3a25a
42f99b308ba587dba2e9b30a9d19740ca3f3a25a
diff --git a/src/main.lisp b/src/main.lisp
index f00a89b..7e1af8a 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -9,8 +9,6 @@
(log:info "Starting murja server~%")
(with-db
(migrate))
- (with-db
- (murja.model.settings:setup-settings))
(let ((server (make-instance 'easy-routes:easy-routes-acceptor :port port)))
(when (equalp 3010 port)
(setf *server* server))
diff --git a/src/model/settings.lisp b/src/model/settings.lisp
index ece53ea..e1965ca 100644
--- a/src/model/settings.lisp
+++ b/src/model/settings.lisp
@@ -60,40 +60,22 @@
(assert *inside-defsetting?* nil "Please wrap `(defsetting ~a ~a)` inside a define-settings macro" ,(prin1-to-string name) ,(prin1-to-string default-value))
(quote ,name)))
-(defun setup-settings ()
- (setf *settings*
- (murja.middleware.db:with-db
- (make-instance 'Settings))))
-
(defmacro create-settings ()
`(progn
- (defclass Settings ()
- (,@(map 'list
- (lambda (setting)
- (with-slots (setting-name default-value) setting
- `(,(kw-to-sym setting-name) :initarg ,(read-from-string (format nil ":~a" setting-name))
- :initform (or (caar (postmodern:query "SELECT value FROM blog.settings WHERE key = $1" ,(prin1-to-string setting-name)))
- ,default-value)
- ;; :accessor ,(kw-to-sym setting-name)
- )))
- *setting-fields*)))
-
- (defparameter *settings* nil)
-
,@(map 'list
(lambda (setting)
(with-slots (setting-name default-value) setting
`(progn
(defun ,(kw-to-sym setting-name) (&optional value)
,(format nil "If called without parameters, returns current value of ~a. If with parameters, update's setting's value both in-app and in db" setting-name)
- (with-slots (,(kw-to-sym setting-name)) *settings*
+ (murja.middleware.db:with-db
+ (postmodern:execute "INSERT INTO blog.settings VALUES ($1, $2) ON CONFLICT DO NOTHING" ,(prin1-to-string (kw-to-sym setting-name)) ,(format nil "~s" default-value))
(if value
(progn
- (setf ,(kw-to-sym setting-name) value)
- (murja.middleware.db:with-db
- (update-setting ,(prin1-to-string (kw-to-sym setting-name)) value))
+ (update-setting ,(prin1-to-string (kw-to-sym setting-name)) value)
value)
- ,(kw-to-sym setting-name))))
+ (parse
+ (caar (postmodern:query "SELECT value FROM blog.settings WHERE key = $1" ,(prin1-to-string (kw-to-sym setting-name))))))))
(setf (gethash ,(funcall setting-name-kwcleaner setting-name)
*setting->getter*)
(function ,(kw-to-sym setting-name))))))
@@ -115,7 +97,7 @@
(declare (ignore _))
`(defsetting ,name ,value)))
body)
- (create-settings))))
+ (create-settings))))
;; (defsetting random-size 45)
diff --git a/src/view/settings.lisp b/src/view/settings.lisp
index ad90a63..f78e393 100644
--- a/src/view/settings.lisp
+++ b/src/view/settings.lisp
@@ -13,7 +13,11 @@
(settings (all-setting-names)))
(maphash (lambda (key value)
(when (member key settings :test 'equal)
- (let ((accessor (setting-getter key)))
+ (let* ((accessor (setting-getter key))
+ (old-value (funcall accessor))
+ (value (if (numberp old-value)
+ (parse-number:parse-number value)
+ value)))
(funcall accessor value))))
form)
@@ -31,7 +35,10 @@
(if getter
(progn
(:label ("~a: " setting))
- (:input :type :text :value (funcall getter) :name setting))
+ (:input :type (if (numberp (funcall getter))
+ :number
+ :text)
+ :value (funcall getter) :name setting))
(:div.alert ("~s is missing it's getter" setting)))))
(:input :type "submit" :value "Save settings"))))