| 10 | | ;;; poi-image |
|---|
| 11 | | (define-persistent-class poi-image (store-image) |
|---|
| 12 | | ((poi :read) |
|---|
| 13 | | (title :update :initform (make-string-hash-table)) |
|---|
| 14 | | (subtitle :update :initform (make-string-hash-table)) |
|---|
| 15 | | (description :update :initform (make-string-hash-table)))) |
|---|
| | 10 | ;;; textual-attributes-mixin |
|---|
| | 11 | (define-persistent-class textual-attributes-mixin () |
|---|
| | 12 | ((title :update :initform (make-string-hash-table) |
|---|
| | 13 | :documentation "Angezeigter Name") |
|---|
| | 14 | (subtitle :update :initform (make-string-hash-table) |
|---|
| | 15 | :documentation "Unterschrift") |
|---|
| | 16 | (description :update :initform (make-string-hash-table) |
|---|
| | 17 | :documentation "Beschreibungstext"))) |
|---|
| 17 | | (defmethod print-object ((object poi-image) stream) |
|---|
| | 19 | (deftransaction update-textual-attributes (obj language &key title subtitle description) |
|---|
| | 20 | (when title |
|---|
| | 21 | (setf (slot-string obj 'title language) title)) |
|---|
| | 22 | (when subtitle |
|---|
| | 23 | (setf (slot-string obj 'subtitle language) subtitle)) |
|---|
| | 24 | (when description |
|---|
| | 25 | (setf (slot-string obj 'description language) description))) |
|---|
| | 26 | |
|---|
| | 27 | ;;; poi-medium |
|---|
| | 28 | (define-persistent-class poi-medium (textual-attributes-mixin) |
|---|
| | 29 | ((poi :read))) |
|---|
| | 30 | |
|---|
| | 31 | (deftransaction make-poi-medium (class-name &key language title subtitle description poi initargs) |
|---|
| | 32 | (assert (if (or title subtitle description) language t) nil |
|---|
| | 33 | "language needs to be specified, if any of title, subtitle |
|---|
| | 34 | or description is given") |
|---|
| | 35 | (let ((medium (apply #'make-object class-name :poi poi initargs))) |
|---|
| | 36 | (update-textual-attributes medium language |
|---|
| | 37 | :title title |
|---|
| | 38 | :subtitle subtitle |
|---|
| | 39 | :description description) |
|---|
| | 40 | medium)) |
|---|
| | 41 | |
|---|
| | 42 | (defmethod initialize-persistent-instance :after ((poi-medium poi-medium) &key language title subtitle description poi) |
|---|
| | 43 | (when (poi-medium-poi poi-medium) |
|---|
| | 44 | (push poi-medium (poi-media (poi-medium-poi poi-medium))))) |
|---|
| | 45 | |
|---|
| | 46 | (defmethod print-object ((object poi-medium) stream) |
|---|
| 21 | | (deftransaction make-poi-image (language &key title subtitle description poi) |
|---|
| 22 | | (let ((poi-image (make-object 'poi-image :poi poi))) |
|---|
| 23 | | (setf (slot-string poi-image 'title language) title) |
|---|
| 24 | | (setf (slot-string poi-image 'subtitle language) subtitle) |
|---|
| 25 | | (setf (slot-string poi-image 'description language) description) |
|---|
| 26 | | poi-image)) |
|---|
| | 50 | (defmethod destroy-object :before ((poi-medium poi-medium)) |
|---|
| | 51 | (with-slots (poi) poi-medium |
|---|
| | 52 | (when poi |
|---|
| | 53 | (setf (poi-media poi) (remove poi-medium (poi-media poi)))))) |
|---|
| 28 | | (defmethod destroy-object :before ((poi-image poi-image)) |
|---|
| 29 | | (with-slots (poi) poi-image |
|---|
| 30 | | (when poi |
|---|
| 31 | | (setf (poi-images poi) (remove poi-image (poi-images poi)))))) |
|---|
| 32 | | |
|---|
| 33 | | (defmethod initialize-persistent-instance :after ((poi-image poi-image) &key) |
|---|
| 34 | | (setf (poi-images (poi-image-poi poi-image)) (append (poi-images (poi-image-poi poi-image)) (list poi-image)))) |
|---|
| 35 | | |
|---|
| 36 | | (deftransaction update-poi-image (poi-image language |
|---|
| 37 | | &key title subtitle description) |
|---|
| 38 | | (when title |
|---|
| 39 | | (setf (slot-string poi-image 'title language) title)) |
|---|
| 40 | | (when subtitle |
|---|
| 41 | | (setf (slot-string poi-image 'subtitle language) subtitle)) |
|---|
| 42 | | (when description |
|---|
| 43 | | (setf (slot-string poi-image 'description language) description))) |
|---|
| | 55 | ;;; poi-image |
|---|
| | 56 | (define-persistent-class poi-image (store-image poi-medium) |
|---|
| | 57 | ()) |
|---|
| 61 | | (medias :update :initform nil))) |
|---|
| 62 | | |
|---|
| 63 | | (defmethod poi-movies :before ((poi poi)) |
|---|
| 64 | | "Lazily update the db schema. Method can be removed later." |
|---|
| 65 | | (macrolet ((movie (tail) `(car ,tail))) |
|---|
| 66 | | (mapl (lambda (tail) |
|---|
| 67 | | (when (stringp (movie tail)) |
|---|
| 68 | | (setf (movie tail) |
|---|
| 69 | | (make-object 'poi-movie :poi poi :url (movie tail))))) |
|---|
| 70 | | (slot-value poi 'movies)))) |
|---|
| | 71 | (media :update :initform nil))) |
|---|
| 86 | | |
|---|
| 87 | | (defun update-poi (poi language &key title subtitle description area icon published (images :not-set) (movies :not-set)) |
|---|
| 88 | | (with-transaction () |
|---|
| 89 | | (setf (slot-value poi 'published) published) |
|---|
| 90 | | (when title |
|---|
| 91 | | (setf (slot-string poi 'title language) title)) |
|---|
| 92 | | (when subtitle |
|---|
| 93 | | (setf (slot-string poi 'subtitle language) subtitle)) |
|---|
| 94 | | (when description |
|---|
| 95 | | (setf (slot-string poi 'description language) description)) |
|---|
| 96 | | (when area |
|---|
| 97 | | (setf (poi-area poi) area)) |
|---|
| 98 | | (when icon |
|---|
| 99 | | (setf (poi-icon poi) icon)) |
|---|
| 100 | | (when (listp images) |
|---|
| 101 | | (setf (poi-images poi) images)) |
|---|
| 102 | | (when (listp movies) |
|---|
| 103 | | (setf (poi-movies poi) movies)))) |
|---|