web/views/editforms.py
changeset 2504 f28b1ffc3c91
parent 2484 7e9283731db8
child 2509 fb26d662f2fd
equal deleted inserted replaced
2503:c4bf7ef8b851 2504:f28b1ffc3c91
    85 
    85 
    86     (double-click on the field to see an appropriate edition widget)
    86     (double-click on the field to see an appropriate edition widget)
    87     """
    87     """
    88     id = 'reledit'
    88     id = 'reledit'
    89     __select__ = non_final_entity() & match_kwargs('rtype')
    89     __select__ = non_final_entity() & match_kwargs('rtype')
    90 
       
    91     # FIXME editableField class could be toggleable from userprefs
    90     # FIXME editableField class could be toggleable from userprefs
       
    91 
       
    92     # add metadata to allow edition of metadata attributes (not considered by
       
    93     # edition form by default)
       
    94     attrcategories = ('primary', 'secondary', 'metadata')
    92 
    95 
    93     _onclick = u"showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')"
    96     _onclick = u"showInlineEditionForm(%(eid)s, '%(rtype)s', '%(divid)s')"
    94     _defaultlandingzone = (u'<img title="%(msg)s" '
    97     _defaultlandingzone = (u'<img title="%(msg)s" '
    95                            'src="data/accessories-text-editor.png" '
    98                            'src="data/accessories-text-editor.png" '
    96                            'alt="%(msg)s"/>')
    99                            'alt="%(msg)s"/>')
   132         entity = self.entity(row, col)
   135         entity = self.entity(row, col)
   133         rschema = entity.schema.rschema(rtype)
   136         rschema = entity.schema.rschema(rtype)
   134         lzone = self._build_landing_zone(landing_zone)
   137         lzone = self._build_landing_zone(landing_zone)
   135         # compute value, checking perms, build form
   138         # compute value, checking perms, build form
   136         if rschema.is_final():
   139         if rschema.is_final():
   137             value = entity.printable_value(rtype) or default
   140             value = entity.printable_value(rtype)
   138             if not entity.has_perm('update'):
   141             etype = str(entity.e_schema)
       
   142             ttype = rschema.targets(etype, role)[0]
       
   143             afs = uicfg.autoform_section.etype_get(etype, rtype, role, ttype)
       
   144             if not (afs in self.attrcategories and entity.has_perm('update')):
   139                 self.w(value)
   145                 self.w(value)
   140                 return
   146                 return
       
   147             value = value or default
   141             self._attribute_form(entity, value, rtype, role, reload,
   148             self._attribute_form(entity, value, rtype, role, reload,
   142                                  row, col, default, lzone)
   149                                  row, col, default, lzone)
   143         else:
   150         else:
   144             dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema,
   151             dispctrl = uicfg.primaryview_display_ctrl.etype_get(entity.e_schema,
   145                                                                 rtype, role)
   152                                                                 rtype, role)
   148                 self.wview(vid, entity.related(rtype, role))
   155                 self.wview(vid, entity.related(rtype, role))
   149                 return
   156                 return
   150             if rvid is None:
   157             if rvid is None:
   151                 rvid = self._compute_best_vid(entity, rtype, role)
   158                 rvid = self._compute_best_vid(entity, rtype, role)
   152             rset = entity.related(rtype, role)
   159             rset = entity.related(rtype, role)
   153             candidate = self.view(rvid, rset, 'null')
   160             if rset:
   154             value = candidate or default
   161                 value = self.view(rvid, rset)
       
   162             else:
       
   163                 value = default
       
   164             # XXX check autoform_section. what if 'generic'?
   155             if role == 'subject' and not rschema.has_perm(self.req, 'add',
   165             if role == 'subject' and not rschema.has_perm(self.req, 'add',
   156                                                           fromeid=entity.eid):
   166                                                           fromeid=entity.eid):
   157                 return self.w(value)
   167                 return self.w(value)
   158             elif role == 'object' and not rschema.has_perm(self.req, 'add',
   168             elif role == 'object' and not rschema.has_perm(self.req, 'add',
   159                                                            toeid=entity.eid):
   169                                                            toeid=entity.eid):
   181         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   191         onsubmit = ("return inlineValidateRelationForm('%(rtype)s', '%(role)s', '%(eid)s', "
   182                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   192                     "'%(divid)s', %(reload)s, '%(vid)s', '%(default)s', '%(lzone)s');"
   183                     % event_data)
   193                     % event_data)
   184         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   194         cancelclick = "hideInlineEdit(%s,\'%s\',\'%s\')" % (
   185             entity.eid, rtype, divid)
   195             entity.eid, rtype, divid)
   186         form = self.vreg.select_object('forms', 'base', self.req, entity=entity,
   196         form = self.vreg.select('forms', 'base', self.req, entity=entity,
   187                                        domid='%s-form' % divid, cssstyle='display: none',
   197                                 attrcategories=self.attrcategories,
   188                                        onsubmit=onsubmit, action='#',
   198                                 domid='%s-form' % divid, cssstyle='display: none',
   189                                        form_buttons=[SubmitButton(),
   199                                 onsubmit=onsubmit, action='#',
   190                                                      Button(stdmsgs.BUTTON_CANCEL,
   200                                 form_buttons=[SubmitButton(),
   191                                                             onclick=cancelclick)])
   201                                               Button(stdmsgs.BUTTON_CANCEL,
       
   202                                                      onclick=cancelclick)])
   192         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   203         field = guess_field(entity.e_schema, entity.schema.rschema(rtype), role)
   193         form.append_field(field)
   204         form.append_field(field)
   194         w = self.w
   205         w = self.w
   195         w(u'<div id="%s-reledit" class="field">' % divid)
   206         w(u'<div id="%s-reledit" class="field">' % divid)
   196         w(tags.div(lzone, klass='editableField', id=divid,
   207         w(tags.div(lzone, klass='editableField', id=divid,
   217                     "%(reload)s, '%(default)s');")
   228                     "%(reload)s, '%(default)s');")
   218         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   229         buttons = [SubmitButton(stdmsgs.BUTTON_OK),
   219                    Button(stdmsgs.BUTTON_CANCEL,
   230                    Button(stdmsgs.BUTTON_CANCEL,
   220                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   231                           onclick="hideInlineEdit(%s,\'%s\',\'%s\')" % (
   221                               eid, rtype, divid))]
   232                               eid, rtype, divid))]
   222         form = self.vreg.select_object('forms', 'edition', self.req, self.rset,
   233         form = self.vreg.select('forms', 'edition', self.req, rset=self.rset,
   223                                        row=row, col=col, form_buttons=buttons,
   234                                 row=row, col=col, form_buttons=buttons,
   224                                        domid='%s-form' % divid, action='#',
   235                                 attrcategories=self.attrcategories,
   225                                        cssstyle='display: none',
   236                                 domid='%s-form' % divid, action='#',
   226                                        onsubmit=onsubmit % event_data)
   237                                 cssstyle='display: none',
       
   238                                 onsubmit=onsubmit % event_data)
   227         w = self.w
   239         w = self.w
   228         w(u'<div class="field">')
   240         w(u'<div class="field">')
   229         w(u'<div id="%s" style="display: inline">' % divid)
   241         w(u'<div id="%s" style="display: inline">' % divid)
   230         w(tags.div(lzone, klass='editableField',
   242         w(tags.div(lzone, klass='editableField',
   231                    onclick=self._onclick % event_data))
   243                    onclick=self._onclick % event_data))