src/pyams_form/form.py
changeset 20 e421b7c4281a
parent 16 2f2596eee744
child 28 893e485046bc
equal deleted inserted replaced
19:ee1e85bd3580 20:e421b7c4281a
    19 # import interfaces
    19 # import interfaces
    20 from pyams_form.interfaces.form import IFormLayer, IForm, IAJAXForm, IInnerSubForm, IInnerTabForm, \
    20 from pyams_form.interfaces.form import IFormLayer, IForm, IAJAXForm, IInnerSubForm, IInnerTabForm, \
    21     ICustomUpdateSubForm, IFormCreatedEvent, FormCreatedEvent, IInnerForm, IFormContextPermissionChecker
    21     ICustomUpdateSubForm, IFormCreatedEvent, FormCreatedEvent, IInnerForm, IFormContextPermissionChecker
    22 from pyams_form.interfaces.form import IAddFormButtons, IModalAddFormButtons, IEditFormButtons, \
    22 from pyams_form.interfaces.form import IAddFormButtons, IModalAddFormButtons, IEditFormButtons, \
    23     IModalEditFormButtons, IModalDisplayFormButtons
    23     IModalEditFormButtons, IModalDisplayFormButtons
       
    24 from pyams_form.interfaces import get_form_weight
    24 from pyams_form.interfaces.form import FormObjectCreatedEvent, FormObjectModifiedEvent
    25 from pyams_form.interfaces.form import FormObjectCreatedEvent, FormObjectModifiedEvent
    25 from pyams_i18n.interfaces import II18n
    26 from pyams_i18n.interfaces import II18n
    26 from pyams_skin.interfaces import IDialog, ISkinnable, IContentTitle
    27 from pyams_skin.interfaces import IDialog, ISkinnable, IContentTitle
    27 from pyams_template.interfaces import IContentTemplate, ILayoutTemplate
    28 from pyams_template.interfaces import IContentTemplate, ILayoutTemplate
    28 from pyramid_chameleon.interfaces import IChameleonTranslate
    29 from pyramid_chameleon.interfaces import IChameleonTranslate
    48 from zope.lifecycleevent import Attributes, ObjectCreatedEvent
    49 from zope.lifecycleevent import Attributes, ObjectCreatedEvent
    49 from zope.location import locate
    50 from zope.location import locate
    50 from zope.schema.fieldproperty import FieldProperty
    51 from zope.schema.fieldproperty import FieldProperty
    51 
    52 
    52 from pyams_form import _
    53 from pyams_form import _
    53 
       
    54 
       
    55 def get_form_weight(form):
       
    56     """Try to get form weight attribute"""
       
    57     try:
       
    58         return form.weight
       
    59     except AttributeError:
       
    60         return 0
       
    61 
    54 
    62 
    55 
    63 REDIRECT_STATUS_CODES = (300, 301, 302, 303, 304, 305, 307)
    56 REDIRECT_STATUS_CODES = (300, 301, 302, 303, 304, 305, 307)
    64 
    57 
    65 
    58 
   175             result.extend(form.widgets.errors)
   168             result.extend(form.widgets.errors)
   176         return result
   169         return result
   177 
   170 
   178     def update_content(self, content, data):
   171     def update_content(self, content, data):
   179         changes = applyChanges(self, content, data)
   172         changes = applyChanges(self, content, data)
   180         for subform in self.subforms + self.tabforms:
   173         subforms = self.subforms + self.tabforms
   181             if ICustomUpdateSubForm.providedBy(subform):
   174         [subforms.extend(group.subforms) for group in self.groups]
   182                 updates = ICustomUpdateSubForm(subform).update_content(content, data)
   175         for subform in subforms:
       
   176             subform_update = ICustomUpdateSubForm(subform, None)
       
   177             if subform_update is not None:
       
   178                 updates = subform_update.update_content(content, data)
   183                 if isinstance(updates, dict):
   179                 if isinstance(updates, dict):
   184                     changes.update(updates)
   180                     changes.update(updates)
   185             else:
   181             else:
   186                 changes.update(applyChanges(subform, content, data))
   182                 changes.update(applyChanges(subform, content, data))
   187         return changes
   183         return changes
   348 
   344 
   349 @implementer(IInnerForm)
   345 @implementer(IInnerForm)
   350 class InnerAddForm(AddForm):
   346 class InnerAddForm(AddForm):
   351     """Inner add form"""
   347     """Inner add form"""
   352 
   348 
       
   349     css_class = 'inner'
       
   350 
   353     @property
   351     @property
   354     def id(self):
   352     def id(self):
   355         return self.__class__.__name__
   353         return self.__class__.__name__
   356 
   354 
   357     buttons = Buttons(Interface)
   355     buttons = Buttons(Interface)
   433 
   431 
   434 @implementer(IInnerForm)
   432 @implementer(IInnerForm)
   435 class InnerEditForm(EditForm):
   433 class InnerEditForm(EditForm):
   436     """Inner edit form"""
   434     """Inner edit form"""
   437 
   435 
       
   436     css_class = 'inner'
       
   437 
   438     @property
   438     @property
   439     def id(self):
   439     def id(self):
   440         return self.__class__.__name__
   440         return self.__class__.__name__
   441 
   441 
   442     buttons = Buttons(Interface)
   442     buttons = Buttons(Interface)
   466 
   466 
   467 
   467 
   468 @implementer(IInnerForm)
   468 @implementer(IInnerForm)
   469 class InnerDisplayForm(DisplayForm):
   469 class InnerDisplayForm(DisplayForm):
   470     """Inner display form"""
   470     """Inner display form"""
       
   471 
       
   472     css_class = 'inner'
   471 
   473 
   472     @property
   474     @property
   473     def id(self):
   475     def id(self):
   474         return self.__class__.__name__
   476         return self.__class__.__name__
   475 
   477