diff --git a/src/handlers/main.lisp b/src/handlers/main.lisp index b9edca6..5dcba04 100644 --- a/src/handlers/main.lisp +++ b/src/handlers/main.lisp @@ -10,6 +10,13 @@ (remove-if #'string-empty-p (uiop:split-string uri :separator "/"))) +(defun get-resource-id (resource request) + (case resource + (survey (second (split-uri request))))) + +(defun get-survey-id (request) + (get-resource-id 'survey request)) + (defun today () "Return today's date formatted as ISO-8601." (local-time:format-timestring nil diff --git a/src/handlers/questionnaire.lisp b/src/handlers/questionnaire.lisp index 7c646e2..77dbbec 100644 --- a/src/handlers/questionnaire.lisp +++ b/src/handlers/questionnaire.lisp @@ -19,6 +19,8 @@ (t (error "Unsupported language: ~A" lang)))) (defun process-questionnaire-get (lang s) + (check-type lang string) + (check-type s survey) (setf *html-lang* lang) (funcall (choose-sus-form lang) (survey-id s))) @@ -31,7 +33,7 @@ (ml-survey/views:questionnaire-submit))) (define-easy-handler (questionnaire :uri #'questionnaire-uri) (lang) - (let ((s (make-instance 'survey :id (second (split-uri (request-uri*)))))) + (let ((s (make-instance 'survey :id (get-survey-id (request-uri*))))) (cond ((eq (hunchentoot:request-method*) :get) (process-questionnaire-get lang s)) ((eq (hunchentoot:request-method*) :post) diff --git a/src/handlers/survey.lisp b/src/handlers/survey.lisp index 2d5a05c..665b3d0 100644 --- a/src/handlers/survey.lisp +++ b/src/handlers/survey.lisp @@ -90,7 +90,7 @@ Returns a list of integers." (survey-uri-p (request-uri request))) (define-easy-handler (survey :uri #'survey-uri) () - (let ((s (make-instance 'survey :id (second (split-uri (request-uri*)))))) + (let ((s (make-instance 'survey :id (get-survey-id (request-uri*))))) (ml-survey/views:survey s (when (survey-data-dir-p s) (sus-calc (survey-data-dir-files s))))))