[bknr-cvs] ksprotte changed trunk/projects/bos/

BKNR Commits bknr at bknr.net
Mon Sep 1 16:01:56 UTC 2008


Revision: 3761
Author: ksprotte
URL: http://bknr.net/trac/changeset/3761

basic POI edit functionality in place
U   trunk/projects/bos/payment-website/static/cms.js
U   trunk/projects/bos/web/poi-handlers.lisp

Modified: trunk/projects/bos/payment-website/static/cms.js
===================================================================
--- trunk/projects/bos/payment-website/static/cms.js	2008-09-01 13:39:00 UTC (rev 3760)
+++ trunk/projects/bos/payment-website/static/cms.js	2008-09-01 16:01:56 UTC (rev 3761)
@@ -85,3 +85,22 @@
     return confirm(confirm_string);
 }
 
+function upload_new_medium_input_toggle(medium_type)
+{
+    var upload_new_medium_form = $("upload_new_medium_form");
+    var upload_new_medium_input = $("upload_new_medium_input");
+    var upload_new_medium_input_label = $("upload_new_medium_input_label");
+    if (medium_type == "poi-movie") {
+        upload_new_medium_input.setAttribute("type", "text");
+        upload_new_medium_input.setAttribute("name", "url");
+        upload_new_medium_form.setAttribute("onsubmit", "return parse_youtube_link($(\"upload_new_medium_input\"));");
+        upload_new_medium_input_label.innerHTML = "URL";
+    } else {
+        upload_new_medium_input.setAttribute("type", "file");
+        upload_new_medium_input.setAttribute("name", "image-file");
+        upload_new_medium_input.setAttribute("onchange", "return true;");
+        upload_new_medium_form.setAttribute("onsubmit", "return true;");
+        upload_new_medium_input_label.innerHTML = "File";
+    }
+}
+

Modified: trunk/projects/bos/web/poi-handlers.lisp
===================================================================
--- trunk/projects/bos/web/poi-handlers.lisp	2008-09-01 13:39:00 UTC (rev 3760)
+++ trunk/projects/bos/web/poi-handlers.lisp	2008-09-01 16:01:56 UTC (rev 3761)
@@ -134,17 +134,21 @@
         (:tr (:td (submit-button "save" "save")
                   (submit-button "delete" "delete" :confirm "Really delete the POI?")))))
       (:h2 "Upload new medium")
-      ((:form :method "post" :action "/edit-poi-medium" :enctype "multipart/form-data")
+      ((:form :id "upload_new_medium_form"
+              :method "post" :action "/edit-poi-medium" :enctype "multipart/form-data")
        (:table
         ((:input :type "hidden" :name "poi" :value (store-object-id poi)))
         (:tr (:td "Type")
-             (:td (select-box "new-medium-type" (mapcar #'(lambda (class-name) (string-downcase class-name))
-                                                        (class-subclasses (find-class 'poi-medium)))
-                              :default "poi-image")))
+             (:td ((:select :name "new-medium-type" :size "1"
+                                                    :onchange "upload_new_medium_input_toggle(this.value);")
+                   ((:option :value "poi-image" :selected "selected") "poi-image")
+                   ((:option :value "poi-airal") "poi-airal")
+                   ((:option :value "poi-panorama") "poi-panorama")
+                   ((:option :value "poi-movie") "poi-movie"))))
         (:tr
-         (:td "File")
-         (:td ((:input :type "file" :name "image-file")))
-         (:tr ((:td :colspan "2") (submit-button "upload" "upload"))))))
+         ((:td :id "upload_new_medium_input_label") "File")
+         (:td ((:input :id "upload_new_medium_input" :type "file" :size "60" :name "image-file"))))
+        (:tr ((:td :colspan "2") (submit-button "upload" "upload")))))
       (:h2 "Attached POI media")
       ((:table :border "1")
        (dolist (medium (poi-media poi))
@@ -231,10 +235,13 @@
   (:method ((medium t) &key small)
     (declare (ignore small))
     (html ((:tr :colspan "2") "No preview")))
-  (:method ((medium poi-image) &key small)
+  (:method ((medium store-image) &key small)
+    "The default method for store-images."
     (html
      (:tr (:td "thumbnail")
-          (:td ((:img :src (format nil "/image/~A/thumbnail,,55,55" (store-object-id medium))))))
+          (:td ((:a :href (format nil "/image/~A" (store-object-id medium))
+                    :target "_blank")
+                ((:img :src (format nil "/image/~A/thumbnail,,55,55" (store-object-id medium)))))))
      (unless small
        (html
         (:tr (:td "full image")
@@ -243,8 +250,32 @@
     (declare (ignore small))
     (html
      (:tr (:td "thumbnail")
-          (:td ((:img :src (format nil "/image/~A/thumbnail,,500,100" (store-object-id medium)))))))))
+          (:td ((:a :href (format nil "/image/~A" (store-object-id medium))
+                    :target "_blank")
+                ((:img :src (format nil "/image/~A/thumbnail,,500,100" (store-object-id medium)))))))))
+  (:method ((medium poi-movie) &key small)
+    (if small
+        (call-next-method)
+        (html
+         (:tr (:td "movie")
+              (:td ((:embed :src (poi-movie-url medium)
+                            :type "application/x-shockwave-flash"
+                            :allowFullScreen "true"
+                            :width "425" :height "344"))))))))
 
+(defgeneric medium-handler-validate-image-size (medium-or-type width height)
+  (:method (medium-or-type width height)
+    (declare (ignore medium-or-type width height))
+    t)
+  (:method ((medium standard-object) width height)
+    (medium-handler-validate-image-size (type-of medium) width height))
+  (:method ((type (eql 'poi-image)) width height)
+    (and (= width *poi-image-width*)
+         (= height *poi-image-height*)))
+  (:method ((type (eql 'poi-airal)) width height)
+    (and (= width *poi-image-width*)
+         (= height *poi-image-height*))))
+
 (defmethod handle-object-form ((handler edit-poi-medium-handler) (action (eql :save)) (medium poi-medium))
   (with-query-params (title subtitle description language poi)
     (unless language (setq language (request-language)))
@@ -268,25 +299,32 @@
       "You may " (cmslink (edit-object-url poi) "continue editing the POI"))))
 
 (defmethod handle-object-form ((handler edit-poi-medium-handler) (action (eql :upload)) medium)
-  (with-query-params ((poi nil integer)
-                      new-medium-type)
-    (setq poi (find-store-object poi :class 'poi))
-    (let ((upload (request-uploaded-file "image-file")))
-      (unless upload
-        (error "no file uploaded in upload handler"))
-      (bknr.web:with-image-from-upload* (upload)
-        (unless (and (eql (cl-gd:image-width) *poi-image-width*)
-                     (eql (cl-gd:image-height) *poi-image-height*))
-          (error "Invalid image size. The image needs to be ~D pixels wide and ~D pixels high. Your uploaded ~
-                  image is ~D pixels wide and ~D pixels high. Please use an image editor to resize the image ~
-                  and upload it again."
-                 *poi-image-width* *poi-image-height*
-                 (cl-gd:image-width) (cl-gd:image-height))))
-      (let ((new-medium (import-image upload
-                                      :class-name (if medium
-                                                      (type-of medium)
-                                                      (intern (string-upcase new-medium-type)))
-                                      :initargs `(:poi ,poi))))
+  (flet ((make-new-medium (new-medium-type poi)
+           (case new-medium-type
+             (poi-movie
+              (make-object 'poi-movie :poi poi :url (query-param "url")))
+             (otherwise
+              (let ((upload (request-uploaded-file "image-file")))
+                (unless upload
+                  (error "no file uploaded in upload handler"))
+                (bknr.web:with-image-from-upload* (upload)
+                  (unless (medium-handler-validate-image-size new-medium-type
+                                                              (cl-gd:image-width) (cl-gd:image-height))
+                    (error "Invalid image size. The image needs to be ~D pixels wide and ~D pixels high. Your uploaded ~
+                            image is ~D pixels wide and ~D pixels high. Please use an image editor to resize the image ~
+                            and upload it again."
+                           *poi-image-width* *poi-image-height*
+                           (cl-gd:image-width) (cl-gd:image-height)))
+                  (import-image upload
+                                :class-name new-medium-type
+                                :initargs `(:poi ,poi))))))))
+    (with-query-params ((poi nil integer)
+                        new-medium-type)
+      (setq poi (find-store-object poi :class 'poi))
+      (let* ((new-medium-type (if medium
+                                  (type-of medium)
+                                  (intern (string-upcase new-medium-type))))
+             (new-medium (make-new-medium new-medium-type poi)))
         (when medium
           (very-shallow-copy-textual-attributes medium new-medium)
           (delete-object medium))




More information about the Bknr-cvs mailing list