web/views/editforms.py
branchstable
changeset 2333 1de22d3e985b
parent 2332 b04d80f19075
child 2334 464c896bee65
equal deleted inserted replaced
2332:b04d80f19075 2333:1de22d3e985b
   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');"