Ejemplo n.º 1
0
    def __call__(self):
        request = self.request
        if request.method == 'POST':
            request.stdin.seek(0)
            data = json.loads(request.stdin.read())
            taxonomy = queryUtility(ITaxonomy, name=data['taxonomy'])
            tree = data['tree']
            languages = data['languages']
            for language in languages:
                if language not in taxonomy.data:
                    taxonomy.data[language] = OOBTree()

            for language in taxonomy.data.keys():
                data_for_taxonomy = self.generate_data_for_taxonomy(
                    tree['subnodes'], language)

                taxonomy.data[language] = OOBTree()
                for key, value in data_for_taxonomy:
                    taxonomy.data[language][key] = value

            return json.dumps({
                'status':
                'info',
                'message':
                translate(_("Your taxonomy has been saved with success."),
                          context=request)
            })

        return json.dumps({
            'status':
            'error',
            'message':
            translate(_("There seems to have been an error."), context=request)
        })
Ejemplo n.º 2
0
    def __call__(self):
        request = self.request
        if request.method == 'POST':
            request.stdin.seek(0)
            data = simplejson.loads(request.stdin.read())
            taxonomy = queryUtility(ITaxonomy, name=data['taxonomy'])
            tree = data['tree']
            languages = data['languages']
            for language in languages:
                if language not in taxonomy.data:
                    taxonomy.data[language] = OOBTree()

            for language in taxonomy.data.keys():
                data_for_taxonomy = self.generate_data_for_taxonomy(
                    tree['subnodes'], language)

                taxonomy.data[language] = OOBTree()
                for key, value in data_for_taxonomy:
                    taxonomy.data[language][key] = value

            return simplejson.dumps({
                'status': 'info',
                'message': translate(
                    _("Your taxonomy has been saved with success."),
                    context=request)
            })

        return simplejson.dumps({
            'status': 'error',
            'message': translate(
                _("There seems to have been an error."),
                context=request)
            })
Ejemplo n.º 3
0
    def __call__(self):
        request = self.request
        if request.method == 'POST':
            request.stdin.seek(0)
            data = json.loads(request.stdin.read())
            taxonomy = queryUtility(ITaxonomy, name=data['taxonomy'])
            tree = data['tree']
            languages = data['languages']
            for language in languages:
                if language not in taxonomy.data:
                    taxonomy.data[language] = OOBTree()

            for language in taxonomy.data.keys():
                data_for_taxonomy = self.generate_data_for_taxonomy(
                    tree['subnodes'], language)

                # Update taxonomy and use 'clear' since we want to remain with
                # just the items that were submitted by the user.
                taxonomy.update(language, data_for_taxonomy, True)

            return json.dumps({
                'status':
                'info',
                'message':
                translate(_("Your taxonomy has been saved with success."),
                          context=request)
            })

        return json.dumps({
            'status':
            'error',
            'message':
            translate(_("There seems to have been an error."), context=request)
        })
Ejemplo n.º 4
0
    def __call__(self):
        request = self.request
        if request.method == 'POST':
            request.stdin.seek(0)
            data = json.loads(request.stdin.read())
            taxonomy = queryUtility(ITaxonomy, name=data['taxonomy'])
            tree = data['tree']
            languages = data['languages']
            for language in languages:
                if language not in taxonomy.data:
                    taxonomy.data[language] = OOBTree()

            for language in taxonomy.data.keys():
                data_for_taxonomy = self.generate_data_for_taxonomy(
                    tree['subnodes'], language)

                # Update taxonomy and use 'clear' since we want to remain with
                # just the items that were submitted by the user.
                taxonomy.update(language, data_for_taxonomy, True)

            return json.dumps({
                'status': 'info',
                'message': translate(
                    _("Your taxonomy has been saved with success."),
                    context=request)
            })

        return json.dumps({
            'status': 'error',
            'message': translate(
                _("There seems to have been an error."),
                context=request)})
Ejemplo n.º 5
0
class TaxonomyAddForm(form.AddForm):

    fields = field.Fields(ITaxonomyForm)

    def updateWidgets(self):
        form.AddForm.updateWidgets(self)
        self.widgets["import_file_purge"].mode = HIDDEN_MODE

    def create(self, data):
        return data

    def add(self, data):
        if "import_file" not in data:
            raise ValueError("Import file is not in form")

        taxonomy = registerTaxonomy(
            self.context,
            name=data["taxonomy"],
            title=data["field_title"],
            description=data["field_description"],
            default_language=data["default_language"],
        )

        # Import
        adapter = TaxonomyImportExportAdapter(self.context)

        if "import_file" in data:
            if data["import_file"]:
                import_file = data["import_file"].data
                adapter.importDocument(taxonomy, import_file)
            del data["import_file"]

        del data["taxonomy"]
        del data["import_file_purge"]

        taxonomy.registerBehavior(**data)
        api.portal.show_message(_(u"Taxonomy imported."), request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              "/@@taxonomy-settings")

    def nextURL(self):
        return self.context.portal_url() + "/@@taxonomy-settings"

    @button.buttonAndHandler(_("Add"), name="add")
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        obj = self.createAndAdd(data)
        if obj is not None:
            # mark only as finished if we get the new object
            self._finishedAdd = True

    @button.buttonAndHandler(_(u"Cancel"), name="cancel")
    def handleCancel(self, action):
        api.portal.show_message(_(u"Add cancelled"), request=self.request)
        self.request.response.redirect("{0}/@@taxonomy-settings".format(
            self.context.absolute_url()))
Ejemplo n.º 6
0
 def __init__(
     self,
     name,
     title,
     description,
     field_title,
     field_description,
     is_required=False,
     is_single_select=False,
     write_permission="",
     field_prefix="taxonomy_",
     default_language="en",
     taxonomy_fieldset="categorization",
 ):
     self.name = name
     self.title = _(title)
     self.description = _(description)
     self.factory = None
     self.field_title = field_title
     self.field_description = field_description
     self.field_prefix = field_prefix
     self.is_single_select = is_single_select
     self.is_required = is_required
     self.write_permission = write_permission
     self.default_language = default_language
     self.taxonomy_fieldset = taxonomy_fieldset
Ejemplo n.º 7
0
    def generateInterface(self):
        logger.debug('generating interface for %s' % self.short_name)

        if hasattr(self, 'is_single_select') and self.is_single_select:
            select_field = schema.Choice(
                title=_(safe_unicode(self.field_title)),
                description=_(safe_unicode(self.field_description)),
                required=self.is_required,
                vocabulary=self.vocabulary_name
            )
        else:
            select_field = schema.List(
                title=_(safe_unicode(self.field_title)),
                description=_(safe_unicode(self.field_description)),
                required=self.is_required,
                min_length=self.is_required and 1 or 0,
                value_type=schema.Choice(
                    vocabulary=self.vocabulary_name,
                    required=self.is_required
                )
            )

        schemaclass = SchemaClass(
            self.short_name, (Schema, ),
            __module__='collective.taxonomy.generated',
            attrs={
                str(self.field_name): select_field
            }
        )

        if self.write_permission:
            schemaclass.setTaggedValue(
                WRITE_PERMISSIONS_KEY,
                {self.field_name:
                 self.write_permission}
            )

        try:
            taxonomy_fieldset = self.taxonomy_fieldset
        except AttributeError:
            # Backwards compatible:
            taxonomy_fieldset = 'categorization'
        if taxonomy_fieldset != 'default':
            schemaclass.setTaggedValue(
                FIELDSETS_KEY,
                [Fieldset(taxonomy_fieldset,
                          fields=[self.field_name])]
            )

        if hasattr(self, 'is_single_select') and not self.is_single_select:
            schemaclass.setTaggedValue(
                WIDGETS_KEY,
                {self.field_name:
                 'collective.taxonomy.widget.TaxonomySelectFieldWidget'}
            )

        alsoProvides(schemaclass, IFormFieldProvider)
        return schemaclass
Ejemplo n.º 8
0
    def generateInterface(self):
        logger.debug("generating interface for %s" % self.short_name)

        if hasattr(self, "is_single_select") and self.is_single_select:
            select_field = schema.Choice(
                title=_(safe_unicode(self.field_title)),
                description=_(safe_unicode(self.field_description)),
                required=self.is_required,
                vocabulary=self.vocabulary_name,
            )
        else:
            select_field = schema.List(
                title=_(safe_unicode(self.field_title)),
                description=_(safe_unicode(self.field_description)),
                required=self.is_required,
                min_length=self.is_required and 1 or 0,
                value_type=schema.Choice(
                    vocabulary=self.vocabulary_name, required=self.is_required
                ),
            )

        schemaclass = SchemaClass(
            self.short_name,
            (Schema,),
            __module__="collective.taxonomy.generated",
            attrs={str(self.field_name): select_field},
        )

        if self.write_permission:
            schemaclass.setTaggedValue(
                WRITE_PERMISSIONS_KEY, {self.field_name: self.write_permission}
            )

        try:
            taxonomy_fieldset = self.taxonomy_fieldset
        except AttributeError:
            # Backwards compatible:
            taxonomy_fieldset = "categorization"
        if taxonomy_fieldset != "default":
            schemaclass.setTaggedValue(
                FIELDSETS_KEY, [Fieldset(taxonomy_fieldset, fields=[self.field_name])]
            )

        if hasattr(self, "is_single_select") and not self.is_single_select:
            schemaclass.setTaggedValue(
                WIDGETS_KEY,
                {
                    self.field_name: "collective.taxonomy.widget.TaxonomySelectFieldWidget"
                },
            )

        alsoProvides(schemaclass, IFormFieldProvider)

        if HAS_PAM:
            alsoProvides(schemaclass[self.field_name], ILanguageIndependentField)

        return schemaclass
Ejemplo n.º 9
0
class TaxonomyAddForm(form.AddForm):

    fields = field.Fields(ITaxonomyForm)

    def updateWidgets(self):
        form.AddForm.updateWidgets(self)

    def create(self, data):
        return data

    def add(self, data):
        if 'import_file' not in data:
            raise ValueError("Import file is not in form")

        taxonomy = registerTaxonomy(self.context,
                                    name=data['taxonomy'],
                                    title=data['field_title'],
                                    description=data['field_description'],
                                    default_language=data['default_language'])

        # Import
        adapter = TaxonomyImportExportAdapter(self.context)

        if 'import_file' in data:
            if data['import_file']:
                import_file = data['import_file'].data
                adapter.importDocument(taxonomy, import_file)
            del data['import_file']

        del data['taxonomy']
        taxonomy.registerBehavior(**data)
        api.portal.show_message(_(u"Taxonomy imported."), request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              '/@@taxonomy-settings')

    def nextURL(self):
        return self.context.portal_url() + '/@@taxonomy-settings'

    @button.buttonAndHandler(_('Add'), name='add')
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        obj = self.createAndAdd(data)
        if obj is not None:
            # mark only as finished if we get the new object
            self._finishedAdd = True

    @button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handleCancel(self, action):
        api.portal.show_message(_(u"Add cancelled"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')
Ejemplo n.º 10
0
    def generateInterface(self):
        logger.debug('generating interface for %s' % self.short_name)

        if hasattr(self, 'is_single_select') and self.is_single_select:
            select_field = schema.Choice(
                title=_(unicode(self.field_title)),
                description=_(unicode(self.field_description)),
                required=self.is_required,
                vocabulary=self.vocabulary_name
            )
        else:
            select_field = schema.List(
                title=_(unicode(self.field_title)),
                description=_(unicode(self.field_description)),
                required=self.is_required,
                min_length=self.is_required and 1 or 0,
                value_type=schema.Choice(
                    vocabulary=self.vocabulary_name,
                    required=self.is_required
                )
            )

        schemaclass = SchemaClass(
            self.short_name, (Schema, ),
            __module__='collective.taxonomy.generated',
            attrs={
                str(self.field_name): select_field
            }
        )

        if self.write_permission:
            schemaclass.setTaggedValue(
                WRITE_PERMISSIONS_KEY,
                {self.field_name:
                 self.write_permission}
            )

        schemaclass.setTaggedValue(
            FIELDSETS_KEY,
            [Fieldset('categorization',
                      label=_pmf(u'label_schema_categorization', default=u'Categorization'),
                      fields=[self.field_name])]
        )

        if hasattr(self, 'is_single_select') and not self.is_single_select:
            schemaclass.setTaggedValue(
                WIDGETS_KEY,
                {self.field_name:
                 'collective.taxonomy.widget.TaxonomySelectFieldWidget'}
            )

        alsoProvides(schemaclass, IFormFieldProvider)
        return schemaclass
Ejemplo n.º 11
0
 def __init__(self, name, title, description, field_title,
              field_description, is_required=False,
              is_single_select=False, write_permission='',
              default_language='en'):
     self.name = name
     self.title = _(title)
     self.description = _(description)
     self.factory = None
     self.field_title = field_title
     self.field_description = field_description
     self.is_single_select = is_single_select
     self.is_required = is_required
     self.write_permission = write_permission
     self.default_language = default_language
Ejemplo n.º 12
0
 def __init__(self, name, title, description, field_title,
              field_description, is_required=False,
              is_single_select=False, write_permission='',
              default_language='en'):
     self.name = name
     self.title = _(title)
     self.description = _(description)
     self.factory = None
     self.field_title = field_title
     self.field_description = field_description
     self.is_single_select = is_single_select
     self.is_required = is_required
     self.write_permission = write_permission
     self.default_language = default_language
Ejemplo n.º 13
0
    def add(self, data):
        if 'import_file' not in data:
            raise ValueError("Import file is not in form")

        taxonomy = registerTaxonomy(
            self.context,
            name=data['taxonomy'],
            title=data['field_title'],
            description=data['field_description'],
            default_language=data['default_language']
        )

        # Import
        adapter = TaxonomyImportExportAdapter(self.context)

        if 'import_file' in data:
            if data['import_file']:
                import_file = data['import_file'].data
                adapter.importDocument(taxonomy, import_file)
            del data['import_file']

        del data['taxonomy']
        del data['import_file_purge']

        taxonomy.registerBehavior(**data)
        api.portal.show_message(_(u"Taxonomy imported."),
                                request=self.request)

        return self.request.RESPONSE.redirect(
            self.context.portal_url() + '/@@taxonomy-settings'
        )
    def add(self, data):
        if 'import_file' not in data:
            raise ValueError("Import file is not in form")

        taxonomy = registerTaxonomy(self.context,
                                    name=data['taxonomy'],
                                    title=data['field_title'],
                                    description=data['field_description'],
                                    default_language=data['default_language'])

        # Import
        adapter = TaxonomyImportExportAdapter(self.context)

        if 'import_file' in data:
            if data['import_file']:
                import_file = data['import_file'].data
                adapter.importDocument(taxonomy, import_file)
            del data['import_file']

        del data['taxonomy']
        del data['import_file_purge']

        taxonomy.registerBehavior(**data)
        api.portal.show_message(_(u"Taxonomy imported."), request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              '/@@taxonomy-settings')
Ejemplo n.º 15
0
 def __init__(self, name, title, description, field_title,
              field_description, is_required=False,
              is_single_select=False, write_permission='',
              field_prefix="taxonomy_",
              default_language='en', taxonomy_fieldset='categorization'):
     self.name = name
     self.title = _(title)
     self.description = _(description)
     self.factory = None
     self.field_title = field_title
     self.field_description = field_description
     self.field_prefix = field_prefix
     self.is_single_select = is_single_select
     self.is_required = is_required
     self.write_permission = write_permission
     self.default_language = default_language
     self.taxonomy_fieldset = taxonomy_fieldset
Ejemplo n.º 16
0
 def handle_edit_taxonomy_data_action(self, action):
     data, errors = self.extractData()
     if len(data.get('taxonomies', [])) > 0:
         self.request.RESPONSE.redirect(self.context.portal_url() +
                                        '/@@taxonomy-edit-data?taxonomy=' +
                                        data.get('taxonomies')[0])
     else:
         api.portal.show_message(_(u"Please select one taxonomy."),
                                 request=self.request)
Ejemplo n.º 17
0
 def handle_edit_taxonomy_data_action(self, action):
     data, errors = self.extractData()
     if len(data.get('taxonomies', [])) > 0:
         self.request.RESPONSE.redirect(
             '{0}/@@taxonomy-edit-data?taxonomy={1}'.format(
                 self.context.portal_url(),
                 data.get('taxonomies')[0]))
     else:
         api.portal.show_message(_(u"Please select one taxonomy."),
                                 request=self.request)
 def handle_edit_taxonomy_action(self, action):
     data, errors = self.extractData()
     if len(data.get('taxonomies', [])) > 0:
         self.request.RESPONSE.redirect(
             '{0}/@@taxonomy-edit?form.widgets.taxonomy={1}'.format(
                 self.context.portal_url(),
                 data.get('taxonomies')[0]))
     else:
         api.portal.show_message(_(u"Please select one taxonomy."),
                                 request=self.request)
Ejemplo n.º 19
0
class TaxonomyEditForm(form.EditForm):
    fields = field.Fields(ITaxonomyForm)

    def updateWidgets(self):
        self.fields['field_prefix'].showDefault = False
        form.EditForm.updateWidgets(self)
        self.widgets['taxonomy'].mode = HIDDEN_MODE

    @view.memoize
    def getContent(self):
        return TaxonomyEditFormAdapter(self.context)

    @button.buttonAndHandler(_(u'Save'), name='save')
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        # This is sort of a hack; we need the import file purge setting to be
        # set before applying the file data.
        self.getContent().purge = data.pop('import_file_purge', False)
        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy,
                                  name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')

    @button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handleCancel(self, action):
        api.portal.show_message(_(u"Edit cancelled"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')
Ejemplo n.º 20
0
    def handle_delete_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            sm = self.context.getSiteManager()

            for item in data['taxonomies']:
                utility = sm.queryUtility(ITaxonomy, name=item)
                utility.unregisterBehavior()

                sm.unregisterUtility(utility, ITaxonomy, name=item)
                sm.unregisterUtility(utility, IVocabularyFactory, name=item)
                sm.unregisterUtility(utility, ITranslationDomain, name=item)

                api.portal.show_message(_(u"Taxonomy deleted."),
                                        request=self.request)
        else:
            api.portal.show_message(_(u"Please select at least one taxonomy."),
                                    request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() + '/@@taxonomy-settings')
Ejemplo n.º 21
0
 def handle_edit_taxonomy_action(self, action):
     data, errors = self.extractData()
     if len(data.get('taxonomies', [])) > 0:
         self.request.RESPONSE.redirect(
             self.context.portal_url() +
             '/@@taxonomy-edit?form.widgets.taxonomy=' +
             data.get('taxonomies')[0]
         )
     else:
         api.portal.show_message(_(u"Please select one taxonomy."),
                                 request=self.request)
    def handle_delete_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            sm = self.context.getSiteManager()

            for item in data['taxonomies']:
                utility = sm.queryUtility(ITaxonomy, name=item)
                utility.unregisterBehavior()

                sm.unregisterUtility(utility, ITaxonomy, name=item)
                sm.unregisterUtility(utility, IVocabularyFactory, name=item)
                sm.unregisterUtility(utility, ITranslationDomain, name=item)

                api.portal.show_message(_(u"Taxonomy deleted."),
                                        request=self.request)
        else:
            api.portal.show_message(_(u"Please select at least one taxonomy."),
                                    request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              '/@@taxonomy-settings')
Ejemplo n.º 23
0
class TaxonomyEditForm(form.EditForm):
    fields = field.Fields(ITaxonomyForm)

    def updateWidgets(self):
        form.EditForm.updateWidgets(self)
        self.widgets['taxonomy'].mode = HIDDEN_MODE

    def getContent(self):
        return TaxonomyEditFormAdapter(self.context)

    @button.buttonAndHandler(_(u'Save'), name='save')
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy, name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')

    @button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handleCancel(self, action):
        api.portal.show_message(_(u"Edit cancelled"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')
Ejemplo n.º 24
0
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy, name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')
Ejemplo n.º 25
0
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy,
                                  name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect(self.context.absolute_url() +
                                       '/@@taxonomy-settings')
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        # This is sort of a hack; we need the import file purge setting to be
        # set before applying the file data.
        self.getContent().purge = data.pop('import_file_purge', False)
        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy, name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect('{0}/@@taxonomy-settings'.format(
            self.context.absolute_url()))
Ejemplo n.º 27
0
    def handleApply(self, action):
        data, errors = self.extractData()

        if errors:
            self.status = self.formErrorsMessage
            return

        # This is sort of a hack; we need the import file purge setting to be
        # set before applying the file data.
        self.getContent().purge = data.pop('import_file_purge', False)
        self.applyChanges(data)

        sm = self.context.getSiteManager()
        utility = sm.queryUtility(ITaxonomy,
                                  name=data['taxonomy'])
        if utility is not None:
            del data['import_file']
            del data['taxonomy']
            utility.updateBehavior(**data)

            api.portal.show_message(_(u"Changes saved"), request=self.request)
        self.request.response.redirect(
            '{0}/@@taxonomy-settings'.format(self.context.absolute_url()))
class TaxonomySettingsControlPanel(controlpanel.RegistryEditForm):
    """ A controlpanel for managing taxonomies

    """

    id = "TaxonomySettings"
    label = _("Taxonomy settings")
    schema = ITaxonomySettings
    schema_prefix = 'collective'
    description = _("Taxonomy settings")

    def updateFields(self):
        super(TaxonomySettingsControlPanel, self).updateFields()
        self.fields['taxonomies'].widgetFactory = CheckBoxFieldWidget

    @button.buttonAndHandler(_('Save'), name=None)
    def handleSave(self, action):
        pass

    @button.buttonAndHandler(_('Cancel'), name='cancel')
    def handleCancel(self, action):
        super(TaxonomySettingsControlPanel, self).handleCancel(self, action)

    @button.buttonAndHandler(_(u'label_add_taxonomy', default='Add'),
                             name='add-taxonomy')
    def handle_add_taxonomy_action(self, action):
        self.request.RESPONSE.redirect(self.context.portal_url() +
                                       '/@@taxonomy-add')

    @button.buttonAndHandler(_(u'label_edit_taxonomy', default='Edit'),
                             name='edit-taxonomy')
    def handle_edit_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            self.request.RESPONSE.redirect(
                self.context.portal_url() +
                '/@@taxonomy-edit?form.widgets.taxonomy=' +
                data.get('taxonomies')[0])
        else:
            api.portal.show_message(_(u"Please select one taxonomy."),
                                    request=self.request)

    @button.buttonAndHandler(_(u'label_edit_data_taxonomy',
                               default='Edit taxonomy data'),
                             name='edit_data_taxonomy')
    def handle_edit_taxonomy_data_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            self.request.RESPONSE.redirect(
                self.context.portal_url() +
                '/@@taxonomy-edit-data?form.widgets.taxonomy=' +
                data.get('taxonomies')[0])
        else:
            api.portal.show_message(_(u"Please select one taxonomy."),
                                    request=self.request)

    @button.buttonAndHandler(_(u'label_delete_taxonomy',
                               default='Delete taxonomy'),
                             name='delete-taxonomy')
    def handle_delete_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            sm = self.context.getSiteManager()

            for item in data['taxonomies']:
                utility = sm.queryUtility(ITaxonomy, name=item)
                utility.unregisterBehavior()

                sm.unregisterUtility(utility, ITaxonomy, name=item)
                sm.unregisterUtility(utility, IVocabularyFactory, name=item)
                sm.unregisterUtility(utility, ITranslationDomain, name=item)

                api.portal.show_message(_(u"Taxonomy deleted."),
                                        request=self.request)
        else:
            api.portal.show_message(_(u"Please select at least one taxonomy."),
                                    request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              '/@@taxonomy-settings')

    @button.buttonAndHandler(_(u'label_export', default='Export'),
                             name='export')
    def handle_export_action(self, action):
        data, errors = self.extractData()
        sm = self.context.getSiteManager()
        taxonomies = data.get('taxonomies', [])

        if len(taxonomies) > 0:
            adapter = TaxonomyImportExportAdapter(self.context)
            self.request.RESPONSE.setHeader('Content-type', 'text/xml')
            utility = sm.queryUtility(ITaxonomy, name=taxonomies[0])
            return adapter.exportDocument(utility)
class TaxonomySettingsControlPanelForm(controlpanel.RegistryEditForm):
    """ A controlpanel for managing taxonomies

    """

    id = "TaxonomySettings"
    label = _("Taxonomy settings")
    schema = ITaxonomySettings
    schema_prefix = 'collective'
    description = _("Taxonomy settings")

    def updateFields(self):
        super(TaxonomySettingsControlPanelForm, self).updateFields()
        self.fields['taxonomies'].widgetFactory = CheckBoxFieldWidget

    def updateActions(self):
        super(controlpanel.RegistryEditForm, self).updateActions()
        self.actions['add-taxonomy'].addClass("context")
        self.actions['edit-taxonomy'].addClass("context")
        self.actions['edit_data_taxonomy'].addClass("context")
        self.actions['delete-taxonomy'].addClass("context")
        self.actions['export'].addClass("context")

    @button.buttonAndHandler(_(u'label_add_taxonomy', default='Add'),
                             name='add-taxonomy')
    def handle_add_taxonomy_action(self, action):
        self.request.RESPONSE.redirect(self.context.portal_url() +
                                       '/@@taxonomy-add')

    @button.buttonAndHandler(_(u'label_edit_taxonomy', default='Edit'),
                             name='edit-taxonomy')
    def handle_edit_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            self.request.RESPONSE.redirect(
                '{0}/@@taxonomy-edit?form.widgets.taxonomy={1}'.format(
                    self.context.portal_url(),
                    data.get('taxonomies')[0]))
        else:
            api.portal.show_message(_(u"Please select one taxonomy."),
                                    request=self.request)

    @button.buttonAndHandler(_(u'label_edit_data_taxonomy',
                               default='Edit taxonomy data'),
                             name='edit_data_taxonomy')
    def handle_edit_taxonomy_data_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            self.request.RESPONSE.redirect(
                '{0}/@@taxonomy-edit-data?taxonomy={1}'.format(
                    self.context.portal_url(),
                    data.get('taxonomies')[0]))
        else:
            api.portal.show_message(_(u"Please select one taxonomy."),
                                    request=self.request)

    @button.buttonAndHandler(_(u'label_delete_taxonomy',
                               default='Delete taxonomy'),
                             name='delete-taxonomy')
    def handle_delete_taxonomy_action(self, action):
        data, errors = self.extractData()
        if len(data.get('taxonomies', [])) > 0:
            sm = self.context.getSiteManager()

            for item in data['taxonomies']:
                utility = sm.queryUtility(ITaxonomy, name=item)
                utility.unregisterBehavior()

                sm.unregisterUtility(utility, ITaxonomy, name=item)
                sm.unregisterUtility(utility, IVocabularyFactory, name=item)
                sm.unregisterUtility(utility, ITranslationDomain, name=item)

                api.portal.show_message(_(u"Taxonomy deleted."),
                                        request=self.request)
        else:
            api.portal.show_message(_(u"Please select at least one taxonomy."),
                                    request=self.request)

        return self.request.RESPONSE.redirect(self.context.portal_url() +
                                              '/@@taxonomy-settings')

    @button.buttonAndHandler(_(u'label_export', default='Export'),
                             name='export')
    def handle_export_action(self, action):
        data, errors = self.extractData()
        taxonomies = data.get('taxonomies', [])

        if len(taxonomies) > 0:
            return self.request.RESPONSE.redirect(
                self.context.portal_url() + '/@@taxonomy-export?taxonomies=' +
                ','.join(taxonomies))  # noqa
 def handleCancel(self, action):
     api.portal.show_message(_(u"Edit cancelled"), request=self.request)
     self.request.response.redirect('{0}/@@taxonomy-settings'.format(
         self.context.absolute_url()))
Ejemplo n.º 31
0
 def handleCancel(self, action):
     api.portal.show_message(_(u"Edit cancelled"), request=self.request)
     self.request.response.redirect(
         '{0}/@@taxonomy-settings'.format(self.context.absolute_url()))