(defmethod find-foreign-instances ((slot foreign-key-slot-presentation))
- (clsql:select (class-name (class-of (meta-model:explode-foreign-key (instance slot) (slot-name slot))))))
+ (clsql:select (class-name (class-of (meta-model:explode-foreign-key (instance slot) (slot-name slot))))
+ :order-by (car (list-keys (instance slot)))))
(defmethod get-foreign-instances ((slot has-many-slot-presentation) instance)
- (slot-value instance (slot-name slot)))
+ (sort (slot-value instance (slot-name slot)) #'<
+ :key #'(lambda (x) (funcall (car (list-keys x)) x))))
(defmethod lol::presentation-slot-value ((slot has-many-slot-presentation) instance)
(get-foreign-instances slot instance))
((list-view :accessor list-view :initarg :list-view :initform :one-line)
(action-view :accessor action-view :initarg :action-view :initform :viewer)
(create-view :initform :creator)
- (select-view :initform :as-string :accessor select-view))
+ (select-view :initform :as-string :accessor select-view)
+ (can-add-new-p :initarg :can-add-new-p :accessor can-add-new-p :initform t)
+ (can-add-existing-p :initarg :can-add-existing-p :accessor can-add-existing-p :initform t))
(:type-name many-to-many)
(:default-initargs :label "many to many"))
(let ((instances (slot-value instance (slot-name slot)))
new-instance)
(<:ul
- (<:li (<ucw:button :action (add-to-many-to-many slot instance)
- (<:as-html "Add New")))
- (<:li (<ucw:button :action (add-to-many-to-many slot instance new-instance)
- (<:as-html "Add:"))
- (<ucw:select :accessor new-instance
- (arnesi:dolist* (i (find-all-instances slot instance))
- (<ucw:option
- :value i
- (lol:present-view (i (select-view slot) slot))))))
+ (when (can-add-new-p slot)
+ (<:li
+ (<ucw:submit :action (add-to-many-to-many slot instance)
+
+ :value "Add New")))
+ (when (can-add-existing-p slot )
+ (<:li (<ucw:submit :action (add-to-many-to-many slot instance new-instance)
+ :value "Add:")
+ (<ucw:select :accessor new-instance
+ (arnesi:dolist* (i (find-all-instances slot instance))
+ (<ucw:option
+ :value i
+ (lol:present-view (i (select-view slot) slot)))))))
(dolist* (i instances)
(<:li
(<ucw:a :action (call-view ((car i) (action-view slot) (ucw::parent slot)))
(<:as-html "(view) "))
(<ucw:a :action (delete-relationship slot (second i) instance)
(<:as-html "(remove) "))
- (present-view ((car i) (list-view slot) (ucw::parent slot)))) ))))
+ (present-view ((car i) (list-view slot) (ucw::parent slot))))))))
(defaction add-to-many-to-many ((slot many-to-many-slot-presentation) instance &optional foreign-instance)