116 assert rtype |
116 assert rtype |
117 entity = self.entity(row, col) |
117 entity = self.entity(row, col) |
118 rschema = entity.schema.rschema(rtype) |
118 rschema = entity.schema.rschema(rtype) |
119 if not default: |
119 if not default: |
120 default = xml_escape(self.req._('<no value>')) |
120 default = xml_escape(self.req._('<no value>')) |
|
121 # compute value, checking perms, build form |
121 if rschema.is_final(): |
122 if rschema.is_final(): |
122 value = entity.printable_value(rtype) or default |
123 value = entity.printable_value(rtype) or default |
123 if not entity.has_perm('update'): |
124 if not entity.has_perm('update'): |
124 self.w(value) |
125 self.w(value) |
125 return |
126 return |
|
127 form = self._build_attribute_form(entity, value, rtype, role, reload, |
|
128 row, col, default, landing_zone) |
126 else: |
129 else: |
127 if rvid is None: |
130 if rvid is None: |
128 rvid = self._compute_best_vid(entity, rtype, role) |
131 rvid = self._compute_best_vid(entity, rtype, role) |
129 rset = entity.related(rtype, role) |
132 rset = entity.related(rtype, role) |
130 candidate = self.view(rvid, rset, 'null') |
133 candidate = self.view(rvid, rset, 'null') |
131 if candidate and escape: |
134 if candidate and escape: |
132 value = xml_escape(candidate) |
135 value = xml_escape(candidate) |
133 value = candidate or default |
136 value = candidate or default |
134 # check perms. |
137 if role == 'subject'and not rschema.has_perm(self.req, 'add', |
135 if role == 'subject'and not rschema.has_perm(self.req, 'add', |
138 fromeid=entity.eid): |
136 fromeid=entity.eid): |
139 return self.w(value) |
137 self.w(value) |
140 elif role == 'object' and not rschema.has_perm(self.req, 'add', |
138 return |
141 toeid=entity.eid): |
139 elif role == 'object' and not rschema.has_perm(self.req, 'add', |
142 return self.w(value) |
140 toeid=entity.eid): |
|
141 self.w(value) |
|
142 return |
|
143 # build form. |
|
144 landing_zone = landing_zone or self._defaultlandingzone % self.req._(self._landingzonemsg) |
|
145 value = landing_zone + value |
|
146 if rschema.is_final(): |
|
147 form = self._build_attribute_form(entity, value, rtype, role, reload, |
|
148 row, col, default, landing_zone) |
|
149 else: |
|
150 form = self._build_relation_form(entity, value, rtype, role, row, col, |
143 form = self._build_relation_form(entity, value, rtype, role, row, col, |
151 rvid, default, escape, landing_zone) |
144 rvid, default, escape, landing_zone) |
152 renderer = self.vreg.select_object('formrenderers', 'base', self.req, |
145 renderer = self.vreg.select_object('formrenderers', 'base', self.req, |
153 entity=entity, |
146 entity=entity, |
154 display_label=False, display_help=False, |
147 display_label=False, display_help=False, |
156 table_class='', button_bar_class='buttonbar', |
149 table_class='', button_bar_class='buttonbar', |
157 display_progress_div=False) |
150 display_progress_div=False) |
158 self.w(form.form_render(renderer=renderer)) |
151 self.w(form.form_render(renderer=renderer)) |
159 |
152 |
160 def _build_relation_form(self, entity, value, rtype, role, row, col, rvid, default, escape, lzone): |
153 def _build_relation_form(self, entity, value, rtype, role, row, col, rvid, default, escape, lzone): |
161 print 'relation', rvid |
154 lzone = lzone or self._defaultlandingzone % self.req._(self._landingzonemsg) |
|
155 value = lzone + value |
162 divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid)) |
156 divid = 'd%s' % make_uid('%s-%s' % (rtype, entity.eid)) |
163 event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : rvid, |
157 event_data = {'divid' : divid, 'eid' : entity.eid, 'rtype' : rtype, 'vid' : rvid, |
164 'default' : default, 'role' : role, 'escape' : escape, 'lzone' : lzone} |
158 'default' : default, 'role' : role, 'escape' : escape, 'lzone' : lzone} |
165 onsubmit = ("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', " |
159 onsubmit = ("return inlineValidateRelationForm('%(divid)s-form', '%(rtype)s', " |
166 "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s', '%(escape)s', '%(lzone)s');" |
160 "'%(role)s', '%(eid)s', '%(divid)s', '%(vid)s', '%(default)s', '%(escape)s', '%(lzone)s');" |