Esempio n. 1
0
class RenameForm(EditForm):

    label = _p(u'heading_rename_item', default=u'Rename item')
    description = _p(u'description_rename_item',
                    default=u'Each item has a Short Name and a Title, which you can change '
                             'by entering the new details below.')

    def __init__(self, context, request):
        super(RenameForm, self).__init__(context, request)
        for name, value in self.request.form.items():
            self.request.form[name] = safe_unicode(value)
        self.form_fields = FormFields(IRenameForm)
        self.form_name = '%s (%s)' % (self.context.Title(), self.context.getId())
        mtool = getToolByName(self.context, 'portal_membership')
        title = self.context.Schema()['title']
        self.id = self.context.getId()
        self.languages = {}
        if (IMultilanguageField.providedBy(title) or
            not mtool.checkPermission(DeleteObjects, self.context) or
            not mtool.checkPermission(copy_or_move, self.context)):
            self.form_fields = self.form_fields.omit('id')
        if (IMultilanguageField.providedBy(title) or
            not mtool.checkPermission(ModifyPortalContent, self.context)):
            self.form_fields = self.form_fields.omit('title')
        if IMultilanguageField.providedBy(title):
            self.handler = IMultilanguageURLHandler(aq_parent(aq_inner(self.context)), None)
            for lang in title.getAvailableLanguages(self.context):
                self.languages[lang['name']] = lang['title']
                self.form_fields = self.form_fields + FormFields(
                    schema.TextLine(
                        __name__=lang['name'],
                        title=lang['title'],
                        default=self.handler.get_translated_id(self.id, lang['name']),
                        required=True
                    )
                )
                self.form_fields[lang['name']].interface = IRenameForm

    def validate(self, action, data):
        errors = super(RenameForm, self).validate(action, data)
        for field in self.form_fields:
            name = field.field.getName()
            if name == 'title':
                continue
            value = data.get(name, u'')
            check_id = getattr(self.context, 'check_id', None)
            if ((name == 'id' and not value == self.id) or
                (name in self.languages.keys() and not value == self.handler.get_translated_id(self.id, name) and
                 not value == self.id and not self.id == self.handler.get_actual_id(value)) and
                check_id is not None):
                error = check_id(str(value), required=1)
                if error:
                    widget = self.widgets[name]
                    widget._error = WidgetInputError(widget.name, widget.label, InvalidIDError(error))
                    errors.append(widget._error)
        return errors

    @action(_p(u'label_rename_all', default=u'Rename All'), name=u'rename')
    def handle_rename_action(self, action, data):
        context = aq_inner(self.context)
        oldid = context.getId()
        oldtranslatedids = self.handler.get_translated_ids(oldid)
        descriptions = applyData(context, self.form_fields, data, self.adapters)
        statusmessage = IStatusMessage(self.request)
        if descriptions:
            statusmessage.addStatusMessage(_p(u'Changes saved.'), u'success');
        else:
            statusmessage.addStatusMessage(_p(u'No changes made.'));
        self.request.RESPONSE.redirect(context.absolute_url())