Revision: 3759 Author: ksprotte URL: http://bknr.net/trac/changeset/3759
Improved POI-medium edit handler.
U trunk/projects/bos/m2/packages.lisp U trunk/projects/bos/m2/poi.lisp U trunk/projects/bos/web/poi-handlers.lisp
Modified: trunk/projects/bos/m2/packages.lisp =================================================================== --- trunk/projects/bos/m2/packages.lisp 2008-09-01 11:22:08 UTC (rev 3758) +++ trunk/projects/bos/m2/packages.lisp 2008-09-01 13:11:09 UTC (rev 3759) @@ -207,6 +207,7 @@ ;; pois #:title #:subtitle #:description ; for slot-string access #:update-textual-attributes + #:very-shallow-copy-textual-attributes #:poi-medium #:poi-medium-poi #:make-poi-medium
Modified: trunk/projects/bos/m2/poi.lisp =================================================================== --- trunk/projects/bos/m2/poi.lisp 2008-09-01 11:22:08 UTC (rev 3758) +++ trunk/projects/bos/m2/poi.lisp 2008-09-01 13:11:09 UTC (rev 3759) @@ -32,6 +32,15 @@ (setf (slot-string obj 'description language) description)) obj)
+(deftransaction very-shallow-copy-textual-attributes (from to) + "Useful for making the TEXTUAL-ATTRIBUTES of FROM available to TO, +before FROM is deleted. Please note that copying is so shallow that +FROM and TO must not both continue to exist." + (setf (slot-value to 'title) (slot-value from 'title) + (slot-value to 'subtitle) (slot-value from 'subtitle) + (slot-value to 'description) (slot-value from 'description)) + to) + ;;; poi-medium (defpersistent-class poi-medium (textual-attributes-mixin) ((poi :reader poi-medium-poi :initarg :poi))) @@ -157,7 +166,7 @@ ;;; Provides for the shifting of images in the edit-poi handler. ;;; Exchanges (nth index (poi-sat-images poi)) with ;;; (nth (1+ index) (poi-sat-images poi)). -(deftransaction poi-sat-images-exchange-neighbours (poi index) +(deftransaction poi-sat-images-exchange-neighbours (poi index) (check-type index (mod 6)) (multiple-value-bind (images positions) (poi-images poi) @@ -248,4 +257,3 @@ (warn "~s has a url of ~s" movie (poi-movie-url movie)))))) (mapc #'poi-sanity-check (class-instances 'poi)) (values))) -
Modified: trunk/projects/bos/web/poi-handlers.lisp =================================================================== --- trunk/projects/bos/web/poi-handlers.lisp 2008-09-01 11:22:08 UTC (rev 3758) +++ trunk/projects/bos/web/poi-handlers.lisp 2008-09-01 13:11:09 UTC (rev 3759) @@ -130,8 +130,7 @@ ((:img :border "0" :src "/images/pfeil-r.gif")))))))))) (unless (= 6 (length (poi-sat-images poi))) (html - :br - (cmslink (format nil "edit-poi-medium/?poi=~A" (store-object-id poi)) "[new]"))))) + (:p "You may add to these by uploading a new medium of type 'poi-image' below."))))) (:tr (:td (submit-button "save" "save") (submit-button "delete" "delete" :confirm "Really delete the POI?"))))) (:h2 "Upload new medium") @@ -274,20 +273,22 @@
(defmethod handle-object-form ((handler edit-poi-medium-handler) action (medium poi-medium)) (with-query-params (language poi) + (assert poi nil "POI id should have been given as a GET param") (unless language (setq language (request-language))) (with-bos-cms-page (:title (format nil "Edit ~A" (medium-pretty-type-string medium))) (html (cmslink (edit-object-url (poi-medium-poi medium)) "Back to POI") (content-language-chooser) - ((:form :method "post" :enctype "multipart/form-data") - ((:input :type "hidden" :name "poi" :value poi)) - (:table (medium-handler-preview medium) - (:tr ((:td :colspan "2" :height "10"))) + (:table (medium-handler-preview medium) + (:tr ((:td :colspan "2" :height "10"))) + ((:form :method "post" :enctype "multipart/form-data") + ((:input :type "hidden" :name "poi" :value poi)) (:tr (:td "upload new image") (:td ((:input :type "file" :name "image-file")) :br - (submit-button "upload" "upload"))) - (:tr ((:td :colspan "2" :height "10"))) + (submit-button "upload" "upload")))) + (:tr ((:td :colspan "2" :height "10"))) + ((:form :method "post") (:tr (:td "title") (:td (text-field "title" :value (slot-string medium 'title language)))) @@ -327,7 +328,7 @@ (:td ((:img :src (format nil "/image/~A/thumbnail,,500,100" (store-object-id medium)))))))))
(defmethod handle-object-form ((handler edit-poi-medium-handler) (action (eql :save)) (medium poi-medium)) - (with-query-params (title subtitle description language) + (with-query-params (title subtitle description language poi) (unless language (setq language (request-language))) (update-textual-attributes medium language :title title @@ -336,7 +337,8 @@ (let ((type-string (medium-pretty-type-string medium))) (with-bos-cms-page (:title (format nil "~A has been updated" type-string)) (:h2 (format nil "The ~A information has been updated" type-string)) - "You may " (cmslink (format nil "~A?language=~A" (edit-object-url medium) language) + "You may " (cmslink (format nil "~A?language=~A&poi=~A" + (edit-object-url medium) language poi) (:princ-safe (format nil "continue editing the ~A" type-string)))))))
(defmethod handle-object-form ((handler edit-poi-medium-handler) (action (eql :delete)) (medium poi-medium)) @@ -368,6 +370,7 @@ (intern (string-upcase new-medium-type))) :initargs `(:poi ,poi)))) (when medium + (very-shallow-copy-textual-attributes medium new-medium) (delete-object medium)) (redirect (format nil "/edit-poi-medium/~D?poi=~D" (store-object-id new-medium)