コード例 #1
0
    def _set_default_configuration(self):
        defaults = {}
        tile_type = getUtility(ITileType, name=self.tile.__name__)
        fields = getFieldNamesInOrder(tile_type.schema)

        for name, field in getFieldsInOrder(tile_type.schema):
            order = unicode(fields.index(name))
            # default configuration attributes for all fields
            defaults[name] = {'order': order, 'visibility': u'on'}
            if name == 'css_class':
                # css_class, set default
                defaults[name] = field.default
            if ITextLine.providedBy(field):
                # field is TextLine, we should add 'htmltag'
                defaults[name]['htmltag'] = u'h2'
            elif INamedBlobImageField.providedBy(field):
                # field is an image, we should add 'position' and 'imgsize'
                defaults[name]['position'] = u'left'
                defaults[name]['imgsize'] = u'mini 200:200'
            elif IInt.providedBy(field):
                defaults[name][name] = field.default
            elif IDatetime.providedBy(field):
                # field is Datetime, we should add 'format'
                defaults[name]['format'] = 'datetime'

        return defaults
コード例 #2
0
    def _set_default_configuration(self):
        defaults = {}
        tile_type = getUtility(ITileType, name=self.tile.__name__)
        fields = getFieldNamesInOrder(tile_type.schema)

        for name, field in getFieldsInOrder(tile_type.schema):
            order = unicode(fields.index(name))
            # default configuration attributes for all fields
            defaults[name] = {'order': order, 'visibility': u'on'}
            if name == 'css_class':
                # css_class, set default
                defaults[name] = field.default
            if ITextLine.providedBy(field):
                # field is TextLine, we should add 'htmltag'
                defaults[name]['htmltag'] = u'h2'
            elif INamedBlobImageField.providedBy(field):
                # field is an image, we should add 'position' and 'imgsize'
                defaults[name]['position'] = u'left'
                defaults[name]['imgsize'] = u'mini 200:200'
            elif IInt.providedBy(field):
                defaults[name][name] = field.default
            elif IDatetime.providedBy(field):
                # field is Datetime, we should add 'format'
                defaults[name]['format'] = 'datetime'

        return defaults
コード例 #3
0
def setTextField(obj, fieldname, text):
    text = six.text_type(text)
    obj_base = aq_base(obj)
    if getattr(obj_base, "Schema", None):
        # Archetypes
        field = obj_base.getField(fieldname)
        if field is None:
            logger.warn("Field %s not found for %s", fieldname, obj.getId())
            return
        field.set(obj, text)
    else:
        # Dexterity
        field = getField(obj_base, fieldname)
        if field is None:
            logger.warn("Field %s not found for %s", fieldname, obj.getId())
            return
        if IRichText.providedBy(field):
            # Get mimetype from old value.
            old = field.get(obj)
            if old is None:
                text = RichTextValue(text)
            else:
                text = RichTextValue(text, old.mimeType, old.outputMimeType)
        if ITuple.providedBy(field) and ITextLine.providedBy(field.value_type):
            text = tuple(text.split("\n"))
        setattr(field.interface(obj), field.__name__, text)
コード例 #4
0
 def _getTextFields(self, obj):
     # Get all text fields, except ones that are handled separately.
     text_fields = []
     if getattr(aq_base(obj), 'Schema', None):
         # Archetypes
         for field in obj.Schema().values():
             if field.__name__ in CUSTOM_HANDLED_TEXT_FIELDS:
                 continue
             if not ITextField.providedBy(field):
                 continue
             text_fields.append(field)
     elif HAS_DEXTERITY:
         # Dexterity
         for schemata in iterSchemata(obj):
             fields = getFieldsInOrder(schemata)
             for name, field in fields:
                 if name in CUSTOM_HANDLED_TEXT_FIELDS:
                     continue
                 if IRichText.providedBy(field):
                     text_fields.append(field)
                     continue
                 # ITextLine inherits from IText.
                 # We want to replace in texts, but not textlines.
                 # Maybe this can be made configurable.
                 if ITextLine.providedBy(field):
                     continue
                 if not IText.providedBy(field):
                     continue
                 text_fields.append(field)
     return text_fields
コード例 #5
0
    def _set_default_configuration(self):
        defaults = {}
        tile_type = getUtility(ITileType, name=self.tile.__name__)
        fields = getFieldNamesInOrder(tile_type.schema)

        for name, field in getFieldsInOrder(tile_type.schema):
            order = unicode(fields.index(name))
            # default configuration attributes for all fields
            defaults[name] = {"order": order, "visibility": u"on"}
            if name == "css_class":
                # css_class, set default
                defaults[name] = field.default
            if ITextLine.providedBy(field):
                # field is TextLine, we should add 'htmltag'
                defaults[name]["htmltag"] = u"h2"
            elif INamedBlobImageField.providedBy(field):
                # field is an image, we should add 'position' and 'imgsize'
                defaults[name]["position"] = u"left"
                defaults[name]["imgsize"] = u"mini 200:200"
            elif IInt.providedBy(field):
                defaults[name][name] = field.default
            elif IDatetime.providedBy(field):
                # field is Datetime, we should add 'format'
                defaults[name]["format"] = "datetime"

        return defaults
コード例 #6
0
 def htmlIDs(self):
     ids = []
     fields = self._ce_fields.items()
     for name, field in fields:
         if ITextLine.providedBy(field) or IText.providedBy(field):
             ids.append('form-widgets-%s' % name)
         elif IRichText.providedBy(field):
             ids.append('form.widgets.%s' % name) # Talk about uniformity ;)
     return ids
コード例 #7
0
 def _ce_fields(self):
     field_dict = {}
     for schemata in iterSchemata(self.context):
         for name, field in getFieldsInOrder(schemata):
             if ITextLine.providedBy(field) or \
                IText.providedBy(field) or \
                IRichText.providedBy(field):
                 field_dict[name] = field
     return field_dict
コード例 #8
0
 def _ce_fields(self):
     field_dict = {}
     for schemata in iterSchemata(self.context):
         for name, field in getFieldsInOrder(schemata):
             if ITextLine.providedBy(field) or \
                IText.providedBy(field) or \
                IRichText.providedBy(field):
                 field_dict[name] = field
     return field_dict
コード例 #9
0
 def htmlIDs(self):
     ids = []
     fields = self._ce_fields.items()
     for name, field in fields:
         if ITextLine.providedBy(field) or IText.providedBy(field):
             ids.append('form-widgets-%s' % name)
         elif IRichText.providedBy(field):
             ids.append('form.widgets.%s' %
                        name)  # Talk about uniformity ;)
     return ids
コード例 #10
0
    def clean_field(self, organization, fieldname, field):
        if ITextLine.providedBy(field):
            setattr(organization, fieldname, "")
        elif ITuple.providedBy(field):
            setattr(organization, fieldname, [])
        elif IBool.providedBy(field):
            setattr(organization, fieldname, False)
        elif IRichText.providedBy(field):
            richvalue = RichTextValue("", 'text/html', 'text/html')
            setattr(organization, fieldname, richvalue)
        else:
            logger("[Error] Field '%s' type is not recognised. " %(fieldname), "Field cannot be cleaned before sync.")

        return organization
コード例 #11
0
def getTextFields(obj):
    include_textline_fields = settings().include_textline_fields
    include_lines_fields = settings().include_lines_fields
    text_fields = []
    if HAS_ARCHETYPES and getattr(aq_base(obj), "Schema", None):
        # Archetypes
        for field in obj.Schema().values():
            if field.__name__ in CUSTOM_HANDLED_TEXT_FIELDS:
                continue
            if include_textline_fields and IStringField.providedBy(field):
                text_fields.append(field)
                continue
            if ITextField.providedBy(field):
                text_fields.append(field)
            if include_lines_fields and ILinesField.providedBy(field):
                text_fields.append(field)
    elif HAS_DEXTERITY:
        # Dexterity
        for schemata in iterSchemata(obj):
            fields = getFieldsInOrder(schemata)
            for name, field in fields:
                if name in CUSTOM_HANDLED_TEXT_FIELDS:
                    continue
                if IRichText.providedBy(field):
                    text_fields.append(field)
                    continue
                # ITextLine inherits from IText.
                # That we want to replace in texts, but not textlines
                # is by configuration.
                if not include_textline_fields and ITextLine.providedBy(field):
                    continue
                if IText.providedBy(field):
                    text_fields.append(field)
                if (include_lines_fields and ITuple.providedBy(field)
                        and ITextLine.providedBy(field.value_type)):
                    text_fields.append(field)
    return text_fields
コード例 #12
0
ファイル: forms.py プロジェクト: BenoitTalbot/bungeni-portal
 def update(self):
     """ Checks if we have Modified errors and renders split view 
         with display widgets for db values and normal for input 
     """
     super(DiffEditForm, self).update()
     for error in self.errors:
         if error.__class__ == Modified:
             # Set flag that form is in diff mode
             if not self.diff:
                 self.diff=True
             
     if self.diff:
         # Set last timestamp which we store in hidden field because
         # document may be modified during diff and from.timestamp field
         # contains old value
         self.last_timestamp = self.context.timestamp
         for widget in self.widgets:
             try:
                 value = widget.getInputValue()
             except:
                 value = ""
             
             # Get widget's field    
             form_field = self.form_fields.get(widget.context.__name__)                    
             field = form_field.field.bind(self.context)
             
             # Form display widget for our field 
             if form_field.custom_widget is not None:
                 display_widget = form_field.custom_widget(
                     field, self.request)                 
             else:
                 display_widget = component.getMultiAdapter(
                     (field, self.request), IDisplayWidget)
             
             # If field is Text or TextLine we display HTML diff
             if IText.providedBy(field) or ITextLine.providedBy(field):
                 if value:
                     diff_val = textDiff(field.get(self.context), value)
                 else:
                     diff_val = ""
                 display_widget = component.getMultiAdapter(
                     (field, self.request), IDiffDisplayWidget)
                 display_widget.setRenderedValue(diff_val)
             else:
                 display_widget.setRenderedValue(field.get(self.context))
             display_widget.name = widget.name + ".diff.display"
             # Add display - input widgets pair to list of diff widgets
             self.diff_widgets.append((widget, display_widget))
コード例 #13
0
    def update(self):
        """ Checks if we have Modified errors and renders split view 
            with display widgets for db values and normal for input 
        """
        super(DiffEditForm, self).update()
        for error in self.errors:
            if error.__class__ == Modified:
                # Set flag that form is in diff mode
                if not self.diff:
                    self.diff = True

        if self.diff:
            # Set last timestamp which we store in hidden field because
            # document may be modified during diff and from.timestamp field
            # contains old value
            self.last_timestamp = self.context.timestamp
            for widget in self.widgets:
                try:
                    value = widget.getInputValue()
                except:
                    value = ""

                # Get widget's field
                form_field = self.form_fields.get(widget.context.__name__)
                field = form_field.field.bind(self.context)

                # Form display widget for our field
                if form_field.custom_widget is not None:
                    display_widget = form_field.custom_widget(
                        field, self.request)
                else:
                    display_widget = component.getMultiAdapter(
                        (field, self.request), IDisplayWidget)

                # If field is Text or TextLine we display HTML diff
                if IText.providedBy(field) or ITextLine.providedBy(field):
                    if value:
                        diff_val = textDiff(field.get(self.context), value)
                    else:
                        diff_val = ""
                    display_widget = component.getMultiAdapter(
                        (field, self.request), IDiffDisplayWidget)
                    display_widget.setRenderedValue(diff_val)
                else:
                    display_widget.setRenderedValue(field.get(self.context))
                display_widget.name = widget.name + ".diff.display"
                # Add display - input widgets pair to list of diff widgets
                self.diff_widgets.append((widget, display_widget))
コード例 #14
0
 def theme_options(self):
     data = {}
     for name in self.schema.names():
         field = self.schema[name]
         if not IField.providedBy(field):
             continue
         value = getattr(self.settings, name, None)
         if value == None:
             continue
         name = name.replace(self.theme + '_', '', 1)
         if IBool.providedBy(field):
             data[name] = jsbool(value)
         elif IChoice.providedBy(field) or ITextLine.providedBy(field):
             data[name] = '"' + value + '"'
         elif IInt.providedBy(field) or IFloat.providedBy(field):
             data[name] = str(value)
     return data
コード例 #15
0
    def get_default_value_by_schema(self, field):
        type_field = " "
        if IRelationList.providedBy(field):
            type_field = []
        elif "ListField" in str(field):
            type_field = []
            self.datagrids[field.__name__] = False
        elif IChoice.providedBy(field):
            type_field = " "
        elif ITextLine.providedBy(field):
            type_field = " "
        elif IList.providedBy(field):
            type_field = []
        elif IText.providedBy(field):
            type_field = " "
        elif IRichText.providedBy(field):
            type_field = " "
        else:
            type_field = " "

        return type_field
コード例 #16
0
    def get_fieldtype_by_schema(self, field):
        type_field = ""
        if IRelationList.providedBy(field):
            type_field = "relation"
        elif "ListField" in str(field):
            type_field = "datagridfield"
            self.datagrids[field.__name__] = False
        elif IChoice.providedBy(field):
            type_field = "choice"
        elif ITextLine.providedBy(field):
            type_field = "text"
        elif IList.providedBy(field):
            type_field = "list"
        elif IText.providedBy(field):
            type_field = "text"
        elif IRichText.providedBy(field):
            type_field = "text"
        else:
            type_field = "unknown"

        return type_field
コード例 #17
0
def get_attribute_values(request, record, attribute_map):
    values = {}
    vocabularies = get_vocabularies(request, attribute_map)

    for header, field in attribute_map.items():

        downloaded = download_field_from_url(field, record[header])
        if downloaded is not False:
            values[field.__name__] = downloaded
            continue

        if IDate.providedBy(field):
            if not record[header]:
                values[field.__name__] = None
            else:
                values[field.__name__] = parse_date(record[header])
            continue

        if IDatetime.providedBy(field):
            if not record[header]:
                values[field.__name__] = None
            else:
                values[field.__name__] = parse_datetime(record[header])
            continue

        if IURI.providedBy(field):
            if not record[header].strip():
                values[field.__name__] = None
                continue

        if IList.providedBy(field):
            if ITextLine.providedBy(field.value_type):
                values[field.__name__] = convert_to_list(record[header])
                continue

        if ISet.providedBy(field):
            if IChoice.providedBy(field.value_type):
                values[field.__name__] = set(convert_to_list(record[header]))
                continue

        if IChoice.providedBy(field):
            if not record[header].strip():
                values[field.__name__] = None
            else:
                vocabulary = vocabularies[header]
                if record[header].lower() not in vocabulary:
                    raise ContentImportError(
                        _(
                            u'The ${name} column contains the '
                            u'unknown value ${value}',
                            mapping=dict(name=header, value=record[header])
                        )
                    )

                values[field.__name__] = vocabulary[record[header].lower()]

            continue

        assert IFromUnicode.providedBy(field), """
            {} does not support fromUnicode
        """.format(field)

        try:
            values[field.__name__] = field.fromUnicode(record[header])

            if isinstance(values[field.__name__], basestring):
                values[field.__name__] = values[field.__name__].strip()
            if isinstance(field, Text):
                values[field.__name__] = values[field.__name__].replace(
                    '<br />', '\n'
                )

        except ValidationError, e:
            raise ContentImportError(e.doc(), colname=header)
        except ValueError, e:
            raise ContentImportError(e.message, colname=header)
コード例 #18
0
        options = {'ignoreURLParams': True}
        for name, field in \
            schema.getFields(IShibbolethLoginPortlet).iteritems():
            if name.startswith('eds_'):
                value = getattr(self.data, name)
                if value and ITALESTextLine.providedBy(field):
                    value = self._execute_expression(value)
                options[name[4:]] = value

        return json.dumps(options)


# Customise field display length
form_fields = form.Fields(IShibbolethLoginPortlet)
for name, field in schema.getFields(IShibbolethLoginPortlet).iteritems():
    if ITextLine.providedBy(field):
        form_fields[name].custom_widget = LongTextWidget


# NOTE: If this portlet does not have any configurable parameters, you can
# inherit from NullAddForm and remove the form_fields variable.
class AddForm(base.AddForm):
    """Portlet add form.

    This is registered in configure.zcml. The form_fields variable tells
    zope.formlib which fields to display. The create() method actually
    constructs the assignment that is being added.
    """
    form_fields = form_fields
    schema = IShibbolethLoginPortlet
コード例 #19
0
        options = {'ignoreURLParams': True}
        for name, field in \
            schema.getFields(IShibbolethLoginPortlet).iteritems():
            if name.startswith('eds_'):
                value = getattr(self.data, name)
                if value and ITALESTextLine.providedBy(field):
                    value = self._execute_expression(value)
                options[name[4:]] = value

        return json.dumps(options)


# Customise field display length
form_fields = form.Fields(IShibbolethLoginPortlet)
for name, field in schema.getFields(IShibbolethLoginPortlet).iteritems():
    if ITextLine.providedBy(field):
        form_fields[name].custom_widget = LongTextWidget


# NOTE: If this portlet does not have any configurable parameters, you can
# inherit from NullAddForm and remove the form_fields variable.
class AddForm(base.AddForm):
    """Portlet add form.

    This is registered in configure.zcml. The form_fields variable tells
    zope.formlib which fields to display. The create() method actually
    constructs the assignment that is being added.
    """
    form_fields = form_fields

    def create(self, data):