web/views/editcontroller.py
branchstable
changeset 9178 b5762ac9a82e
parent 9177 5236d0e4c598
child 9179 570208f74a84
equal deleted inserted replaced
9177:5236d0e4c598 9178:b5762ac9a82e
    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