| 1 |
(in-package :bos.web) |
|---|
| 2 |
|
|---|
| 3 |
(enable-interpol-syntax) |
|---|
| 4 |
|
|---|
| 5 |
(defmethod edit-object-url ((news-item news-item)) |
|---|
| 6 |
(format nil "/edit-news/~A" (store-object-id news-item))) |
|---|
| 7 |
|
|---|
| 8 |
(defclass edit-news-handler (editor-only-handler edit-object-handler) |
|---|
| 9 |
()) |
|---|
| 10 |
|
|---|
| 11 |
(defmethod handle-object-form ((handler edit-news-handler) action (news-item (eql nil))) |
|---|
| 12 |
(let ((language (request-language))) |
|---|
| 13 |
(with-bos-cms-page (:title "Edit news items") |
|---|
| 14 |
(content-language-chooser) |
|---|
| 15 |
(:h2 "Create new item") |
|---|
| 16 |
((:form :method "post") |
|---|
| 17 |
(submit-button "new" "new")) |
|---|
| 18 |
(if (all-news-items) |
|---|
| 19 |
(html |
|---|
| 20 |
(:h2 "Choose existing news item") |
|---|
| 21 |
(:ul |
|---|
| 22 |
(dolist (news-item (all-news-items)) |
|---|
| 23 |
(let ((id (store-object-id news-item))) |
|---|
| 24 |
(html (:li (cmslink #?"edit-news/$(id)" |
|---|
| 25 |
(:princ-safe (format-date-time (news-item-time news-item))) |
|---|
| 26 |
" - " |
|---|
| 27 |
(:princ-safe (or (news-item-title news-item language) "[no title in this language]"))))))))) |
|---|
| 28 |
(html |
|---|
| 29 |
(:h2 "No news items created yet")))))) |
|---|
| 30 |
|
|---|
| 31 |
(defmethod handle-object-form ((handler edit-news-handler) (action (eql :new)) (news-item (eql nil))) |
|---|
| 32 |
(redirect (format nil "/edit-news/~D" (store-object-id (make-news-item))))) |
|---|
| 33 |
|
|---|
| 34 |
(defmethod handle-object-form ((handler edit-news-handler) action news-item) |
|---|
| 35 |
(let ((language (request-language))) |
|---|
| 36 |
(with-bos-cms-page (:title "Edit news item") |
|---|
| 37 |
(content-language-chooser) |
|---|
| 38 |
((:script :type "text/javascript") |
|---|
| 39 |
"tinyMCE.init({ mode : 'textareas', theme : 'advanced' });") |
|---|
| 40 |
((:form :method "post") |
|---|
| 41 |
(:table |
|---|
| 42 |
(:tr (:td "title") |
|---|
| 43 |
(:td (text-field "title" |
|---|
| 44 |
:value (news-item-title news-item language)))) |
|---|
| 45 |
(:tr (:td "text") |
|---|
| 46 |
(:td (textarea-field "text" |
|---|
| 47 |
:value (news-item-text news-item language)))) |
|---|
| 48 |
(:tr (:td (submit-button "save" "save") (submit-button "delete" "delete" :confirm "Really delete the news item?")))))))) |
|---|
| 49 |
|
|---|
| 50 |
(defmethod handle-object-form ((handler edit-news-handler) (action (eql :save)) news-item) |
|---|
| 51 |
(let ((language (request-language))) |
|---|
| 52 |
(with-query-params (title text) |
|---|
| 53 |
(update-news-item news-item language :title title :text text) |
|---|
| 54 |
(with-bos-cms-page (:title "News item updated") |
|---|
| 55 |
(:h2 "Your changes have been saved") |
|---|
| 56 |
"You may " (cmslink (edit-object-url news-item) "continue editing the news item"))))) |
|---|
| 57 |
|
|---|
| 58 |
(defmethod handle-object-form ((handler edit-news-handler) (action (eql :delete)) news-item) |
|---|
| 59 |
(delete-object news-item) |
|---|
| 60 |
(with-bos-cms-page (:title "News item has been deleted") |
|---|
| 61 |
(:h2 "The news item has been deleted"))) |
|---|