506 for e in rset.entities()] |
506 for e in rset.entities()] |
507 self.render_items(w, items) |
507 self.render_items(w, items) |
508 |
508 |
509 |
509 |
510 class EditRelationMixIn(ReloadableMixIn): |
510 class EditRelationMixIn(ReloadableMixIn): |
511 def box_item(self, entity, etarget, rql, label): |
511 |
|
512 def box_item(self, entity, etarget, fname, label): |
512 """builds HTML link to edit relation between `entity` and `etarget`""" |
513 """builds HTML link to edit relation between `entity` and `etarget`""" |
513 args = {role(self)[0] : entity.eid, target(self)[0] : etarget.eid} |
514 args = {role(self) : entity.eid, target(self): etarget.eid} |
514 url = self._cw.user_rql_callback((rql, args)) |
|
515 # for each target, provide a link to edit the relation |
515 # for each target, provide a link to edit the relation |
516 return u'[<a href="%s" class="action">%s</a>] %s' % ( |
516 jscall = unicode(js.cw.utils.callAddOrDeleteThenReload(fname, |
517 xml_escape(url), label, etarget.view('incontext')) |
517 self.rtype, |
|
518 args['subject'], |
|
519 args['object'])) |
|
520 return u'[<a href="javascript: %s" class="action">%s</a>] %s' % ( |
|
521 xml_escape(jscall), label, etarget.view('incontext')) |
518 |
522 |
519 def related_boxitems(self, entity): |
523 def related_boxitems(self, entity): |
520 rql = 'DELETE S %s O WHERE S eid %%(s)s, O eid %%(o)s' % self.rtype |
524 return [self.box_item(entity, etarget, 'delete_relation', u'-') |
521 return [self.box_item(entity, etarget, rql, u'-') |
|
522 for etarget in self.related_entities(entity)] |
525 for etarget in self.related_entities(entity)] |
523 |
526 |
524 def related_entities(self, entity): |
527 def related_entities(self, entity): |
525 return entity.related(self.rtype, role(self), entities=True) |
528 return entity.related(self.rtype, role(self), entities=True) |
526 |
529 |
527 def unrelated_boxitems(self, entity): |
530 def unrelated_boxitems(self, entity): |
528 rql = 'SET S %s O WHERE S eid %%(s)s, O eid %%(o)s' % self.rtype |
531 return [self.box_item(entity, etarget, 'add_relation', u'+') |
529 return [self.box_item(entity, etarget, rql, u'+') |
|
530 for etarget in self.unrelated_entities(entity)] |
532 for etarget in self.unrelated_entities(entity)] |
531 |
533 |
532 def unrelated_entities(self, entity): |
534 def unrelated_entities(self, entity): |
533 """returns the list of unrelated entities, using the entity's |
535 """returns the list of unrelated entities, using the entity's |
534 appropriate vocabulary function |
536 appropriate vocabulary function |