98 rql = 'SET %s WHERE X eid %%(%s)s' % (','.join(self.edited), var) |
98 rql = 'SET %s WHERE X eid %%(%s)s' % (','.join(self.edited), var) |
99 if self.restrictions: |
99 if self.restrictions: |
100 rql += ', %s' % ','.join(self.restrictions) |
100 rql += ', %s' % ','.join(self.restrictions) |
101 self.kwargs[var] = eid |
101 self.kwargs[var] = eid |
102 return rql |
102 return rql |
|
103 |
|
104 def set_attribute(self, attr, value): |
|
105 self.kwargs[attr] = value |
|
106 self.edited.append('X %s %%(%s)s' % (attr, attr)) |
|
107 |
|
108 def set_inlined(self, relation, value): |
|
109 self.kwargs[relation] = value |
|
110 self.edited.append('X %s %s' % (relation, relation.upper())) |
|
111 self.restrictions.append('%s eid %%(%s)s' % (relation.upper(), relation)) |
103 |
112 |
104 |
113 |
105 class EditController(basecontrollers.ViewController): |
114 class EditController(basecontrollers.ViewController): |
106 __regid__ = 'edit' |
115 __regid__ = 'edit' |
107 |
116 |
236 or |
245 or |
237 (field.role == 'object' and field.name in eschema.objrels)): |
246 (field.role == 'object' and field.name in eschema.objrels)): |
238 continue |
247 continue |
239 rschema = self._cw.vreg.schema.rschema(field.name) |
248 rschema = self._cw.vreg.schema.rschema(field.name) |
240 if rschema.final: |
249 if rschema.final: |
241 rqlquery.kwargs[field.name] = value |
250 rqlquery.set_attribute(field.name, value) |
242 rqlquery.edited.append('X %s %%(%s)s' % (rschema, rschema)) |
|
243 else: |
251 else: |
244 if form.edited_entity.has_eid(): |
252 if form.edited_entity.has_eid(): |
245 origvalues = set(entity.eid for entity in form.edited_entity.related(field.name, field.role, entities=True)) |
253 origvalues = set(entity.eid for entity in form.edited_entity.related(field.name, field.role, entities=True)) |
246 else: |
254 else: |
247 origvalues = set() |
255 origvalues = set() |
259 |
267 |
260 def handle_inlined_relation(self, form, field, values, origvalues, rqlquery): |
268 def handle_inlined_relation(self, form, field, values, origvalues, rqlquery): |
261 """handle edition for the (rschema, x) relation of the given entity |
269 """handle edition for the (rschema, x) relation of the given entity |
262 """ |
270 """ |
263 if values: |
271 if values: |
264 attr = field.name |
272 rqlquery.set_inlined(field.name, iter(values).next()) |
265 rqlquery.kwargs[attr] = iter(values).next() |
|
266 rqlquery.edited.append('X %s %s' % (attr, attr.upper())) |
|
267 rqlquery.restrictions.append('%s eid %%(%s)s' % (attr.upper(), attr)) |
|
268 elif form.edited_entity.has_eid(): |
273 elif form.edited_entity.has_eid(): |
269 self.handle_relation(form, field, values, origvalues) |
274 self.handle_relation(form, field, values, origvalues) |
270 |
275 |
271 def handle_relation(self, form, field, values, origvalues): |
276 def handle_relation(self, form, field, values, origvalues): |
272 """handle edition for the (rschema, x) relation of the given entity |
277 """handle edition for the (rschema, x) relation of the given entity |